[superlu] 07/11: Imported Upstream version 4.3+dfsg

Nico Schlömer nschloe-guest at moszumanska.debian.org
Tue May 17 19:22:59 UTC 2016


This is an automated email from the git hooks/post-receive script.

nschloe-guest pushed a commit to branch master
in repository superlu.

commit a101c5ab07b2fa0b0e9e5af04e4e10f651b57e01
Author: Nico Schlömer <nico.schloemer at gmail.com>
Date:   Tue May 17 21:22:25 2016 +0200

    Imported Upstream version 4.3+dfsg
---
 CBLAS/Makefile                                     |   10 +-
 CBLAS/cswap.c                                      |   81 +
 CBLAS/dswap.c                                      |  102 +
 CBLAS/sswap.c                                      |  102 +
 CBLAS/zswap.c                                      |   81 +
 DOC/html/EXAMPLE_2sp__ienv_8c.html                 |   81 +
 DOC/html/SRC_2sp__ienv_8c.html                     |   81 +
 DOC/html/annotated.html                            |   49 +
 DOC/html/ccolumn__bmod_8c.html                     |  272 +
 DOC/html/ccolumn__dfs_8c.html                      |  182 +
 DOC/html/ccopy__to__ucol_8c.html                   |  106 +
 DOC/html/cdiagonal_8c.html                         |   98 +
 DOC/html/cfgmr_8c.html                             |  216 +
 DOC/html/cgscon_8c.html                            |  135 +
 DOC/html/cgsequ_8c.html                            |  145 +
 DOC/html/cgsisx_8c.html                            |  495 ++
 DOC/html/cgsitrf_8c.html                           |  248 +
 DOC/html/cgsrfs_8c.html                            |  249 +
 DOC/html/cgssv_8c.html                             |  202 +
 DOC/html/cgssvx_8c.html                            |  450 +
 DOC/html/cgstrf_8c.html                            |  261 +
 DOC/html/cgstrs_8c.html                            |  332 +
 DOC/html/citersol1_8c.html                         |  367 +
 DOC/html/citersol_8c.html                          |  333 +
 DOC/html/clacon_8c.html                            |  122 +
 DOC/html/clangs_8c.html                            |   97 +
 DOC/html/claqgs_8c.html                            |  160 +
 DOC/html/cldperm_8c.html                           |  283 +
 DOC/html/clinsol1_8c.html                          |   60 +
 DOC/html/clinsol_8c.html                           |   60 +
 DOC/html/clinsolx1_8c.html                         |  115 +
 DOC/html/clinsolx2_8c.html                         |  115 +
 DOC/html/clinsolx_8c.html                          |  115 +
 DOC/html/cmemory_8c.html                           |  976 +++
 DOC/html/cmyblas2_8c.html                          |  181 +
 DOC/html/colamd_8c.html                            | 1681 ++++
 DOC/html/colamd_8h-source.html                     |  217 +
 DOC/html/colamd_8h.html                            |  794 ++
 DOC/html/cpanel__bmod_8c.html                      |  258 +
 DOC/html/cpanel__dfs_8c.html                       |  175 +
 DOC/html/cpivotL_8c.html                           |  136 +
 DOC/html/cpivotgrowth_8c.html                      |  109 +
 DOC/html/cpruneL_8c.html                           |  117 +
 DOC/html/creadhb_8c.html                           |  345 +
 DOC/html/creadrb_8c.html                           |  297 +
 DOC/html/creadtriple_8c.html                       |  122 +
 DOC/html/csnode__bmod_8c.html                      |  107 +
 DOC/html/csnode__dfs_8c.html                       |  123 +
 DOC/html/csp__blas2_8c.html                        |  401 +
 DOC/html/csp__blas3_8c.html                        |  199 +
 DOC/html/cutil_8c.html                             |  994 +++
 DOC/html/dcolumn__bmod_8c.html                     |  272 +
 DOC/html/dcolumn__dfs_8c.html                      |  182 +
 DOC/html/dcomplex_8c.html                          |  258 +
 DOC/html/dcopy__to__ucol_8c.html                   |  106 +
 DOC/html/ddiagonal_8c.html                         |   98 +
 DOC/html/dfgmr_8c.html                             |  210 +
 DOC/html/dgscon_8c.html                            |  135 +
 DOC/html/dgsequ_8c.html                            |  145 +
 DOC/html/dgsisx_8c.html                            |  495 ++
 DOC/html/dgsitrf_8c.html                           |  248 +
 DOC/html/dgsrfs_8c.html                            |  249 +
 DOC/html/dgssv_8c.html                             |  202 +
 DOC/html/dgssvx_8c.html                            |  450 +
 DOC/html/dgstrf_8c.html                            |  261 +
 DOC/html/dgstrs_8c.html                            |  332 +
 DOC/html/ditersol1_8c.html                         |  367 +
 DOC/html/ditersol_8c.html                          |  333 +
 DOC/html/dlacon_8c.html                            |  176 +
 DOC/html/dlamch_8c.html                            |  584 ++
 DOC/html/dlangs_8c.html                            |   97 +
 DOC/html/dlaqgs_8c.html                            |  160 +
 DOC/html/dldperm_8c.html                           |  283 +
 DOC/html/dlinsol1_8c.html                          |   60 +
 DOC/html/dlinsol_8c.html                           |   60 +
 DOC/html/dlinsolx1_8c.html                         |  115 +
 DOC/html/dlinsolx2_8c.html                         |  115 +
 DOC/html/dlinsolx_8c.html                          |  115 +
 DOC/html/dmemory_8c.html                           |  976 +++
 DOC/html/dmyblas2_8c.html                          |  180 +
 DOC/html/doxygen.css                               |  433 +
 DOC/html/doxygen.png                               |  Bin 0 -> 1281 bytes
 DOC/html/dpanel__bmod_8c.html                      |  258 +
 DOC/html/dpanel__dfs_8c.html                       |  175 +
 DOC/html/dpivotL_8c.html                           |  136 +
 DOC/html/dpivotgrowth_8c.html                      |  109 +
 DOC/html/dpruneL_8c.html                           |  117 +
 DOC/html/dreadhb_8c.html                           |  344 +
 DOC/html/dreadrb_8c.html                           |  296 +
 DOC/html/dreadtriple_8c.html                       |  122 +
 DOC/html/dsnode__bmod_8c.html                      |  107 +
 DOC/html/dsnode__dfs_8c.html                       |  123 +
 DOC/html/dsp__blas2_8c.html                        |  403 +
 DOC/html/dsp__blas3_8c.html                        |  199 +
 DOC/html/dutil_8c.html                             |  994 +++
 DOC/html/dzsum1_8c.html                            |  116 +
 DOC/html/fgmr_8c.html                              |  315 +
 DOC/html/files.html                                |  256 +
 DOC/html/functions.html                            |  324 +
 DOC/html/functions_vars.html                       |  324 +
 DOC/html/get__perm__c_8c.html                      |  395 +
 DOC/html/globals.html                              |   78 +
 DOC/html/globals_0x61.html                         |   94 +
 DOC/html/globals_0x62.html                         |   75 +
 DOC/html/globals_0x63.html                         |  455 ++
 DOC/html/globals_0x64.html                         |  419 +
 DOC/html/globals_0x65.html                         |   92 +
 DOC/html/globals_0x66.html                         |  117 +
 DOC/html/globals_0x67.html                         |  189 +
 DOC/html/globals_0x68.html                         |   78 +
 DOC/html/globals_0x69.html                         |  218 +
 DOC/html/globals_0x6b.html                         |   79 +
 DOC/html/globals_0x6c.html                         |  102 +
 DOC/html/globals_0x6d.html                         |  179 +
 DOC/html/globals_0x6e.html                         |  108 +
 DOC/html/globals_0x6f.html                         |   81 +
 DOC/html/globals_0x70.html                         |  132 +
 DOC/html/globals_0x72.html                         |  117 +
 DOC/html/globals_0x73.html                         |  501 ++
 DOC/html/globals_0x74.html                         |  107 +
 DOC/html/globals_0x75.html                         |   99 +
 DOC/html/globals_0x78.html                         |   76 +
 DOC/html/globals_0x79.html                         |   77 +
 DOC/html/globals_0x7a.html                         |  322 +
 DOC/html/globals_defs.html                         |  393 +
 DOC/html/globals_enum.html                         |   76 +
 DOC/html/globals_eval.html                         |  273 +
 DOC/html/globals_func.html                         |   75 +
 DOC/html/globals_func_0x61.html                    |   72 +
 DOC/html/globals_func_0x63.html                    |  355 +
 DOC/html/globals_func_0x64.html                    |  366 +
 DOC/html/globals_func_0x65.html                    |   72 +
 DOC/html/globals_func_0x66.html                    |   92 +
 DOC/html/globals_func_0x67.html                    |   82 +
 DOC/html/globals_func_0x68.html                    |   73 +
 DOC/html/globals_func_0x69.html                    |  196 +
 DOC/html/globals_func_0x6c.html                    |   79 +
 DOC/html/globals_func_0x6d.html                    |  145 +
 DOC/html/globals_func_0x6e.html                    |   72 +
 DOC/html/globals_func_0x6f.html                    |   72 +
 DOC/html/globals_func_0x70.html                    |  119 +
 DOC/html/globals_func_0x72.html                    |   91 +
 DOC/html/globals_func_0x73.html                    |  410 +
 DOC/html/globals_func_0x74.html                    |   73 +
 DOC/html/globals_func_0x75.html                    |   76 +
 DOC/html/globals_func_0x78.html                    |   73 +
 DOC/html/globals_func_0x7a.html                    |  305 +
 DOC/html/globals_type.html                         |   61 +
 DOC/html/globals_vars.html                         |  171 +
 DOC/html/heap__relax__snode_8c.html                |   99 +
 DOC/html/html__mainpage_8h-source.html             |   22 +
 DOC/html/html__mainpage_8h.html                    |   28 +
 DOC/html/icmax1_8c.html                            |  117 +
 DOC/html/ilu__ccolumn__dfs_8c.html                 |  147 +
 DOC/html/ilu__ccopy__to__ucol_8c.html              |  188 +
 DOC/html/ilu__cdrop__row_8c.html                   |  479 ++
 DOC/html/ilu__cpanel__dfs_8c.html                  |  166 +
 DOC/html/ilu__cpivotL_8c.html                      |  181 +
 DOC/html/ilu__csnode__dfs_8c.html                  |  108 +
 DOC/html/ilu__dcolumn__dfs_8c.html                 |  147 +
 DOC/html/ilu__dcopy__to__ucol_8c.html              |  188 +
 DOC/html/ilu__ddrop__row_8c.html                   |  479 ++
 DOC/html/ilu__dpanel__dfs_8c.html                  |  166 +
 DOC/html/ilu__dpivotL_8c.html                      |  181 +
 DOC/html/ilu__dsnode__dfs_8c.html                  |  108 +
 DOC/html/ilu__heap__relax__snode_8c.html           |   97 +
 DOC/html/ilu__relax__snode_8c.html                 |   97 +
 DOC/html/ilu__scolumn__dfs_8c.html                 |  147 +
 DOC/html/ilu__scopy__to__ucol_8c.html              |  188 +
 DOC/html/ilu__sdrop__row_8c.html                   |  479 ++
 DOC/html/ilu__spanel__dfs_8c.html                  |  166 +
 DOC/html/ilu__spivotL_8c.html                      |  181 +
 DOC/html/ilu__ssnode__dfs_8c.html                  |  108 +
 DOC/html/ilu__zcolumn__dfs_8c.html                 |  147 +
 DOC/html/ilu__zcopy__to__ucol_8c.html              |  188 +
 DOC/html/ilu__zdrop__row_8c.html                   |  479 ++
 DOC/html/ilu__zpanel__dfs_8c.html                  |  166 +
 DOC/html/ilu__zpivotL_8c.html                      |  181 +
 DOC/html/ilu__zsnode__dfs_8c.html                  |  108 +
 DOC/html/index.html                                |   26 +
 DOC/html/izmax1_8c.html                            |  117 +
 DOC/html/lsame_8c.html                             |   78 +
 DOC/html/mark__relax_8c.html                       |  103 +
 DOC/html/mc64ad_8c.html                            |  932 +++
 DOC/html/memory_8c.html                            |  285 +
 DOC/html/mmd_8c.html                               |  442 +
 DOC/html/qselect_8c.html                           |  110 +
 DOC/html/relax__snode_8c.html                      |   99 +
 DOC/html/scolumn__bmod_8c.html                     |  272 +
 DOC/html/scolumn__dfs_8c.html                      |  182 +
 DOC/html/scomplex_8c.html                          |  258 +
 DOC/html/scopy__to__ucol_8c.html                   |  106 +
 DOC/html/scsum1_8c.html                            |  116 +
 DOC/html/sdiagonal_8c.html                         |   98 +
 DOC/html/sfgmr_8c.html                             |  210 +
 DOC/html/sgscon_8c.html                            |  135 +
 DOC/html/sgsequ_8c.html                            |  145 +
 DOC/html/sgsisx_8c.html                            |  495 ++
 DOC/html/sgsitrf_8c.html                           |  248 +
 DOC/html/sgsrfs_8c.html                            |  249 +
 DOC/html/sgssv_8c.html                             |  202 +
 DOC/html/sgssvx_8c.html                            |  450 +
 DOC/html/sgstrf_8c.html                            |  261 +
 DOC/html/sgstrs_8c.html                            |  332 +
 DOC/html/sitersol1_8c.html                         |  367 +
 DOC/html/sitersol_8c.html                          |  333 +
 DOC/html/slacon_8c.html                            |  176 +
 DOC/html/slamch_8c.html                            |  606 ++
 DOC/html/slangs_8c.html                            |   97 +
 DOC/html/slaqgs_8c.html                            |  160 +
 DOC/html/sldperm_8c.html                           |  283 +
 DOC/html/slinsol1_8c.html                          |   60 +
 DOC/html/slinsol_8c.html                           |   60 +
 DOC/html/slinsolx1_8c.html                         |  115 +
 DOC/html/slinsolx2_8c.html                         |  115 +
 DOC/html/slinsolx_8c.html                          |  115 +
 DOC/html/slu__Cnames_8h-source.html                |  462 ++
 DOC/html/slu__Cnames_8h.html                       |  164 +
 DOC/html/slu__cdefs_8h-source.html                 |  237 +
 DOC/html/slu__cdefs_8h.html                        | 6070 ++++++++++++++
 DOC/html/slu__dcomplex_8h-source.html              |   82 +
 DOC/html/slu__dcomplex_8h.html                     |  446 +
 DOC/html/slu__ddefs_8h-source.html                 |  234 +
 DOC/html/slu__ddefs_8h.html                        | 6027 ++++++++++++++
 DOC/html/slu__scomplex_8h-source.html              |   82 +
 DOC/html/slu__scomplex_8h.html                     |  446 +
 DOC/html/slu__sdefs_8h-source.html                 |  234 +
 DOC/html/slu__sdefs_8h.html                        | 6027 ++++++++++++++
 DOC/html/slu__util_8h-source.html                  |  373 +
 DOC/html/slu__util_8h.html                         | 2296 ++++++
 DOC/html/slu__zdefs_8h-source.html                 |  237 +
 DOC/html/slu__zdefs_8h.html                        | 6070 ++++++++++++++
 DOC/html/smemory_8c.html                           |  976 +++
 DOC/html/smyblas2_8c.html                          |  180 +
 DOC/html/sp__coletree_8c.html                      |  460 ++
 DOC/html/sp__ienv_8c.html                          |   81 +
 DOC/html/sp__preorder_8c.html                      |  159 +
 DOC/html/spanel__bmod_8c.html                      |  258 +
 DOC/html/spanel__dfs_8c.html                       |  175 +
 DOC/html/spivotL_8c.html                           |  136 +
 DOC/html/spivotgrowth_8c.html                      |  109 +
 DOC/html/spruneL_8c.html                           |  117 +
 DOC/html/sreadhb_8c.html                           |  344 +
 DOC/html/sreadrb_8c.html                           |  296 +
 DOC/html/sreadtriple_8c.html                       |  122 +
 DOC/html/ssnode__bmod_8c.html                      |  107 +
 DOC/html/ssnode__dfs_8c.html                       |  123 +
 DOC/html/ssp__blas2_8c.html                        |  403 +
 DOC/html/ssp__blas3_8c.html                        |  199 +
 DOC/html/structColamd__Col__struct.html            |  301 +
 DOC/html/structColamd__Row__struct.html            |  178 +
 DOC/html/structDNformat.html                       |   72 +
 DOC/html/structGlobalLU__t.html                    |  837 ++
 DOC/html/structLU__stack__t.html                   |  123 +
 DOC/html/structNCPformat.html                      |  123 +
 DOC/html/structNCformat.html                       |  106 +
 DOC/html/structNRformat.html                       |  106 +
 DOC/html/structNRformat__loc.html                  |  140 +
 DOC/html/structSCPformat.html                      |  225 +
 DOC/html/structSCformat.html                       |  174 +
 DOC/html/structSuperLUStat__t.html                 |  140 +
 DOC/html/structSuperMatrix.html                    |  140 +
 DOC/html/structcomplex.html                        |   72 +
 DOC/html/structdoublecomplex.html                  |   72 +
 DOC/html/structe__node.html                        |   75 +
 DOC/html/structmem__usage__t.html                  |   72 +
 DOC/html/structsuperlu__options__t.html            |  412 +
 DOC/html/superlu_8c.html                           |   68 +
 DOC/html/superlu__enum__consts_8h-source.html      |   85 +
 DOC/html/superlu__enum__consts_8h.html             |  507 ++
 DOC/html/superlu__timer_8c.html                    |   63 +
 DOC/html/supermatrix_8h-source.html                |  199 +
 DOC/html/supermatrix_8h.html                       |  183 +
 DOC/html/sutil_8c.html                             |  994 +++
 DOC/html/tab_b.gif                                 |  Bin 0 -> 35 bytes
 DOC/html/tab_l.gif                                 |  Bin 0 -> 706 bytes
 DOC/html/tab_r.gif                                 |  Bin 0 -> 2585 bytes
 DOC/html/tabs.css                                  |  102 +
 DOC/html/util_8c.html                              |  970 +++
 DOC/html/xerbla_8c.html                            |   61 +
 DOC/html/zcolumn__bmod_8c.html                     |  272 +
 DOC/html/zcolumn__dfs_8c.html                      |  182 +
 DOC/html/zcopy__to__ucol_8c.html                   |  106 +
 DOC/html/zdiagonal_8c.html                         |   98 +
 DOC/html/zfgmr_8c.html                             |  216 +
 DOC/html/zgscon_8c.html                            |  135 +
 DOC/html/zgsequ_8c.html                            |  145 +
 DOC/html/zgsisx_8c.html                            |  495 ++
 DOC/html/zgsitrf_8c.html                           |  248 +
 DOC/html/zgsrfs_8c.html                            |  249 +
 DOC/html/zgssv_8c.html                             |  202 +
 DOC/html/zgssvx_8c.html                            |  450 +
 DOC/html/zgstrf_8c.html                            |  261 +
 DOC/html/zgstrs_8c.html                            |  332 +
 DOC/html/zitersol1_8c.html                         |  367 +
 DOC/html/zitersol_8c.html                          |  333 +
 DOC/html/zlacon_8c.html                            |  122 +
 DOC/html/zlangs_8c.html                            |   97 +
 DOC/html/zlaqgs_8c.html                            |  160 +
 DOC/html/zldperm_8c.html                           |  283 +
 DOC/html/zlinsol1_8c.html                          |   60 +
 DOC/html/zlinsol_8c.html                           |   60 +
 DOC/html/zlinsolx1_8c.html                         |  115 +
 DOC/html/zlinsolx2_8c.html                         |  115 +
 DOC/html/zlinsolx_8c.html                          |  115 +
 DOC/html/zmemory_8c.html                           |  976 +++
 DOC/html/zmyblas2_8c.html                          |  181 +
 DOC/html/zpanel__bmod_8c.html                      |  258 +
 DOC/html/zpanel__dfs_8c.html                       |  175 +
 DOC/html/zpivotL_8c.html                           |  136 +
 DOC/html/zpivotgrowth_8c.html                      |  109 +
 DOC/html/zpruneL_8c.html                           |  117 +
 DOC/html/zreadhb_8c.html                           |  345 +
 DOC/html/zreadrb_8c.html                           |  297 +
 DOC/html/zreadtriple_8c.html                       |  122 +
 DOC/html/zsnode__bmod_8c.html                      |  107 +
 DOC/html/zsnode__dfs_8c.html                       |  123 +
 DOC/html/zsp__blas2_8c.html                        |  401 +
 DOC/html/zsp__blas3_8c.html                        |  199 +
 DOC/html/zutil_8c.html                             |  994 +++
 DoxyConfig                                         | 1357 ++++
 EXAMPLE/Makefile                                   |  134 +-
 EXAMPLE/README                                     |   33 +-
 EXAMPLE/cfgmr.c                                    |  334 +
 EXAMPLE/cg20.cua                                   |  918 +++
 EXAMPLE/citersol.c                                 |  372 +
 EXAMPLE/citersol1                                  |  Bin 0 -> 494264 bytes
 EXAMPLE/citersol1.c                                |  381 +
 EXAMPLE/clinsol.c                                  |   13 +-
 EXAMPLE/clinsol1.c                                 |   13 +-
 EXAMPLE/clinsolx.c                                 |   21 +-
 EXAMPLE/clinsolx1.c                                |   16 +-
 EXAMPLE/clinsolx2.c                                |   20 +-
 EXAMPLE/{cmat => cmat.cua}                         |    0
 EXAMPLE/dfgmr.c                                    |  298 +
 EXAMPLE/ditersol.c                                 |  370 +
 EXAMPLE/ditersol1                                  |  Bin 0 -> 309565 bytes
 EXAMPLE/ditersol1.c                                |  379 +
 EXAMPLE/dlinsol.c                                  |   13 +-
 EXAMPLE/dlinsol1.c                                 |   13 +-
 EXAMPLE/dlinsolx.c                                 |   21 +-
 EXAMPLE/dlinsolx1.c                                |   16 +-
 EXAMPLE/dlinsolx2.c                                |   20 +-
 EXAMPLE/fgmr.c                                     |  263 +
 EXAMPLE/g10                                        |  146 -
 EXAMPLE/g20.rua                                    |  534 ++
 EXAMPLE/sfgmr.c                                    |  298 +
 EXAMPLE/sitersol.c                                 |  370 +
 EXAMPLE/sitersol1                                  |  Bin 0 -> 387935 bytes
 EXAMPLE/sitersol1.c                                |  379 +
 EXAMPLE/slinsol.c                                  |   13 +-
 EXAMPLE/slinsol1.c                                 |   13 +-
 EXAMPLE/slinsolx.c                                 |   21 +-
 EXAMPLE/slinsolx1.c                                |   16 +-
 EXAMPLE/slinsolx2.c                                |   20 +-
 EXAMPLE/sp_ienv.c                                  |   31 +-
 EXAMPLE/superlu.c                                  |   16 +-
 EXAMPLE/zfgmr.c                                    |  334 +
 EXAMPLE/zitersol.c                                 |  372 +
 EXAMPLE/zitersol1                                  |  Bin 0 -> 551323 bytes
 EXAMPLE/zitersol1.c                                |  381 +
 EXAMPLE/zlinsol.c                                  |   13 +-
 EXAMPLE/zlinsol1.c                                 |   13 +-
 EXAMPLE/zlinsolx.c                                 |   21 +-
 EXAMPLE/zlinsolx1.c                                |   16 +-
 EXAMPLE/zlinsolx2.c                                |   20 +-
 FORTRAN/Makefile                                   |   16 +-
 FORTRAN/c_fortran_cgssv.c                          |   15 +-
 FORTRAN/c_fortran_dgssv.c                          |   22 +-
 FORTRAN/c_fortran_sgssv.c                          |   15 +-
 FORTRAN/c_fortran_zgssv.c                          |   15 +-
 FORTRAN/z_f77_main.f                               |   50 +
 FORTRAN/zhbcode1.f                                 |   46 +
 INSTALL/slamch.c                                   |    2 +-
 INSTALL/slamchtst.c                                |    4 +-
 INSTALL/superlu_timer.c                            |   44 +-
 INSTALL/timertst.c                                 |   27 +-
 INSTALL/ug.ps                                      | 8591 --------------------
 MAKE_INC/make.alpha                                |   13 +-
 MAKE_INC/{make.sp => make.altix}                   |   42 +-
 MAKE_INC/make.cray                                 |   13 +-
 MAKE_INC/make.hppa                                 |   12 +-
 MAKE_INC/make.inc                                  |   11 +-
 MAKE_INC/make.linux                                |   27 +-
 MAKE_INC/{make.inc => make.mac-x}                  |  107 +-
 MAKE_INC/make.rs6k                                 |   15 +-
 MAKE_INC/make.sgi                                  |   12 +-
 MAKE_INC/make.solaris                              |   13 +-
 MAKE_INC/make.sp                                   |   16 +-
 MAKE_INC/make.sun4                                 |   13 +-
 MATLAB/Makefile                                    |   12 +-
 MATLAB/lusolve.m                                   |    2 +-
 MATLAB/mexlusolve.c                                |   54 +-
 MATLAB/mexsuperlu.c                                |  136 +-
 MATLAB/permutation.m                               |    2 +-
 MATLAB/spypart.m                                   |   35 -
 MATLAB/superlu.m                                   |   20 +-
 MATLAB/time.m                                      |   12 -
 MATLAB/trylusolve.m                                |    2 +-
 MATLAB/trysuperlu.m                                |    4 +-
 Makefile                                           |   12 +-
 README                                             |   36 +-
 SRC/Makefile                                       |   63 +-
 SRC/ccolumn_bmod.c                                 |   48 +-
 SRC/ccolumn_dfs.c                                  |   72 +-
 SRC/ccopy_to_ucol.c                                |   28 +-
 SRC/cdiagonal.c                                    |  133 +
 SRC/cgscon.c                                       |  105 +-
 SRC/cgsequ.c                                       |  129 +-
 SRC/cgsisx.c                                       |  727 ++
 SRC/cgsisx.c.bak                                   |  723 ++
 SRC/cgsitrf.c                                      |  637 ++
 SRC/cgsitrf.c.bak                                  |  629 ++
 SRC/cgsrfs.c                                       |   43 +-
 SRC/cgssv.c                                        |   30 +-
 SRC/cgssvx.c                                       |   94 +-
 SRC/{cgssvx.c => cgssvx.c.bak}                     |   41 +-
 SRC/cgstrf.c                                       |   63 +-
 SRC/cgstrs.c                                       |   47 +-
 SRC/clacon.c                                       |  106 +-
 SRC/{clacon.c => clacon.c.bak}                     |  104 +-
 SRC/clangs.c                                       |   83 +-
 SRC/claqgs.c                                       |  125 +-
 SRC/cldperm.c                                      |  168 +
 SRC/cmemory.c                                      |  305 +-
 SRC/cmyblas2.c                                     |   28 +-
 SRC/colamd.c                                       |   22 +-
 SRC/colamd.h                                       |   13 +-
 SRC/cpanel_bmod.c                                  |   65 +-
 SRC/cpanel_dfs.c                                   |   75 +-
 SRC/cpivotL.c                                      |   67 +-
 SRC/cpivotgrowth.c                                 |   24 +-
 SRC/cpruneL.c                                      |   51 +-
 SRC/creadhb.c                                      |  146 +-
 SRC/creadrb.c                                      |  246 +
 EXAMPLE/dreadtriple.c => SRC/creadtriple.c         |   80 +-
 SRC/csnode_bmod.c                                  |   32 +-
 SRC/csnode_dfs.c                                   |   60 +-
 SRC/csp_blas2.c                                    |  134 +-
 SRC/csp_blas3.c                                    |  194 +-
 SRC/cutil.c                                        |   72 +-
 SRC/dGetDiagU.c                                    |   59 -
 SRC/dcolumn_bmod.c                                 |   48 +-
 SRC/dcolumn_dfs.c                                  |   72 +-
 SRC/dcomplex.c                                     |   61 +-
 SRC/dcopy_to_ucol.c                                |   28 +-
 SRC/ddiagonal.c                                    |  129 +
 SRC/dgscon.c                                       |  105 +-
 SRC/dgsequ.c                                       |  127 +-
 SRC/dgsisx.c                                       |  727 ++
 SRC/dgsisx.c.bak                                   |  727 ++
 SRC/dgsitrf.c                                      |  639 ++
 SRC/dgsitrf.c.bak                                  |  626 ++
 SRC/dgsrfs.c                                       |   45 +-
 SRC/dgssv.c                                        |   30 +-
 SRC/dgssvx.c                                       |   94 +-
 SRC/{dgssvx.c => dgssvx.c.bak}                     |   76 +-
 SRC/dgstrf.c                                       |   63 +-
 SRC/dgstrs.c                                       |   47 +-
 SRC/dgstrsL.c                                      |  233 -
 SRC/dlacon.c                                       |  104 +-
 SRC/{dlacon.c => dlacon.c.bak}                     |  104 +-
 SRC/dlamch.c                                       |  114 +-
 SRC/dlangs.c                                       |   83 +-
 SRC/dlaqgs.c                                       |  125 +-
 SRC/dldperm.c                                      |  165 +
 SRC/dmemory.c                                      |  305 +-
 SRC/dmyblas2.c                                     |   28 +-
 SRC/dpanel_bmod.c                                  |   65 +-
 SRC/dpanel_dfs.c                                   |   75 +-
 SRC/dpivotL.c                                      |   67 +-
 SRC/dpivotgrowth.c                                 |   24 +-
 SRC/dpruneL.c                                      |   51 +-
 SRC/dreadhb.c                                      |  144 +-
 SRC/dreadrb.c                                      |  237 +
 {EXAMPLE => SRC}/dreadtriple.c                     |   62 +-
 SRC/dsnode_bmod.c                                  |   32 +-
 SRC/dsnode_dfs.c                                   |   60 +-
 SRC/dsp_blas2.c                                    |  139 +-
 SRC/dsp_blas3.c                                    |  194 +-
 SRC/dutil.c                                        |   72 +-
 SRC/dzsum1.c                                       |   24 +-
 SRC/get_perm_c.c                                   |  125 +-
 SRC/heap_relax_snode.c                             |   50 +-
 SRC/html_mainpage.h                                |   21 +
 SRC/icmax1.c                                       |   27 +-
 SRC/{ccolumn_dfs.c => ilu_ccolumn_dfs.c}           |  201 +-
 SRC/ilu_ccopy_to_ucol.c                            |  211 +
 SRC/ilu_ccopy_to_ucol.c.bak                        |  202 +
 SRC/ilu_cdrop_row.c                                |  339 +
 SRC/{cpanel_dfs.c => ilu_cpanel_dfs.c}             |  165 +-
 SRC/ilu_cpivotL.c                                  |  274 +
 SRC/ilu_csnode_dfs.c                               |   90 +
 SRC/{dcolumn_dfs.c => ilu_dcolumn_dfs.c}           |  201 +-
 SRC/ilu_dcopy_to_ucol.c                            |  207 +
 SRC/ilu_dcopy_to_ucol.c.bak                        |  199 +
 SRC/ilu_ddrop_row.c                                |  329 +
 SRC/ilu_ddrop_row.c.bak                            |  311 +
 SRC/{dpanel_dfs.c => ilu_dpanel_dfs.c}             |  165 +-
 SRC/ilu_dpivotL.c                                  |  266 +
 SRC/ilu_dsnode_dfs.c                               |   90 +
 SRC/{heap_relax_snode.c => ilu_heap_relax_snode.c} |   80 +-
 SRC/ilu_relax_snode.c                              |   69 +
 SRC/{scolumn_dfs.c => ilu_scolumn_dfs.c}           |  201 +-
 SRC/ilu_scopy_to_ucol.c                            |  207 +
 SRC/ilu_scopy_to_ucol.c.bak                        |  199 +
 SRC/ilu_sdrop_row.c                                |  329 +
 SRC/{spanel_dfs.c => ilu_spanel_dfs.c}             |  165 +-
 SRC/ilu_spivotL.c                                  |  266 +
 SRC/ilu_ssnode_dfs.c                               |   90 +
 SRC/{zcolumn_dfs.c => ilu_zcolumn_dfs.c}           |  201 +-
 SRC/ilu_zcopy_to_ucol.c                            |  211 +
 SRC/ilu_zcopy_to_ucol.c.bak                        |  202 +
 SRC/ilu_zdrop_row.c                                |  339 +
 SRC/{zpanel_dfs.c => ilu_zpanel_dfs.c}             |  165 +-
 SRC/ilu_zpivotL.c                                  |  274 +
 SRC/ilu_zsnode_dfs.c                               |   90 +
 SRC/izmax1.c                                       |   28 +-
 SRC/lsame.c                                        |   23 +-
 SRC/mark_relax.c                                   |   47 +
 SRC/memory.c                                       |   12 +-
 SRC/old_colamd.c                                   | 2583 ------
 SRC/old_colamd.h                                   |   67 -
 SRC/qselect.c                                      |   74 +
 SRC/relax_snode.c                                  |   46 +-
 SRC/scolumn_bmod.c                                 |   48 +-
 SRC/scolumn_dfs.c                                  |   72 +-
 SRC/scomplex.c                                     |   61 +-
 SRC/scopy_to_ucol.c                                |   28 +-
 SRC/scsum1.c                                       |   31 +-
 SRC/sdiagonal.c                                    |  129 +
 SRC/sgscon.c                                       |  105 +-
 SRC/sgsequ.c                                       |  129 +-
 SRC/sgsisx.c                                       |  727 ++
 SRC/sgsisx.c.bak                                   |  723 ++
 SRC/sgsitrf.c                                      |  639 ++
 SRC/sgsitrf.c.bak                                  |  626 ++
 SRC/sgsrfs.c                                       |   45 +-
 SRC/sgssv.c                                        |   30 +-
 SRC/sgssvx.c                                       |   94 +-
 SRC/sgstrf.c                                       |   63 +-
 SRC/sgstrs.c                                       |   47 +-
 SRC/slacon.c                                       |  104 +-
 SRC/{slacon.c => slacon.c.bak}                     |  104 +-
 SRC/slamch.c                                       |  103 +-
 SRC/slangs.c                                       |   83 +-
 SRC/slaqgs.c                                       |  125 +-
 SRC/sldperm.c                                      |  168 +
 SRC/slu_Cnames.h                                   |  183 +-
 SRC/slu_cdefs.h                                    |  137 +-
 SRC/slu_dcomplex.h                                 |   26 +-
 SRC/slu_ddefs.h                                    |  133 +-
 SRC/slu_scomplex.h                                 |   26 +-
 SRC/slu_sdefs.h                                    |  135 +-
 SRC/slu_util.h                                     |  196 +-
 SRC/slu_zdefs.h                                    |  135 +-
 SRC/smemory.c                                      |  305 +-
 SRC/smyblas2.c                                     |   28 +-
 SRC/sp_coletree.c                                  |  153 +-
 SRC/sp_ienv.c                                      |   32 +-
 SRC/sp_preorder.c                                  |   19 +-
 SRC/spanel_bmod.c                                  |   65 +-
 SRC/spanel_dfs.c                                   |   75 +-
 SRC/spivotL.c                                      |   67 +-
 SRC/spivotgrowth.c                                 |   24 +-
 SRC/spruneL.c                                      |   51 +-
 SRC/sreadhb.c                                      |  144 +-
 SRC/sreadrb.c                                      |  237 +
 EXAMPLE/dreadtriple.c => SRC/sreadtriple.c         |   78 +-
 SRC/ssnode_bmod.c                                  |   32 +-
 SRC/ssnode_dfs.c                                   |   60 +-
 SRC/ssp_blas2.c                                    |  139 +-
 SRC/ssp_blas3.c                                    |  194 +-
 SRC/superlu_enum_consts.h                          |   71 +
 SRC/superlu_timer.c                                |   39 +-
 SRC/supermatrix.h                                  |  106 +-
 SRC/sutil.c                                        |   72 +-
 SRC/temp                                           |  445 +
 SRC/util.c                                         |  173 +-
 SRC/zcolumn_bmod.c                                 |   48 +-
 SRC/zcolumn_dfs.c                                  |   72 +-
 SRC/zcopy_to_ucol.c                                |   28 +-
 SRC/zdiagonal.c                                    |  133 +
 SRC/zgscon.c                                       |  105 +-
 SRC/zgsequ.c                                       |  127 +-
 SRC/zgsisx.c                                       |  727 ++
 SRC/zgsisx.c.bak                                   |  723 ++
 SRC/zgsitrf.c                                      |  637 ++
 SRC/zgsitrf.c.bak                                  |  629 ++
 SRC/zgsrfs.c                                       |   43 +-
 SRC/zgssv.c                                        |   30 +-
 SRC/zgssvx.c                                       |   94 +-
 SRC/zgstrf.c                                       |   63 +-
 SRC/zgstrs.c                                       |   47 +-
 SRC/zlacon.c                                       |  104 +-
 SRC/{zlacon.c => zlacon.c.bak}                     |  104 +-
 SRC/zlangs.c                                       |   83 +-
 SRC/zlaqgs.c                                       |  125 +-
 SRC/zldperm.c                                      |  168 +
 SRC/zmemory.c                                      |  305 +-
 SRC/zmemory.c.bak                                  |  682 --
 SRC/zmyblas2.c                                     |   28 +-
 SRC/zpanel_bmod.c                                  |   65 +-
 SRC/zpanel_dfs.c                                   |   75 +-
 SRC/zpivotL.c                                      |   67 +-
 SRC/zpivotgrowth.c                                 |   24 +-
 SRC/zpruneL.c                                      |   51 +-
 SRC/zreadhb.c                                      |  146 +-
 SRC/zreadrb.c                                      |  246 +
 {EXAMPLE => SRC}/zreadtriple.c                     |   92 +-
 SRC/zsnode_bmod.c                                  |   32 +-
 SRC/zsnode_dfs.c                                   |   60 +-
 SRC/zsp_blas2.c                                    |  134 +-
 SRC/zsp_blas3.c                                    |  194 +-
 SRC/zutil.c                                        |   72 +-
 TESTING/MATGEN/Makefile                            |    2 +-
 TESTING/MATGEN/clatb4.c                            |    2 +-
 TESTING/MATGEN/lsamen.c                            |    1 +
 TESTING/MATGEN/slartg.c                            |    3 +-
 TESTING/MATGEN/slatb4.c                            |    2 +-
 TESTING/Makefile                                   |   28 +-
 TESTING/cdrive.c                                   |   41 +-
 TESTING/{sp_cget01.c => cgst01.c}                  |   30 +-
 TESTING/{sp_cget02.c => cgst02.c}                  |    7 +-
 TESTING/{sp_cget04.c => cgst04.c}                  |    7 +-
 TESTING/{sp_cget07.c => cgst07.c}                  |    8 +-
 TESTING/ctest.csh                                  |    2 +-
 TESTING/ddrive.c                                   |   37 +-
 TESTING/{sp_dget01.c => dgst01.c}                  |   30 +-
 TESTING/{sp_dget02.c => dgst02.c}                  |    7 +-
 TESTING/{sp_dget04.c => dgst04.c}                  |    7 +-
 TESTING/{sp_dget07.c => dgst07.c}                  |    8 +-
 TESTING/dtest.csh                                  |    2 +-
 TESTING/sdrive.c                                   |   41 +-
 TESTING/{sp_sget01.c => sgst01.c}                  |   30 +-
 TESTING/{sp_sget02.c => sgst02.c}                  |    7 +-
 TESTING/{sp_sget04.c => sgst04.c}                  |    7 +-
 TESTING/{sp_sget07.c => sgst07.c}                  |    8 +-
 TESTING/sp_ienv.c                                  |    2 +-
 TESTING/stest.csh                                  |    2 +-
 TESTING/zdrive.c                                   |   37 +-
 TESTING/{sp_zget01.c => zgst01.c}                  |   30 +-
 TESTING/{sp_zget02.c => zgst02.c}                  |    7 +-
 TESTING/{sp_zget04.c => zgst04.c}                  |    7 +-
 TESTING/{sp_zget07.c => zgst07.c}                  |    8 +-
 TESTING/ztest.csh                                  |    2 +-
 make.inc                                           |   41 +-
 647 files changed, 132120 insertions(+), 19101 deletions(-)

diff --git a/CBLAS/Makefile b/CBLAS/Makefile
index 76d368c..7435fe4 100644
--- a/CBLAS/Makefile
+++ b/CBLAS/Makefile
@@ -45,19 +45,19 @@ HEADER = ../SRC
 #######################################################################
 
 SBLAS1 = isamax.o sasum.o saxpy.o scopy.o sdot.o snrm2.o \
-	 srot.o sscal.o
+	 srot.o sscal.o sswap.o
 SBLAS2 = sgemv.o ssymv.o strsv.o sger.o ssyr2.o
 
 DBLAS1 = idamax.o dasum.o daxpy.o dcopy.o ddot.o dnrm2.o \
-	 drot.o dscal.o
+	 drot.o dscal.o dswap.o
 DBLAS2 = dgemv.o dsymv.o dtrsv.o dger.o dsyr2.o
 
 CBLAS1 = icamax.o scasum.o caxpy.o ccopy.o scnrm2.o \
-	 cscal.o
+	 cscal.o cswap.o
 CBLAS2 = cgemv.o chemv.o ctrsv.o cgerc.o cher2.o
 
 ZBLAS1 = izamax.o dzasum.o zaxpy.o zcopy.o dznrm2.o \
-	 zscal.o dcabs1.o
+	 zscal.o dcabs1.o zswap.o
 ZBLAS2 = zgemv.o zhemv.o ztrsv.o zgerc.o zher2.o
 
 
@@ -83,4 +83,4 @@ complex16: $(ZBLAS1) $(ZBLAS2) $(ZBLAS3)
 	$(CC) $(CFLAGS) $(CDEFS) -I$(HEADER) -c $< $(VERBOSE)
 
 clean:	
-	rm -f *.o ../libblas.a
+	rm -f *.o ../lib/libblas.a
diff --git a/CBLAS/cswap.c b/CBLAS/cswap.c
new file mode 100644
index 0000000..a44b2d0
--- /dev/null
+++ b/CBLAS/cswap.c
@@ -0,0 +1,81 @@
+#include "f2c.h"
+/*#include "blaswrap.h"*/
+
+/* Subroutine */ int cswap_(integer *n, complex *cx, integer *incx, complex *
+	cy, integer *incy)
+{
+    /* System generated locals */
+    integer i__1, i__2, i__3;
+
+    /* Local variables */
+    integer i__, ix, iy;
+    complex ctemp;
+
+/*     .. Scalar Arguments .. */
+/*     .. */
+/*     .. Array Arguments .. */
+/*     .. */
+
+/*  Purpose */
+/*  ======= */
+
+/*     interchanges two vectors. */
+/*     jack dongarra, linpack, 3/11/78. */
+/*     modified 12/3/93, array(1) declarations changed to array(*) */
+
+
+/*     .. Local Scalars .. */
+/*     .. */
+    /* Parameter adjustments */
+    --cy;
+    --cx;
+
+    /* Function Body */
+    if (*n <= 0) {
+	return 0;
+    }
+    if (*incx == 1 && *incy == 1) {
+	goto L20;
+    }
+
+/*       code for unequal increments or equal increments not equal */
+/*         to 1 */
+
+    ix = 1;
+    iy = 1;
+    if (*incx < 0) {
+	ix = (-(*n) + 1) * *incx + 1;
+    }
+    if (*incy < 0) {
+	iy = (-(*n) + 1) * *incy + 1;
+    }
+    i__1 = *n;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+	i__2 = ix;
+	ctemp.r = cx[i__2].r, ctemp.i = cx[i__2].i;
+	i__2 = ix;
+	i__3 = iy;
+	cx[i__2].r = cy[i__3].r, cx[i__2].i = cy[i__3].i;
+	i__2 = iy;
+	cy[i__2].r = ctemp.r, cy[i__2].i = ctemp.i;
+	ix += *incx;
+	iy += *incy;
+/* L10: */
+    }
+    return 0;
+
+/*       code for both increments equal to 1 */
+L20:
+    i__1 = *n;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+	i__2 = i__;
+	ctemp.r = cx[i__2].r, ctemp.i = cx[i__2].i;
+	i__2 = i__;
+	i__3 = i__;
+	cx[i__2].r = cy[i__3].r, cx[i__2].i = cy[i__3].i;
+	i__2 = i__;
+	cy[i__2].r = ctemp.r, cy[i__2].i = ctemp.i;
+/* L30: */
+    }
+    return 0;
+} /* cswap_ */
diff --git a/CBLAS/dswap.c b/CBLAS/dswap.c
new file mode 100644
index 0000000..038dd99
--- /dev/null
+++ b/CBLAS/dswap.c
@@ -0,0 +1,102 @@
+#include "f2c.h"
+/*#include "blaswrap.h"*/
+
+/* Subroutine */ int dswap_(integer *n, doublereal *dx, integer *incx, 
+	doublereal *dy, integer *incy)
+{
+    /* System generated locals */
+    integer i__1;
+
+    /* Local variables */
+    integer i__, m, ix, iy, mp1;
+    doublereal dtemp;
+
+/*     .. Scalar Arguments .. */
+/*     .. */
+/*     .. Array Arguments .. */
+/*     .. */
+
+/*  Purpose */
+/*  ======= */
+
+/*     interchanges two vectors. */
+/*     uses unrolled loops for increments equal one. */
+/*     jack dongarra, linpack, 3/11/78. */
+/*     modified 12/3/93, array(1) declarations changed to array(*) */
+
+
+/*     .. Local Scalars .. */
+/*     .. */
+/*     .. Intrinsic Functions .. */
+/*     .. */
+    /* Parameter adjustments */
+    --dy;
+    --dx;
+
+    /* Function Body */
+    if (*n <= 0) {
+	return 0;
+    }
+    if (*incx == 1 && *incy == 1) {
+	goto L20;
+    }
+
+/*       code for unequal increments or equal increments not equal */
+/*         to 1 */
+
+    ix = 1;
+    iy = 1;
+    if (*incx < 0) {
+	ix = (-(*n) + 1) * *incx + 1;
+    }
+    if (*incy < 0) {
+	iy = (-(*n) + 1) * *incy + 1;
+    }
+    i__1 = *n;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+	dtemp = dx[ix];
+	dx[ix] = dy[iy];
+	dy[iy] = dtemp;
+	ix += *incx;
+	iy += *incy;
+/* L10: */
+    }
+    return 0;
+
+/*       code for both increments equal to 1 */
+
+
+/*       clean-up loop */
+
+L20:
+    m = *n % 3;
+    if (m == 0) {
+	goto L40;
+    }
+    i__1 = m;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+	dtemp = dx[i__];
+	dx[i__] = dy[i__];
+	dy[i__] = dtemp;
+/* L30: */
+    }
+    if (*n < 3) {
+	return 0;
+    }
+L40:
+    mp1 = m + 1;
+    i__1 = *n;
+    for (i__ = mp1; i__ <= i__1; i__ += 3) {
+	dtemp = dx[i__];
+	dx[i__] = dy[i__];
+	dy[i__] = dtemp;
+	dtemp = dx[i__ + 1];
+	dx[i__ + 1] = dy[i__ + 1];
+	dy[i__ + 1] = dtemp;
+	dtemp = dx[i__ + 2];
+	dx[i__ + 2] = dy[i__ + 2];
+	dy[i__ + 2] = dtemp;
+/* L50: */
+    }
+    return 0;
+} /* dswap_ */
diff --git a/CBLAS/sswap.c b/CBLAS/sswap.c
new file mode 100644
index 0000000..e6463a3
--- /dev/null
+++ b/CBLAS/sswap.c
@@ -0,0 +1,102 @@
+#include "f2c.h"
+/*#include "blaswrap.h"*/
+
+/* Subroutine */ int sswap_(integer *n, real *sx, integer *incx, real *sy, 
+	integer *incy)
+{
+    /* System generated locals */
+    integer i__1;
+
+    /* Local variables */
+    integer i__, m, ix, iy, mp1;
+    real stemp;
+
+/*     .. Scalar Arguments .. */
+/*     .. */
+/*     .. Array Arguments .. */
+/*     .. */
+
+/*  Purpose */
+/*  ======= */
+
+/*     interchanges two vectors. */
+/*     uses unrolled loops for increments equal to 1. */
+/*     jack dongarra, linpack, 3/11/78. */
+/*     modified 12/3/93, array(1) declarations changed to array(*) */
+
+
+/*     .. Local Scalars .. */
+/*     .. */
+/*     .. Intrinsic Functions .. */
+/*     .. */
+    /* Parameter adjustments */
+    --sy;
+    --sx;
+
+    /* Function Body */
+    if (*n <= 0) {
+	return 0;
+    }
+    if (*incx == 1 && *incy == 1) {
+	goto L20;
+    }
+
+/*       code for unequal increments or equal increments not equal */
+/*         to 1 */
+
+    ix = 1;
+    iy = 1;
+    if (*incx < 0) {
+	ix = (-(*n) + 1) * *incx + 1;
+    }
+    if (*incy < 0) {
+	iy = (-(*n) + 1) * *incy + 1;
+    }
+    i__1 = *n;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+	stemp = sx[ix];
+	sx[ix] = sy[iy];
+	sy[iy] = stemp;
+	ix += *incx;
+	iy += *incy;
+/* L10: */
+    }
+    return 0;
+
+/*       code for both increments equal to 1 */
+
+
+/*       clean-up loop */
+
+L20:
+    m = *n % 3;
+    if (m == 0) {
+	goto L40;
+    }
+    i__1 = m;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+	stemp = sx[i__];
+	sx[i__] = sy[i__];
+	sy[i__] = stemp;
+/* L30: */
+    }
+    if (*n < 3) {
+	return 0;
+    }
+L40:
+    mp1 = m + 1;
+    i__1 = *n;
+    for (i__ = mp1; i__ <= i__1; i__ += 3) {
+	stemp = sx[i__];
+	sx[i__] = sy[i__];
+	sy[i__] = stemp;
+	stemp = sx[i__ + 1];
+	sx[i__ + 1] = sy[i__ + 1];
+	sy[i__ + 1] = stemp;
+	stemp = sx[i__ + 2];
+	sx[i__ + 2] = sy[i__ + 2];
+	sy[i__ + 2] = stemp;
+/* L50: */
+    }
+    return 0;
+} /* sswap_ */
diff --git a/CBLAS/zswap.c b/CBLAS/zswap.c
new file mode 100644
index 0000000..ff17cd2
--- /dev/null
+++ b/CBLAS/zswap.c
@@ -0,0 +1,81 @@
+#include "f2c.h"
+/*#include "blaswrap.h"*/
+
+/* Subroutine */ int zswap_(integer *n, doublecomplex *zx, integer *incx, 
+	doublecomplex *zy, integer *incy)
+{
+    /* System generated locals */
+    integer i__1, i__2, i__3;
+
+    /* Local variables */
+    integer i__, ix, iy;
+    doublecomplex ztemp;
+
+/*     .. Scalar Arguments .. */
+/*     .. */
+/*     .. Array Arguments .. */
+/*     .. */
+
+/*  Purpose */
+/*  ======= */
+
+/*     interchanges two vectors. */
+/*     jack dongarra, 3/11/78. */
+/*     modified 12/3/93, array(1) declarations changed to array(*) */
+
+
+/*     .. Local Scalars .. */
+/*     .. */
+    /* Parameter adjustments */
+    --zy;
+    --zx;
+
+    /* Function Body */
+    if (*n <= 0) {
+	return 0;
+    }
+    if (*incx == 1 && *incy == 1) {
+	goto L20;
+    }
+
+/*       code for unequal increments or equal increments not equal */
+/*         to 1 */
+
+    ix = 1;
+    iy = 1;
+    if (*incx < 0) {
+	ix = (-(*n) + 1) * *incx + 1;
+    }
+    if (*incy < 0) {
+	iy = (-(*n) + 1) * *incy + 1;
+    }
+    i__1 = *n;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+	i__2 = ix;
+	ztemp.r = zx[i__2].r, ztemp.i = zx[i__2].i;
+	i__2 = ix;
+	i__3 = iy;
+	zx[i__2].r = zy[i__3].r, zx[i__2].i = zy[i__3].i;
+	i__2 = iy;
+	zy[i__2].r = ztemp.r, zy[i__2].i = ztemp.i;
+	ix += *incx;
+	iy += *incy;
+/* L10: */
+    }
+    return 0;
+
+/*       code for both increments equal to 1 */
+L20:
+    i__1 = *n;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+	i__2 = i__;
+	ztemp.r = zx[i__2].r, ztemp.i = zx[i__2].i;
+	i__2 = i__;
+	i__3 = i__;
+	zx[i__2].r = zy[i__3].r, zx[i__2].i = zy[i__3].i;
+	i__2 = i__;
+	zy[i__2].r = ztemp.r, zy[i__2].i = ztemp.i;
+/* L30: */
+    }
+    return 0;
+} /* zswap_ */
diff --git a/DOC/html/EXAMPLE_2sp__ienv_8c.html b/DOC/html/EXAMPLE_2sp__ienv_8c.html
new file mode 100644
index 0000000..f096a95
--- /dev/null
+++ b/DOC/html/EXAMPLE_2sp__ienv_8c.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/sp_ienv.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/sp_ienv.c File Reference</h1><code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="EXAMPLE_2sp__ienv_8c.html#21109476f1261abd6b256a393f5fd9e7">sp_ienv</a> (int ispec)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="21109476f1261abd6b256a393f5fd9e7"></a><!-- doxytag: member="sp_ienv.c::sp_ienv" ref="21109476f1261abd6b256a393f5fd9e7" args="(int ispec)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_ienv           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ispec</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    <a class="el" href="slu__util_8h.html#72be96e75e58564c4322ef9ef73ca65f">sp_ienv()</a> is inquired to choose machine-dependent parameters for the
+    local environment. See ISPEC for a description of the parameters.</pre><p>
+<pre>    This version provides a set of parameters which should give good,   
+    but not optimal, performance on many of the currently available   
+    computers.  Users are encouraged to modify this subroutine to set   
+    the tuning parameters for their particular machine using the option   
+    and problem size information in the arguments.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    ISPEC   (input) int
+            Specifies the parameter to be returned as the value of SP_IENV.   
+            = 1: the panel size w; a panel consists of w consecutive
+	         columns of matrix A in the process of Gaussian elimination.
+		 The best value depends on machine's cache characters.
+            = 2: the relaxation parameter relax; if the number of
+	         nodes (columns) in a subtree of the elimination tree is less
+		 than relax, this subtree is considered as one supernode,
+		 regardless of their row structures.
+            = 3: the maximum size for a supernode in complete LU;
+	    = 4: the minimum row dimension for 2-D blocking to be used;
+	    = 5: the minimum column dimension for 2-D blocking to be used;
+	    = 6: the estimated fills factor for L and U, compared with A;
+	    = 7: the maximum size for a supernode in ILU.</pre><p>
+<pre>   (SP_IENV) (output) int
+            >= 0: the value of the parameter specified by ISPEC   
+            < 0:  if SP_IENV = -k, the k-th argument had an illegal value.</pre><p>
+<pre>    ===================================================================== 
+</pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/SRC_2sp__ienv_8c.html b/DOC/html/SRC_2sp__ienv_8c.html
new file mode 100644
index 0000000..3264638
--- /dev/null
+++ b/DOC/html/SRC_2sp__ienv_8c.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sp_ienv.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sp_ienv.c File Reference</h1><code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="SRC_2sp__ienv_8c.html#21109476f1261abd6b256a393f5fd9e7">sp_ienv</a> (int ispec)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="21109476f1261abd6b256a393f5fd9e7"></a><!-- doxytag: member="sp_ienv.c::sp_ienv" ref="21109476f1261abd6b256a393f5fd9e7" args="(int ispec)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_ienv           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ispec</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    <a class="el" href="slu__util_8h.html#72be96e75e58564c4322ef9ef73ca65f">sp_ienv()</a> is inquired to choose machine-dependent parameters for the
+    local environment. See ISPEC for a description of the parameters.</pre><p>
+<pre>    This version provides a set of parameters which should give good,   
+    but not optimal, performance on many of the currently available   
+    computers.  Users are encouraged to modify this subroutine to set   
+    the tuning parameters for their particular machine using the option   
+    and problem size information in the arguments.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    ISPEC   (input) int
+            Specifies the parameter to be returned as the value of SP_IENV.   
+            = 1: the panel size w; a panel consists of w consecutive
+	         columns of matrix A in the process of Gaussian elimination.
+		 The best value depends on machine's cache characters.
+            = 2: the relaxation parameter relax; if the number of
+	         nodes (columns) in a subtree of the elimination tree is less
+		 than relax, this subtree is considered as one supernode,
+		 regardless of their row structures.
+            = 3: the maximum size for a supernode in complete LU;
+	    = 4: the minimum row dimension for 2-D blocking to be used;
+	    = 5: the minimum column dimension for 2-D blocking to be used;
+	    = 6: the estimated fills factor for L and U, compared with A;
+	    = 7: the maximum size for a supernode in ILU.</pre><p>
+<pre>   (SP_IENV) (output) int
+            >= 0: the value of the parameter specified by ISPEC   
+            < 0:  if SP_IENV = -k, the k-th argument had an illegal value.</pre><p>
+<pre>    ===================================================================== 
+</pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/annotated.html b/DOC/html/annotated.html
new file mode 100644
index 0000000..73d8e67
--- /dev/null
+++ b/DOC/html/annotated.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Structures</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>Data Structures</h1>Here are the data structures with brief descriptions:<table>
+  <tr><td class="indexkey"><a class="el" href="structColamd__Col__struct.html">Colamd_Col_struct</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structColamd__Row__struct.html">Colamd_Row_struct</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structcomplex.html">complex</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structDNformat.html">DNformat</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structdoublecomplex.html">doublecomplex</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structe__node.html">e_node</a></td><td class="indexvalue">Headers for 4 types of dynamatically managed memory </td></tr>
+  <tr><td class="indexkey"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structLU__stack__t.html">LU_stack_t</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structmem__usage__t.html">mem_usage_t</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structNCformat.html">NCformat</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structNCPformat.html">NCPformat</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structNRformat.html">NRformat</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structNRformat__loc.html">NRformat_loc</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structSCformat.html">SCformat</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structSCPformat.html">SCPformat</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structSuperMatrix.html">SuperMatrix</a></td><td class="indexvalue"></td></tr>
+</table>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ccolumn__bmod_8c.html b/DOC/html/ccolumn__bmod_8c.html
new file mode 100644
index 0000000..85ec4a5
--- /dev/null
+++ b/DOC/html/ccolumn__bmod_8c.html
@@ -0,0 +1,272 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ccolumn_bmod.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ccolumn_bmod.c File Reference</h1>performs numeric block updates <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ccolumn__bmod_8c.html#34580dfcbd886fe93845353ac7dbeaa1">cusolve</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#34580dfcbd886fe93845353ac7dbeaa1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ccolumn__bmod_8c.html#39d81cbea11f613524e674a8c2e18c5f">clsolve</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#39d81cbea11f613524e674a8c2e18c5f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ccolumn__bmod_8c.html#09be65495be35085027bc26454dc3e74">cmatvec</a> (int, int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#09be65495be35085027bc26454dc3e74"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ccolumn__bmod_8c.html#16ef1a229e74ac6264d11b35757dccf2">ccolumn_bmod</a> (const int jcol, const int nseg, <a class="el" href="structcomplex.html">complex</a> *dense, <a class="el" href="structcomplex.html">complex</a> *tempv, int *segrep, int *repfnz, int fpanelc, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, <a class="el" href="struc [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre>  Permission is hereby granted to use or copy this program for any
+  purpose, provided the above notices are retained on all copies.
+  Permission to modify the code and to distribute modified code is
+  granted, provided the above notices are retained, and a notice that
+  the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="16ef1a229e74ac6264d11b35757dccf2"></a><!-- doxytag: member="ccolumn_bmod.c::ccolumn_bmod" ref="16ef1a229e74ac6264d11b35757dccf2" args="(const int jcol, const int nseg, complex *dense, complex *tempv, int *segrep, int *repfnz, int fpanelc, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ccolumn_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>fpanelc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose:
+ ========
+ Performs numeric block updates (sup-col) in topological order.
+ It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ Special processing on the supernodal portion of L[*,j]
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="39d81cbea11f613524e674a8c2e18c5f"></a><!-- doxytag: member="ccolumn_bmod.c::clsolve" ref="39d81cbea11f613524e674a8c2e18c5f" args="(int, int, complex *, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="09be65495be35085027bc26454dc3e74"></a><!-- doxytag: member="ccolumn_bmod.c::cmatvec" ref="09be65495be35085027bc26454dc3e74" args="(int, int, int, complex *, complex *, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cmatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="34580dfcbd886fe93845353ac7dbeaa1"></a><!-- doxytag: member="ccolumn_bmod.c::cusolve" ref="34580dfcbd886fe93845353ac7dbeaa1" args="(int, int, complex *, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cusolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ccolumn__dfs_8c.html b/DOC/html/ccolumn__dfs_8c.html
new file mode 100644
index 0000000..dc2e549
--- /dev/null
+++ b/DOC/html/ccolumn__dfs_8c.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ccolumn_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ccolumn_dfs.c File Reference</h1>Performs a symbolic factorization. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ccolumn__dfs_8c.html#5fd0635776cafb1d697263a0db693b9e">T2_SUPER</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">What type of supernodes we want.  <a href="#5fd0635776cafb1d697263a0db693b9e"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ccolumn__dfs_8c.html#0ee0b19c54923ca3b1875679fb05aea7">ccolumn_dfs</a> (const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *xprune, int *marker, int *parent, int *xplore, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="5fd0635776cafb1d697263a0db693b9e"></a><!-- doxytag: member="ccolumn_dfs.c::T2_SUPER" ref="5fd0635776cafb1d697263a0db693b9e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define T2_SUPER          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ee0b19c54923ca3b1875679fb05aea7"></a><!-- doxytag: member="ccolumn_dfs.c::ccolumn_dfs" ref="0ee0b19c54923ca3b1875679fb05aea7" args="(const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *xprune, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ccolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   CCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS 
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal 
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ccopy__to__ucol_8c.html b/DOC/html/ccopy__to__ucol_8c.html
new file mode 100644
index 0000000..0af6a3d
--- /dev/null
+++ b/DOC/html/ccopy__to__ucol_8c.html
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ccopy_to_ucol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ccopy_to_ucol.c File Reference</h1>Copy a computed column of U to the compressed data structure. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ccopy__to__ucol_8c.html#918c42aba84eb7e0cce4b143dbcb4ed1">ccopy_to_ucol</a> (int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, <a class="el" href="structcomplex.html">complex</a> *dense, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="918c42aba84eb7e0cce4b143dbcb4ed1"></a><!-- doxytag: member="ccopy_to_ucol.c::ccopy_to_ucol" ref="918c42aba84eb7e0cce4b143dbcb4ed1" args="(int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, complex *dense, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ccopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cdiagonal_8c.html b/DOC/html/cdiagonal_8c.html
new file mode 100644
index 0000000..31550e0
--- /dev/null
+++ b/DOC/html/cdiagonal_8c.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cdiagonal.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cdiagonal.c File Reference</h1>Auxiliary routines to work with diagonal elements. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cdiagonal_8c.html#c7bdb6c5924a0097d341cf65e27587d5">cfill_diag</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cdiagonal_8c.html#c766fce6c33f168e47c3e9a098cb2432">cdominate</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="c766fce6c33f168e47c3e9a098cb2432"></a><!-- doxytag: member="cdiagonal.c::cdominate" ref="c766fce6c33f168e47c3e9a098cb2432" args="(int n, NCformat *Astore)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cdominate           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structNCformat.html">NCformat</a> * </td>
+          <td class="paramname"> <em>Astore</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c7bdb6c5924a0097d341cf65e27587d5"></a><!-- doxytag: member="cdiagonal.c::cfill_diag" ref="c7bdb6c5924a0097d341cf65e27587d5" args="(int n, NCformat *Astore)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cfill_diag           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structNCformat.html">NCformat</a> * </td>
+          <td class="paramname"> <em>Astore</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cfgmr_8c.html b/DOC/html/cfgmr_8c.html
new file mode 100644
index 0000000..31ba4b8
--- /dev/null
+++ b/DOC/html/cfgmr_8c.html
@@ -0,0 +1,216 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/cfgmr.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/cfgmr.c File Reference</h1>flexible GMRES from ITSOL developed by Yousef Saad. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cfgmr_8c.html#70fac857a29f956523d4c8c05e13f177">epsmac</a>   1.0e-16</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cfgmr_8c.html#118d4bd5ee21ac6a5738f2b9a4b6fd70">cdotc_</a> (<a class="el" href="structcomplex.html">complex</a> *, int *, <a class="el" href="structcomplex.html">complex</a>[], int *, <a class="el" href="structcomplex.html">complex</a>[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="cfgmr_8c.html#7528cbbfcac44b8a1425b6ac26419c85">scnrm2_</a> (int *, <a class="el" href="structcomplex.html">complex</a>[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cfgmr_8c.html#5be26920e5ae10ff3669ee91f9f15d73">cfgmr</a> (int n, void(*cmatvec)(<a class="el" href="structcomplex.html">complex</a>, <a class="el" href="structcomplex.html">complex</a>[], <a class="el" href="structcomplex.html">complex</a>, <a class="el" href="structcomplex.html">complex</a>[]), void(*cpsolve)(int, <a class="el" href="structcomplex.htm [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="70fac857a29f956523d4c8c05e13f177"></a><!-- doxytag: member="cfgmr.c::epsmac" ref="70fac857a29f956523d4c8c05e13f177" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define epsmac   1.0e-16          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="118d4bd5ee21ac6a5738f2b9a4b6fd70"></a><!-- doxytag: member="cfgmr.c::cdotc_" ref="118d4bd5ee21ac6a5738f2b9a4b6fd70" args="(complex *, int *, complex[], int *, complex[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cdotc_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5be26920e5ae10ff3669ee91f9f15d73"></a><!-- doxytag: member="cfgmr.c::cfgmr" ref="5be26920e5ae10ff3669ee91f9f15d73" args="(int n, void(*cmatvec)(complex, complex[], complex, complex[]), void(*cpsolve)(int, complex[], complex[]), complex *rhs, complex *sol, double tol, int im, int *itmax, FILE *fits)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cfgmr           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(<a class="el" href="structcomplex.html">complex</a>, <a class="el" href="structcomplex.html">complex</a>[], <a class="el" href="structcomplex.html">complex</a>, <a class="el" href="structcomplex.html">complex</a>[]) </td>
+          <td class="paramname"> <em>cmatvec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(int, <a class="el" href="structcomplex.html">complex</a>[], <a class="el" href="structcomplex.html">complex</a>[]) </td>
+          <td class="paramname"> <em>cpsolve</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>rhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>sol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>im</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>itmax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fits</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7528cbbfcac44b8a1425b6ac26419c85"></a><!-- doxytag: member="cfgmr.c::scnrm2_" ref="7528cbbfcac44b8a1425b6ac26419c85" args="(int *, complex[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float scnrm2_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cgscon_8c.html b/DOC/html/cgscon_8c.html
new file mode 100644
index 0000000..84b7cea
--- /dev/null
+++ b/DOC/html/cgscon_8c.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cgscon.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cgscon.c File Reference</h1>Estimates reciprocal of the condition number of a general matrix. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgscon_8c.html#e836085920601b3b0717a4f623ab460e">cgscon</a> (char *norm, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, float anorm, float *rcond, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat, int *info)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Modified from lapack routines CGECON.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="e836085920601b3b0717a4f623ab460e"></a><!-- doxytag: member="cgscon.c::cgscon" ref="e836085920601b3b0717a4f623ab460e" args="(char *norm, SuperMatrix *L, SuperMatrix *U, float anorm, float *rcond, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgscon           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>norm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>anorm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   CGSCON estimates the reciprocal of the condition number of a general 
+   real matrix A, in either the 1-norm or the infinity-norm, using   
+   the LU factorization computed by CGETRF.   *</pre><p>
+<pre>   An estimate is obtained for norm(inv(A)), and the reciprocal of the   
+   condition number is computed as   
+      RCOND = 1 / ( norm(A) * norm(inv(A)) ).</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>    NORM    (input) char*
+            Specifies whether the 1-norm condition number or the   
+            infinity-norm condition number is required:   
+            = '1' or 'O':  1-norm;   
+            = 'I':         Infinity-norm.</pre><p>
+<pre>    L       (input) SuperMatrix*
+            The factor L from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf()</a>. Use compressed row subscripts storage for supernodes,
+            i.e., L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre>    U       (input) SuperMatrix*
+            The factor U from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+            Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre>    ANORM   (input) float
+            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
+            If NORM = 'I', the infinity-norm of the original matrix A.</pre><p>
+<pre>    RCOND   (output) float*
+           The reciprocal of the condition number of the matrix A,   
+           computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><p>
+<pre>    INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cgsequ_8c.html b/DOC/html/cgsequ_8c.html
new file mode 100644
index 0000000..292bdbe
--- /dev/null
+++ b/DOC/html/cgsequ_8c.html
@@ -0,0 +1,145 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cgsequ.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cgsequ.c File Reference</h1>Computes row and column scalings. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgsequ_8c.html#36bb68fea3ee44ff05eb7da2ee059fa5">cgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, float *r, float *c, float *rowcnd, float *colcnd, float *amax, int *info)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver related.  <a href="#36bb68fea3ee44ff05eb7da2ee059fa5"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Modified from LAPACK routine CGEEQU
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="36bb68fea3ee44ff05eb7da2ee059fa5"></a><!-- doxytag: member="cgsequ.c::cgsequ" ref="36bb68fea3ee44ff05eb7da2ee059fa5" args="(SuperMatrix *A, float *r, float *c, float *rowcnd, float *colcnd, float *amax, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgsequ           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   CGSEQU computes row and column scalings intended to equilibrate an   
+   M-by-N sparse matrix A and reduce its condition number. R returns the row
+   scale factors and C the column scale factors, chosen to try to make   
+   the largest element in each row and column of the matrix B with   
+   elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.</pre><p>
+<pre>   R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
+   number and BIGNUM = largest safe number.  Use of these scaling   
+   factors is not guaranteed to reduce the condition number of A but   
+   works well in practice.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The matrix of dimension (A->nrow, A->ncol) whose equilibration
+           factors are to be computed. The type of A can be:
+           Stype = SLU_NC; Dtype = SLU_C; Mtype = SLU_GE.</pre><p>
+<pre>   R       (output) float*, size A->nrow
+           If INFO = 0 or INFO > M, R contains the row scale factors   
+           for A.</pre><p>
+<pre>   C       (output) float*, size A->ncol
+           If INFO = 0,  C contains the column scale factors for A.</pre><p>
+<pre>   ROWCND  (output) float*
+           If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
+           smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
+           AMAX is neither too large nor too small, it is not worth   
+           scaling by R.</pre><p>
+<pre>   COLCND  (output) float*
+           If INFO = 0, COLCND contains the ratio of the smallest   
+           C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
+           worth scaling by C.</pre><p>
+<pre>   AMAX    (output) float*
+           Absolute value of largest matrix element.  If AMAX is very   
+           close to overflow or very close to underflow, the matrix   
+           should be scaled.</pre><p>
+<pre>   INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value   
+           > 0:  if INFO = i,  and i is   
+                 <= A->nrow:  the i-th row of A is exactly zero   
+                 >  A->ncol:  the (i-M)-th column of A is exactly zero</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cgsisx_8c.html b/DOC/html/cgsisx_8c.html
new file mode 100644
index 0000000..3b7bd14
--- /dev/null
+++ b/DOC/html/cgsisx_8c.html
@@ -0,0 +1,495 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cgsisx.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cgsisx.c File Reference</h1>Computes an approximate solutions of linear equations A*X=B or A'*X=B. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgsisx_8c.html#adff8c65cafef191464b3d10bbcbbe7c">cgsisx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *perm_r, int *etree, char *equed, float *R, fl [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.2) --
+ Lawrence Berkeley National Laboratory.
+ November, 2010
+ August, 2011
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="adff8c65cafef191464b3d10bbcbbe7c"></a><!-- doxytag: member="cgsisx.c::cgsisx" ref="adff8c65cafef191464b3d10bbcbbe7c" args="(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r, int *etree, char *equed, float *R, float *C, SuperMatrix *L, SuperMatrix *U, void *work, int lwork, SuperMatrix *B, SuperMatrix *X, float *recip_pivot_growth, float *rcond, mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgsisx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> CGSISX computes an approximate solutions of linear equations
+ A*X=B or A'*X=B, using the ILU factorization from <a class="el" href="cgsitrf_8c.html#16b6ae6c8a2812e62ace44629f313bc6">cgsitrf()</a>.
+ An estimation of the condition number is provided. 
+ The routine performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A is
+	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+	     = TRANS or CONJ).</pre><p>
+<pre>	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+	     matrix that usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the matrix A (after equilibration if options->Equil = YES)
+	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>	1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+	     and info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	1.6. The system of equations is solved for X using the factored form
+	     of A.</pre><p>
+<pre>	1.7. options->IterRefine is not used</pre><p>
+<pre>	1.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>	1.9. options for ILU only
+	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+		entries of modulus 1 on the diagonal and off-diagonal entries
+		of modulus at most 1. If MC64 fails, <a class="el" href="dgsequ_8c.html#af22b247cc134fb0ba90285e84ccebb4" title="Driver related.">dgsequ()</a> is used to
+		equilibrate the system.
+              ( Default: LargeDiag )
+	     2) options->ILU_DropTol = tau is the threshold for dropping.
+		For L, it is used directly (for the whole row in a supernode);
+		For U, ||A(:,i)||_oo * tau is used as the threshold
+	        for the	i-th column.
+		If a secondary dropping rule is required, tau will
+	        also be used to compute the second threshold.
+              ( Default: 1e-4 )
+	     3) options->ILU_FillFactor = gamma, used as the initial guess
+		of memory growth.
+		If a secondary dropping rule is required, it will also
+              be used as an upper bound of the memory.
+              ( Default: 10 )
+	     4) options->ILU_DropRule specifies the dropping rule.
+		Option	      Meaning
+		======	      ===========
+		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+			      p = gamma * nnz(A(:,j)).
+		DROP_AREA:    Variation of ILUTP, for j-th column, use
+			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+			      Otherwise
+				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+			      tau_U(j) uses the similar rule.
+			      NOTE: the thresholds used by L and U are separate.
+		DROP_INTERP:  Compute the second dropping threshold by
+			      interpolation instead of sorting (default).
+			      In this case, the actual fill ratio is not
+			      guaranteed smaller than gamma.
+		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+		( Default: DROP_BASIC | DROP_AREA )
+	     5) options->ILU_Norm is the criterion of measuring the magnitude
+		of a row in a supernode of L. ( Default is INF_NORM )
+		options->ILU_Norm	RowSize(x[1:n])
+		=================	===============
+		ONE_NORM		||x||_1 / n
+		TWO_NORM		||x||_2 / sqrt(n)
+		INF_NORM		max{|x[i]|}
+	     6) options->ILU_MILU specifies the type of MILU's variation.
+		= SILU: do not perform Modified ILU;
+		= SMILU_1 (not recommended):
+		    U(i,i) := U(i,i) + sum(dropped entries);
+		= SMILU_2:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+		= SMILU_3:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+		NOTE: Even SMILU_1 does not preserve the column sum because of
+		late dropping.
+              ( Default: SILU )
+	     7) options->ILU_FillTol is used as the perturbation when
+		encountering zero pivots. If some U(i,i) = 0, so that U is
+		exactly singular, then
+		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+              ( Default: 1e-2 )</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+	to the transpose of A:</pre><p>
+<pre>	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A' is
+	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>	2.2. Permute columns of transpose(A) (rows of A),
+	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+	     usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the transpose(A) (after equilibration if
+	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+	     permutation Pr determined by partial pivoting.</pre><p>
+<pre>	2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+	     And info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	2.6. The system of equations is solved for X using the factored form
+	     of transpose(A).</pre><p>
+<pre>	2.7. If options->IterRefine is not used.</pre><p>
+<pre>	2.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the LU decomposition will be performed and how the
+	   system will be solved.</pre><p>
+<pre> A	   (input/output) SuperMatrix*
+	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+	   of the linear equations is A->nrow. Currently, the type of A can be:
+	   Stype = SLU_NC or SLU_NR, Dtype = SLU_C, Mtype = SLU_GE.
+	   In the future, more general A may be handled.</pre><p>
+<pre>	   On entry, If options->Fact = FACTORED and equed is not 'N',
+	   then A must have been equilibrated by the scaling factors in
+	   R and/or C.
+	   On exit, A is not modified
+         if options->Equil = NO, or
+         if options->Equil = YES but equed = 'N' on exit, or
+         if options->RowPerm = NO.</pre><p>
+<pre>	   Otherwise, if options->Equil = YES and equed is not 'N',
+	   A is scaled as follows:
+	   If A->Stype = SLU_NC:
+	     equed = 'R':  A := diag(R) * A
+	     equed = 'C':  A := A * diag(C)
+	     equed = 'B':  A := diag(R) * A * diag(C).
+	   If A->Stype = SLU_NR:
+	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre>         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+            the matrix to an I-matrix, that is A is modified as follows:
+            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+            off-diagonal entries of modulus at most 1. P is a permutation
+            obtained from MC64.
+            If MC64 fails, <a class="el" href="cgsequ_8c.html#36bb68fea3ee44ff05eb7da2ee059fa5" title="Driver related.">cgsequ()</a> is used to equilibrate the system,
+            and A is scaled as above, but no permutation is involved.
+            On exit, A is restored to the orginal row numbering, so
+            Dr*A*Dc is returned.</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+	   which defines the permutation matrix Pc; perm_c[i] = j means
+	   column i of A is in position j in A*Pc.
+	   On exit, perm_c may be overwritten by the product of the input
+	   perm_c and a permutation that postorders the elimination tree
+	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+	   is already in postorder.</pre><p>
+<pre>	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+	   which describes permutation of columns of transpose(A) 
+	   (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+	   which defines the permutation matrix Pr, and is determined
+	   by MC64 first then followed by partial pivoting.
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+	   determines permutation of rows of transpose(A)
+	   (columns of A) as described above.</pre><p>
+<pre>	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	   will try to use the input perm_r, unless a certain threshold
+	   criterion is violated. In that case, perm_r is overwritten by a
+	   new permutation determined by partial pivoting or diagonal
+	   threshold pivoting.
+	   Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+	   Elimination tree of Pc'*A'*A*Pc.
+	   If options->Fact != FACTORED and options->Fact != DOFACT,
+	   etree is an input argument, otherwise it is an output argument.
+	   Note: etree is a vector of parent pointers for a forest whose
+	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+	   Specifies the form of equilibration that was done.
+	   = 'N': No equilibration.
+	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+	   = 'B': Both row and column equilibration, i.e., A was replaced 
+		  by diag(R)*A*diag(C).
+	   If options->Fact = FACTORED, equed is an input argument,
+	   otherwise it is an output argument.</pre><p>
+<pre> R	   (input/output) float*, dimension (A->nrow)
+	   The row scale factors for A or transpose(A).
+	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+	   If equed = 'N' or 'C', R is not accessed.
+	   If options->Fact = FACTORED, R is an input argument,
+	       otherwise, R is output.
+	   If options->Fact = FACTORED and equed = 'R' or 'B', each element
+	       of R must be positive.</pre><p>
+<pre> C	   (input/output) float*, dimension (A->ncol)
+	   The column scale factors for A or transpose(A).
+	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+	   If equed = 'N' or 'R', C is not accessed.
+	   If options->Fact = FACTORED, C is an input argument,
+	       otherwise, C is output.
+	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+	       of C must be positive.</pre><p>
+<pre> L	   (output) SuperMatrix*
+	   The factor L from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses compressed row subscripts storage for supernodes, i.e.,
+	   L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre> U	   (output) SuperMatrix*
+	   The factor U from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses column-wise storage scheme, i.e., U has types:
+	   Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+	   User supplied workspace, should be large enough
+	   to hold data structures for factors L and U.
+	   On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 mem_usage->total_needed; no other side effects.</pre><p>
+<pre>	   See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B	   (input/output) SuperMatrix*
+	   B has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+	   On entry, the right hand side matrix.
+	   If B->ncol = 0, only LU decomposition is performed, the triangular
+			   solve is skipped.
+	   On exit,
+	      if equed = 'N', B is not modified; otherwise
+	      if A->Stype = SLU_NC:
+		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+		    B is overwritten by diag(R)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+		    B is overwritten by diag(C)*B;
+	      if A->Stype = SLU_NR:
+		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+		    B is overwritten by diag(C)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+		    B is overwritten by diag(R)*B.</pre><p>
+<pre> X	   (output) SuperMatrix*
+	   X has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+	   to the original system of equations. Note that A and B are modified
+	   on exit if equed is not 'N', and the solution to the equilibrated
+	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+	   and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) float*
+	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+	   The infinity norm is used. If recip_pivot_growth is much less
+	   than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) float*
+	   The estimate of the reciprocal condition number of the matrix A
+	   after equilibration (if done). If rcond is less than the machine
+	   precision (in particular, if rcond = 0), the matrix is singular
+	   to working precision. This condition is indicated by a return
+	   code of info > 0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+	   Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+	     The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+	     The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+	     The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+	  Record the statistics on runtime and floating-point operation count.
+	  See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+	   > 0: if info = i, and i is
+		<= A->ncol: number of zero pivots. They are replaced by small
+		      entries due to options->ILU_FillTol.
+		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+		      precision, meaning that the matrix is singular to
+		      working precision. Nevertheless, the solution and
+		      error bounds are computed because there are a number
+		      of situations where the computed solution can be more
+		      accurate than the value of RCOND would suggest.
+		> A->ncol+1: number of bytes allocated when memory allocation
+		      failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cgsitrf_8c.html b/DOC/html/cgsitrf_8c.html
new file mode 100644
index 0000000..1307f4b
--- /dev/null
+++ b/DOC/html/cgsitrf_8c.html
@@ -0,0 +1,248 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cgsitrf.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cgsitrf.c File Reference</h1>Computes an ILU factorization of a general sparse matrix. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgsitrf_8c.html#16b6ae6c8a2812e62ace44629f313bc6">cgsitrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int panel_size, int *etree, void *work, int lwork, [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.1) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="16b6ae6c8a2812e62ace44629f313bc6"></a><!-- doxytag: member="cgsitrf.c::cgsitrf" ref="16b6ae6c8a2812e62ace44629f313bc6" args="(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size, int *etree, void *work, int lwork, int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgsitrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> CGSITRF computes an ILU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the ILU decomposition will be performed.</pre><p>
+<pre> A	    (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+	    (A->nrow, A->ncol). The type of A can be:
+	    Stype = SLU_NCP; Dtype = SLU_C; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+	    To control degree of relaxing supernodes. If the number
+	    of nodes (columns) in a subtree of the elimination tree is less
+	    than relax, this subtree is considered as one supernode,
+	    regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+	    A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+	    Elimination tree of A'*A.
+	    Note: etree is a vector of parent pointers for a forest whose
+	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+	    On input, the columns of A should be permuted so that the
+	    etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+	    User-supplied work space and space for the output data structures.
+	    Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the
+	    permutation matrix Pc; perm_c[i] = j means column i of A is
+	    in position j in A*Pc.
+	    When searching for diagonal, perm_c[*] is applied to the
+	    row subscripts of A, so that diagonal threshold pivoting
+	    can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+	    Row permutation vector which defines the permutation matrix Pr,
+	    perm_r[i] = j means row i of A is in position j in Pr*A.
+	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	       will try to use the input perm_r, unless a certain threshold
+	       criterion is violated. In that case, perm_r is overwritten by
+	       a new permutation determined by partial pivoting or diagonal
+	       threshold pivoting.
+	    Otherwise, perm_r is output argument;</pre><p>
+<pre> L	    (output) SuperMatrix*
+	    The factor L from the factorization Pr*A=L*U; use compressed row
+	    subscripts storage for supernodes, i.e., L has type:
+	    Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre> U	    (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+	    storage scheme, i.e., U has types: Stype = SLU_NC,
+	    Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+	    Record the statistics on runtime and floating-point operation count.
+	    See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+	    = 0: successful exit
+	    < 0: if info = -i, the i-th argument had an illegal value
+	    > 0: if info = i, and i is
+	       <= A->ncol: number of zero pivots. They are replaced by small
+		  entries according to options->ILU_FillTol.
+	       > A->ncol: number of bytes allocated when memory allocation
+		  failure occurred, plus A->ncol. If lwork = -1, it is
+		  the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays:
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 4 of them:
+	      marker/marker1 are used for panel dfs, see (ilu_)<a class="el" href="dpanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">dpanel_dfs.c</a>;
+	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+	      marker_relax(has its own space) is used for relaxed supernodes.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+	Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the
+	last column of a supernode.
+	The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+	supernodal representative r, repfnz[r] is the location of the first
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+	the panel diagonal. These are filled in during <a class="el" href="dpanel__dfs_8c.html#2a809488b87d2c1a9b2a574b726e8517">dpanel_dfs()</a>, and are
+	used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+		   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a>.
+	It is also used by the dropping routine <a class="el" href="ilu__ddrop__row_8c.html#380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cgsrfs_8c.html b/DOC/html/cgsrfs_8c.html
new file mode 100644
index 0000000..3a22f21
--- /dev/null
+++ b/DOC/html/cgsrfs_8c.html
@@ -0,0 +1,249 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cgsrfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cgsrfs.c File Reference</h1>Improves computed solution to a system of inear equations. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cgsrfs_8c.html#3641b6d4c21b7a852dbb32c2b693302e">ITMAX</a>   5</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgsrfs_8c.html#45c3a69a2e1025c59b2d96be63f65b71">cgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="structSuperMatrix.html"> [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Modified from lapack routine CGERFS
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="3641b6d4c21b7a852dbb32c2b693302e"></a><!-- doxytag: member="cgsrfs.c::ITMAX" ref="3641b6d4c21b7a852dbb32c2b693302e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ITMAX   5          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="45c3a69a2e1025c59b2d96be63f65b71"></a><!-- doxytag: member="cgsrfs.c::cgsrfs" ref="45c3a69a2e1025c59b2d96be63f65b71" args="(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U, int *perm_c, int *perm_r, char *equed, float *R, float *C, SuperMatrix *B, SuperMatrix *X, float *ferr, float *berr, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgsrfs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   CGSRFS improves the computed solution to a system of linear   
+   equations and provides error bounds and backward error estimates for 
+   the solution.</pre><p>
+<pre>   If equilibration was performed, the system becomes:
+           (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The original matrix A in the system, or the scaled A if
+           equilibration was done. The type of A can be:
+           Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_GE.</pre><p>
+<pre>   L       (input) SuperMatrix*
+	     The factor L from the factorization Pr*A*Pc=L*U. Use
+           compressed row subscripts storage for supernodes, 
+           i.e., L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre>   U       (input) SuperMatrix*
+           The factor U from the factorization Pr*A*Pc=L*U as computed by
+           <a class="el" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf()</a>. Use column-wise storage scheme, 
+           i.e., U has types: Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre>   perm_c  (input) int*, dimension (A->ncol)
+	     Column permutation vector, which defines the 
+           permutation matrix Pc; perm_c[i] = j means column i of A is 
+           in position j in A*Pc.</pre><p>
+<pre>   perm_r  (input) int*, dimension (A->nrow)
+           Row permutation vector, which defines the permutation matrix Pr;
+           perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>   equed   (input) Specifies the form of equilibration that was done.
+           = 'N': No equilibration.
+           = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+           = 'C': Column equilibration, i.e., A was postmultiplied by
+                  diag(C).
+           = 'B': Both row and column equilibration, i.e., A was replaced 
+                  by diag(R)*A*diag(C).</pre><p>
+<pre>   R       (input) float*, dimension (A->nrow)
+           The row scale factors for A.
+           If equed = 'R' or 'B', A is premultiplied by diag(R).
+           If equed = 'N' or 'C', R is not accessed.</pre><p>
+<pre>   C       (input) float*, dimension (A->ncol)
+           The column scale factors for A.
+           If equed = 'C' or 'B', A is postmultiplied by diag(C).
+           If equed = 'N' or 'R', C is not accessed.</pre><p>
+<pre>   B       (input) SuperMatrix*
+           B has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+           The right hand side matrix B.
+           if equed = 'R' or 'B', B is premultiplied by diag(R).</pre><p>
+<pre>   X       (input/output) SuperMatrix*
+           X has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+           On entry, the solution matrix X, as computed by <a class="el" href="cgstrs_8c.html#19517b9d29e4faf9ae777ca6fb9d415b">cgstrs()</a>.
+           On exit, the improved solution matrix X.
+           if *equed = 'C' or 'B', X should be premultiplied by diag(C)
+               in order to obtain the solution to the original system.</pre><p>
+<pre>   FERR    (output) float*, dimension (B->ncol)   
+           The estimated forward error bound for each solution vector   
+           X(j) (the j-th column of the solution matrix X).   
+           If XTRUE is the true solution corresponding to X(j), FERR(j) 
+           is an estimated upper bound for the magnitude of the largest 
+           element in (X(j) - XTRUE) divided by the magnitude of the   
+           largest element in X(j).  The estimate is as reliable as   
+           the estimate for RCOND, and is almost always a slight   
+           overestimate of the true error.</pre><p>
+<pre>   BERR    (output) float*, dimension (B->ncol)   
+           The componentwise relative backward error of each solution   
+           vector X(j) (i.e., the smallest relative change in   
+           any element of A or B that makes X(j) an exact solution).</pre><p>
+<pre>   stat     (output) SuperLUStat_t*
+            Record the statistics on runtime and floating-point operation count.
+            See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre>   info    (output) int*   
+           = 0:  successful exit   
+            < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    Internal Parameters   
+    ===================</pre><p>
+<pre>    ITMAX is the maximum number of steps of iterative refinement.</pre><p>
+<pre> </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cgssv_8c.html b/DOC/html/cgssv_8c.html
new file mode 100644
index 0000000..f5ba3ef
--- /dev/null
+++ b/DOC/html/cgssv_8c.html
@@ -0,0 +1,202 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cgssv.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cgssv.c File Reference</h1>Solves the system of linear equations A*X=B. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgssv_8c.html#b592d134574c9813b7f8959026c94e8f">cgssv</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *perm_r, <a class="el" href="structSuperMatrix.h [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver routines.  <a href="#b592d134574c9813b7f8959026c94e8f"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="b592d134574c9813b7f8959026c94e8f"></a><!-- doxytag: member="cgssv.c::cgssv" ref="b592d134574c9813b7f8959026c94e8f" args="(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U, SuperMatrix *B, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgssv           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> CGSSV solves the system of linear equations A*X=B, using the
+ LU factorization from CGSTRF. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. Permute the columns of A, forming A*Pc, where Pc
+           is a permutation matrix. For more details of this step, 
+           see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.2. Factor A as Pr*A*Pc=L*U with the permutation Pr determined
+           by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      1.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+      above algorithm to the transpose of A:</pre><p>
+<pre>      2.1. Permute columns of transpose(A) (rows of A),
+           forming transpose(A)*Pc, where Pc is a permutation matrix. 
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.2. Factor A as Pr*transpose(A)*Pc=L*U with the permutation Pr
+           determined by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      2.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR; Dtype = SLU_C; Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre> perm_c  (input/output) int*
+         If A->Stype = SLU_NC, column permutation vector of size A->ncol
+         which defines the permutation matrix Pc; perm_c[i] = j means 
+         column i of A is in position j in A*Pc.
+         If A->Stype = SLU_NR, column permutation vector of size A->nrow
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre>         If options->ColPerm = MY_PERMC or options->Fact = SamePattern or
+            options->Fact = SamePattern_SameRowPerm, it is an input argument.
+            On exit, perm_c may be overwritten by the product of the input
+            perm_c and a permutation that postorders the elimination tree
+            of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+            is already in postorder.
+         Otherwise, it is an output argument.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined 
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.
+         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->RowPerm = MY_PERMR or
+            options->Fact = SamePattern_SameRowPerm, perm_r is an
+            input argument.
+         otherwise it is an output argument.</pre><p>
+<pre> L       (output) SuperMatrix*
+         The factor L from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+         > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                so the solution could not be computed.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cgssvx_8c.html b/DOC/html/cgssvx_8c.html
new file mode 100644
index 0000000..348da81
--- /dev/null
+++ b/DOC/html/cgssvx_8c.html
@@ -0,0 +1,450 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cgssvx.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cgssvx.c File Reference</h1>Solves the system of linear equations A*X=B or A'*X=B. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgssvx_8c.html#f659b3121feb5ebd8810a5868d3bca12">cgssvx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *perm_r, int *etree, char *equed, float *R, fl [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="f659b3121feb5ebd8810a5868d3bca12"></a><!-- doxytag: member="cgssvx.c::cgssvx" ref="f659b3121feb5ebd8810a5868d3bca12" args="(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r, int *etree, char *equed, float *R, float *C, SuperMatrix *L, SuperMatrix *U, void *work, int lwork, SuperMatrix *B, SuperMatrix *X, float *recip_pivot_growth, float *rcond, float *ferr, float *berr, mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgssvx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> CGSSVX solves the system of linear equations A*X=B or A'*X=B, using
+ the LU factorization from <a class="el" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf()</a>. Error bounds on the solution and
+ a condition estimate are also provided. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A is
+           overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+           (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+           = TRANS or CONJ).</pre><p>
+<pre>      1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+           matrix that usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the matrix A (after equilibration if options->Equil = YES)
+           as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>      1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form of 
+           A is used to estimate the condition number of the matrix A. If
+           the reciprocal of the condition number is less than machine
+           precision, info = A->ncol+1 is returned as a warning, but the
+           routine still goes on to solve for X and computes error bounds
+           as described below.</pre><p>
+<pre>      1.6. The system of equations is solved for X using the factored form
+           of A.</pre><p>
+<pre>      1.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      1.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R)
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+      to the transpose of A:</pre><p>
+<pre>      2.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A' is
+           overwritten by diag(R)*A'*diag(C) and B by diag(R)*B 
+           (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>      2.2. Permute columns of transpose(A) (rows of A), 
+           forming transpose(A)*Pc, where Pc is a permutation matrix that 
+           usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the transpose(A) (after equilibration if 
+           options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+           permutation Pr determined by partial pivoting.</pre><p>
+<pre>      2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form 
+           of transpose(A) is used to estimate the condition number of the
+           matrix A. If the reciprocal of the condition number
+           is less than machine precision, info = A->nrow+1 is returned as
+           a warning, but the routine still goes on to solve for X and
+           computes error bounds as described below.</pre><p>
+<pre>      2.6. The system of equations is solved for X using the factored form
+           of transpose(A).</pre><p>
+<pre>      2.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      2.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R) 
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input/output) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of the linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR, Dtype = SLU_D, Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre>         On entry, If options->Fact = FACTORED and equed is not 'N', 
+         then A must have been equilibrated by the scaling factors in
+         R and/or C.  
+         On exit, A is not modified if options->Equil = NO, or if 
+         options->Equil = YES but equed = 'N' on exit.
+         Otherwise, if options->Equil = YES and equed is not 'N',
+         A is scaled as follows:
+         If A->Stype = SLU_NC:
+           equed = 'R':  A := diag(R) * A
+           equed = 'C':  A := A * diag(C)
+           equed = 'B':  A := diag(R) * A * diag(C).
+         If A->Stype = SLU_NR:
+           equed = 'R':  transpose(A) := diag(R) * transpose(A)
+           equed = 'C':  transpose(A) := transpose(A) * diag(C)
+           equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+         which defines the permutation matrix Pc; perm_c[i] = j means
+         column i of A is in position j in A*Pc.
+         On exit, perm_c may be overwritten by the product of the input
+         perm_c and a permutation that postorders the elimination tree
+         of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+         is already in postorder.</pre><p>
+<pre>         If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.</pre><p>
+<pre>         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+         will try to use the input perm_r, unless a certain threshold
+         criterion is violated. In that case, perm_r is overwritten by a
+         new permutation determined by partial pivoting or diagonal
+         threshold pivoting.
+         Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+         Elimination tree of Pc'*A'*A*Pc.
+         If options->Fact != FACTORED and options->Fact != DOFACT,
+         etree is an input argument, otherwise it is an output argument.
+         Note: etree is a vector of parent pointers for a forest whose
+         vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+         Specifies the form of equilibration that was done.
+         = 'N': No equilibration.
+         = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+         = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+         = 'B': Both row and column equilibration, i.e., A was replaced 
+                by diag(R)*A*diag(C).
+         If options->Fact = FACTORED, equed is an input argument,
+         otherwise it is an output argument.</pre><p>
+<pre> R       (input/output) float*, dimension (A->nrow)
+         The row scale factors for A or transpose(A).
+         If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+         If equed = 'N' or 'C', R is not accessed.
+         If options->Fact = FACTORED, R is an input argument,
+             otherwise, R is output.
+         If options->zFact = FACTORED and equed = 'R' or 'B', each element
+             of R must be positive.</pre><p>
+<pre> C       (input/output) float*, dimension (A->ncol)
+         The column scale factors for A or transpose(A).
+         If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+         If equed = 'N' or 'R', C is not accessed.
+         If options->Fact = FACTORED, C is an input argument,
+             otherwise, C is output.
+         If options->Fact = FACTORED and equed = 'C' or 'B', each element
+             of C must be positive.</pre><p>
+<pre> L       (output) SuperMatrix*
+	   The factor L from the factorization
+             Pr*A*Pc=L*U              (if A->Stype SLU_= NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+         User supplied workspace, should be large enough
+         to hold data structures for factors L and U.
+         On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               mem_usage->total_needed; no other side effects.</pre><p>
+<pre>         See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         If B->ncol = 0, only LU decomposition is performed, the triangular
+                         solve is skipped.
+         On exit,
+            if equed = 'N', B is not modified; otherwise
+            if A->Stype = SLU_NC:
+               if options->Trans = NOTRANS and equed = 'R' or 'B',
+                  B is overwritten by diag(R)*B;
+               if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+                  B is overwritten by diag(C)*B;
+            if A->Stype = SLU_NR:
+               if options->Trans = NOTRANS and equed = 'C' or 'B',
+                  B is overwritten by diag(C)*B;
+               if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+                  B is overwritten by diag(R)*B.</pre><p>
+<pre> X       (output) SuperMatrix*
+         X has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE. 
+         If info = 0 or info = A->ncol+1, X contains the solution matrix
+         to the original system of equations. Note that A and B are modified
+         on exit if equed is not 'N', and the solution to the equilibrated
+         system is inv(diag(C))*X if options->Trans = NOTRANS and
+         equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+         and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) float*
+         The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+         The infinity norm is used. If recip_pivot_growth is much less
+         than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) float*
+         The estimate of the reciprocal condition number of the matrix A
+         after equilibration (if done). If rcond is less than the machine
+         precision (in particular, if rcond = 0), the matrix is singular
+         to working precision. This condition is indicated by a return
+         code of info > 0.</pre><p>
+<pre> FERR    (output) float*, dimension (B->ncol)   
+         The estimated forward error bound for each solution vector   
+         X(j) (the j-th column of the solution matrix X).   
+         If XTRUE is the true solution corresponding to X(j), FERR(j) 
+         is an estimated upper bound for the magnitude of the largest 
+         element in (X(j) - XTRUE) divided by the magnitude of the   
+         largest element in X(j).  The estimate is as reliable as   
+         the estimate for RCOND, and is almost always a slight   
+         overestimate of the true error.
+         If options->IterRefine = NOREFINE, ferr = 1.0.</pre><p>
+<pre> BERR    (output) float*, dimension (B->ncol)
+         The componentwise relative backward error of each solution   
+         vector X(j) (i.e., the smallest relative change in   
+         any element of A or B that makes X(j) an exact solution).
+         If options->IterRefine = NOREFINE, berr = 1.0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+         Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+           The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+           The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+           The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+         = 0: successful exit   
+         < 0: if info = -i, the i-th argument had an illegal value   
+         > 0: if info = i, and i is   
+              <= A->ncol: U(i,i) is exactly zero. The factorization has   
+                    been completed, but the factor U is exactly   
+                    singular, so the solution and error bounds   
+                    could not be computed.   
+              = A->ncol+1: U is nonsingular, but RCOND is less than machine
+                    precision, meaning that the matrix is singular to
+                    working precision. Nevertheless, the solution and
+                    error bounds are computed because there are a number
+                    of situations where the computed solution can be more
+                    accurate than the value of RCOND would suggest.   
+              > A->ncol+1: number of bytes allocated when memory allocation
+                    failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cgstrf_8c.html b/DOC/html/cgstrf_8c.html
new file mode 100644
index 0000000..3401e50
--- /dev/null
+++ b/DOC/html/cgstrf_8c.html
@@ -0,0 +1,261 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cgstrf.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cgstrf.c File Reference</h1>Computes an LU factorization of a general sparse matrix. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int panel_size, int *etree, void *work, int lwork, i [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="9c9f2ce12946612c7426a10352ac5984"></a><!-- doxytag: member="cgstrf.c::cgstrf" ref="9c9f2ce12946612c7426a10352ac5984" args="(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size, int *etree, void *work, int lwork, int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgstrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> CGSTRF computes an LU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper 
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = SLU_NCP; Dtype = SLU_C; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+          To control degree of relaxing supernodes. If the number
+          of nodes (columns) in a subtree of the elimination tree is less
+          than relax, this subtree is considered as one supernode,
+          regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+          A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+          Elimination tree of A'*A.
+          Note: etree is a vector of parent pointers for a forest whose
+          vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+          On input, the columns of A should be permuted so that the
+          etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+          User-supplied work space and space for the output data structures.
+          Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the 
+          permutation matrix Pc; perm_c[i] = j means column i of A is 
+          in position j in A*Pc.
+          When searching for diagonal, perm_c[*] is applied to the
+          row subscripts of A, so that diagonal threshold pivoting
+          can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+          Row permutation vector which defines the permutation matrix Pr,
+          perm_r[i] = j means row i of A is in position j in Pr*A.
+          If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+             will try to use the input perm_r, unless a certain threshold
+             criterion is violated. In that case, perm_r is overwritten by
+             a new permutation determined by partial pivoting or diagonal
+             threshold pivoting.
+          Otherwise, perm_r is output argument;</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = SLU_NC, 
+          Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+          = 0: successful exit
+          < 0: if info = -i, the i-th argument had an illegal value
+          > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                and division by zero will occur if it is used to solve a
+                system of equations.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol. If lwork = -1, it is
+                the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays: 
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   xprune[0:n-1]: xprune[*] points to locations in subscript 
+	vector lsub[*]. For column i, xprune[i] denotes the point where 
+	structural pruning begins. I.e. only xlsub[i],..,xprune[i]-1 need 
+	to be traversed for symbolic factorization.</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been 
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 3 of them: marker/marker1 are used for panel dfs, 
+	      see <a class="el" href="cpanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">cpanel_dfs.c</a>; marker2 is used for inner-factorization,
+            see <a class="el" href="ccolumn__dfs_8c.html" title="Performs a symbolic factorization.">ccolumn_dfs.c</a>.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+      Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs) 
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the 
+	last column of a supernode.
+      The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a 
+	supernodal representative r, repfnz[r] is the location of the first 
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below 
+      the panel diagonal. These are filled in during <a class="el" href="cpanel__dfs_8c.html#052edfd06c5aeab7a37b5fa558a06602">cpanel_dfs()</a>, and are
+      used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+	    	   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__cdefs_8h.html" title="Header file for real operations.">slu_cdefs.h</a>.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cgstrs_8c.html b/DOC/html/cgstrs_8c.html
new file mode 100644
index 0000000..f61feba
--- /dev/null
+++ b/DOC/html/cgstrs_8c.html
@@ -0,0 +1,332 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cgstrs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cgstrs.c File Reference</h1>Solves a system using LU factorization. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgstrs_8c.html#34580dfcbd886fe93845353ac7dbeaa1">cusolve</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#34580dfcbd886fe93845353ac7dbeaa1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgstrs_8c.html#39d81cbea11f613524e674a8c2e18c5f">clsolve</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#39d81cbea11f613524e674a8c2e18c5f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgstrs_8c.html#09be65495be35085027bc26454dc3e74">cmatvec</a> (int, int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#09be65495be35085027bc26454dc3e74"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgstrs_8c.html#19517b9d29e4faf9ae777ca6fb9d415b">cgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, int *perm_c, int *perm_r, <a class="el" href="structSuperMatri [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgstrs_8c.html#e8df96516a8a07b44c8e82c6ae734ab6">cprint_soln</a> (int n, int nrhs, <a class="el" href="structcomplex.html">complex</a> *soln)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="19517b9d29e4faf9ae777ca6fb9d415b"></a><!-- doxytag: member="cgstrs.c::cgstrs" ref="19517b9d29e4faf9ae777ca6fb9d415b" args="(trans_t trans, SuperMatrix *L, SuperMatrix *U, int *perm_c, int *perm_r, SuperMatrix *B, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgstrs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> CGSTRS solves a system of linear equations A*X=B or A'*X=B
+ with A sparse and B dense, using the LU factorization computed by
+ CGSTRF.</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre> L       (input) SuperMatrix*
+         The factor L from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf()</a>. Use compressed row subscripts storage for supernodes,
+         i.e., L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (input) SuperMatrix*
+         The factor U from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre> perm_c  (input) int*, dimension (L->ncol)
+	   Column permutation vector, which defines the 
+         permutation matrix Pc; perm_c[i] = j means column i of A is 
+         in position j in A*Pc.</pre><p>
+<pre> perm_r  (input) int*, dimension (L->nrow)
+         Row permutation vector, which defines the permutation matrix Pr; 
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+ 	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="39d81cbea11f613524e674a8c2e18c5f"></a><!-- doxytag: member="cgstrs.c::clsolve" ref="39d81cbea11f613524e674a8c2e18c5f" args="(int, int, complex *, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="09be65495be35085027bc26454dc3e74"></a><!-- doxytag: member="cgstrs.c::cmatvec" ref="09be65495be35085027bc26454dc3e74" args="(int, int, int, complex *, complex *, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cmatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="e8df96516a8a07b44c8e82c6ae734ab6"></a><!-- doxytag: member="cgstrs.c::cprint_soln" ref="e8df96516a8a07b44c8e82c6ae734ab6" args="(int n, int nrhs, complex *soln)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cprint_soln           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>soln</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="34580dfcbd886fe93845353ac7dbeaa1"></a><!-- doxytag: member="cgstrs.c::cusolve" ref="34580dfcbd886fe93845353ac7dbeaa1" args="(int, int, complex *, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cusolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/citersol1_8c.html b/DOC/html/citersol1_8c.html
new file mode 100644
index 0000000..95ea65f
--- /dev/null
+++ b/DOC/html/citersol1_8c.html
@@ -0,0 +1,367 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/citersol1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/citersol1.c File Reference</h1>Example #2 showing how to use ILU to precondition GMRES. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#455d0df27a76044ba598ec4dccd0abfa">cpsolve</a> (int n, <a class="el" href="structcomplex.html">complex</a> x[], <a class="el" href="structcomplex.html">complex</a> y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#d48f5fcdc4961220795817c195e2a411">cmatvec_mult</a> (<a class="el" href="structcomplex.html">complex</a> alpha, <a class="el" href="structcomplex.html">complex</a> x[], <a class="el" href="structcomplex.html">complex</a> beta, <a class="el" href="structcomplex.html">complex</a> y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">GLOBAL_EQUED</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#4ff9f80047e0b810344d85feb96941ef">GLOBAL_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#3e8f028a8a340f260f7ac67973072999">GLOBAL_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">GLOBAL_A_ORIG</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.2) --
+ Lawrence Berkeley National Laboratory
+ November, 2010
+ August, 2011</pre><p>
+<pre> This example shows that ILU is computed from the equilibrated matrix,
+ but the preconditioned GMRES is applied to the original system.
+ The driver routine CGSISX is called twice to perform factorization
+ and apply preconditioner separately.</pre><p>
+<pre> Note that CGSISX performs the following factorization:
+     Pr*Dr*A*Dc*Pc^T ~= LU
+ with Pr being obtained from MC64 statically then partial pivoting
+ dybamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><p>
+<pre> We need to save a copy of the original matrix A, then solve
+ the original system, A*x = B, using FGMRES.
+ Each GMRES step requires requires 2 procedures:
+   1) Apply preconditioner M^{-1} = Dc*Pc^T*U^{-1}*L^{-1}*Pr*Dr
+   2) Matrix-vector multiplication: w = A*v</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="d48f5fcdc4961220795817c195e2a411"></a><!-- doxytag: member="citersol1.c::cmatvec_mult" ref="d48f5fcdc4961220795817c195e2a411" args="(complex alpha, complex x[], complex beta, complex y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cmatvec_mult           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="455d0df27a76044ba598ec4dccd0abfa"></a><!-- doxytag: member="citersol1.c::cpsolve" ref="455d0df27a76044ba598ec4dccd0abfa" args="(int n, complex x[], complex y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cpsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="citersol1.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="d42e5c3013507184841cdfee652a0c18"></a><!-- doxytag: member="citersol1.c::GLOBAL_A" ref="d42e5c3013507184841cdfee652a0c18" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* <a class="el" href="zitersol1_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f1beb2a8fb47df4eb505addfef02814c"></a><!-- doxytag: member="citersol1.c::GLOBAL_A_ORIG" ref="f1beb2a8fb47df4eb505addfef02814c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">GLOBAL_A_ORIG</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3e8f028a8a340f260f7ac67973072999"></a><!-- doxytag: member="citersol1.c::GLOBAL_C" ref="3e8f028a8a340f260f7ac67973072999" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float * <a class="el" href="zitersol1_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="869338b25a186a486edd0cf1850a7fbb"></a><!-- doxytag: member="citersol1.c::GLOBAL_EQUED" ref="869338b25a186a486edd0cf1850a7fbb" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* <a class="el" href="zitersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">GLOBAL_EQUED</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0f5cf27b325ef2874c953290f74c9d0a"></a><!-- doxytag: member="citersol1.c::GLOBAL_L" ref="0f5cf27b325ef2874c953290f74c9d0a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="19718c440adb41fbebcb4bafedbf932c"></a><!-- doxytag: member="citersol1.c::GLOBAL_MEM_USAGE" ref="19718c440adb41fbebcb4bafedbf932c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structmem__usage__t.html">mem_usage_t</a>* <a class="el" href="zitersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="64b516645b16ef03c6fd0d692e6eb277"></a><!-- doxytag: member="citersol1.c::GLOBAL_OPTIONS" ref="64b516645b16ef03c6fd0d692e6eb277" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a>* <a class="el" href="zitersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fbcb1904a71d92b04c1aef1cede6c4b1"></a><!-- doxytag: member="citersol1.c::GLOBAL_PERM_C" ref="fbcb1904a71d92b04c1aef1cede6c4b1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="zitersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5a42ee721355f1c852f770661834be93"></a><!-- doxytag: member="citersol1.c::GLOBAL_PERM_R" ref="5a42ee721355f1c852f770661834be93" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int * <a class="el" href="zitersol1_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4ff9f80047e0b810344d85feb96941ef"></a><!-- doxytag: member="citersol1.c::GLOBAL_R" ref="4ff9f80047e0b810344d85feb96941ef" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float* <a class="el" href="zitersol1_8c.html#8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="96a062252c26544370e8feae987c6d16"></a><!-- doxytag: member="citersol1.c::GLOBAL_STAT" ref="96a062252c26544370e8feae987c6d16" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* <a class="el" href="zitersol1_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="000ad5c2198e4309802b4478ed08a98c"></a><!-- doxytag: member="citersol1.c::GLOBAL_U" ref="000ad5c2198e4309802b4478ed08a98c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/citersol_8c.html b/DOC/html/citersol_8c.html
new file mode 100644
index 0000000..19f6a80
--- /dev/null
+++ b/DOC/html/citersol_8c.html
@@ -0,0 +1,333 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/citersol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/citersol.c File Reference</h1>Example #1 showing how to use ILU to precondition GMRES. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#455d0df27a76044ba598ec4dccd0abfa">cpsolve</a> (int n, <a class="el" href="structcomplex.html">complex</a> x[], <a class="el" href="structcomplex.html">complex</a> y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#d48f5fcdc4961220795817c195e2a411">cmatvec_mult</a> (<a class="el" href="structcomplex.html">complex</a> alpha, <a class="el" href="structcomplex.html">complex</a> x[], <a class="el" href="structcomplex.html">complex</a> beta, <a class="el" href="structcomplex.html">complex</a> y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#4ff9f80047e0b810344d85feb96941ef">GLOBAL_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#3e8f028a8a340f260f7ac67973072999">GLOBAL_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.2) --
+ Lawrence Berkeley National Laboratory
+ November, 2010
+ August, 2011</pre><p>
+<pre> This example shows that ILU is computed from the equilibrated matrix,
+ and the preconditioned GMRES is applied to the equilibrated system.
+ The driver routine CGSISX is called twice to perform factorization
+ and apply preconditioner separately.</pre><p>
+<pre> Note that CGSISX performs the following factorization:
+     Pr*Dr*A*Dc*Pc^T ~= LU
+ with Pr being obtained from MC64 statically then partial pivoting
+ dybamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><p>
+<pre> We can solve the transformed system, A1*y = Dr*B, using FGMRES.
+ B is first overwritten as Dr*B.
+ Then GMRES step requires requires 2 procedures:
+   1) Apply preconditioner M^{-1} = Pc^T*U^{-1}*L^{-1}*Pr
+   2) Matrix-vector multiplication: w = A1*v</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="d48f5fcdc4961220795817c195e2a411"></a><!-- doxytag: member="citersol.c::cmatvec_mult" ref="d48f5fcdc4961220795817c195e2a411" args="(complex alpha, complex x[], complex beta, complex y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cmatvec_mult           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="455d0df27a76044ba598ec4dccd0abfa"></a><!-- doxytag: member="citersol.c::cpsolve" ref="455d0df27a76044ba598ec4dccd0abfa" args="(int n, complex x[], complex y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cpsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="citersol.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="d42e5c3013507184841cdfee652a0c18"></a><!-- doxytag: member="citersol.c::GLOBAL_A" ref="d42e5c3013507184841cdfee652a0c18" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* <a class="el" href="zitersol1_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3e8f028a8a340f260f7ac67973072999"></a><!-- doxytag: member="citersol.c::GLOBAL_C" ref="3e8f028a8a340f260f7ac67973072999" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float * <a class="el" href="zitersol1_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0f5cf27b325ef2874c953290f74c9d0a"></a><!-- doxytag: member="citersol.c::GLOBAL_L" ref="0f5cf27b325ef2874c953290f74c9d0a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="19718c440adb41fbebcb4bafedbf932c"></a><!-- doxytag: member="citersol.c::GLOBAL_MEM_USAGE" ref="19718c440adb41fbebcb4bafedbf932c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structmem__usage__t.html">mem_usage_t</a>* <a class="el" href="zitersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="64b516645b16ef03c6fd0d692e6eb277"></a><!-- doxytag: member="citersol.c::GLOBAL_OPTIONS" ref="64b516645b16ef03c6fd0d692e6eb277" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a>* <a class="el" href="zitersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fbcb1904a71d92b04c1aef1cede6c4b1"></a><!-- doxytag: member="citersol.c::GLOBAL_PERM_C" ref="fbcb1904a71d92b04c1aef1cede6c4b1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="zitersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5a42ee721355f1c852f770661834be93"></a><!-- doxytag: member="citersol.c::GLOBAL_PERM_R" ref="5a42ee721355f1c852f770661834be93" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int * <a class="el" href="zitersol1_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4ff9f80047e0b810344d85feb96941ef"></a><!-- doxytag: member="citersol.c::GLOBAL_R" ref="4ff9f80047e0b810344d85feb96941ef" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float* <a class="el" href="zitersol1_8c.html#8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="96a062252c26544370e8feae987c6d16"></a><!-- doxytag: member="citersol.c::GLOBAL_STAT" ref="96a062252c26544370e8feae987c6d16" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* <a class="el" href="zitersol1_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="000ad5c2198e4309802b4478ed08a98c"></a><!-- doxytag: member="citersol.c::GLOBAL_U" ref="000ad5c2198e4309802b4478ed08a98c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/clacon_8c.html b/DOC/html/clacon_8c.html
new file mode 100644
index 0000000..4c7b287
--- /dev/null
+++ b/DOC/html/clacon_8c.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/clacon.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/clacon.c File Reference</h1>Estimates the 1-norm. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<code>#include "<a class="el" href="slu__scomplex_8h-source.html">slu_scomplex.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="clacon_8c.html#f4536a78f0ee7097ef59278c8cf14295">clacon_</a> (int *n, <a class="el" href="structcomplex.html">complex</a> *v, <a class="el" href="structcomplex.html">complex</a> *x, float *est, int *kase)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="f4536a78f0ee7097ef59278c8cf14295"></a><!-- doxytag: member="clacon.c::clacon_" ref="f4536a78f0ee7097ef59278c8cf14295" args="(int *n, complex *v, complex *x, float *est, int *kase)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int clacon_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>v</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>est</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>kase</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   CLACON estimates the 1-norm of a square matrix A.   
+   Reverse communication is used for evaluating matrix-vector products.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   N      (input) INT
+          The order of the matrix.  N >= 1.</pre><p>
+<pre>   V      (workspace) COMPLEX PRECISION array, dimension (N)   
+          On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
+          (W is not returned).</pre><p>
+<pre>   X      (input/output) COMPLEX PRECISION array, dimension (N)   
+          On an intermediate return, X should be overwritten by   
+                A * X,   if KASE=1,   
+                A' * X,  if KASE=2,
+          where A' is the conjugate transpose of A,
+         and CLACON must be re-called with all the other parameters   
+          unchanged.</pre><p>
+<pre>   EST    (output) FLOAT PRECISION   
+          An estimate (a lower bound) for norm(A).</pre><p>
+<pre>   KASE   (input/output) INT
+          On the initial call to CLACON, KASE should be 0.   
+          On an intermediate return, KASE will be 1 or 2, indicating   
+          whether X should be overwritten by A * X  or A' * X.   
+          On the final return from CLACON, KASE will again be 0.</pre><p>
+<pre>   Further Details   
+   ======= =======</pre><p>
+<pre>   Contributed by Nick Higham, University of Manchester.   
+   Originally named CONEST, dated March 16, 1988.</pre><p>
+<pre>   Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
+   a real or <a class="el" href="structcomplex.html">complex</a> matrix, with applications to condition estimation", 
+   ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
+   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/clangs_8c.html b/DOC/html/clangs_8c.html
new file mode 100644
index 0000000..d20edec
--- /dev/null
+++ b/DOC/html/clangs_8c.html
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/clangs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/clangs.c File Reference</h1>Returns the value of the one norm. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="clangs_8c.html#3e9baabe44cf6d5779cae55b80bc5763">clangs</a> (char *norm, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Modified from lapack routine CLANGE 
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="3e9baabe44cf6d5779cae55b80bc5763"></a><!-- doxytag: member="clangs.c::clangs" ref="3e9baabe44cf6d5779cae55b80bc5763" args="(char *norm, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float clangs           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>norm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   CLANGS returns the value of the one norm, or the Frobenius norm, or 
+   the infinity norm, or the element of largest absolute value of a 
+   real matrix A.</pre><p>
+<pre>   Description   
+   ===========</pre><p>
+<pre>   CLANGE returns the value</pre><p>
+<pre>      CLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm'   
+               (   
+               ( norm1(A),         NORM = '1', 'O' or 'o'   
+               (   
+               ( normI(A),         NORM = 'I' or 'i'   
+               (   
+               ( normF(A),         NORM = 'F', 'f', 'E' or 'e'</pre><p>
+<pre>   where  norm1  denotes the  one norm of a matrix (maximum column sum), 
+   normI  denotes the  infinity norm  of a matrix  (maximum row sum) and 
+   normF  denotes the  Frobenius norm of a matrix (square root of sum of 
+   squares).  Note that  max(abs(A(i,j)))  is not a  matrix norm.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   NORM    (input) CHARACTER*1   
+           Specifies the value to be returned in CLANGE as described above.   
+   A       (input) SuperMatrix*
+           The M by N sparse matrix A.</pre><p>
+<pre>  =====================================================================
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/claqgs_8c.html b/DOC/html/claqgs_8c.html
new file mode 100644
index 0000000..4fbcf2f
--- /dev/null
+++ b/DOC/html/claqgs_8c.html
@@ -0,0 +1,160 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/claqgs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/claqgs.c File Reference</h1>Equlibrates a general sprase matrix. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="claqgs_8c.html#0656018abfc9fa2821827415f5d5ea57">THRESH</a>   (0.1)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="claqgs_8c.html#0cf5dcef08d22df154acf807beb43ea1">claqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, float *r, float *c, float rowcnd, float colcnd, float amax, char *equed)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Modified from LAPACK routine CLAQGE
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="0656018abfc9fa2821827415f5d5ea57"></a><!-- doxytag: member="claqgs.c::THRESH" ref="0656018abfc9fa2821827415f5d5ea57" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define THRESH   (0.1)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0cf5dcef08d22df154acf807beb43ea1"></a><!-- doxytag: member="claqgs.c::claqgs" ref="0cf5dcef08d22df154acf807beb43ea1" args="(SuperMatrix *A, float *r, float *c, float rowcnd, float colcnd, float amax, char *equed)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void claqgs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   CLAQGS equilibrates a general sparse M by N matrix A using the row and   
+   scaling factors in the vectors R and C.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input/output) SuperMatrix*
+           On exit, the equilibrated matrix.  See EQUED for the form of 
+           the equilibrated matrix. The type of A can be:
+	    Stype = NC; Dtype = SLU_C; Mtype = GE.</pre><p>
+<pre>   R       (input) float*, dimension (A->nrow)
+           The row scale factors for A.</pre><p>
+<pre>   C       (input) float*, dimension (A->ncol)
+           The column scale factors for A.</pre><p>
+<pre>   ROWCND  (input) float
+           Ratio of the smallest R(i) to the largest R(i).</pre><p>
+<pre>   COLCND  (input) float
+           Ratio of the smallest C(i) to the largest C(i).</pre><p>
+<pre>   AMAX    (input) float
+           Absolute value of largest matrix entry.</pre><p>
+<pre>   EQUED   (output) char*
+           Specifies the form of equilibration that was done.   
+           = 'N':  No equilibration   
+           = 'R':  Row equilibration, i.e., A has been premultiplied by  
+                   diag(R).   
+           = 'C':  Column equilibration, i.e., A has been postmultiplied  
+                   by diag(C).   
+           = 'B':  Both row and column equilibration, i.e., A has been
+                   replaced by diag(R) * A * diag(C).</pre><p>
+<pre>   Internal Parameters   
+   ===================</pre><p>
+<pre>   THRESH is a threshold value used to decide if row or column scaling   
+   should be done based on the ratio of the row or column scaling   
+   factors.  If ROWCND < THRESH, row scaling is done, and if   
+   COLCND < THRESH, column scaling is done.</pre><p>
+<pre>   LARGE and SMALL are threshold values used to decide if row scaling   
+   should be done based on the absolute size of the largest matrix   
+   element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cldperm_8c.html b/DOC/html/cldperm_8c.html
new file mode 100644
index 0000000..a1222ba
--- /dev/null
+++ b/DOC/html/cldperm_8c.html
@@ -0,0 +1,283 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cldperm.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cldperm.c File Reference</h1>Finds a row permutation so that the matrix has large entries on the diagonal. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="cldperm_8c.html#1e6fb0c8dd36aef071ef165136ece781">mc64id_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="cldperm_8c.html#1bf33c16a135cdc671242aed1705e1cd">mc64ad_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *, <a class="el" href="slu__zdefs_8h.html#b6 [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cldperm_8c.html#0ea12c5d13e30e24ad3e48e4ab521f4f">cldperm</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> job, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> n, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> nnz, <a class="el" href="slu__zdefs [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ea12c5d13e30e24ad3e48e4ab521f4f"></a><!-- doxytag: member="cldperm.c::cldperm" ref="0ea12c5d13e30e24ad3e48e4ab521f4f" args="(int_t job, int_t n, int_t nnz, int_t colptr[], int_t adjncy[], complex nzval[], int_t *perm, float u[], float v[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cldperm           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>job</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>colptr</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>adjncy</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>nzval</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>perm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>u</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>v</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   CLDPERM finds a row permutation so that the matrix has large
+   entries on the diagonal.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> job    (input) int
+        Control the action. Possible values for JOB are:
+        = 1 : Compute a row permutation of the matrix so that the
+              permuted matrix has as many entries on its diagonal as
+              possible. The values on the diagonal are of arbitrary size.
+              HSL subroutine MC21A/AD is used for this.
+        = 2 : Compute a row permutation of the matrix so that the smallest 
+              value on the diagonal of the permuted matrix is maximized.
+        = 3 : Compute a row permutation of the matrix so that the smallest
+              value on the diagonal of the permuted matrix is maximized.
+              The algorithm differs from the one used for JOB = 2 and may
+              have quite a different performance.
+        = 4 : Compute a row permutation of the matrix so that the sum
+              of the diagonal entries of the permuted matrix is maximized.
+        = 5 : Compute a row permutation of the matrix so that the product
+              of the diagonal entries of the permuted matrix is maximized
+              and vectors to scale the matrix so that the nonzero diagonal 
+              entries of the permuted matrix are one in absolute value and 
+              all the off-diagonal entries are less than or equal to one in 
+              absolute value.
+        Restriction: 1 <= JOB <= 5.</pre><p>
+<pre> n      (input) int
+        The order of the matrix.</pre><p>
+<pre> nnz    (input) int
+        The number of nonzeros in the matrix.</pre><p>
+<pre> adjncy (input) int*, of size nnz
+        The adjacency structure of the matrix, which contains the row
+        indices of the nonzeros.</pre><p>
+<pre> colptr (input) int*, of size n+1
+        The pointers to the beginning of each column in ADJNCY.</pre><p>
+<pre> nzval  (input) complex*, of size nnz
+        The nonzero values of the matrix. nzval[k] is the value of
+        the entry corresponding to adjncy[k].
+        It is not used if job = 1.</pre><p>
+<pre> perm   (output) int*, of size n
+        The permutation vector. perm[i] = j means row i in the
+        original matrix is in row j of the permuted matrix.</pre><p>
+<pre> u      (output) double*, of size n
+        If job = 5, the natural logarithms of the row scaling factors.</pre><p>
+<pre> v      (output) double*, of size n
+        If job = 5, the natural logarithms of the column scaling factors. 
+        The scaled matrix B has entries b_ij = a_ij * exp(u_i + v_j).
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="1bf33c16a135cdc671242aed1705e1cd"></a><!-- doxytag: member="cldperm.c::mc64ad_" ref="1bf33c16a135cdc671242aed1705e1cd" args="(int_t *, int_t *, int_t *, int_t[], int_t[], double[], int_t *, int_t[], int_t *, int_t[], int_t *, double[], int_t[], int_t[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64ad_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1e6fb0c8dd36aef071ef165136ece781"></a><!-- doxytag: member="cldperm.c::mc64id_" ref="1e6fb0c8dd36aef071ef165136ece781" args="(int_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64id_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/clinsol1_8c.html b/DOC/html/clinsol1_8c.html
new file mode 100644
index 0000000..9232de1
--- /dev/null
+++ b/DOC/html/clinsol1_8c.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/clinsol1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/clinsol1.c File Reference</h1><code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="clinsol1.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/clinsol_8c.html b/DOC/html/clinsol_8c.html
new file mode 100644
index 0000000..eec3747
--- /dev/null
+++ b/DOC/html/clinsol_8c.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/clinsol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/clinsol.c File Reference</h1><code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsol_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="clinsol.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/clinsolx1_8c.html b/DOC/html/clinsolx1_8c.html
new file mode 100644
index 0000000..56ec189
--- /dev/null
+++ b/DOC/html/clinsolx1_8c.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/clinsolx1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/clinsolx1.c File Reference</h1><code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsolx1_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsolx1_8c.html#26a449fe0e6f4599404be8f78ed31f20">parse_command_line</a> (int argc, char *argv[], int *lwork, float *u, <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> *trans)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="clinsolx1.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="26a449fe0e6f4599404be8f78ed31f20"></a><!-- doxytag: member="clinsolx1.c::parse_command_line" ref="26a449fe0e6f4599404be8f78ed31f20" args="(int argc, char *argv[], int *lwork, float *u, yes_no_t *equil, trans_t *trans)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void parse_command_line           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> * </td>
+          <td class="paramname"> <em>equil</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+          <td class="paramname"> <em>trans</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/clinsolx2_8c.html b/DOC/html/clinsolx2_8c.html
new file mode 100644
index 0000000..c4f468a
--- /dev/null
+++ b/DOC/html/clinsolx2_8c.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/clinsolx2.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/clinsolx2.c File Reference</h1><code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsolx2_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsolx2_8c.html#693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> *trans)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="clinsolx2.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="693ba86aac49435e82cf3a57a4412744"></a><!-- doxytag: member="clinsolx2.c::parse_command_line" ref="693ba86aac49435e82cf3a57a4412744" args="(int argc, char *argv[], int *lwork, double *u, yes_no_t *equil, trans_t *trans)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void parse_command_line           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> * </td>
+          <td class="paramname"> <em>equil</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+          <td class="paramname"> <em>trans</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/clinsolx_8c.html b/DOC/html/clinsolx_8c.html
new file mode 100644
index 0000000..6f7d9c8
--- /dev/null
+++ b/DOC/html/clinsolx_8c.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/clinsolx.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/clinsolx.c File Reference</h1><code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsolx_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsolx_8c.html#26a449fe0e6f4599404be8f78ed31f20">parse_command_line</a> (int argc, char *argv[], int *lwork, float *u, <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> *trans)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="clinsolx.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="26a449fe0e6f4599404be8f78ed31f20"></a><!-- doxytag: member="clinsolx.c::parse_command_line" ref="26a449fe0e6f4599404be8f78ed31f20" args="(int argc, char *argv[], int *lwork, float *u, yes_no_t *equil, trans_t *trans)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void parse_command_line           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> * </td>
+          <td class="paramname"> <em>equil</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+          <td class="paramname"> <em>trans</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cmemory_8c.html b/DOC/html/cmemory_8c.html
new file mode 100644
index 0000000..4e2153a
--- /dev/null
+++ b/DOC/html/cmemory_8c.html
@@ -0,0 +1,976 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cmemory.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cmemory.c File Reference</h1>Memory details. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#1ef4d4db4d5e1fe0719416163e0e51ae">StackFull</a>(x)   ( x + Glu->stack.used >= Glu->stack.size )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#c11b1c3847a3d397e9675de40782134d">NotDoubleAlign</a>(addr)   ( (long int)addr & 7 )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#c8204d321846eb4b23d563eac7e5bfa7">DoubleAlign</a>(addr)   ( ((long int)addr + 7) & ~7L )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#70ca807c578a0c495f7ce5edb0215e2b">TempSpace</a>(m, w)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#7b2a35bfd2e6c9d03e2a6ccdba9fa847">Reduce</a>(alpha)   ((alpha + 1) / 2)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#3996260179c0a72397776571b4b19164">cexpand</a> (int *prev_len,<a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> type,int len_to_copy,int keep_prev,<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Expand the existing storage to accommodate more fill-ins.  <a href="#3996260179c0a72397776571b4b19164"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#4b8e519a51391274f40066ea72e82583">cLUWorkInit</a> (int m, int n, int panel_size, int **iworkptr, <a class="el" href="structcomplex.html">complex</a> **dworkptr, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate known working storage. Returns 0 if success, otherwise returns the number of bytes allocated so far when failure occurred.  <a href="#4b8e519a51391274f40066ea72e82583"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#e8af819e1072d711fd22ce91c1e928fc">copy_mem_complex</a> (int, void *, void *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#98ec5775d491718006688922903496ae">cStackCompress</a> (<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Compress the work[] array to remove fragmentation.  <a href="#98ec5775d491718006688922903496ae"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#c62dd03d1789ef6363db31ad2491ada9">cSetupSpace</a> (void *work, int lwork, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Setup the memory model to be used for factorization.  <a href="#c62dd03d1789ef6363db31ad2491ada9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#fdfe5f4689b0aaedf46d034809711754">cuser_malloc</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#a4c66bfc4bbf0fed0e2babbf34504bf5">cuser_free</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#b59eea34474da95fb3dc125400a1287e">copy_mem_int</a> (int, void *, void *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#4c226087c09a94ff40b92b14fa46fc53">user_bcopy</a> (char *, char *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#34d8cd030775d267947b68a4dacfbabb">cQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *mem_usage)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#af50d31c33a4cc3e770b617202ea73e3">ilu_cQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *mem_usage)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#6b958c6272421d091bdd9a2e7fdbafcd">cLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a> fact, void *work, int lwork, int m, int n, int annz, int panel_size, float fill_ratio, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html" [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for the data structures common to all factor routines.  <a href="#6b958c6272421d091bdd9a2e7fdbafcd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#ff3d90f7f22f882faf8ba0dcf68b0f9c">cSetRWork</a> (int m, int panel_size, <a class="el" href="structcomplex.html">complex</a> *dworkptr, <a class="el" href="structcomplex.html">complex</a> **dense, <a class="el" href="structcomplex.html">complex</a> **tempv)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays.  <a href="#ff3d90f7f22f882faf8ba0dcf68b0f9c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#d4e33e7a64f75e058e9a8ebd479fa004">cLUWorkFree</a> (int *iwork, <a class="el" href="structcomplex.html">complex</a> *dwork, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines.  <a href="#d4e33e7a64f75e058e9a8ebd479fa004"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#8f2864f34ca668aeccb8298052a5c449">cLUMemXpand</a> (int jcol, int next, <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> mem_type, int *maxlen, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization.  <a href="#8f2864f34ca668aeccb8298052a5c449"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#d952b424acd036108ca2f5a0bd9d3739">callocateA</a> (int n, int nnz, <a class="el" href="structcomplex.html">complex</a> **a, int **asub, int **xa)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A.  <a href="#d952b424acd036108ca2f5a0bd9d3739"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structcomplex.html">complex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#0af029f557e5014a2d6797436b925f53">complexMalloc</a> (int n)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structcomplex.html">complex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#1e625ecaeb259e2dd79667ffbfb816c0">complexCalloc</a> (int n)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#43ff5010762c14ea7591d23cf48403a3">cmemory_usage</a> (const int nzlmax, const int nzumax, const int nzlumax, const int n)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="c8204d321846eb4b23d563eac7e5bfa7"></a><!-- doxytag: member="cmemory.c::DoubleAlign" ref="c8204d321846eb4b23d563eac7e5bfa7" args="(addr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DoubleAlign          </td>
+          <td>(</td>
+          <td class="paramtype">addr </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( ((long int)addr + 7) & ~7L )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c11b1c3847a3d397e9675de40782134d"></a><!-- doxytag: member="cmemory.c::NotDoubleAlign" ref="c11b1c3847a3d397e9675de40782134d" args="(addr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NotDoubleAlign          </td>
+          <td>(</td>
+          <td class="paramtype">addr </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( (long int)addr & 7 )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7b2a35bfd2e6c9d03e2a6ccdba9fa847"></a><!-- doxytag: member="cmemory.c::Reduce" ref="7b2a35bfd2e6c9d03e2a6ccdba9fa847" args="(alpha)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define Reduce          </td>
+          <td>(</td>
+          <td class="paramtype">alpha </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((alpha + 1) / 2)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1ef4d4db4d5e1fe0719416163e0e51ae"></a><!-- doxytag: member="cmemory.c::StackFull" ref="1ef4d4db4d5e1fe0719416163e0e51ae" args="(x)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define StackFull          </td>
+          <td>(</td>
+          <td class="paramtype">x </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( x + Glu->stack.used >= Glu->stack.size )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="70ca807c578a0c495f7ce5edb0215e2b"></a><!-- doxytag: member="cmemory.c::TempSpace" ref="70ca807c578a0c495f7ce5edb0215e2b" args="(m, w)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TempSpace          </td>
+          <td>(</td>
+          <td class="paramtype">m,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">w </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">( (2*w + 4 + <a class="code" href="slu__util_8h.html#9b7b2a5116ee487722b0967317ab6360">NO_MARKER</a>) * m * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) + \
+                              (w + 1) * m * <span class="keyword">sizeof</span>(<a class="code" href="structcomplex.html">complex</a>) )
+</pre></div>
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="d952b424acd036108ca2f5a0bd9d3739"></a><!-- doxytag: member="cmemory.c::callocateA" ref="d952b424acd036108ca2f5a0bd9d3739" args="(int n, int nnz, complex **a, int **asub, int **xa)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void callocateA           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>xa</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3996260179c0a72397776571b4b19164"></a><!-- doxytag: member="cmemory.c::cexpand" ref="3996260179c0a72397776571b4b19164" args="(int *prev_len,MemType type,int len_to_copy,int keep_prev,GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void * cexpand           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>prev_len</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> </td>
+          <td class="paramname"> <em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>len_to_copy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>keep_prev</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6b958c6272421d091bdd9a2e7fdbafcd"></a><!-- doxytag: member="cmemory.c::cLUMemInit" ref="6b958c6272421d091bdd9a2e7fdbafcd" args="(fact_t fact, void *work, int lwork, int m, int n, int annz, int panel_size, float fill_ratio, SuperMatrix *L, SuperMatrix *U, GlobalLU_t *Glu, int **iwork, complex **dwork)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cLUMemInit           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a> </td>
+          <td class="paramname"> <em>fact</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>annz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>fill_ratio</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>iwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname"> <em>dwork</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Memory-related.<p>
+<pre>
+ For those unpredictable size, estimate as fill_ratio * nnz(A).
+ Return value:
+     If lwork = -1, return the estimated amount of space required, plus n;
+     otherwise, return the amount of space actually allocated when
+     memory allocation failure occurred.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="8f2864f34ca668aeccb8298052a5c449"></a><!-- doxytag: member="cmemory.c::cLUMemXpand" ref="8f2864f34ca668aeccb8298052a5c449" args="(int jcol, int next, MemType mem_type, int *maxlen, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cLUMemXpand           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>next</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> </td>
+          <td class="paramname"> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>maxlen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="d4e33e7a64f75e058e9a8ebd479fa004"></a><!-- doxytag: member="cmemory.c::cLUWorkFree" ref="d4e33e7a64f75e058e9a8ebd479fa004" args="(int *iwork, complex *dwork, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cLUWorkFree           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>dwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4b8e519a51391274f40066ea72e82583"></a><!-- doxytag: member="cmemory.c::cLUWorkInit" ref="4b8e519a51391274f40066ea72e82583" args="(int m, int n, int panel_size, int **iworkptr, complex **dworkptr, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cLUWorkInit           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>iworkptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname"> <em>dworkptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="43ff5010762c14ea7591d23cf48403a3"></a><!-- doxytag: member="cmemory.c::cmemory_usage" ref="43ff5010762c14ea7591d23cf48403a3" args="(const int nzlmax, const int nzumax, const int nzlumax, const int n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cmemory_usage           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nzlmax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nzumax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nzlumax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1e625ecaeb259e2dd79667ffbfb816c0"></a><!-- doxytag: member="cmemory.c::complexCalloc" ref="1e625ecaeb259e2dd79667ffbfb816c0" args="(int n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcomplex.html">complex</a>* complexCalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0af029f557e5014a2d6797436b925f53"></a><!-- doxytag: member="cmemory.c::complexMalloc" ref="0af029f557e5014a2d6797436b925f53" args="(int n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcomplex.html">complex</a>* complexMalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e8af819e1072d711fd22ce91c1e928fc"></a><!-- doxytag: member="cmemory.c::copy_mem_complex" ref="e8af819e1072d711fd22ce91c1e928fc" args="(int, void *, void *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void copy_mem_complex           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>howmany</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>old</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>new</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b59eea34474da95fb3dc125400a1287e"></a><!-- doxytag: member="cmemory.c::copy_mem_int" ref="b59eea34474da95fb3dc125400a1287e" args="(int, void *, void *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void copy_mem_int           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="34d8cd030775d267947b68a4dacfbabb"></a><!-- doxytag: member="cmemory.c::cQuerySpace" ref="34d8cd030775d267947b68a4dacfbabb" args="(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="ff3d90f7f22f882faf8ba0dcf68b0f9c"></a><!-- doxytag: member="cmemory.c::cSetRWork" ref="ff3d90f7f22f882faf8ba0dcf68b0f9c" args="(int m, int panel_size, complex *dworkptr, complex **dense, complex **tempv)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cSetRWork           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>dworkptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname"> <em>tempv</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c62dd03d1789ef6363db31ad2491ada9"></a><!-- doxytag: member="cmemory.c::cSetupSpace" ref="c62dd03d1789ef6363db31ad2491ada9" args="(void *work, int lwork, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cSetupSpace           </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+lwork = 0: use system malloc; lwork > 0: use user-supplied work[] space. 
+</div>
+</div><p>
+<a class="anchor" name="98ec5775d491718006688922903496ae"></a><!-- doxytag: member="cmemory.c::cStackCompress" ref="98ec5775d491718006688922903496ae" args="(GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cStackCompress           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a4c66bfc4bbf0fed0e2babbf34504bf5"></a><!-- doxytag: member="cmemory.c::cuser_free" ref="a4c66bfc4bbf0fed0e2babbf34504bf5" args="(int, int, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cuser_free           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>bytes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>which_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fdfe5f4689b0aaedf46d034809711754"></a><!-- doxytag: member="cmemory.c::cuser_malloc" ref="fdfe5f4689b0aaedf46d034809711754" args="(int, int, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void * cuser_malloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>bytes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>which_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="af50d31c33a4cc3e770b617202ea73e3"></a><!-- doxytag: member="cmemory.c::ilu_cQuerySpace" ref="af50d31c33a4cc3e770b617202ea73e3" args="(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_cQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="4c226087c09a94ff40b92b14fa46fc53"></a><!-- doxytag: member="cmemory.c::user_bcopy" ref="4c226087c09a94ff40b92b14fa46fc53" args="(char *, char *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void user_bcopy           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cmyblas2_8c.html b/DOC/html/cmyblas2_8c.html
new file mode 100644
index 0000000..9c38990
--- /dev/null
+++ b/DOC/html/cmyblas2_8c.html
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cmyblas2.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cmyblas2.c File Reference</h1>Level 2 Blas operations. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__scomplex_8h-source.html">slu_scomplex.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmyblas2_8c.html#2e70ad44c5da4a8f97a62eb718d3e72c">clsolve</a> (int ldm, int ncol, <a class="el" href="structcomplex.html">complex</a> *M, <a class="el" href="structcomplex.html">complex</a> *rhs)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#2e70ad44c5da4a8f97a62eb718d3e72c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmyblas2_8c.html#7eca4ad25e05a68037a682483f9786f1">cusolve</a> (int ldm, int ncol, <a class="el" href="structcomplex.html">complex</a> *M, <a class="el" href="structcomplex.html">complex</a> *rhs)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#7eca4ad25e05a68037a682483f9786f1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmyblas2_8c.html#70608abfb6247329a7d69f6ed5231ed9">cmatvec</a> (int ldm, int nrow, int ncol, <a class="el" href="structcomplex.html">complex</a> *M, <a class="el" href="structcomplex.html">complex</a> *vec, <a class="el" href="structcomplex.html">complex</a> *Mxvec)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#70608abfb6247329a7d69f6ed5231ed9"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> Purpose: Level 2 BLAS operations: solves and matvec, written in C. Note: This is only used when the system lacks an efficient BLAS library.  <hr><h2>Function Documentation</h2>
+<a class="anchor" name="2e70ad44c5da4a8f97a62eb718d3e72c"></a><!-- doxytag: member="cmyblas2.c::clsolve" ref="2e70ad44c5da4a8f97a62eb718d3e72c" args="(int ldm, int ncol, complex *M, complex *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="70608abfb6247329a7d69f6ed5231ed9"></a><!-- doxytag: member="cmyblas2.c::cmatvec" ref="70608abfb6247329a7d69f6ed5231ed9" args="(int ldm, int nrow, int ncol, complex *M, complex *vec, complex *Mxvec)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cmatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="7eca4ad25e05a68037a682483f9786f1"></a><!-- doxytag: member="cmyblas2.c::cusolve" ref="7eca4ad25e05a68037a682483f9786f1" args="(int ldm, int ncol, complex *M, complex *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cusolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/colamd_8c.html b/DOC/html/colamd_8c.html
new file mode 100644
index 0000000..2b8f399
--- /dev/null
+++ b/DOC/html/colamd_8c.html
@@ -0,0 +1,1681 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/colamd.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/colamd.c File Reference</h1>A sparse matrix column ordering algorithm. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="colamd_8h-source.html">colamd.h</a>"</code><br>
+<code>#include <limits.h></code><br>
+<code>#include <stdio.h></code><br>
+<code>#include <assert.h></code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#d17d551e31d1828c68acf40684849b7e">PUBLIC</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#5e151c615eda34903514212f05a5ccf8">PRIVATE</a>   static</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#fa99ec4acc4ecb2dc3c2d05da15d0e3f">MAX</a>(a, b)   (((a) > (b)) ? (a) : (b))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#3acffbd305ee72dcd4593c0d8af64a4f">MIN</a>(a, b)   (((a) < (b)) ? (a) : (b))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#f4201cc2809d450d2484680ee1b958ca">ONES_COMPLEMENT</a>(r)   (-(r)-1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>   (1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a93f0eb578d23995850d61f7d61c55c1">FALSE</a>   (0)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#2b7cf2a3641be7b89138615764d60ba3">EMPTY</a>   (-1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#d8beef706da0344be19d59438fcdab6d">ALIVE</a>   (0)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#3c8793c7acb4598d2ebcd8288f29ee69">DEAD</a>   (-1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#c0adce1e7d70351cef4752f3373709af">DEAD_PRINCIPAL</a>   (-1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#0f66923672bcc495333995f7d238945f">DEAD_NON_PRINCIPAL</a>   (-2)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#e200d2ac8149305712af7230f9ee24d5">ROW_IS_DEAD</a>(r)   ROW_IS_MARKED_DEAD (Row[r].shared2.mark)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#0d68b03acc587c11fe6dffbfede78c2d">ROW_IS_MARKED_DEAD</a>(row_mark)   (row_mark < ALIVE)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#bc775359cfa45ffaf6250522c521110d">ROW_IS_ALIVE</a>(r)   (Row [r].shared2.mark >= ALIVE)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a08664bd5b8133f28dbeedc9a030fc86">COL_IS_DEAD</a>(c)   (Col [c].start < ALIVE)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#50f9ca65904b13f345862cb46d08d84b">COL_IS_ALIVE</a>(c)   (Col [c].start >= ALIVE)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#003c0e2dae54bcb7c680333304dd4dcb">COL_IS_DEAD_PRINCIPAL</a>(c)   (Col [c].start == DEAD_PRINCIPAL)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#dde21248544152df48ab70b6da1b38b5">KILL_ROW</a>(r)   { Row [r].shared2.mark = DEAD ; }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#7882929a7898e09a3de9e7676ae1aa29">KILL_PRINCIPAL_COL</a>(c)   { Col [c].start = DEAD_PRINCIPAL ; }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#0458a358e752473d86e6f21a56b44a26">KILL_NON_PRINCIPAL_COL</a>(c)   { Col [c].start = DEAD_NON_PRINCIPAL ; }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#e1649fc947ca37a86917a08354f48d1a">PRINTF</a>   printf</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a5fad23b2a5eed790e6661e896a506b7">INDEX</a>(i)   (i)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#144524f0a43ebe1a97d576a76f6557a0">DEBUG0</a>(params)   ;</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#5083dbf79682be78336cc6b458c32ab4">DEBUG1</a>(params)   ;</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#65bd10ffc88aa9edca29d4f6ae0da2df">DEBUG2</a>(params)   ;</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#86ce320fe5d3f3088d89fdf451943008">DEBUG3</a>(params)   ;</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#0ff047166d36dd8103bd12a4fbc7f7f9">DEBUG4</a>(params)   ;</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#87e006a00875d2e518652108f6cb5790">ASSERT</a>(expression)   ((void) 0)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">PRIVATE int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#d632adbb6b5d2516805a965b42b601c8">init_rows_cols</a> (int n_row, int n_col, <a class="el" href="structColamd__Row__struct.html">Colamd_Row</a> Row[], <a class="el" href="structColamd__Col__struct.html">Colamd_Col</a> Col[], int <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>[], int p[], int stat [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">PRIVATE void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#c804543e35e2ab481d9e2c19ed0ebcf6">init_scoring</a> (int n_row, int n_col, <a class="el" href="structColamd__Row__struct.html">Colamd_Row</a> Row[], <a class="el" href="structColamd__Col__struct.html">Colamd_Col</a> Col[], int <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>[], int head[], double [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">PRIVATE int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#10da36e975e03d3c0fd68dbe14eb27cc">find_ordering</a> (int n_row, int n_col, int Alen, <a class="el" href="structColamd__Row__struct.html">Colamd_Row</a> Row[], <a class="el" href="structColamd__Col__struct.html">Colamd_Col</a> Col[], int <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>[], int head [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">PRIVATE void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#d9896b63f5b2823065686f63a1096130">order_children</a> (int n_col, <a class="el" href="structColamd__Col__struct.html">Colamd_Col</a> Col[], int p[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">PRIVATE void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#27211c7dc11832c4675d8d3fcd7167a0">detect_super_cols</a> (<a class="el" href="structColamd__Col__struct.html">Colamd_Col</a> Col[], int <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>[], int head[], int row_start, int row_length)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">PRIVATE int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#9a0dc18af9f72ad8e436a98980e55c41">garbage_collection</a> (int n_row, int n_col, <a class="el" href="structColamd__Row__struct.html">Colamd_Row</a> Row[], <a class="el" href="structColamd__Col__struct.html">Colamd_Col</a> Col[], int <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>[], int *pfree)</ [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">PRIVATE int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#7eb036c63565d8fc7c05e1074510601a">clear_mark</a> (int n_row, <a class="el" href="structColamd__Row__struct.html">Colamd_Row</a> Row[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">PRIVATE void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#5ba6567b2e4ac6f69086d2ac7ab5c58a">print_report</a> (char *method, int stats[COLAMD_STATS])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">PUBLIC int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#ac7214b99bcf4db1b13547521367817f">colamd_recommended</a> (int nnz, int n_row, int n_col)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">PUBLIC void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#cd15277a8a063dd0586e280004a92c89">colamd_set_defaults</a> (double knobs[COLAMD_KNOBS])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">PUBLIC int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#e81243e57d577e17400b3f532aa4f1e9">symamd</a> (int n, int <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>[], int p[], int perm[], double knobs[COLAMD_KNOBS], int stats[COLAMD_STATS], void *(*allocate)(size_t, size_t), void(*release)(void *))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">PUBLIC int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#4ace2482b681af56de48dd3ba8971baf">colamd</a> (int n_row, int n_col, int Alen, int <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>[], int p[], double knobs[COLAMD_KNOBS], int stats[COLAMD_STATS])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">PUBLIC void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#85f2c13be93dea98e624144272d00eed">colamd_report</a> (int stats[COLAMD_STATS])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">PUBLIC void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#df3bb99ff64711d528dafe21fd450512">symamd_report</a> (int stats[COLAMD_STATS])</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+    ========================================================================== 
+    === colamd/symamd - a sparse matrix column ordering algorithm ============ 
+    ==========================================================================</pre><p>
+<pre>    colamd:  an approximate minimum degree column ordering algorithm,
+    	for LU factorization of symmetric or unsymmetric matrices,
+	QR factorization, least squares, interior point methods for
+	linear programming problems, and other related problems.</pre><p>
+<pre>    symamd:  an approximate minimum degree ordering algorithm for Cholesky
+    	factorization of symmetric matrices.</pre><p>
+<pre>    Purpose:</pre><p>
+<pre>	Colamd computes a permutation Q such that the Cholesky factorization of
+	(AQ)'(AQ) has less fill-in and requires fewer floating point operations
+	than A'A.  This also provides a good ordering for sparse partial
+	pivoting methods, P(AQ) = LU, where Q is computed prior to numerical
+	factorization, and P is computed during numerical factorization via
+	conventional partial pivoting with row interchanges.  Colamd is the
+	column ordering method used in SuperLU, part of the ScaLAPACK library.
+	It is also available as built-in function in MATLAB Version 6,
+	available from MathWorks, Inc. (<a href="http://www.mathworks.com">http://www.mathworks.com</a>).  This
+	routine can be used in place of colmmd in MATLAB.</pre><p>
+<pre>    	Symamd computes a permutation P of a symmetric matrix A such that the
+	Cholesky factorization of PAP' has less fill-in and requires fewer
+	floating point operations than A.  Symamd constructs a matrix M such
+	that M'M has the same nonzero pattern of A, and then orders the columns
+	of M using colmmd.  The column ordering of M is then returned as the
+	row and column ordering P of A.</pre><p>
+<pre>    Authors:</pre><p>
+<pre>	The authors of the code itself are Stefan I. Larimore and Timothy A.
+	Davis (<a href="mailto:davis at cise.ufl.edu">davis at cise.ufl.edu</a>), University of Florida.  The algorithm was
+	developed in collaboration with John Gilbert, Xerox PARC, and Esmond
+	Ng, Oak Ridge National Laboratory.</pre><p>
+<pre>    Date:</pre><p>
+<pre>	September 8, 2003.  Version 2.3.</pre><p>
+<pre>    Acknowledgements:</pre><p>
+<pre>	This work was supported by the National Science Foundation, under
+	grants DMS-9504974 and DMS-9803599.</pre><p>
+<pre>    Copyright and License:</pre><p>
+<pre>	Copyright (c) 1998-2003 by the University of Florida.
+	All Rights Reserved.</pre><p>
+<pre>	THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+	EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre>	Permission is hereby granted to use, copy, modify, and/or distribute
+	this program, provided that the Copyright, this License, and the
+	Availability of the original version is retained on all copies and made
+	accessible to the end-user of any code or package that includes COLAMD
+	or any modified version of COLAMD.</pre><p>
+<pre>    Availability:</pre><p>
+<pre>	The colamd/symamd library is available at</pre><p>
+<pre>	    <a href="http://www.cise.ufl.edu/research/sparse/colamd/">http://www.cise.ufl.edu/research/sparse/colamd/</a></pre><p>
+<pre>	This is the <a href="http://www.cise.ufl.edu/research/sparse/colamd/colamd.c">http://www.cise.ufl.edu/research/sparse/colamd/colamd.c</a>
+	file.  It requires the <a class="el" href="colamd_8h.html" title="Colamd prototypes and definitions.">colamd.h</a> file.  It is required by the colamdmex.c
+	and symamdmex.c files, for the MATLAB interface to colamd and symamd.</pre><p>
+<pre>    See the ChangeLog file for changes since Version 1.0.</pre><p>
+<pre>    ========================================================================== 
+    === Description of user-callable routines ================================ 
+    ==========================================================================</pre><p>
+<pre>    ----------------------------------------------------------------------------
+    colamd_recommended:
+    ----------------------------------------------------------------------------</pre><p>
+<pre>	C syntax:</pre><p>
+<pre>	    include "colamd.h"
+	    int colamd_recommended (int nnz, int n_row, int n_col) ;</pre><p>
+<pre>	    or as a C macro</pre><p>
+<pre>	    include "colamd.h"
+	    Alen = COLAMD_RECOMMENDED (int nnz, int n_row, int n_col) ;</pre><p>
+<pre>	Purpose:</pre><p>
+<pre>	    Returns recommended value of Alen for use by colamd.  Returns -1
+	    if any input argument is negative.  The use of this routine
+	    or macro is optional.  Note that the macro uses its arguments
+	    more than once, so be careful for side effects, if you pass
+	    expressions as arguments to COLAMD_RECOMMENDED.  Not needed for
+	    symamd, which dynamically allocates its own memory.</pre><p>
+<pre>	Arguments (all input arguments):</pre><p>
+<pre>	    int nnz ;		Number of nonzeros in the matrix A.  This must
+				be the same value as p [n_col] in the call to
+				colamd - otherwise you will get a wrong value
+				of the recommended memory to use.</pre><p>
+<pre>	    int n_row ;		Number of rows in the matrix A.</pre><p>
+<pre>	    int n_col ;		Number of columns in the matrix A.</pre><p>
+<pre>    ----------------------------------------------------------------------------
+    colamd_set_defaults:
+    ----------------------------------------------------------------------------</pre><p>
+<pre>	C syntax:</pre><p>
+<pre>	    include "colamd.h"
+	    colamd_set_defaults (double knobs [COLAMD_KNOBS]) ;</pre><p>
+<pre>	Purpose:</pre><p>
+<pre>	    Sets the default parameters.  The use of this routine is optional.</pre><p>
+<pre>	Arguments:</pre><p>
+<pre>	    double knobs [COLAMD_KNOBS] ;	Output only.</pre><p>
+<pre>		Colamd: rows with more than (knobs [COLAMD_DENSE_ROW] * n_col)
+		entries are removed prior to ordering.  Columns with more than
+		(knobs [COLAMD_DENSE_COL] * n_row) entries are removed prior to
+		ordering, and placed last in the output column ordering.</pre><p>
+<pre>		Symamd: uses only knobs [COLAMD_DENSE_ROW], which is knobs [0].
+		Rows and columns with more than (knobs [COLAMD_DENSE_ROW] * n)
+		entries are removed prior to ordering, and placed last in the
+		output ordering.</pre><p>
+<pre>		COLAMD_DENSE_ROW and COLAMD_DENSE_COL are defined as 0 and 1,
+		respectively, in <a class="el" href="colamd_8h.html" title="Colamd prototypes and definitions.">colamd.h</a>.  Default values of these two knobs
+		are both 0.5.  Currently, only knobs [0] and knobs [1] are
+		used, but future versions may use more knobs.  If so, they will
+		be properly set to their defaults by the future version of
+		colamd_set_defaults, so that the code that calls colamd will
+		not need to change, assuming that you either use
+		colamd_set_defaults, or pass a (double *) NULL pointer as the
+		knobs array to colamd or symamd.</pre><p>
+<pre>    ----------------------------------------------------------------------------
+    colamd:
+    ----------------------------------------------------------------------------</pre><p>
+<pre>	C syntax:</pre><p>
+<pre>	    include "colamd.h"
+	    int colamd (int n_row, int n_col, int Alen, int *A, int *p,
+	    	double knobs [COLAMD_KNOBS], int stats [COLAMD_STATS]) ;</pre><p>
+<pre>	Purpose:</pre><p>
+<pre>	    Computes a column ordering (Q) of A such that P(AQ)=LU or
+	    (AQ)'AQ=LL' have less fill-in and require fewer floating point
+	    operations than factorizing the unpermuted matrix A or A'A,
+	    respectively.</pre><p>
+<pre>	Returns:</pre><p>
+<pre>	    TRUE (1) if successful, FALSE (0) otherwise.</pre><p>
+<pre>	Arguments:</pre><p>
+<pre>	    int n_row ;		Input argument.</pre><p>
+<pre>		Number of rows in the matrix A.
+		Restriction:  n_row >= 0.
+		Colamd returns FALSE if n_row is negative.</pre><p>
+<pre>	    int n_col ;		Input argument.</pre><p>
+<pre>		Number of columns in the matrix A.
+		Restriction:  n_col >= 0.
+		Colamd returns FALSE if n_col is negative.</pre><p>
+<pre>	    int Alen ;		Input argument.</pre><p>
+<pre>		Restriction (see note):
+		Alen >= 2*nnz + 6*(n_col+1) + 4*(n_row+1) + n_col
+		Colamd returns FALSE if these conditions are not met.</pre><p>
+<pre>		Note:  this restriction makes an modest assumption regarding
+		the size of the two typedef's structures in <a class="el" href="colamd_8h.html" title="Colamd prototypes and definitions.">colamd.h</a>.
+		We do, however, guarantee that</pre><p>
+<pre>			Alen >= colamd_recommended (nnz, n_row, n_col)</pre><p>
+<pre>		or equivalently as a C preprocessor macro:</pre><p>
+<pre>			Alen >= COLAMD_RECOMMENDED (nnz, n_row, n_col)</pre><p>
+<pre>		will be sufficient.</pre><p>
+<pre>	    int A [Alen] ;	Input argument, undefined on output.</pre><p>
+<pre>		A is an integer array of size Alen.  Alen must be at least as
+		large as the bare minimum value given above, but this is very
+		low, and can result in excessive run time.  For best
+		performance, we recommend that Alen be greater than or equal to
+		colamd_recommended (nnz, n_row, n_col), which adds
+		nnz/5 to the bare minimum value given above.</pre><p>
+<pre>		On input, the row indices of the entries in column c of the
+		matrix are held in A [(p [c]) ... (p [c+1]-1)].  The row indices
+		in a given column c need not be in ascending order, and
+		duplicate row indices may be be present.  However, colamd will
+		work a little faster if both of these conditions are met
+		(Colamd puts the matrix into this format, if it finds that the
+		the conditions are not met).</pre><p>
+<pre>		The matrix is 0-based.  That is, rows are in the range 0 to
+		n_row-1, and columns are in the range 0 to n_col-1.  Colamd
+		returns FALSE if any row index is out of range.</pre><p>
+<pre>		The contents of A are modified during ordering, and are
+		undefined on output.</pre><p>
+<pre>	    int p [n_col+1] ;	Both input and output argument.</pre><p>
+<pre>		p is an integer array of size n_col+1.  On input, it holds the
+		"pointers" for the column form of the matrix A.  Column c of
+		the matrix A is held in A [(p [c]) ... (p [c+1]-1)].  The first
+		entry, p [0], must be zero, and p [c] <= p [c+1] must hold
+		for all c in the range 0 to n_col-1.  The value p [n_col] is
+		thus the total number of entries in the pattern of the matrix A.
+		Colamd returns FALSE if these conditions are not met.</pre><p>
+<pre>		On output, if colamd returns TRUE, the array p holds the column
+		permutation (Q, for P(AQ)=LU or (AQ)'(AQ)=LL'), where p [0] is
+		the first column index in the new ordering, and p [n_col-1] is
+		the last.  That is, p [k] = j means that column j of A is the
+		kth pivot column, in AQ, where k is in the range 0 to n_col-1
+		(p [0] = j means that column j of A is the first column in AQ).</pre><p>
+<pre>		If colamd returns FALSE, then no permutation is returned, and
+		p is undefined on output.</pre><p>
+<pre>	    double knobs [COLAMD_KNOBS] ;	Input argument.</pre><p>
+<pre>		See colamd_set_defaults for a description.</pre><p>
+<pre>	    int stats [COLAMD_STATS] ;		Output argument.</pre><p>
+<pre>		Statistics on the ordering, and error status.
+		See <a class="el" href="colamd_8h.html" title="Colamd prototypes and definitions.">colamd.h</a> for related definitions.
+		Colamd returns FALSE if stats is not present.</pre><p>
+<pre>		stats [0]:  number of dense or empty rows ignored.</pre><p>
+<pre>		stats [1]:  number of dense or empty columns ignored (and
+				ordered last in the output permutation p)
+				Note that a row can become "empty" if it
+				contains only "dense" and/or "empty" columns,
+				and similarly a column can become "empty" if it
+				only contains "dense" and/or "empty" rows.</pre><p>
+<pre>		stats [2]:  number of garbage collections performed.
+				This can be excessively high if Alen is close
+				to the minimum required value.</pre><p>
+<pre>		stats [3]:  status code.  < 0 is an error code.
+			    > 1 is a warning or notice.</pre><p>
+<pre>			0	OK.  Each column of the input matrix contained
+				row indices in increasing order, with no
+				duplicates.</pre><p>
+<pre>			1	OK, but columns of input matrix were jumbled
+				(unsorted columns or duplicate entries).  Colamd
+				had to do some extra work to sort the matrix
+				first and remove duplicate entries, but it
+				still was able to return a valid permutation
+				(return value of colamd was TRUE).</pre><p>
+<pre>					stats [4]: highest numbered column that
+						is unsorted or has duplicate
+						entries.
+					stats [5]: last seen duplicate or
+						unsorted row index.
+					stats [6]: number of duplicate or
+						unsorted row indices.</pre><p>
+<pre>			-1	A is a null pointer</pre><p>
+<pre>			-2	p is a null pointer</pre><p>
+<pre>			-3 	n_row is negative</pre><p>
+<pre>					stats [4]: n_row</pre><p>
+<pre>			-4	n_col is negative</pre><p>
+<pre>					stats [4]: n_col</pre><p>
+<pre>			-5	number of nonzeros in matrix is negative</pre><p>
+<pre>					stats [4]: number of nonzeros, p [n_col]</pre><p>
+<pre>			-6	p [0] is nonzero</pre><p>
+<pre>					stats [4]: p [0]</pre><p>
+<pre>			-7	A is too small</pre><p>
+<pre>					stats [4]: required size
+					stats [5]: actual size (Alen)</pre><p>
+<pre>			-8	a column has a negative number of entries</pre><p>
+<pre>					stats [4]: column with < 0 entries
+					stats [5]: number of entries in col</pre><p>
+<pre>			-9	a row index is out of bounds</pre><p>
+<pre>					stats [4]: column with bad row index
+					stats [5]: bad row index
+					stats [6]: n_row, # of rows of matrx</pre><p>
+<pre>			-10	(unused; see symamd.c)</pre><p>
+<pre>			-999	(unused; see symamd.c)</pre><p>
+<pre>		Future versions may return more statistics in the stats array.</pre><p>
+<pre>	Example:</pre><p>
+<pre>	    See <a href="http://www.cise.ufl.edu/research/sparse/colamd/example.c">http://www.cise.ufl.edu/research/sparse/colamd/example.c</a>
+	    for a complete example.</pre><p>
+<pre>	    To order the columns of a 5-by-4 matrix with 11 nonzero entries in
+	    the following nonzero pattern</pre><p>
+<pre>	    	x 0 x 0
+		x 0 x x
+		0 x x 0
+		0 0 x x
+		x x 0 0</pre><p>
+<pre>	    with default knobs and no output statistics, do the following:</pre><p>
+<pre>		include "colamd.h"
+		define ALEN COLAMD_RECOMMENDED (11, 5, 4)
+		int A [ALEN] = {1, 2, 5, 3, 5, 1, 2, 3, 4, 2, 4} ;
+		int p [ ] = {0, 3, 5, 9, 11} ;
+		int stats [COLAMD_STATS] ;
+		colamd (5, 4, ALEN, A, p, (double *) NULL, stats) ;</pre><p>
+<pre>	    The permutation is returned in the array p, and A is destroyed.</pre><p>
+<pre>    ----------------------------------------------------------------------------
+    symamd:
+    ----------------------------------------------------------------------------</pre><p>
+<pre>	C syntax:</pre><p>
+<pre>	    include "colamd.h"
+	    int symamd (int n, int *A, int *p, int *perm,
+	    	double knobs [COLAMD_KNOBS], int stats [COLAMD_STATS],
+		void (*allocate) (size_t, size_t), void (*release) (void *)) ;</pre><p>
+<pre>	Purpose:</pre><p>
+<pre>    	    The symamd routine computes an ordering P of a symmetric sparse
+	    matrix A such that the Cholesky factorization PAP' = LL' remains
+	    sparse.  It is based on a column ordering of a matrix M constructed
+	    so that the nonzero pattern of M'M is the same as A.  The matrix A
+	    is assumed to be symmetric; only the strictly lower triangular part
+	    is accessed.  You must pass your selected memory allocator (usually
+	    calloc/free or mxCalloc/mxFree) to symamd, for it to allocate
+	    memory for the temporary matrix M.</pre><p>
+<pre>	Returns:</pre><p>
+<pre>	    TRUE (1) if successful, FALSE (0) otherwise.</pre><p>
+<pre>	Arguments:</pre><p>
+<pre>	    int n ;		Input argument.</pre><p>
+<pre>	    	Number of rows and columns in the symmetrix matrix A.
+		Restriction:  n >= 0.
+		Symamd returns FALSE if n is negative.</pre><p>
+<pre>	    int A [nnz] ;	Input argument.</pre><p>
+<pre>	    	A is an integer array of size nnz, where nnz = p [n].</pre><p>
+<pre>		The row indices of the entries in column c of the matrix are
+		held in A [(p [c]) ... (p [c+1]-1)].  The row indices in a
+		given column c need not be in ascending order, and duplicate
+		row indices may be present.  However, symamd will run faster
+		if the columns are in sorted order with no duplicate entries.</pre><p>
+<pre>		The matrix is 0-based.  That is, rows are in the range 0 to
+		n-1, and columns are in the range 0 to n-1.  Symamd
+		returns FALSE if any row index is out of range.</pre><p>
+<pre>		The contents of A are not modified.</pre><p>
+<pre>	    int p [n+1] ;   	Input argument.</pre><p>
+<pre>		p is an integer array of size n+1.  On input, it holds the
+		"pointers" for the column form of the matrix A.  Column c of
+		the matrix A is held in A [(p [c]) ... (p [c+1]-1)].  The first
+		entry, p [0], must be zero, and p [c] <= p [c+1] must hold
+		for all c in the range 0 to n-1.  The value p [n] is
+		thus the total number of entries in the pattern of the matrix A.
+		Symamd returns FALSE if these conditions are not met.</pre><p>
+<pre>		The contents of p are not modified.</pre><p>
+<pre>	    int perm [n+1] ;   	Output argument.</pre><p>
+<pre>		On output, if symamd returns TRUE, the array perm holds the
+		permutation P, where perm [0] is the first index in the new
+		ordering, and perm [n-1] is the last.  That is, perm [k] = j
+		means that row and column j of A is the kth column in PAP',
+		where k is in the range 0 to n-1 (perm [0] = j means
+		that row and column j of A are the first row and column in
+		PAP').  The array is used as a workspace during the ordering,
+		which is why it must be of length n+1, not just n.</pre><p>
+<pre>	    double knobs [COLAMD_KNOBS] ;	Input argument.</pre><p>
+<pre>		See colamd_set_defaults for a description.</pre><p>
+<pre>	    int stats [COLAMD_STATS] ;		Output argument.</pre><p>
+<pre>		Statistics on the ordering, and error status.
+		See <a class="el" href="colamd_8h.html" title="Colamd prototypes and definitions.">colamd.h</a> for related definitions.
+		Symamd returns FALSE if stats is not present.</pre><p>
+<pre>		stats [0]:  number of dense or empty row and columns ignored
+				(and ordered last in the output permutation 
+				perm).  Note that a row/column can become
+				"empty" if it contains only "dense" and/or
+				"empty" columns/rows.</pre><p>
+<pre>		stats [1]:  (same as stats [0])</pre><p>
+<pre>		stats [2]:  number of garbage collections performed.</pre><p>
+<pre>		stats [3]:  status code.  < 0 is an error code.
+			    > 1 is a warning or notice.</pre><p>
+<pre>			0	OK.  Each column of the input matrix contained
+				row indices in increasing order, with no
+				duplicates.</pre><p>
+<pre>			1	OK, but columns of input matrix were jumbled
+				(unsorted columns or duplicate entries).  Symamd
+				had to do some extra work to sort the matrix
+				first and remove duplicate entries, but it
+				still was able to return a valid permutation
+				(return value of symamd was TRUE).</pre><p>
+<pre>					stats [4]: highest numbered column that
+						is unsorted or has duplicate
+						entries.
+					stats [5]: last seen duplicate or
+						unsorted row index.
+					stats [6]: number of duplicate or
+						unsorted row indices.</pre><p>
+<pre>			-1	A is a null pointer</pre><p>
+<pre>			-2	p is a null pointer</pre><p>
+<pre>			-3	(unused, see <a class="el" href="colamd_8c.html" title="A sparse matrix column ordering algorithm.">colamd.c</a>)</pre><p>
+<pre>			-4 	n is negative</pre><p>
+<pre>					stats [4]: n</pre><p>
+<pre>			-5	number of nonzeros in matrix is negative</pre><p>
+<pre>					stats [4]: # of nonzeros (p [n]).</pre><p>
+<pre>			-6	p [0] is nonzero</pre><p>
+<pre>					stats [4]: p [0]</pre><p>
+<pre>			-7	(unused)</pre><p>
+<pre>			-8	a column has a negative number of entries</pre><p>
+<pre>					stats [4]: column with < 0 entries
+					stats [5]: number of entries in col</pre><p>
+<pre>			-9	a row index is out of bounds</pre><p>
+<pre>					stats [4]: column with bad row index
+					stats [5]: bad row index
+					stats [6]: n_row, # of rows of matrx</pre><p>
+<pre>			-10	out of memory (unable to allocate temporary
+				workspace for M or count arrays using the
+				"allocate" routine passed into symamd).</pre><p>
+<pre>			-999	internal error.  colamd failed to order the
+				matrix M, when it should have succeeded.  This
+				indicates a bug.  If this (and *only* this)
+				error code occurs, please contact the authors.
+				Don't contact the authors if you get any other
+				error code.</pre><p>
+<pre>		Future versions may return more statistics in the stats array.</pre><p>
+<pre>	    void * (*allocate) (size_t, size_t)</pre><p>
+<pre>	    	A pointer to a function providing memory allocation.  The
+		allocated memory must be returned initialized to zero.  For a
+		C application, this argument should normally be a pointer to
+		calloc.  For a MATLAB mexFunction, the routine mxCalloc is
+		passed instead.</pre><p>
+<pre>	    void (*release) (size_t, size_t)</pre><p>
+<pre>	    	A pointer to a function that frees memory allocated by the
+		memory allocation routine above.  For a C application, this
+		argument should normally be a pointer to free.  For a MATLAB
+		mexFunction, the routine mxFree is passed instead.</pre><p>
+<pre>    ----------------------------------------------------------------------------
+    colamd_report:
+    ----------------------------------------------------------------------------</pre><p>
+<pre>	C syntax:</pre><p>
+<pre>	    include "colamd.h"
+	    colamd_report (int stats [COLAMD_STATS]) ;</pre><p>
+<pre>	Purpose:</pre><p>
+<pre>	    Prints the error status and statistics recorded in the stats
+	    array on the standard error output (for a standard C routine)
+	    or on the MATLAB output (for a mexFunction).</pre><p>
+<pre>	Arguments:</pre><p>
+<pre>	    int stats [COLAMD_STATS] ;	Input only.  Statistics from colamd.</pre><p>
+<pre>    ----------------------------------------------------------------------------
+    symamd_report:
+    ----------------------------------------------------------------------------</pre><p>
+<pre>	C syntax:</pre><p>
+<pre>	    include "colamd.h"
+	    symamd_report (int stats [COLAMD_STATS]) ;</pre><p>
+<pre>	Purpose:</pre><p>
+<pre>	    Prints the error status and statistics recorded in the stats
+	    array on the standard error output (for a standard C routine)
+	    or on the MATLAB output (for a mexFunction).</pre><p>
+<pre>	Arguments:</pre><p>
+<pre>	    int stats [COLAMD_STATS] ;	Input only.  Statistics from symamd.</pre><p>
+<pre> </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="d8beef706da0344be19d59438fcdab6d"></a><!-- doxytag: member="colamd.c::ALIVE" ref="d8beef706da0344be19d59438fcdab6d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ALIVE   (0)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="87e006a00875d2e518652108f6cb5790"></a><!-- doxytag: member="colamd.c::ASSERT" ref="87e006a00875d2e518652108f6cb5790" args="(expression)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ASSERT          </td>
+          <td>(</td>
+          <td class="paramtype">expression </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((void) 0)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="50f9ca65904b13f345862cb46d08d84b"></a><!-- doxytag: member="colamd.c::COL_IS_ALIVE" ref="50f9ca65904b13f345862cb46d08d84b" args="(c)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COL_IS_ALIVE          </td>
+          <td>(</td>
+          <td class="paramtype">c </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   (Col [c].start >= ALIVE)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a08664bd5b8133f28dbeedc9a030fc86"></a><!-- doxytag: member="colamd.c::COL_IS_DEAD" ref="a08664bd5b8133f28dbeedc9a030fc86" args="(c)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COL_IS_DEAD          </td>
+          <td>(</td>
+          <td class="paramtype">c </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   (Col [c].start < ALIVE)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="003c0e2dae54bcb7c680333304dd4dcb"></a><!-- doxytag: member="colamd.c::COL_IS_DEAD_PRINCIPAL" ref="003c0e2dae54bcb7c680333304dd4dcb" args="(c)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COL_IS_DEAD_PRINCIPAL          </td>
+          <td>(</td>
+          <td class="paramtype">c </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   (Col [c].start == DEAD_PRINCIPAL)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3c8793c7acb4598d2ebcd8288f29ee69"></a><!-- doxytag: member="colamd.c::DEAD" ref="3c8793c7acb4598d2ebcd8288f29ee69" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEAD   (-1)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0f66923672bcc495333995f7d238945f"></a><!-- doxytag: member="colamd.c::DEAD_NON_PRINCIPAL" ref="0f66923672bcc495333995f7d238945f" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEAD_NON_PRINCIPAL   (-2)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c0adce1e7d70351cef4752f3373709af"></a><!-- doxytag: member="colamd.c::DEAD_PRINCIPAL" ref="c0adce1e7d70351cef4752f3373709af" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEAD_PRINCIPAL   (-1)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="144524f0a43ebe1a97d576a76f6557a0"></a><!-- doxytag: member="colamd.c::DEBUG0" ref="144524f0a43ebe1a97d576a76f6557a0" args="(params)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEBUG0          </td>
+          <td>(</td>
+          <td class="paramtype">params </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ;</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5083dbf79682be78336cc6b458c32ab4"></a><!-- doxytag: member="colamd.c::DEBUG1" ref="5083dbf79682be78336cc6b458c32ab4" args="(params)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEBUG1          </td>
+          <td>(</td>
+          <td class="paramtype">params </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ;</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="65bd10ffc88aa9edca29d4f6ae0da2df"></a><!-- doxytag: member="colamd.c::DEBUG2" ref="65bd10ffc88aa9edca29d4f6ae0da2df" args="(params)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEBUG2          </td>
+          <td>(</td>
+          <td class="paramtype">params </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ;</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="86ce320fe5d3f3088d89fdf451943008"></a><!-- doxytag: member="colamd.c::DEBUG3" ref="86ce320fe5d3f3088d89fdf451943008" args="(params)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEBUG3          </td>
+          <td>(</td>
+          <td class="paramtype">params </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ;</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0ff047166d36dd8103bd12a4fbc7f7f9"></a><!-- doxytag: member="colamd.c::DEBUG4" ref="0ff047166d36dd8103bd12a4fbc7f7f9" args="(params)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEBUG4          </td>
+          <td>(</td>
+          <td class="paramtype">params </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ;</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2b7cf2a3641be7b89138615764d60ba3"></a><!-- doxytag: member="colamd.c::EMPTY" ref="2b7cf2a3641be7b89138615764d60ba3" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define EMPTY   (-1)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a93f0eb578d23995850d61f7d61c55c1"></a><!-- doxytag: member="colamd.c::FALSE" ref="a93f0eb578d23995850d61f7d61c55c1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FALSE   (0)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a5fad23b2a5eed790e6661e896a506b7"></a><!-- doxytag: member="colamd.c::INDEX" ref="a5fad23b2a5eed790e6661e896a506b7" args="(i)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define INDEX          </td>
+          <td>(</td>
+          <td class="paramtype">i </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   (i)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0458a358e752473d86e6f21a56b44a26"></a><!-- doxytag: member="colamd.c::KILL_NON_PRINCIPAL_COL" ref="0458a358e752473d86e6f21a56b44a26" args="(c)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define KILL_NON_PRINCIPAL_COL          </td>
+          <td>(</td>
+          <td class="paramtype">c </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   { Col [c].start = DEAD_NON_PRINCIPAL ; }</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7882929a7898e09a3de9e7676ae1aa29"></a><!-- doxytag: member="colamd.c::KILL_PRINCIPAL_COL" ref="7882929a7898e09a3de9e7676ae1aa29" args="(c)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define KILL_PRINCIPAL_COL          </td>
+          <td>(</td>
+          <td class="paramtype">c </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   { Col [c].start = DEAD_PRINCIPAL ; }</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="dde21248544152df48ab70b6da1b38b5"></a><!-- doxytag: member="colamd.c::KILL_ROW" ref="dde21248544152df48ab70b6da1b38b5" args="(r)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define KILL_ROW          </td>
+          <td>(</td>
+          <td class="paramtype">r </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   { Row [r].shared2.mark = DEAD ; }</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fa99ec4acc4ecb2dc3c2d05da15d0e3f"></a><!-- doxytag: member="colamd.c::MAX" ref="fa99ec4acc4ecb2dc3c2d05da15d0e3f" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MAX          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   (((a) > (b)) ? (a) : (b))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3acffbd305ee72dcd4593c0d8af64a4f"></a><!-- doxytag: member="colamd.c::MIN" ref="3acffbd305ee72dcd4593c0d8af64a4f" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MIN          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   (((a) < (b)) ? (a) : (b))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f4201cc2809d450d2484680ee1b958ca"></a><!-- doxytag: member="colamd.c::ONES_COMPLEMENT" ref="f4201cc2809d450d2484680ee1b958ca" args="(r)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ONES_COMPLEMENT          </td>
+          <td>(</td>
+          <td class="paramtype">r </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   (-(r)-1)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e1649fc947ca37a86917a08354f48d1a"></a><!-- doxytag: member="colamd.c::PRINTF" ref="e1649fc947ca37a86917a08354f48d1a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PRINTF   printf          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5e151c615eda34903514212f05a5ccf8"></a><!-- doxytag: member="colamd.c::PRIVATE" ref="5e151c615eda34903514212f05a5ccf8" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PRIVATE   static          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d17d551e31d1828c68acf40684849b7e"></a><!-- doxytag: member="colamd.c::PUBLIC" ref="d17d551e31d1828c68acf40684849b7e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PUBLIC          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="bc775359cfa45ffaf6250522c521110d"></a><!-- doxytag: member="colamd.c::ROW_IS_ALIVE" ref="bc775359cfa45ffaf6250522c521110d" args="(r)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ROW_IS_ALIVE          </td>
+          <td>(</td>
+          <td class="paramtype">r </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   (Row [r].shared2.mark >= ALIVE)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e200d2ac8149305712af7230f9ee24d5"></a><!-- doxytag: member="colamd.c::ROW_IS_DEAD" ref="e200d2ac8149305712af7230f9ee24d5" args="(r)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ROW_IS_DEAD          </td>
+          <td>(</td>
+          <td class="paramtype">r </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ROW_IS_MARKED_DEAD (Row[r].shared2.mark)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0d68b03acc587c11fe6dffbfede78c2d"></a><!-- doxytag: member="colamd.c::ROW_IS_MARKED_DEAD" ref="0d68b03acc587c11fe6dffbfede78c2d" args="(row_mark)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ROW_IS_MARKED_DEAD          </td>
+          <td>(</td>
+          <td class="paramtype">row_mark </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   (row_mark < ALIVE)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a8cecfc5c5c054d2875c03e77b7be15d"></a><!-- doxytag: member="colamd.c::TRUE" ref="a8cecfc5c5c054d2875c03e77b7be15d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TRUE   (1)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="7eb036c63565d8fc7c05e1074510601a"></a><!-- doxytag: member="colamd.c::clear_mark" ref="7eb036c63565d8fc7c05e1074510601a" args="(int n_row, Colamd_Row Row[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">PRIVATE int clear_mark           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structColamd__Row__struct.html">Colamd_Row</a> </td>
+          <td class="paramname"> <em>Row</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4ace2482b681af56de48dd3ba8971baf"></a><!-- doxytag: member="colamd.c::colamd" ref="4ace2482b681af56de48dd3ba8971baf" args="(int n_row, int n_col, int Alen, int A[], int p[], double knobs[COLAMD_KNOBS], int stats[COLAMD_STATS])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">PUBLIC int colamd           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>Alen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>A</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>p</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>knobs</em>[COLAMD_KNOBS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>stats</em>[COLAMD_STATS]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ac7214b99bcf4db1b13547521367817f"></a><!-- doxytag: member="colamd.c::colamd_recommended" ref="ac7214b99bcf4db1b13547521367817f" args="(int nnz, int n_row, int n_col)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">PUBLIC int colamd_recommended           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_col</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="85f2c13be93dea98e624144272d00eed"></a><!-- doxytag: member="colamd.c::colamd_report" ref="85f2c13be93dea98e624144272d00eed" args="(int stats[COLAMD_STATS])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">PUBLIC void colamd_report           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>stats</em>[COLAMD_STATS]          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cd15277a8a063dd0586e280004a92c89"></a><!-- doxytag: member="colamd.c::colamd_set_defaults" ref="cd15277a8a063dd0586e280004a92c89" args="(double knobs[COLAMD_KNOBS])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">PUBLIC void colamd_set_defaults           </td>
+          <td>(</td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>knobs</em>[COLAMD_KNOBS]          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="27211c7dc11832c4675d8d3fcd7167a0"></a><!-- doxytag: member="colamd.c::detect_super_cols" ref="27211c7dc11832c4675d8d3fcd7167a0" args="(Colamd_Col Col[], int A[], int head[], int row_start, int row_length)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">PRIVATE void detect_super_cols           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structColamd__Col__struct.html">Colamd_Col</a> </td>
+          <td class="paramname"> <em>Col</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>A</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>head</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>row_start</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>row_length</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="10da36e975e03d3c0fd68dbe14eb27cc"></a><!-- doxytag: member="colamd.c::find_ordering" ref="10da36e975e03d3c0fd68dbe14eb27cc" args="(int n_row, int n_col, int Alen, Colamd_Row Row[], Colamd_Col Col[], int A[], int head[], int n_col2, int max_deg, int pfree)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">PRIVATE int find_ordering           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>Alen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structColamd__Row__struct.html">Colamd_Row</a> </td>
+          <td class="paramname"> <em>Row</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structColamd__Col__struct.html">Colamd_Col</a> </td>
+          <td class="paramname"> <em>Col</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>A</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>head</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_col2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>max_deg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>pfree</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9a0dc18af9f72ad8e436a98980e55c41"></a><!-- doxytag: member="colamd.c::garbage_collection" ref="9a0dc18af9f72ad8e436a98980e55c41" args="(int n_row, int n_col, Colamd_Row Row[], Colamd_Col Col[], int A[], int *pfree)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">PRIVATE int garbage_collection           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structColamd__Row__struct.html">Colamd_Row</a> </td>
+          <td class="paramname"> <em>Row</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structColamd__Col__struct.html">Colamd_Col</a> </td>
+          <td class="paramname"> <em>Col</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>A</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pfree</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d632adbb6b5d2516805a965b42b601c8"></a><!-- doxytag: member="colamd.c::init_rows_cols" ref="d632adbb6b5d2516805a965b42b601c8" args="(int n_row, int n_col, Colamd_Row Row[], Colamd_Col Col[], int A[], int p[], int stats[COLAMD_STATS])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">PRIVATE int init_rows_cols           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structColamd__Row__struct.html">Colamd_Row</a> </td>
+          <td class="paramname"> <em>Row</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structColamd__Col__struct.html">Colamd_Col</a> </td>
+          <td class="paramname"> <em>Col</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>A</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>p</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>stats</em>[COLAMD_STATS]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c804543e35e2ab481d9e2c19ed0ebcf6"></a><!-- doxytag: member="colamd.c::init_scoring" ref="c804543e35e2ab481d9e2c19ed0ebcf6" args="(int n_row, int n_col, Colamd_Row Row[], Colamd_Col Col[], int A[], int head[], double knobs[COLAMD_KNOBS], int *p_n_row2, int *p_n_col2, int *p_max_deg)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">PRIVATE void init_scoring           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structColamd__Row__struct.html">Colamd_Row</a> </td>
+          <td class="paramname"> <em>Row</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structColamd__Col__struct.html">Colamd_Col</a> </td>
+          <td class="paramname"> <em>Col</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>A</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>head</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>knobs</em>[COLAMD_KNOBS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>p_n_row2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>p_n_col2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>p_max_deg</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d9896b63f5b2823065686f63a1096130"></a><!-- doxytag: member="colamd.c::order_children" ref="d9896b63f5b2823065686f63a1096130" args="(int n_col, Colamd_Col Col[], int p[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">PRIVATE void order_children           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structColamd__Col__struct.html">Colamd_Col</a> </td>
+          <td class="paramname"> <em>Col</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>p</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5ba6567b2e4ac6f69086d2ac7ab5c58a"></a><!-- doxytag: member="colamd.c::print_report" ref="5ba6567b2e4ac6f69086d2ac7ab5c58a" args="(char *method, int stats[COLAMD_STATS])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">PRIVATE void print_report           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>method</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>stats</em>[COLAMD_STATS]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e81243e57d577e17400b3f532aa4f1e9"></a><!-- doxytag: member="colamd.c::symamd" ref="e81243e57d577e17400b3f532aa4f1e9" args="(int n, int A[], int p[], int perm[], double knobs[COLAMD_KNOBS], int stats[COLAMD_STATS], void *(*allocate)(size_t, size_t), void(*release)(void *))" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">PUBLIC int symamd           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>A</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>p</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perm</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>knobs</em>[COLAMD_KNOBS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>stats</em>[COLAMD_STATS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *(*)(size_t, size_t) </td>
+          <td class="paramname"> <em>allocate</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(void *) </td>
+          <td class="paramname"> <em>release</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="df3bb99ff64711d528dafe21fd450512"></a><!-- doxytag: member="colamd.c::symamd_report" ref="df3bb99ff64711d528dafe21fd450512" args="(int stats[COLAMD_STATS])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">PUBLIC void symamd_report           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>stats</em>[COLAMD_STATS]          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/colamd_8h-source.html b/DOC/html/colamd_8h-source.html
new file mode 100644
index 0000000..b38e837
--- /dev/null
+++ b/DOC/html/colamd_8h-source.html
@@ -0,0 +1,217 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/colamd.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<h1>SRC/colamd.h</h1><a href="colamd_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00055"></a>00055 <span class="preprocessor">#ifndef COLAMD_H</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_H</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span>
+<a name="l00058"></a>00058 <span class="comment">/* ========================================================================== */</span>
+<a name="l00059"></a>00059 <span class="comment">/* === Include files ======================================================== */</span>
+<a name="l00060"></a>00060 <span class="comment">/* ========================================================================== */</span>
+<a name="l00061"></a>00061 
+<a name="l00062"></a>00062 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064 <span class="comment">/* ========================================================================== */</span>
+<a name="l00065"></a>00065 <span class="comment">/* === Knob and statistics definitions ====================================== */</span>
+<a name="l00066"></a>00066 <span class="comment">/* ========================================================================== */</span>
+<a name="l00067"></a>00067 
+<a name="l00068"></a>00068 <span class="comment">/* size of the knobs [ ] array.  Only knobs [0..1] are currently used. */</span>
+<a name="l00069"></a><a class="code" href="colamd_8h.html#e92bb10d09f7cd004f07d1baddf90548">00069</a> <span class="preprocessor">#define COLAMD_KNOBS 20</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span>
+<a name="l00071"></a>00071 <span class="comment">/* number of output statistics.  Only stats [0..6] are currently used. */</span>
+<a name="l00072"></a><a class="code" href="colamd_8h.html#411703fc0a994b83ec0e00df1abfc0f7">00072</a> <span class="preprocessor">#define COLAMD_STATS 20</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span>
+<a name="l00074"></a>00074 <span class="comment">/* knobs [0] and stats [0]: dense row knob and output statistic. */</span>
+<a name="l00075"></a><a class="code" href="colamd_8h.html#45a417439d08823fa620ca00d834dd61">00075</a> <span class="preprocessor">#define COLAMD_DENSE_ROW 0</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span>
+<a name="l00077"></a>00077 <span class="comment">/* knobs [1] and stats [1]: dense column knob and output statistic. */</span>
+<a name="l00078"></a><a class="code" href="colamd_8h.html#f92de54efdec91d7ab64e7bec07eb12c">00078</a> <span class="preprocessor">#define COLAMD_DENSE_COL 1</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span>
+<a name="l00080"></a>00080 <span class="comment">/* stats [2]: memory defragmentation count output statistic */</span>
+<a name="l00081"></a><a class="code" href="colamd_8h.html#babfabfa19364ec563aa9c15bcc9714e">00081</a> <span class="preprocessor">#define COLAMD_DEFRAG_COUNT 2</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span>
+<a name="l00083"></a>00083 <span class="comment">/* stats [3]: colamd status:  zero OK, > 0 warning or notice, < 0 error */</span>
+<a name="l00084"></a><a class="code" href="colamd_8h.html#6a4201ce55dfa3a6375b90097e8c747e">00084</a> <span class="preprocessor">#define COLAMD_STATUS 3</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span>
+<a name="l00086"></a>00086 <span class="comment">/* stats [4..6]: error info, or info on jumbled columns */</span> 
+<a name="l00087"></a><a class="code" href="colamd_8h.html#569d56a773011e0b4e465b3f5830e80b">00087</a> <span class="preprocessor">#define COLAMD_INFO1 4</span>
+<a name="l00088"></a><a class="code" href="colamd_8h.html#2161fd78bbd688f943250d1d7583284b">00088</a> <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_INFO2 5</span>
+<a name="l00089"></a><a class="code" href="colamd_8h.html#15d83814c573d742764ff83e9d1d67fc">00089</a> <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_INFO3 6</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span>
+<a name="l00091"></a>00091 <span class="comment">/* error codes returned in stats [3]: */</span>
+<a name="l00092"></a><a class="code" href="colamd_8h.html#a754fd30d924c5c8d2d402fa0a482d72">00092</a> <span class="preprocessor">#define COLAMD_OK                               (0)</span>
+<a name="l00093"></a><a class="code" href="colamd_8h.html#c0d7f3882e6e9e39527aa2195dd23789">00093</a> <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_OK_BUT_JUMBLED                   (1)</span>
+<a name="l00094"></a><a class="code" href="colamd_8h.html#2347fb9e509c8bf9b97a50f96dea281c">00094</a> <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_ERROR_A_not_present              (-1)</span>
+<a name="l00095"></a><a class="code" href="colamd_8h.html#51d3f9714a4cb80c0f54dea5d0c5f95f">00095</a> <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_ERROR_p_not_present              (-2)</span>
+<a name="l00096"></a><a class="code" href="colamd_8h.html#8e848cfde5cdf42fcb316695305f8002">00096</a> <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_ERROR_nrow_negative              (-3)</span>
+<a name="l00097"></a><a class="code" href="colamd_8h.html#2feedddbe535286cbea9eca9fca91f45">00097</a> <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_ERROR_ncol_negative              (-4)</span>
+<a name="l00098"></a><a class="code" href="colamd_8h.html#7147ea7a9d673f17ef856e9914f90c81">00098</a> <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_ERROR_nnz_negative               (-5)</span>
+<a name="l00099"></a><a class="code" href="colamd_8h.html#58b5d911cc825b4334ade136bad3afd3">00099</a> <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_ERROR_p0_nonzero                 (-6)</span>
+<a name="l00100"></a><a class="code" href="colamd_8h.html#323108d44db4186fad5a2066139f70b7">00100</a> <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_ERROR_A_too_small                (-7)</span>
+<a name="l00101"></a><a class="code" href="colamd_8h.html#3b6df4a489ed0c7de8ad12251cdac5d6">00101</a> <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_ERROR_col_length_negative        (-8)</span>
+<a name="l00102"></a><a class="code" href="colamd_8h.html#0559e0ff07deab1841e7aaee8cde51e6">00102</a> <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_ERROR_row_index_out_of_bounds    (-9)</span>
+<a name="l00103"></a><a class="code" href="colamd_8h.html#703f11265b521c931cdd44709d141fca">00103</a> <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_ERROR_out_of_memory              (-10)</span>
+<a name="l00104"></a><a class="code" href="colamd_8h.html#e97b9ba07b455e4ce07c53a4d71c1169">00104</a> <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_ERROR_internal_error             (-999)</span>
+<a name="l00105"></a>00105 <span class="preprocessor"></span>
+<a name="l00106"></a>00106 <span class="comment">/* ========================================================================== */</span>
+<a name="l00107"></a>00107 <span class="comment">/* === Row and Column structures ============================================ */</span>
+<a name="l00108"></a>00108 <span class="comment">/* ========================================================================== */</span>
+<a name="l00109"></a>00109 
+<a name="l00110"></a>00110 <span class="comment">/* User code that makes use of the colamd/symamd routines need not directly */</span>
+<a name="l00111"></a>00111 <span class="comment">/* reference these structures.  They are used only for the COLAMD_RECOMMENDED */</span>
+<a name="l00112"></a>00112 <span class="comment">/* macro. */</span>
+<a name="l00113"></a>00113 
+<a name="l00114"></a><a class="code" href="structColamd__Col__struct.html">00114</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structColamd__Col__struct.html">Colamd_Col_struct</a>
+<a name="l00115"></a>00115 {
+<a name="l00116"></a><a class="code" href="structColamd__Col__struct.html#55c862b22c87023300b5ccb3044e0409">00116</a>     <span class="keywordtype">int</span> <a class="code" href="structColamd__Col__struct.html#55c862b22c87023300b5ccb3044e0409">start</a> ;         <span class="comment">/* index for A of first row in this column, or DEAD */</span>
+<a name="l00117"></a>00117                         <span class="comment">/* if column is dead */</span>
+<a name="l00118"></a><a class="code" href="structColamd__Col__struct.html#c61e32f7e56a6673058c0d57cb170f22">00118</a>     <span class="keywordtype">int</span> <a class="code" href="structColamd__Col__struct.html#c61e32f7e56a6673058c0d57cb170f22">length</a> ;        <span class="comment">/* number of rows in this column */</span>
+<a name="l00119"></a>00119     <span class="keyword">union</span>
+<a name="l00120"></a>00120     {
+<a name="l00121"></a><a class="code" href="structColamd__Col__struct.html#a52760c0c184f617d10b9946618ebc9b">00121</a>         <span class="keywordtype">int</span> <a class="code" href="structColamd__Col__struct.html#a52760c0c184f617d10b9946618ebc9b">thickness</a> ; <span class="comment">/* number of original columns represented by this */</span>
+<a name="l00122"></a>00122                         <span class="comment">/* col, if the column is alive */</span>
+<a name="l00123"></a><a class="code" href="structColamd__Col__struct.html#abae0343baec2ef7f9681bf60a23bacf">00123</a>         <span class="keywordtype">int</span> <a class="code" href="structColamd__Col__struct.html#abae0343baec2ef7f9681bf60a23bacf">parent</a> ;    <span class="comment">/* parent in parent tree super-column structure, if */</span>
+<a name="l00124"></a>00124                         <span class="comment">/* the column is dead */</span>
+<a name="l00125"></a>00125     } <a class="code" href="structColamd__Col__struct.html#54fd02e0751a496e05ed7f21a2b2a1f0">shared1</a> ;
+<a name="l00126"></a>00126     <span class="keyword">union</span>
+<a name="l00127"></a>00127     {
+<a name="l00128"></a><a class="code" href="structColamd__Col__struct.html#a3cc8f4e719f65ba6fead93f272d7237">00128</a>         <span class="keywordtype">int</span> <a class="code" href="structColamd__Col__struct.html#a3cc8f4e719f65ba6fead93f272d7237">score</a> ;     <span class="comment">/* the score used to maintain heap, if col is alive */</span>
+<a name="l00129"></a><a class="code" href="structColamd__Col__struct.html#22ecb292b2471f0a09316656713bfe6e">00129</a>         <span class="keywordtype">int</span> <a class="code" href="structColamd__Col__struct.html#22ecb292b2471f0a09316656713bfe6e">order</a> ;     <span class="comment">/* pivot ordering of this column, if col is dead */</span>
+<a name="l00130"></a>00130     } <a class="code" href="structColamd__Col__struct.html#f228addd53ebe168293e7e5c3edd372e">shared2</a> ;
+<a name="l00131"></a>00131     <span class="keyword">union</span>
+<a name="l00132"></a>00132     {
+<a name="l00133"></a><a class="code" href="structColamd__Col__struct.html#16435510e5d93025bb7b9f5715a5ba1c">00133</a>         <span class="keywordtype">int</span> <a class="code" href="structColamd__Col__struct.html#16435510e5d93025bb7b9f5715a5ba1c">headhash</a> ;  <span class="comment">/* head of a hash bucket, if col is at the head of */</span>
+<a name="l00134"></a>00134                         <span class="comment">/* a degree list */</span>
+<a name="l00135"></a><a class="code" href="structColamd__Col__struct.html#babfe23e6edb41b345085470e52d7264">00135</a>         <span class="keywordtype">int</span> <a class="code" href="structColamd__Col__struct.html#babfe23e6edb41b345085470e52d7264">hash</a> ;      <span class="comment">/* hash value, if col is not in a degree list */</span>
+<a name="l00136"></a><a class="code" href="structColamd__Col__struct.html#23aaabe8f73f1ae9016ea4bb24d494a7">00136</a>         <span class="keywordtype">int</span> <a class="code" href="structColamd__Col__struct.html#23aaabe8f73f1ae9016ea4bb24d494a7">prev</a> ;      <span class="comment">/* previous column in degree list, if col is in a */</span>
+<a name="l00137"></a>00137                         <span class="comment">/* degree list (but not at the head of a degree list) */</span>
+<a name="l00138"></a>00138     } <a class="code" href="structColamd__Col__struct.html#5fc60d7e3cd5df5789a2999c08b47732">shared3</a> ;
+<a name="l00139"></a>00139     <span class="keyword">union</span>
+<a name="l00140"></a>00140     {
+<a name="l00141"></a><a class="code" href="structColamd__Col__struct.html#39ab48d1ea2a8f6d365b60886c9ac5a1">00141</a>         <span class="keywordtype">int</span> <a class="code" href="structColamd__Col__struct.html#39ab48d1ea2a8f6d365b60886c9ac5a1">degree_next</a> ;       <span class="comment">/* next column, if col is in a degree list */</span>
+<a name="l00142"></a><a class="code" href="structColamd__Col__struct.html#640f93b7885fb94b7dc0330041b53795">00142</a>         <span class="keywordtype">int</span> <a class="code" href="structColamd__Col__struct.html#640f93b7885fb94b7dc0330041b53795">hash_next</a> ;         <span class="comment">/* next column, if col is in a hash list */</span>
+<a name="l00143"></a>00143     } <a class="code" href="structColamd__Col__struct.html#4ff41bc973d32218127f4922e4c7019a">shared4</a> ;
+<a name="l00144"></a>00144 
+<a name="l00145"></a>00145 } <a class="code" href="structColamd__Col__struct.html">Colamd_Col</a> ;
+<a name="l00146"></a>00146 
+<a name="l00147"></a><a class="code" href="structColamd__Row__struct.html">00147</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structColamd__Row__struct.html">Colamd_Row_struct</a>
+<a name="l00148"></a>00148 {
+<a name="l00149"></a><a class="code" href="structColamd__Row__struct.html#24285056395b1cf2e28ea3810d67d09d">00149</a>     <span class="keywordtype">int</span> <a class="code" href="structColamd__Row__struct.html#24285056395b1cf2e28ea3810d67d09d">start</a> ;         <span class="comment">/* index for A of first col in this row */</span>
+<a name="l00150"></a><a class="code" href="structColamd__Row__struct.html#4cf6076c6aeab980aa2add1c24913c35">00150</a>     <span class="keywordtype">int</span> <a class="code" href="structColamd__Row__struct.html#4cf6076c6aeab980aa2add1c24913c35">length</a> ;        <span class="comment">/* number of principal columns in this row */</span>
+<a name="l00151"></a>00151     <span class="keyword">union</span>
+<a name="l00152"></a>00152     {
+<a name="l00153"></a><a class="code" href="structColamd__Row__struct.html#01e336d70f1cbe2ac615d4b23c480ecd">00153</a>         <span class="keywordtype">int</span> <a class="code" href="structColamd__Row__struct.html#01e336d70f1cbe2ac615d4b23c480ecd">degree</a> ;    <span class="comment">/* number of principal & non-principal columns in row */</span>
+<a name="l00154"></a><a class="code" href="structColamd__Row__struct.html#cb0d165350cbbdad8dc4260bd48b1f80">00154</a>         <span class="keywordtype">int</span> <a class="code" href="structColamd__Row__struct.html#cb0d165350cbbdad8dc4260bd48b1f80">p</a> ;         <span class="comment">/* used as a row pointer in init_rows_cols () */</span>
+<a name="l00155"></a>00155     } <a class="code" href="structColamd__Row__struct.html#2562d9df5820b202cd5e83696fc053f5">shared1</a> ;
+<a name="l00156"></a>00156     <span class="keyword">union</span>
+<a name="l00157"></a>00157     {
+<a name="l00158"></a><a class="code" href="structColamd__Row__struct.html#00b8bd69ce2b84d9b75c5503d80c5080">00158</a>         <span class="keywordtype">int</span> <a class="code" href="structColamd__Row__struct.html#00b8bd69ce2b84d9b75c5503d80c5080">mark</a> ;      <span class="comment">/* for computing set differences and marking dead rows*/</span>
+<a name="l00159"></a><a class="code" href="structColamd__Row__struct.html#f7bf4c87b04e63e6b1abc2c86e8d1376">00159</a>         <span class="keywordtype">int</span> <a class="code" href="structColamd__Row__struct.html#f7bf4c87b04e63e6b1abc2c86e8d1376">first_column</a> ;<span class="comment">/* first column in row (used in garbage collection) */</span>
+<a name="l00160"></a>00160     } <a class="code" href="structColamd__Row__struct.html#eb2ca96dcadf6490c614ed559acef59a">shared2</a> ;
+<a name="l00161"></a>00161 
+<a name="l00162"></a>00162 } <a class="code" href="structColamd__Row__struct.html">Colamd_Row</a> ;
+<a name="l00163"></a>00163 
+<a name="l00164"></a>00164 <span class="comment">/* ========================================================================== */</span>
+<a name="l00165"></a>00165 <span class="comment">/* === Colamd recommended memory size ======================================= */</span>
+<a name="l00166"></a>00166 <span class="comment">/* ========================================================================== */</span>
+<a name="l00167"></a>00167 
+<a name="l00168"></a>00168 <span class="comment">/*</span>
+<a name="l00169"></a>00169 <span class="comment">    The recommended length Alen of the array A passed to colamd is given by</span>
+<a name="l00170"></a>00170 <span class="comment">    the COLAMD_RECOMMENDED (nnz, n_row, n_col) macro.  It returns -1 if any</span>
+<a name="l00171"></a>00171 <span class="comment">    argument is negative.  2*nnz space is required for the row and column</span>
+<a name="l00172"></a>00172 <span class="comment">    indices of the matrix. COLAMD_C (n_col) + COLAMD_R (n_row) space is</span>
+<a name="l00173"></a>00173 <span class="comment">    required for the Col and Row arrays, respectively, which are internal to</span>
+<a name="l00174"></a>00174 <span class="comment">    colamd.  An additional n_col space is the minimal amount of "elbow room",</span>
+<a name="l00175"></a>00175 <span class="comment">    and nnz/5 more space is recommended for run time efficiency.</span>
+<a name="l00176"></a>00176 <span class="comment"></span>
+<a name="l00177"></a>00177 <span class="comment">    This macro is not needed when using symamd.</span>
+<a name="l00178"></a>00178 <span class="comment"></span>
+<a name="l00179"></a>00179 <span class="comment">    Explicit typecast to int added Sept. 23, 2002, COLAMD version 2.2, to avoid</span>
+<a name="l00180"></a>00180 <span class="comment">    gcc -pedantic warning messages.</span>
+<a name="l00181"></a>00181 <span class="comment">*/</span>
+<a name="l00182"></a>00182 
+<a name="l00183"></a><a class="code" href="colamd_8h.html#339fb9b07ed315667cc4542c15116c83">00183</a> <span class="preprocessor">#define COLAMD_C(n_col) ((int) (((n_col) + 1) * sizeof (Colamd_Col) / sizeof (int)))</span>
+<a name="l00184"></a><a class="code" href="colamd_8h.html#52e8a8827c11d9c2a1f1b87e09bc8dc0">00184</a> <span class="preprocessor"></span><span class="preprocessor">#define COLAMD_R(n_row) ((int) (((n_row) + 1) * sizeof (Colamd_Row) / sizeof (int)))</span>
+<a name="l00185"></a>00185 <span class="preprocessor"></span>
+<a name="l00186"></a><a class="code" href="colamd_8h.html#a6980d68bd04f7567d7d0bd40b244c2f">00186</a> <span class="preprocessor">#define COLAMD_RECOMMENDED(nnz, n_row, n_col)                                 \</span>
+<a name="l00187"></a>00187 <span class="preprocessor">(                                                                             \</span>
+<a name="l00188"></a>00188 <span class="preprocessor">((nnz) < 0 || (n_row) < 0 || (n_col) < 0)                                     \</span>
+<a name="l00189"></a>00189 <span class="preprocessor">?                                                                             \</span>
+<a name="l00190"></a>00190 <span class="preprocessor">    (-1)                                                                      \</span>
+<a name="l00191"></a>00191 <span class="preprocessor">:                                                                             \</span>
+<a name="l00192"></a>00192 <span class="preprocessor">    (2 * (nnz) + COLAMD_C (n_col) + COLAMD_R (n_row) + (n_col) + ((nnz) / 5)) \</span>
+<a name="l00193"></a>00193 <span class="preprocessor">)</span>
+<a name="l00194"></a>00194 <span class="preprocessor"></span>
+<a name="l00195"></a>00195 <span class="comment">/* ========================================================================== */</span>
+<a name="l00196"></a>00196 <span class="comment">/* === Prototypes of user-callable routines ================================= */</span>
+<a name="l00197"></a>00197 <span class="comment">/* ========================================================================== */</span>
+<a name="l00198"></a>00198 
+<a name="l00199"></a>00199 <span class="keywordtype">int</span> <a class="code" href="colamd_8c.html#ac7214b99bcf4db1b13547521367817f">colamd_recommended</a>          <span class="comment">/* returns recommended value of Alen, */</span>
+<a name="l00200"></a>00200                                 <span class="comment">/* or (-1) if input arguments are erroneous */</span>
+<a name="l00201"></a>00201 (
+<a name="l00202"></a>00202     <span class="keywordtype">int</span> nnz,                    <span class="comment">/* nonzeros in A */</span>
+<a name="l00203"></a>00203     <span class="keywordtype">int</span> n_row,                  <span class="comment">/* number of rows in A */</span>
+<a name="l00204"></a>00204     <span class="keywordtype">int</span> n_col                   <span class="comment">/* number of columns in A */</span>
+<a name="l00205"></a>00205 ) ;
+<a name="l00206"></a>00206 
+<a name="l00207"></a>00207 <span class="keywordtype">void</span> <a class="code" href="colamd_8c.html#cd15277a8a063dd0586e280004a92c89">colamd_set_defaults</a>        <span class="comment">/* sets default parameters */</span>
+<a name="l00208"></a>00208 (                               <span class="comment">/* knobs argument is modified on output */</span>
+<a name="l00209"></a>00209     <span class="keywordtype">double</span> knobs [<a class="code" href="colamd_8h.html#e92bb10d09f7cd004f07d1baddf90548">COLAMD_KNOBS</a>] <span class="comment">/* parameter settings for colamd */</span>
+<a name="l00210"></a>00210 ) ;
+<a name="l00211"></a>00211 
+<a name="l00212"></a>00212 <span class="keywordtype">int</span> <a class="code" href="colamd_8c.html#4ace2482b681af56de48dd3ba8971baf">colamd</a>                      <span class="comment">/* returns (1) if successful, (0) otherwise*/</span>
+<a name="l00213"></a>00213 (                               <span class="comment">/* A and p arguments are modified on output */</span>
+<a name="l00214"></a>00214     <span class="keywordtype">int</span> n_row,                  <span class="comment">/* number of rows in A */</span>
+<a name="l00215"></a>00215     <span class="keywordtype">int</span> n_col,                  <span class="comment">/* number of columns in A */</span>
+<a name="l00216"></a>00216     <span class="keywordtype">int</span> Alen,                   <span class="comment">/* size of the array A */</span>
+<a name="l00217"></a>00217     <span class="keywordtype">int</span> <a class="code" href="ilu__cdrop__row_8c.html#4f397f6aca9178eb3de2026fc159fa55">A</a> [],                   <span class="comment">/* row indices of A, of size Alen */</span>
+<a name="l00218"></a>00218     <span class="keywordtype">int</span> p [],                   <span class="comment">/* column pointers of A, of size n_col+1 */</span>
+<a name="l00219"></a>00219     <span class="keywordtype">double</span> knobs [<a class="code" href="colamd_8h.html#e92bb10d09f7cd004f07d1baddf90548">COLAMD_KNOBS</a>],<span class="comment">/* parameter settings for colamd */</span>
+<a name="l00220"></a>00220     <span class="keywordtype">int</span> stats [<a class="code" href="colamd_8h.html#411703fc0a994b83ec0e00df1abfc0f7">COLAMD_STATS</a>]    <span class="comment">/* colamd output statistics and error codes */</span>
+<a name="l00221"></a>00221 ) ;
+<a name="l00222"></a>00222 
+<a name="l00223"></a>00223 <span class="keywordtype">int</span> <a class="code" href="colamd_8c.html#e81243e57d577e17400b3f532aa4f1e9">symamd</a>                              <span class="comment">/* return (1) if OK, (0) otherwise */</span>
+<a name="l00224"></a>00224 (
+<a name="l00225"></a>00225     <span class="keywordtype">int</span> n,                              <span class="comment">/* number of rows and columns of A */</span>
+<a name="l00226"></a>00226     <span class="keywordtype">int</span> <a class="code" href="ilu__cdrop__row_8c.html#4f397f6aca9178eb3de2026fc159fa55">A</a> [],                           <span class="comment">/* row indices of A */</span>
+<a name="l00227"></a>00227     <span class="keywordtype">int</span> p [],                           <span class="comment">/* column pointers of A */</span>
+<a name="l00228"></a>00228     <span class="keywordtype">int</span> perm [],                        <span class="comment">/* output permutation, size n_col+1 */</span>
+<a name="l00229"></a>00229     <span class="keywordtype">double</span> knobs [<a class="code" href="colamd_8h.html#e92bb10d09f7cd004f07d1baddf90548">COLAMD_KNOBS</a>],        <span class="comment">/* parameters (uses defaults if NULL) */</span>
+<a name="l00230"></a>00230     <span class="keywordtype">int</span> stats [<a class="code" href="colamd_8h.html#411703fc0a994b83ec0e00df1abfc0f7">COLAMD_STATS</a>],           <span class="comment">/* output statistics and error codes */</span>
+<a name="l00231"></a>00231     <span class="keywordtype">void</span> * (*allocate) (size_t, size_t),
+<a name="l00232"></a>00232                                         <span class="comment">/* pointer to calloc (ANSI C) or */</span>
+<a name="l00233"></a>00233                                         <span class="comment">/* mxCalloc (for MATLAB mexFunction) */</span>
+<a name="l00234"></a>00234     <span class="keywordtype">void</span> (*release) (<span class="keywordtype">void</span> *)
+<a name="l00235"></a>00235                                         <span class="comment">/* pointer to free (ANSI C) or */</span>
+<a name="l00236"></a>00236                                         <span class="comment">/* mxFree (for MATLAB mexFunction) */</span>
+<a name="l00237"></a>00237 ) ;
+<a name="l00238"></a>00238 
+<a name="l00239"></a>00239 <span class="keywordtype">void</span> <a class="code" href="colamd_8c.html#85f2c13be93dea98e624144272d00eed">colamd_report</a>
+<a name="l00240"></a>00240 (
+<a name="l00241"></a>00241     <span class="keywordtype">int</span> stats [<a class="code" href="colamd_8h.html#411703fc0a994b83ec0e00df1abfc0f7">COLAMD_STATS</a>]
+<a name="l00242"></a>00242 ) ;
+<a name="l00243"></a>00243 
+<a name="l00244"></a>00244 <span class="keywordtype">void</span> <a class="code" href="colamd_8c.html#df3bb99ff64711d528dafe21fd450512">symamd_report</a>
+<a name="l00245"></a>00245 (
+<a name="l00246"></a>00246     <span class="keywordtype">int</span> stats [<a class="code" href="colamd_8h.html#411703fc0a994b83ec0e00df1abfc0f7">COLAMD_STATS</a>]
+<a name="l00247"></a>00247 ) ;
+<a name="l00248"></a>00248 
+<a name="l00249"></a>00249 <span class="preprocessor">#endif </span><span class="comment">/* COLAMD_H */</span>
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/colamd_8h.html b/DOC/html/colamd_8h.html
new file mode 100644
index 0000000..02f1860
--- /dev/null
+++ b/DOC/html/colamd_8h.html
@@ -0,0 +1,794 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/colamd.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/colamd.h File Reference</h1>Colamd prototypes and definitions. <a href="#_details">More...</a>
+<p>
+<code>#include <stdlib.h></code><br>
+
+<p>
+<a href="colamd_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Col__struct.html">Colamd_Col_struct</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Row__struct.html">Colamd_Row_struct</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#e92bb10d09f7cd004f07d1baddf90548">COLAMD_KNOBS</a>   20</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#411703fc0a994b83ec0e00df1abfc0f7">COLAMD_STATS</a>   20</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#45a417439d08823fa620ca00d834dd61">COLAMD_DENSE_ROW</a>   0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#f92de54efdec91d7ab64e7bec07eb12c">COLAMD_DENSE_COL</a>   1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#babfabfa19364ec563aa9c15bcc9714e">COLAMD_DEFRAG_COUNT</a>   2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#6a4201ce55dfa3a6375b90097e8c747e">COLAMD_STATUS</a>   3</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#569d56a773011e0b4e465b3f5830e80b">COLAMD_INFO1</a>   4</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#2161fd78bbd688f943250d1d7583284b">COLAMD_INFO2</a>   5</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#15d83814c573d742764ff83e9d1d67fc">COLAMD_INFO3</a>   6</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a754fd30d924c5c8d2d402fa0a482d72">COLAMD_OK</a>   (0)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#c0d7f3882e6e9e39527aa2195dd23789">COLAMD_OK_BUT_JUMBLED</a>   (1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#2347fb9e509c8bf9b97a50f96dea281c">COLAMD_ERROR_A_not_present</a>   (-1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#51d3f9714a4cb80c0f54dea5d0c5f95f">COLAMD_ERROR_p_not_present</a>   (-2)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#8e848cfde5cdf42fcb316695305f8002">COLAMD_ERROR_nrow_negative</a>   (-3)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#2feedddbe535286cbea9eca9fca91f45">COLAMD_ERROR_ncol_negative</a>   (-4)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#7147ea7a9d673f17ef856e9914f90c81">COLAMD_ERROR_nnz_negative</a>   (-5)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#58b5d911cc825b4334ade136bad3afd3">COLAMD_ERROR_p0_nonzero</a>   (-6)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#323108d44db4186fad5a2066139f70b7">COLAMD_ERROR_A_too_small</a>   (-7)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#3b6df4a489ed0c7de8ad12251cdac5d6">COLAMD_ERROR_col_length_negative</a>   (-8)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#0559e0ff07deab1841e7aaee8cde51e6">COLAMD_ERROR_row_index_out_of_bounds</a>   (-9)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#703f11265b521c931cdd44709d141fca">COLAMD_ERROR_out_of_memory</a>   (-10)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#e97b9ba07b455e4ce07c53a4d71c1169">COLAMD_ERROR_internal_error</a>   (-999)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#339fb9b07ed315667cc4542c15116c83">COLAMD_C</a>(n_col)   ((int) (((n_col) + 1) * sizeof (<a class="el" href="structColamd__Col__struct.html">Colamd_Col</a>) / sizeof (int)))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#52e8a8827c11d9c2a1f1b87e09bc8dc0">COLAMD_R</a>(n_row)   ((int) (((n_row) + 1) * sizeof (<a class="el" href="structColamd__Row__struct.html">Colamd_Row</a>) / sizeof (int)))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a6980d68bd04f7567d7d0bd40b244c2f">COLAMD_RECOMMENDED</a>(nnz, n_row, n_col)</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structColamd__Col__struct.html">Colamd_Col_struct</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#059db10cdebbb878b50bfcd2e023315a">Colamd_Col</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structColamd__Row__struct.html">Colamd_Row_struct</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#8a1ceeb79ebba705abb1d27469f4a358">Colamd_Row</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#9b48c9b9eb5dce7e9ca42174208b1015">colamd_recommended</a> (int nnz, int n_row, int n_col)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#e582ce20a46b5ef39434acb9d66fe2ca">colamd_set_defaults</a> (double knobs[COLAMD_KNOBS])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#f5cec4b6391e4c20abfaa6da39975bca">colamd</a> (int n_row, int n_col, int Alen, int <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>[], int p[], double knobs[COLAMD_KNOBS], int stats[COLAMD_STATS])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#e3d0175d1cb36f6cb16dfe96bbf946a3">symamd</a> (int n, int <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>[], int p[], int perm[], double knobs[COLAMD_KNOBS], int stats[COLAMD_STATS], void *(*allocate)(size_t, size_t), void(*release)(void *))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#7cfa2e07413d0bc9489f10ac881faa51">colamd_report</a> (int stats[COLAMD_STATS])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#948750692c453eb36edc5b77a670ec54">symamd_report</a> (int stats[COLAMD_STATS])</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre> 
+    ==========================================================================
+    === colamd/symamd prototypes and definitions =============================
+    ==========================================================================</pre><p>
+<pre>    You must include this file (<a class="el" href="colamd_8h.html" title="Colamd prototypes and definitions.">colamd.h</a>) in any routine that uses colamd,
+    symamd, or the related macros and definitions.</pre><p>
+<pre>    Authors:</pre><p>
+<pre>	The authors of the code itself are Stefan I. Larimore and Timothy A.
+	Davis (<a href="mailto:davis at cise.ufl.edu">davis at cise.ufl.edu</a>), University of Florida.  The algorithm was
+	developed in collaboration with John Gilbert, Xerox PARC, and Esmond
+	Ng, Oak Ridge National Laboratory.</pre><p>
+<pre>    Date:</pre><p>
+<pre>	September 8, 2003.  Version 2.3.</pre><p>
+<pre>    Acknowledgements:</pre><p>
+<pre>	This work was supported by the National Science Foundation, under
+	grants DMS-9504974 and DMS-9803599.</pre><p>
+<pre>    Notice:</pre><p>
+<pre>	Copyright (c) 1998-2003 by the University of Florida.
+	All Rights Reserved.</pre><p>
+<pre>	THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+	EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre>	Permission is hereby granted to use, copy, modify, and/or distribute
+	this program, provided that the Copyright, this License, and the
+	Availability of the original version is retained on all copies and made
+	accessible to the end-user of any code or package that includes COLAMD
+	or any modified version of COLAMD.</pre><p>
+<pre>    Availability:</pre><p>
+<pre>	The colamd/symamd library is available at</pre><p>
+<pre>	    <a href="http://www.cise.ufl.edu/research/sparse/colamd/">http://www.cise.ufl.edu/research/sparse/colamd/</a></pre><p>
+<pre>	This is the <a href="http://www.cise.ufl.edu/research/sparse/colamd/colamd.h">http://www.cise.ufl.edu/research/sparse/colamd/colamd.h</a>
+	file.  It is required by the <a class="el" href="colamd_8c.html" title="A sparse matrix column ordering algorithm.">colamd.c</a>, colamdmex.c, and symamdmex.c
+	files, and by any C code that calls the routines whose prototypes are
+	listed below, or that uses the colamd/symamd definitions listed below.
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="339fb9b07ed315667cc4542c15116c83"></a><!-- doxytag: member="colamd.h::COLAMD_C" ref="339fb9b07ed315667cc4542c15116c83" args="(n_col)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_C          </td>
+          <td>(</td>
+          <td class="paramtype">n_col </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((int) (((n_col) + 1) * sizeof (<a class="el" href="structColamd__Col__struct.html">Colamd_Col</a>) / sizeof (int)))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="babfabfa19364ec563aa9c15bcc9714e"></a><!-- doxytag: member="colamd.h::COLAMD_DEFRAG_COUNT" ref="babfabfa19364ec563aa9c15bcc9714e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_DEFRAG_COUNT   2          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f92de54efdec91d7ab64e7bec07eb12c"></a><!-- doxytag: member="colamd.h::COLAMD_DENSE_COL" ref="f92de54efdec91d7ab64e7bec07eb12c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_DENSE_COL   1          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="45a417439d08823fa620ca00d834dd61"></a><!-- doxytag: member="colamd.h::COLAMD_DENSE_ROW" ref="45a417439d08823fa620ca00d834dd61" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_DENSE_ROW   0          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2347fb9e509c8bf9b97a50f96dea281c"></a><!-- doxytag: member="colamd.h::COLAMD_ERROR_A_not_present" ref="2347fb9e509c8bf9b97a50f96dea281c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_ERROR_A_not_present   (-1)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="323108d44db4186fad5a2066139f70b7"></a><!-- doxytag: member="colamd.h::COLAMD_ERROR_A_too_small" ref="323108d44db4186fad5a2066139f70b7" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_ERROR_A_too_small   (-7)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3b6df4a489ed0c7de8ad12251cdac5d6"></a><!-- doxytag: member="colamd.h::COLAMD_ERROR_col_length_negative" ref="3b6df4a489ed0c7de8ad12251cdac5d6" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_ERROR_col_length_negative   (-8)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e97b9ba07b455e4ce07c53a4d71c1169"></a><!-- doxytag: member="colamd.h::COLAMD_ERROR_internal_error" ref="e97b9ba07b455e4ce07c53a4d71c1169" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_ERROR_internal_error   (-999)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2feedddbe535286cbea9eca9fca91f45"></a><!-- doxytag: member="colamd.h::COLAMD_ERROR_ncol_negative" ref="2feedddbe535286cbea9eca9fca91f45" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_ERROR_ncol_negative   (-4)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7147ea7a9d673f17ef856e9914f90c81"></a><!-- doxytag: member="colamd.h::COLAMD_ERROR_nnz_negative" ref="7147ea7a9d673f17ef856e9914f90c81" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_ERROR_nnz_negative   (-5)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8e848cfde5cdf42fcb316695305f8002"></a><!-- doxytag: member="colamd.h::COLAMD_ERROR_nrow_negative" ref="8e848cfde5cdf42fcb316695305f8002" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_ERROR_nrow_negative   (-3)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="703f11265b521c931cdd44709d141fca"></a><!-- doxytag: member="colamd.h::COLAMD_ERROR_out_of_memory" ref="703f11265b521c931cdd44709d141fca" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_ERROR_out_of_memory   (-10)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="58b5d911cc825b4334ade136bad3afd3"></a><!-- doxytag: member="colamd.h::COLAMD_ERROR_p0_nonzero" ref="58b5d911cc825b4334ade136bad3afd3" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_ERROR_p0_nonzero   (-6)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="51d3f9714a4cb80c0f54dea5d0c5f95f"></a><!-- doxytag: member="colamd.h::COLAMD_ERROR_p_not_present" ref="51d3f9714a4cb80c0f54dea5d0c5f95f" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_ERROR_p_not_present   (-2)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0559e0ff07deab1841e7aaee8cde51e6"></a><!-- doxytag: member="colamd.h::COLAMD_ERROR_row_index_out_of_bounds" ref="0559e0ff07deab1841e7aaee8cde51e6" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_ERROR_row_index_out_of_bounds   (-9)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="569d56a773011e0b4e465b3f5830e80b"></a><!-- doxytag: member="colamd.h::COLAMD_INFO1" ref="569d56a773011e0b4e465b3f5830e80b" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_INFO1   4          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2161fd78bbd688f943250d1d7583284b"></a><!-- doxytag: member="colamd.h::COLAMD_INFO2" ref="2161fd78bbd688f943250d1d7583284b" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_INFO2   5          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="15d83814c573d742764ff83e9d1d67fc"></a><!-- doxytag: member="colamd.h::COLAMD_INFO3" ref="15d83814c573d742764ff83e9d1d67fc" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_INFO3   6          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e92bb10d09f7cd004f07d1baddf90548"></a><!-- doxytag: member="colamd.h::COLAMD_KNOBS" ref="e92bb10d09f7cd004f07d1baddf90548" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_KNOBS   20          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a754fd30d924c5c8d2d402fa0a482d72"></a><!-- doxytag: member="colamd.h::COLAMD_OK" ref="a754fd30d924c5c8d2d402fa0a482d72" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_OK   (0)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c0d7f3882e6e9e39527aa2195dd23789"></a><!-- doxytag: member="colamd.h::COLAMD_OK_BUT_JUMBLED" ref="c0d7f3882e6e9e39527aa2195dd23789" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_OK_BUT_JUMBLED   (1)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="52e8a8827c11d9c2a1f1b87e09bc8dc0"></a><!-- doxytag: member="colamd.h::COLAMD_R" ref="52e8a8827c11d9c2a1f1b87e09bc8dc0" args="(n_row)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_R          </td>
+          <td>(</td>
+          <td class="paramtype">n_row </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((int) (((n_row) + 1) * sizeof (<a class="el" href="structColamd__Row__struct.html">Colamd_Row</a>) / sizeof (int)))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a6980d68bd04f7567d7d0bd40b244c2f"></a><!-- doxytag: member="colamd.h::COLAMD_RECOMMENDED" ref="a6980d68bd04f7567d7d0bd40b244c2f" args="(nnz, n_row, n_col)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_RECOMMENDED          </td>
+          <td>(</td>
+          <td class="paramtype">nnz,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">n_row,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">n_col </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">(                                                                             \
+((nnz) < 0 || (n_row) < 0 || (n_col) < 0)                                     \
+?                                                                             \
+    (-1)                                                                      \
+:                                                                             \
+    (2 * (nnz) + <a class="code" href="colamd_8h.html#339fb9b07ed315667cc4542c15116c83">COLAMD_C</a> (n_col) + <a class="code" href="colamd_8h.html#52e8a8827c11d9c2a1f1b87e09bc8dc0">COLAMD_R</a> (n_row) + (n_col) + ((nnz) / 5)) \
+)
+</pre></div>
+</div>
+</div><p>
+<a class="anchor" name="411703fc0a994b83ec0e00df1abfc0f7"></a><!-- doxytag: member="colamd.h::COLAMD_STATS" ref="411703fc0a994b83ec0e00df1abfc0f7" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_STATS   20          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6a4201ce55dfa3a6375b90097e8c747e"></a><!-- doxytag: member="colamd.h::COLAMD_STATUS" ref="6a4201ce55dfa3a6375b90097e8c747e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COLAMD_STATUS   3          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="059db10cdebbb878b50bfcd2e023315a"></a><!-- doxytag: member="colamd.h::Colamd_Col" ref="059db10cdebbb878b50bfcd2e023315a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structColamd__Col__struct.html">Colamd_Col_struct</a>  <a class="el" href="structColamd__Col__struct.html">Colamd_Col</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8a1ceeb79ebba705abb1d27469f4a358"></a><!-- doxytag: member="colamd.h::Colamd_Row" ref="8a1ceeb79ebba705abb1d27469f4a358" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structColamd__Row__struct.html">Colamd_Row_struct</a>  <a class="el" href="structColamd__Row__struct.html">Colamd_Row</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="f5cec4b6391e4c20abfaa6da39975bca"></a><!-- doxytag: member="colamd.h::colamd" ref="f5cec4b6391e4c20abfaa6da39975bca" args="(int n_row, int n_col, int Alen, int A[], int p[], double knobs[COLAMD_KNOBS], int stats[COLAMD_STATS])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int colamd           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>Alen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>A</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>p</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>knobs</em>[COLAMD_KNOBS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>stats</em>[COLAMD_STATS]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9b48c9b9eb5dce7e9ca42174208b1015"></a><!-- doxytag: member="colamd.h::colamd_recommended" ref="9b48c9b9eb5dce7e9ca42174208b1015" args="(int nnz, int n_row, int n_col)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int colamd_recommended           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n_col</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7cfa2e07413d0bc9489f10ac881faa51"></a><!-- doxytag: member="colamd.h::colamd_report" ref="7cfa2e07413d0bc9489f10ac881faa51" args="(int stats[COLAMD_STATS])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void colamd_report           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>stats</em>[COLAMD_STATS]          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e582ce20a46b5ef39434acb9d66fe2ca"></a><!-- doxytag: member="colamd.h::colamd_set_defaults" ref="e582ce20a46b5ef39434acb9d66fe2ca" args="(double knobs[COLAMD_KNOBS])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void colamd_set_defaults           </td>
+          <td>(</td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>knobs</em>[COLAMD_KNOBS]          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e3d0175d1cb36f6cb16dfe96bbf946a3"></a><!-- doxytag: member="colamd.h::symamd" ref="e3d0175d1cb36f6cb16dfe96bbf946a3" args="(int n, int A[], int p[], int perm[], double knobs[COLAMD_KNOBS], int stats[COLAMD_STATS], void *(*allocate)(size_t, size_t), void(*release)(void *))" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int symamd           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>A</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>p</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perm</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>knobs</em>[COLAMD_KNOBS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>stats</em>[COLAMD_STATS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *(*)(size_t, size_t) </td>
+          <td class="paramname"> <em>allocate</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(void *) </td>
+          <td class="paramname"> <em>release</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="948750692c453eb36edc5b77a670ec54"></a><!-- doxytag: member="colamd.h::symamd_report" ref="948750692c453eb36edc5b77a670ec54" args="(int stats[COLAMD_STATS])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void symamd_report           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>stats</em>[COLAMD_STATS]          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cpanel__bmod_8c.html b/DOC/html/cpanel__bmod_8c.html
new file mode 100644
index 0000000..29d943b
--- /dev/null
+++ b/DOC/html/cpanel__bmod_8c.html
@@ -0,0 +1,258 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cpanel_bmod.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cpanel_bmod.c File Reference</h1>Performs numeric block updates. <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpanel__bmod_8c.html#39d81cbea11f613524e674a8c2e18c5f">clsolve</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#39d81cbea11f613524e674a8c2e18c5f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpanel__bmod_8c.html#09be65495be35085027bc26454dc3e74">cmatvec</a> (int, int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#09be65495be35085027bc26454dc3e74"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpanel__bmod_8c.html#7d4a7510d7b09e116c70302b138eee42">ccheck_tempv</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpanel__bmod_8c.html#e38539c04b47f4c159e18684e435902b">cpanel_bmod</a> (const int m, const int w, const int jcol, const int nseg, <a class="el" href="structcomplex.html">complex</a> *dense, <a class="el" href="structcomplex.html">complex</a> *tempv, int *segrep, int *repfnz, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, <a class="el" [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="7d4a7510d7b09e116c70302b138eee42"></a><!-- doxytag: member="cpanel_bmod.c::ccheck_tempv" ref="7d4a7510d7b09e116c70302b138eee42" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ccheck_tempv           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="39d81cbea11f613524e674a8c2e18c5f"></a><!-- doxytag: member="cpanel_bmod.c::clsolve" ref="39d81cbea11f613524e674a8c2e18c5f" args="(int, int, complex *, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="09be65495be35085027bc26454dc3e74"></a><!-- doxytag: member="cpanel_bmod.c::cmatvec" ref="09be65495be35085027bc26454dc3e74" args="(int, int, int, complex *, complex *, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cmatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="e38539c04b47f4c159e18684e435902b"></a><!-- doxytag: member="cpanel_bmod.c::cpanel_bmod" ref="e38539c04b47f4c159e18684e435902b" args="(const int m, const int w, const int jcol, const int nseg, complex *dense, complex *tempv, int *segrep, int *repfnz, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cpanel_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>    Performs numeric block updates (sup-panel) in topological order.
+    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+    Special processing on the supernodal portion of L[*,j]</pre><p>
+<pre>    Before entering this routine, the original nonzeros in the panel 
+    were already copied into the spa[m,w].</pre><p>
+<pre>    Updated/Output parameters-
+    dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
+    collectively in the m-by-w vector dense[*]. 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cpanel__dfs_8c.html b/DOC/html/cpanel__dfs_8c.html
new file mode 100644
index 0000000..9a2beef
--- /dev/null
+++ b/DOC/html/cpanel__dfs_8c.html
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cpanel_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cpanel_dfs.c File Reference</h1>Peforms a symbolic factorization on a panel of symbols. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpanel__dfs_8c.html#052edfd06c5aeab7a37b5fa558a06602">cpanel_dfs</a> (const int m, const int w, const int jcol, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, <a class="el" href="structcomplex.html">complex</a> *dense, int *panel_l [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="052edfd06c5aeab7a37b5fa558a06602"></a><!-- doxytag: member="cpanel_dfs.c::cpanel_dfs" ref="052edfd06c5aeab7a37b5fa558a06602" args="(const int m, const int w, const int jcol, SuperMatrix *A, int *perm_r, int *nseg, complex *dense, int *panel_lsub, int *segrep, int *repfnz, int *xprune, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cpanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel. 
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a 
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cpivotL_8c.html b/DOC/html/cpivotL_8c.html
new file mode 100644
index 0000000..0ba5df4
--- /dev/null
+++ b/DOC/html/cpivotL_8c.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cpivotL.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cpivotL.c File Reference</h1>Performs numerical pivoting. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cpivotL_8c.html#e6bc95a2710538cc5ce0904f90ef7f05">cpivotL</a> (const int jcol, const double u, int *usepr, int *perm_r, int *iperm_r, int *iperm_c, int *pivrow, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="e6bc95a2710538cc5ce0904f90ef7f05"></a><!-- doxytag: member="cpivotL.c::cpivotL" ref="e6bc95a2710538cc5ce0904f90ef7f05" args="(const int jcol, const double u, int *usepr, int *perm_r, int *iperm_r, int *iperm_c, int *pivrow, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cpivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+           pivot row = k;
+       ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+           pivot row = j;
+       ELSE
+           pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0      success;
+                 i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cpivotgrowth_8c.html b/DOC/html/cpivotgrowth_8c.html
new file mode 100644
index 0000000..77b1284
--- /dev/null
+++ b/DOC/html/cpivotgrowth_8c.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cpivotgrowth.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cpivotgrowth.c File Reference</h1>Computes the reciprocal pivot growth factor. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="cpivotgrowth_8c.html#cda3921f49d46be7eaa23b58bc2b09c5">cPivotGrowth</a> (int ncols, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">Su [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="cda3921f49d46be7eaa23b58bc2b09c5"></a><!-- doxytag: member="cpivotgrowth.c::cPivotGrowth" ref="cda3921f49d46be7eaa23b58bc2b09c5" args="(int ncols, SuperMatrix *A, int *perm_c, SuperMatrix *L, SuperMatrix *U)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float cPivotGrowth           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> Compute the reciprocal pivot growth factor of the leading ncols columns
+ of the matrix, using the formula:
+     min_j ( max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>) / max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(U_ij)</a>) )</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> ncols    (input) int
+          The number of columns of matrices A, L and U.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = NC; Dtype = SLU_C; Mtype = GE.</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SC; Dtype = SLU_C; Mtype = TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = NC;
+          Dtype = SLU_C; Mtype = TRU.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cpruneL_8c.html b/DOC/html/cpruneL_8c.html
new file mode 100644
index 0000000..7fa457b
--- /dev/null
+++ b/DOC/html/cpruneL_8c.html
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cpruneL.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cpruneL.c File Reference</h1>Prunes the L-structure. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpruneL_8c.html#a230bea3429693147cefbc58ce7b50d1">cpruneL</a> (const int jcol, const int *perm_r, const int pivrow, const int nseg, const int *segrep, const int *repfnz, int *xprune, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ *</pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="a230bea3429693147cefbc58ce7b50d1"></a><!-- doxytag: member="cpruneL.c::cpruneL" ref="a230bea3429693147cefbc58ce7b50d1" args="(const int jcol, const int *perm_r, const int pivrow, const int nseg, const int *segrep, const int *repfnz, int *xprune, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cpruneL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Prunes the L-structure of supernodes whose L-structure
+   contains the current pivot row "pivrow"
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/creadhb_8c.html b/DOC/html/creadhb_8c.html
new file mode 100644
index 0000000..329088d
--- /dev/null
+++ b/DOC/html/creadhb_8c.html
@@ -0,0 +1,345 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/creadhb.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/creadhb.c File Reference</h1>Read a matrix stored in Harwell-Boeing format. <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadhb_8c.html#d09b12d41114fe05457517797a07cc18">cDumpLine</a> (FILE *fp)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line.  <a href="#d09b12d41114fe05457517797a07cc18"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadhb_8c.html#5c4a2643da5963b5476e372f988bbd8d">cParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadhb_8c.html#352f5f08cd40d9d5720207c20b3dc9ca">cParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadhb_8c.html#fbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadhb_8c.html#a8fcc9991808e214c9760aafa83ac02c">cReadValues</a> (FILE *fp, int n, <a class="el" href="structcomplex.html">complex</a> *destination, int perline, int persize)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Read <a class="el" href="structcomplex.html">complex</a> numbers as pairs of (real, imaginary).  <a href="#a8fcc9991808e214c9760aafa83ac02c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="creadhb_8c.html#75118673183b533e85d3300b9d12e0b8">creadhb</a> (int *nrow, int *ncol, int *nonz, <a class="el" href="structcomplex.html">complex</a> **nzval, int **rowind, int **colptr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines.  <a href="#75118673183b533e85d3300b9d12e0b8"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Purpose
+ =======</pre><p>
+<pre> Read a COMPLEX PRECISION matrix stored in Harwell-Boeing format 
+ as described below.</pre><p>
+<pre> Line 1 (A72,A8) 
+  	Col. 1 - 72   Title (TITLE) 
+	Col. 73 - 80  Key (KEY)</pre><p>
+<pre> Line 2 (5I14) 
+ 	Col. 1 - 14   Total number of lines excluding header (TOTCRD) 
+ 	Col. 15 - 28  Number of lines for pointers (PTRCRD) 
+ 	Col. 29 - 42  Number of lines for row (or variable) indices (INDCRD) 
+ 	Col. 43 - 56  Number of lines for numerical values (VALCRD) 
+	Col. 57 - 70  Number of lines for right-hand sides (RHSCRD) 
+                    (including starting guesses and solution vectors 
+		       if present) 
+           	      (zero indicates no right-hand side data is present)</pre><p>
+<pre> Line 3 (A3, 11X, 4I14) 
+   	Col. 1 - 3    Matrix type (see below) (MXTYPE) 
+ 	Col. 15 - 28  Number of rows (or variables) (NROW) 
+ 	Col. 29 - 42  Number of columns (or elements) (NCOL) 
+	Col. 43 - 56  Number of row (or variable) indices (NNZERO) 
+	              (equal to number of entries for assembled matrices) 
+ 	Col. 57 - 70  Number of elemental matrix entries (NELTVL) 
+	              (zero in the case of assembled matrices) 
+ Line 4 (2A16, 2A20) 
+ 	Col. 1 - 16   Format for pointers (PTRFMT) 
+	Col. 17 - 32  Format for row (or variable) indices (INDFMT) 
+	Col. 33 - 52  Format for numerical values of coefficient matrix (VALFMT) 
+ 	Col. 53 - 72 Format for numerical values of right-hand sides (RHSFMT)</pre><p>
+<pre> Line 5 (A3, 11X, 2I14) Only present if there are right-hand sides present 
+    	Col. 1 	      Right-hand side type: 
+	         	  F for full storage or M for same format as matrix 
+    	Col. 2        G if a starting vector(s) (Guess) is supplied. (RHSTYP) 
+    	Col. 3        X if an exact solution vector(s) is supplied. 
+	Col. 15 - 28  Number of right-hand sides (NRHS) 
+	Col. 29 - 42  Number of row indices (NRHSIX) 
+          	      (ignored in case of unassembled matrices)</pre><p>
+<pre> The three character type field on line 3 describes the matrix type. 
+ The following table lists the permitted values for each of the three 
+ characters. As an example of the type field, RSA denotes that the matrix 
+ is real, symmetric, and assembled.</pre><p>
+<pre> First Character: 
+	R Real matrix 
+	C Complex matrix 
+	P Pattern only (no numerical values supplied)</pre><p>
+<pre> Second Character: 
+	S Symmetric 
+	U Unsymmetric 
+	H Hermitian 
+	Z Skew symmetric 
+	R Rectangular</pre><p>
+<pre> Third Character: 
+	A Assembled 
+	E Elemental matrices (unassembled)</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="d09b12d41114fe05457517797a07cc18"></a><!-- doxytag: member="creadhb.c::cDumpLine" ref="d09b12d41114fe05457517797a07cc18" args="(FILE *fp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cDumpLine           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="352f5f08cd40d9d5720207c20b3dc9ca"></a><!-- doxytag: member="creadhb.c::cParseFloatFormat" ref="352f5f08cd40d9d5720207c20b3dc9ca" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cParseFloatFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5c4a2643da5963b5476e372f988bbd8d"></a><!-- doxytag: member="creadhb.c::cParseIntFormat" ref="5c4a2643da5963b5476e372f988bbd8d" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cParseIntFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="75118673183b533e85d3300b9d12e0b8"></a><!-- doxytag: member="creadhb.c::creadhb" ref="75118673183b533e85d3300b9d12e0b8" args="(int *nrow, int *ncol, int *nonz, complex **nzval, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void creadhb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nonz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a8fcc9991808e214c9760aafa83ac02c"></a><!-- doxytag: member="creadhb.c::cReadValues" ref="a8fcc9991808e214c9760aafa83ac02c" args="(FILE *fp, int n, complex *destination, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cReadValues           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>destination</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fbec2a501b92e7e7bb13af2e21520522"></a><!-- doxytag: member="creadhb.c::ReadVector" ref="fbec2a501b92e7e7bb13af2e21520522" args="(FILE *fp, int n, int *where, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int ReadVector           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>where</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/creadrb_8c.html b/DOC/html/creadrb_8c.html
new file mode 100644
index 0000000..84876f4
--- /dev/null
+++ b/DOC/html/creadrb_8c.html
@@ -0,0 +1,297 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/creadrb.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/creadrb.c File Reference</h1>Read a matrix stored in Rutherford-Boeing format. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadrb_8c.html#2d52636395e794c245819afa89a9898d">cDumpLine</a> (FILE *fp)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line.  <a href="#2d52636395e794c245819afa89a9898d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadrb_8c.html#9cd499747b7a42c6086b922fc9e37844">cParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadrb_8c.html#38c28f0c6247583fd686959c0b3d416c">cParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadrb_8c.html#fbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadrb_8c.html#7737ab09a4d223433775e2566867ce8c">cReadValues</a> (FILE *fp, int n, <a class="el" href="structcomplex.html">complex</a> *destination, int perline, int persize)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Read <a class="el" href="structcomplex.html">complex</a> numbers as pairs of (real, imaginary).  <a href="#7737ab09a4d223433775e2566867ce8c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="creadrb_8c.html#af2ecfdc506c8a67ac3356758edd5502">creadrb</a> (int *nrow, int *ncol, int *nonz, <a class="el" href="structcomplex.html">complex</a> **nzval, int **rowind, int **colptr)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre><p>
+Purpose =======<p>
+Read a COMPLEX PRECISION matrix stored in Rutherford-Boeing format as described below.<p>
+Line 1 (A72, A8) Col. 1 - 72 Title (TITLE) Col. 73 - 80 Matrix name / identifier (MTRXID)<p>
+Line 2 (I14, 3(1X, I13)) Col. 1 - 14 Total number of lines excluding header (TOTCRD) Col. 16 - 28 Number of lines for pointers (PTRCRD) Col. 30 - 42 Number of lines for row (or variable) indices (INDCRD) Col. 44 - 56 Number of lines for numerical values (VALCRD)<p>
+Line 3 (A3, 11X, 4(1X, I13)) Col. 1 - 3 Matrix type (see below) (MXTYPE) Col. 15 - 28 Compressed Column: Number of rows (NROW) Elemental: Largest integer used to index variable (MVAR) Col. 30 - 42 Compressed Column: Number of columns (NCOL) Elemental: Number of element matrices (NELT) Col. 44 - 56 Compressed Column: Number of entries (NNZERO) Elemental: Number of variable indeces (NVARIX) Col. 58 - 70 Compressed Column: Unused, explicitly zero Elemental: Number of elemental matrix entrie [...]
+Line 4 (2A16, A20) Col. 1 - 16 Fortran format for pointers (PTRFMT) Col. 17 - 32 Fortran format for row (or variable) indices (INDFMT) Col. 33 - 52 Fortran format for numerical values of coefficient matrix (VALFMT) (blank in the case of matrix patterns)<p>
+The three character type field on line 3 describes the matrix type. The following table lists the permitted values for each of the three characters. As an example of the type field, RSA denotes that the matrix is real, symmetric, and assembled.<p>
+First Character: R Real matrix C Complex matrix I integer matrix P Pattern only (no numerical values supplied) Q Pattern only (numerical values supplied in associated auxiliary value file)<p>
+Second Character: S Symmetric U Unsymmetric H Hermitian Z Skew symmetric R Rectangular<p>
+Third Character: A Compressed column form E Elemental form<hr><h2>Function Documentation</h2>
+<a class="anchor" name="2d52636395e794c245819afa89a9898d"></a><!-- doxytag: member="creadrb.c::cDumpLine" ref="2d52636395e794c245819afa89a9898d" args="(FILE *fp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int cDumpLine           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="38c28f0c6247583fd686959c0b3d416c"></a><!-- doxytag: member="creadrb.c::cParseFloatFormat" ref="38c28f0c6247583fd686959c0b3d416c" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int cParseFloatFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9cd499747b7a42c6086b922fc9e37844"></a><!-- doxytag: member="creadrb.c::cParseIntFormat" ref="9cd499747b7a42c6086b922fc9e37844" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int cParseIntFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="af2ecfdc506c8a67ac3356758edd5502"></a><!-- doxytag: member="creadrb.c::creadrb" ref="af2ecfdc506c8a67ac3356758edd5502" args="(int *nrow, int *ncol, int *nonz, complex **nzval, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void creadrb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nonz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7737ab09a4d223433775e2566867ce8c"></a><!-- doxytag: member="creadrb.c::cReadValues" ref="7737ab09a4d223433775e2566867ce8c" args="(FILE *fp, int n, complex *destination, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int cReadValues           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>destination</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fbec2a501b92e7e7bb13af2e21520522"></a><!-- doxytag: member="creadrb.c::ReadVector" ref="fbec2a501b92e7e7bb13af2e21520522" args="(FILE *fp, int n, int *where, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int ReadVector           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>where</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/creadtriple_8c.html b/DOC/html/creadtriple_8c.html
new file mode 100644
index 0000000..26e3f42
--- /dev/null
+++ b/DOC/html/creadtriple_8c.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/creadtriple.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/creadtriple.c File Reference</h1>Read a matrix stored in triplet (coordinate) format. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="creadtriple_8c.html#784a2e9d5ddef7abd1706abeb73ee498">creadtriple</a> (int *m, int *n, int *nonz, <a class="el" href="structcomplex.html">complex</a> **nzval, int **rowind, int **colptr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="creadtriple_8c.html#5daca19d6cd5379145d89f172703fa6b">creadrhs</a> (int m, <a class="el" href="structcomplex.html">complex</a> *b)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="5daca19d6cd5379145d89f172703fa6b"></a><!-- doxytag: member="creadtriple.c::creadrhs" ref="5daca19d6cd5379145d89f172703fa6b" args="(int m, complex *b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void creadrhs           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>b</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="784a2e9d5ddef7abd1706abeb73ee498"></a><!-- doxytag: member="creadtriple.c::creadtriple" ref="784a2e9d5ddef7abd1706abeb73ee498" args="(int *m, int *n, int *nonz, complex **nzval, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void creadtriple           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nonz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/csnode__bmod_8c.html b/DOC/html/csnode__bmod_8c.html
new file mode 100644
index 0000000..89f3723
--- /dev/null
+++ b/DOC/html/csnode__bmod_8c.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/csnode_bmod.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/csnode_bmod.c File Reference</h1>Performs numeric block updates within the relaxed snode. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="csnode__bmod_8c.html#b5d22385d602a4fe7b7955129fc54ac8">csnode_bmod</a> (const int jcol, const int jsupno, const int fsupc, <a class="el" href="structcomplex.html">complex</a> *dense, <a class="el" href="structcomplex.html">complex</a> *tempv, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, <a class="el" href="structSuperLUStat__t.html"> [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode.  <a href="#b5d22385d602a4fe7b7955129fc54ac8"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="b5d22385d602a4fe7b7955129fc54ac8"></a><!-- doxytag: member="csnode_bmod.c::csnode_bmod" ref="b5d22385d602a4fe7b7955129fc54ac8" args="(const int jcol, const int jsupno, const int fsupc, complex *dense, complex *tempv, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int csnode_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jsupno</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>fsupc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/csnode__dfs_8c.html b/DOC/html/csnode__dfs_8c.html
new file mode 100644
index 0000000..4177d8c
--- /dev/null
+++ b/DOC/html/csnode__dfs_8c.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/csnode_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/csnode_dfs.c File Reference</h1>Determines the union of row structures of columns within the relaxed node. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="csnode__dfs_8c.html#1c7b34abd214279177619773ad24b759">csnode_dfs</a> (const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *xprune, int *marker, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="1c7b34abd214279177619773ad24b759"></a><!-- doxytag: member="csnode_dfs.c::csnode_dfs" ref="1c7b34abd214279177619773ad24b759" args="(const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *xprune, int *marker, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int csnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="csnode__dfs_8c.html#1c7b34abd214279177619773ad24b759">csnode_dfs()</a> - Determine the union of the row structures of those 
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/csp__blas2_8c.html b/DOC/html/csp__blas2_8c.html
new file mode 100644
index 0000000..c888ed4
--- /dev/null
+++ b/DOC/html/csp__blas2_8c.html
@@ -0,0 +1,401 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/csp_blas2.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/csp_blas2.c File Reference</h1>Sparse BLAS 2, using some dense BLAS 2 operations. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="csp__blas2_8c.html#34580dfcbd886fe93845353ac7dbeaa1">cusolve</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#34580dfcbd886fe93845353ac7dbeaa1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="csp__blas2_8c.html#39d81cbea11f613524e674a8c2e18c5f">clsolve</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#39d81cbea11f613524e674a8c2e18c5f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="csp__blas2_8c.html#09be65495be35085027bc26454dc3e74">cmatvec</a> (int, int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#09be65495be35085027bc26454dc3e74"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="csp__blas2_8c.html#51cbd689a51632885b9b034002631a6e">sp_ctrsv</a> (char *uplo, char *trans, char *diag, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, <a class="el" href="structcomplex.html">complex</a> *x, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *s [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b.  <a href="#51cbd689a51632885b9b034002631a6e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="csp__blas2_8c.html#1adbbd2f478e6a22843d82a07d42fb63">sp_cgemv</a> (char *trans, <a class="el" href="structcomplex.html">complex</a> alpha, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="structcomplex.html">complex</a> *x, int incx, <a c [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y.  <a href="#1adbbd2f478e6a22843d82a07d42fb63"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="39d81cbea11f613524e674a8c2e18c5f"></a><!-- doxytag: member="csp_blas2.c::clsolve" ref="39d81cbea11f613524e674a8c2e18c5f" args="(int, int, complex *, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="09be65495be35085027bc26454dc3e74"></a><!-- doxytag: member="csp_blas2.c::cmatvec" ref="09be65495be35085027bc26454dc3e74" args="(int, int, int, complex *, complex *, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cmatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="34580dfcbd886fe93845353ac7dbeaa1"></a><!-- doxytag: member="csp_blas2.c::cusolve" ref="34580dfcbd886fe93845353ac7dbeaa1" args="(int, int, complex *, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cusolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="1adbbd2f478e6a22843d82a07d42fb63"></a><!-- doxytag: member="csp_blas2.c::sp_cgemv" ref="1adbbd2f478e6a22843d82a07d42fb63" args="(char *trans, complex alpha, SuperMatrix *A, complex *x, int incx, complex beta, complex *y, int incy)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_cgemv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incy</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>  
+   Purpose   
+   =======</pre><p>
+<pre>   <a class="el" href="csp__blas2_8c.html#1adbbd2f478e6a22843d82a07d42fb63" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x...">sp_cgemv()</a>  performs one of the matrix-vector operations   
+      y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
+   where alpha and beta are scalars, x and y are vectors and A is a
+   sparse A->nrow by A->ncol matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANS  - (input) char*
+            On entry, TRANS specifies the operation to be performed as   
+            follows:   
+               TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
+               TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
+               TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.</pre><p>
+<pre>   ALPHA  - (input) <a class="el" href="structcomplex.html">complex</a>
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Before entry, the leading m by n part of the array A must   
+            contain the matrix of coefficients.</pre><p>
+<pre>   X      - (input) complex*, array of DIMENSION at least   
+            ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
+           and at least   
+            ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
+            Before entry, the incremented array X must contain the   
+            vector x.</pre><p>
+<pre>   INCX   - (input) int
+            On entry, INCX specifies the increment for the elements of   
+            X. INCX must not be zero.</pre><p>
+<pre>   BETA   - (input) <a class="el" href="structcomplex.html">complex</a>
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then Y need not be set on input.</pre><p>
+<pre>   Y      - (output) complex*,  array of DIMENSION at least   
+            ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
+            and at least   
+            ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
+            Before entry with BETA non-zero, the incremented array Y   
+            must contain the vector y. On exit, Y is overwritten by the 
+            updated vector y.</pre><p>
+<pre>   INCY   - (input) int
+            On entry, INCY specifies the increment for the elements of   
+            Y. INCY must not be zero.</pre><p>
+<pre>    ==== Sparse Level 2 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="51cbd689a51632885b9b034002631a6e"></a><!-- doxytag: member="csp_blas2.c::sp_ctrsv" ref="51cbd689a51632885b9b034002631a6e" args="(char *uplo, char *trans, char *diag, SuperMatrix *L, SuperMatrix *U, complex *x, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_ctrsv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>uplo</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>diag</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose
+   =======</pre><p>
+<pre>   <a class="el" href="csp__blas2_8c.html#51cbd689a51632885b9b034002631a6e" title="Solves one of the systems of equations A*x = b, or A'*x = b.">sp_ctrsv()</a> solves one of the systems of equations   
+       A*x = b,   or   A'*x = b,
+   where b and x are n element vectors and A is a sparse unit , or   
+   non-unit, upper or lower triangular matrix.   
+   No test for singularity or near-singularity is included in this   
+   routine. Such tests must be performed before calling this routine.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   uplo   - (input) char*
+            On entry, uplo specifies whether the matrix is an upper or   
+             lower triangular matrix as follows:   
+                uplo = 'U' or 'u'   A is an upper triangular matrix.   
+                uplo = 'L' or 'l'   A is a lower triangular matrix.</pre><p>
+<pre>   trans  - (input) char*
+             On entry, trans specifies the equations to be solved as   
+             follows:   
+                trans = 'N' or 'n'   A*x = b.   
+                trans = 'T' or 't'   A'*x = b.
+                trans = 'C' or 'c'   A^H*x = b.</pre><p>
+<pre>   diag   - (input) char*
+             On entry, diag specifies whether or not A is unit   
+             triangular as follows:   
+                diag = 'U' or 'u'   A is assumed to be unit triangular.   
+                diag = 'N' or 'n'   A is not assumed to be unit   
+                                    triangular.</pre><p>
+<pre>   L       - (input) SuperMatrix*
+	       The factor L from the factorization Pr*A*Pc=L*U. Use
+             compressed row subscripts storage for supernodes,
+             i.e., L has types: Stype = SC, Dtype = SLU_C, Mtype = TRLU.</pre><p>
+<pre>   U       - (input) SuperMatrix*
+	        The factor U from the factorization Pr*A*Pc=L*U.
+	        U has types: Stype = NC, Dtype = SLU_C, Mtype = TRU.</pre><p>
+<pre>   x       - (input/output) complex*
+             Before entry, the incremented array X must contain the n   
+             element right-hand side vector b. On exit, X is overwritten 
+             with the solution vector x.</pre><p>
+<pre>   info    - (output) int*
+             If *info = -i, the i-th argument had an illegal value.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/csp__blas3_8c.html b/DOC/html/csp__blas3_8c.html
new file mode 100644
index 0000000..372e77e
--- /dev/null
+++ b/DOC/html/csp__blas3_8c.html
@@ -0,0 +1,199 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/csp_blas3.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/csp_blas3.c File Reference</h1>Sparse BLAS3, using some dense BLAS3 operations. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="csp__blas3_8c.html#23c01569bec7ec0c247eb5df98f67841">sp_cgemm</a> (char *transa, char *transb, int m, int n, int k, <a class="el" href="structcomplex.html">complex</a> alpha, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="structcomplex. [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="23c01569bec7ec0c247eb5df98f67841"></a><!-- doxytag: member="csp_blas3.c::sp_cgemm" ref="23c01569bec7ec0c247eb5df98f67841" args="(char *transa, char *transb, int m, int n, int k, complex alpha, SuperMatrix *A, complex *b, int ldb, complex beta, complex *c, int ldc)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_cgemm           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transa</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   sp_c performs one of the matrix-matrix operations</pre><p>
+<pre>      C := alpha*op( A )*op( B ) + beta*C,</pre><p>
+<pre>   where  op( X ) is one of</pre><p>
+<pre>      op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),</pre><p>
+<pre>   alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
+   an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANSA - (input) char*
+            On entry, TRANSA specifies the form of op( A ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSA = 'N' or 'n',  op( A ) = A.   
+               TRANSA = 'T' or 't',  op( A ) = A'.   
+               TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
+            Unchanged on exit.</pre><p>
+<pre>   TRANSB - (input) char*
+            On entry, TRANSB specifies the form of op( B ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSB = 'N' or 'n',  op( B ) = B.   
+               TRANSB = 'T' or 't',  op( B ) = B'.   
+               TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
+            Unchanged on exit.</pre><p>
+<pre>   M      - (input) int   
+            On entry,  M  specifies  the number of rows of the matrix 
+	     op( A ) and of the matrix C.  M must be at least zero. 
+	     Unchanged on exit.</pre><p>
+<pre>   N      - (input) int
+            On entry,  N specifies the number of columns of the matrix 
+	     op( B ) and the number of columns of the matrix C. N must be 
+	     at least zero.
+	     Unchanged on exit.</pre><p>
+<pre>   K      - (input) int
+            On entry, K specifies the number of columns of the matrix 
+	     op( A ) and the number of rows of the matrix op( B ). K must 
+	     be at least  zero.   
+           Unchanged on exit.</pre><p>
+<pre>   ALPHA  - (input) <a class="el" href="structcomplex.html">complex</a>
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+            Currently, the type of A can be:
+                Stype = NC or NCP; Dtype = SLU_C; Mtype = GE. 
+            In the future, more general A can be handled.</pre><p>
+<pre>   B      - COMPLEX PRECISION array of DIMENSION ( LDB, kb ), where kb is 
+            n when TRANSB = 'N' or 'n',  and is  k otherwise.   
+            Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
+            part of the array B must contain the matrix B, otherwise 
+            the leading n by k part of the array B must contain the 
+            matrix B.   
+            Unchanged on exit.</pre><p>
+<pre>   LDB    - (input) int
+            On entry, LDB specifies the first dimension of B as declared 
+            in the calling (sub) program. LDB must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max( 1, n )</a>.  
+            Unchanged on exit.</pre><p>
+<pre>   BETA   - (input) <a class="el" href="structcomplex.html">complex</a>
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then C need not be set on input.</pre><p>
+<pre>   C      - COMPLEX PRECISION array of DIMENSION ( LDC, n ).   
+            Before entry, the leading m by n part of the array C must 
+            contain the matrix C,  except when beta is zero, in which 
+            case C need not be set on entry.   
+            On exit, the array C is overwritten by the m by n matrix 
+	     ( alpha*op( A )*B + beta*C ).</pre><p>
+<pre>   LDC    - (input) int
+            On entry, LDC specifies the first dimension of C as declared 
+            in the calling (sub)program. LDC must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max(1,m)</a>.   
+            Unchanged on exit.</pre><p>
+<pre>   ==== Sparse Level 3 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/cutil_8c.html b/DOC/html/cutil_8c.html
new file mode 100644
index 0000000..7314760
--- /dev/null
+++ b/DOC/html/cutil_8c.html
@@ -0,0 +1,994 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/cutil.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/cutil.c File Reference</h1>Matrix utility functions. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#bb6caf8afa858f9adaf0ff8421ac03dd">cCreate_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, <a class="el" href="structcomplex.html">complex</a> *nzval, int *rowind, int *colptr, <a class="el" href="sup [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related.  <a href="#bb6caf8afa858f9adaf0ff8421ac03dd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#58b408cacf22c559b9b361ae10956f90">cCreate_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, <a class="el" href="structcomplex.html">complex</a> *nzval, int *colind, int *rowptr, <a class="el" href="sup [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#6954ae5638f7ba23ae15c403313d93b2">cCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *B)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B.  <a href="#6954ae5638f7ba23ae15c403313d93b2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#a1e1455807ad7dbf3a5b63842eccd3ae">cCreate_Dense_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *X, int m, int n, <a class="el" href="structcomplex.html">complex</a> *x, int ldx, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> stype, <a class="el" href="supermatrix_8h.html#7987 [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#626267a542de9e81c94f1f6049c68c2f">cCopy_Dense_Matrix</a> (int M, int N, <a class="el" href="structcomplex.html">complex</a> *X, int ldx, <a class="el" href="structcomplex.html">complex</a> *Y, int ldy)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#b70481bde9dc947f9dc1f42580fe6086">cCreate_SuperNode_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, int m, int n, int nnz, <a class="el" href="structcomplex.html">complex</a> *nzval, int *nzval_colptr, int *rowind, int *rowind_colptr, int *col_to_sup, int *sup_to_col, <a class="el" href="supermatrix_8h.html#9d2 [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#25187d2687836e013bb8a8da5822416c">cCompRow_to_CompCol</a> (int m, int n, int nnz, <a class="el" href="structcomplex.html">complex</a> *a, int *colind, int *rowptr, <a class="el" href="structcomplex.html">complex</a> **at, int **rowind, int **colptr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage.  <a href="#25187d2687836e013bb8a8da5822416c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#dbd15bf3edf77d21b1c4c5096dcacf7f">cPrint_CompCol_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging.  <a href="#dbd15bf3edf77d21b1c4c5096dcacf7f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#1eeeb7938a9874f086c97b88b82645dd">cPrint_SuperNode_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#069950e573473aa7fcf3739bcfac5983">cPrint_Dense_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#4fc78919cd6e7744cec4a8b32031d571">cprint_lu_col</a> (char *msg, int jcol, int pivrow, int *xprune, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor.  <a href="#4fc78919cd6e7744cec4a8b32031d571"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#972fd0ea7e3abcd9f8d3322d425def4e">ccheck_tempv</a> (int n, <a class="el" href="structcomplex.html">complex</a> *tempv)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check whether tempv[] == 0. This should be true before and after calling any numeric routines, i.e., "panel_bmod" and "column_bmod".  <a href="#972fd0ea7e3abcd9f8d3322d425def4e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#ca22454204c3e0c894b1ccb7d31c325c">cGenXtrue</a> (int n, int nrhs, <a class="el" href="structcomplex.html">complex</a> *x, int ldx)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#1fd859b01a2660fee78c2ed6336c2c86">cFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, int nrhs, <a class="el" href="structcomplex.html">complex</a> *x, int ldx, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a4 [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's.  <a href="#1fd859b01a2660fee78c2ed6336c2c86"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#0987feeb2bd380db917660cde3352ec7">cfill</a> (<a class="el" href="structcomplex.html">complex</a> *a, int alen, <a class="el" href="structcomplex.html">complex</a> dval)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fills a <a class="el" href="structcomplex.html">complex</a> precision array with a given value.  <a href="#0987feeb2bd380db917660cde3352ec7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#1936a1981a1b766e102aec4be7d98f57">cinf_norm_error</a> (int nrhs, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *X, <a class="el" href="structcomplex.html">complex</a> *xtrue)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector.  <a href="#1936a1981a1b766e102aec4be7d98f57"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#84a1610e172fb59a0bc19a1dadcb9fbe">cPrintPerf</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *mem_usage, float rpg, float rcond, float *ferr, float *berr, char *equed, <a class="el" href="struc [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Print performance of the code.  <a href="#84a1610e172fb59a0bc19a1dadcb9fbe"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#f6a8d174ff8ba298e99b4ac94794d5e1">print_complex_vec</a> (char *what, int n, <a class="el" href="structcomplex.html">complex</a> *vec)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.1) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ August 1, 2008</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="972fd0ea7e3abcd9f8d3322d425def4e"></a><!-- doxytag: member="cutil.c::ccheck_tempv" ref="972fd0ea7e3abcd9f8d3322d425def4e" args="(int n, complex *tempv)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ccheck_tempv           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>tempv</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="25187d2687836e013bb8a8da5822416c"></a><!-- doxytag: member="cutil.c::cCompRow_to_CompCol" ref="25187d2687836e013bb8a8da5822416c" args="(int m, int n, int nnz, complex *a, int *colind, int *rowptr, complex **at, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cCompRow_to_CompCol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>colind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname"> <em>at</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6954ae5638f7ba23ae15c403313d93b2"></a><!-- doxytag: member="cutil.c::cCopy_CompCol_Matrix" ref="6954ae5638f7ba23ae15c403313d93b2" args="(SuperMatrix *A, SuperMatrix *B)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cCopy_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="626267a542de9e81c94f1f6049c68c2f"></a><!-- doxytag: member="cutil.c::cCopy_Dense_Matrix" ref="626267a542de9e81c94f1f6049c68c2f" args="(int M, int N, complex *X, int ldx, complex *Y, int ldy)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cCopy_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>Y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldy</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Copies a two-dimensional matrix X to another matrix Y. 
+</div>
+</div><p>
+<a class="anchor" name="bb6caf8afa858f9adaf0ff8421ac03dd"></a><!-- doxytag: member="cutil.c::cCreate_CompCol_Matrix" ref="bb6caf8afa858f9adaf0ff8421ac03dd" args="(SuperMatrix *A, int m, int n, int nnz, complex *nzval, int *rowind, int *colptr, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cCreate_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="58b408cacf22c559b9b361ae10956f90"></a><!-- doxytag: member="cutil.c::cCreate_CompRow_Matrix" ref="58b408cacf22c559b9b361ae10956f90" args="(SuperMatrix *A, int m, int n, int nnz, complex *nzval, int *colind, int *rowptr, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cCreate_CompRow_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>colind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a1e1455807ad7dbf3a5b63842eccd3ae"></a><!-- doxytag: member="cutil.c::cCreate_Dense_Matrix" ref="a1e1455807ad7dbf3a5b63842eccd3ae" args="(SuperMatrix *X, int m, int n, complex *x, int ldx, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cCreate_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b70481bde9dc947f9dc1f42580fe6086"></a><!-- doxytag: member="cutil.c::cCreate_SuperNode_Matrix" ref="b70481bde9dc947f9dc1f42580fe6086" args="(SuperMatrix *L, int m, int n, int nnz, complex *nzval, int *nzval_colptr, int *rowind, int *rowind_colptr, int *col_to_sup, int *sup_to_col, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cCreate_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nzval_colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowind_colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>col_to_sup</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>sup_to_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0987feeb2bd380db917660cde3352ec7"></a><!-- doxytag: member="cutil.c::cfill" ref="0987feeb2bd380db917660cde3352ec7" args="(complex *a, int alen, complex dval)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cfill           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>alen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>dval</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1fd859b01a2660fee78c2ed6336c2c86"></a><!-- doxytag: member="cutil.c::cFillRHS" ref="1fd859b01a2660fee78c2ed6336c2c86" args="(trans_t trans, int nrhs, complex *x, int ldx, SuperMatrix *A, SuperMatrix *B)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cFillRHS           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ca22454204c3e0c894b1ccb7d31c325c"></a><!-- doxytag: member="cutil.c::cGenXtrue" ref="ca22454204c3e0c894b1ccb7d31c325c" args="(int n, int nrhs, complex *x, int ldx)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cGenXtrue           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1936a1981a1b766e102aec4be7d98f57"></a><!-- doxytag: member="cutil.c::cinf_norm_error" ref="1936a1981a1b766e102aec4be7d98f57" args="(int nrhs, SuperMatrix *X, complex *xtrue)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cinf_norm_error           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>xtrue</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="dbd15bf3edf77d21b1c4c5096dcacf7f"></a><!-- doxytag: member="cutil.c::cPrint_CompCol_Matrix" ref="dbd15bf3edf77d21b1c4c5096dcacf7f" args="(char *what, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cPrint_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="069950e573473aa7fcf3739bcfac5983"></a><!-- doxytag: member="cutil.c::cPrint_Dense_Matrix" ref="069950e573473aa7fcf3739bcfac5983" args="(char *what, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cPrint_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4fc78919cd6e7744cec4a8b32031d571"></a><!-- doxytag: member="cutil.c::cprint_lu_col" ref="4fc78919cd6e7744cec4a8b32031d571" args="(char *msg, int jcol, int pivrow, int *xprune, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cprint_lu_col           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>msg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1eeeb7938a9874f086c97b88b82645dd"></a><!-- doxytag: member="cutil.c::cPrint_SuperNode_Matrix" ref="1eeeb7938a9874f086c97b88b82645dd" args="(char *what, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cPrint_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="84a1610e172fb59a0bc19a1dadcb9fbe"></a><!-- doxytag: member="cutil.c::cPrintPerf" ref="84a1610e172fb59a0bc19a1dadcb9fbe" args="(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage, float rpg, float rcond, float *ferr, float *berr, char *equed, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cPrintPerf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>rpg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f6a8d174ff8ba298e99b4ac94794d5e1"></a><!-- doxytag: member="cutil.c::print_complex_vec" ref="f6a8d174ff8ba298e99b4ac94794d5e1" args="(char *what, int n, complex *vec)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">print_complex_vec           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>vec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dcolumn__bmod_8c.html b/DOC/html/dcolumn__bmod_8c.html
new file mode 100644
index 0000000..2fd32ac
--- /dev/null
+++ b/DOC/html/dcolumn__bmod_8c.html
@@ -0,0 +1,272 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dcolumn_bmod.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dcolumn_bmod.c File Reference</h1>performs numeric block updates <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dcolumn__bmod_8c.html#ca18e78d81448d99eec840b19de76efd">dusolve</a> (int, int, double *, double *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#ca18e78d81448d99eec840b19de76efd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dcolumn__bmod_8c.html#56d27043eac0282b0d0e4106acedb083">dlsolve</a> (int, int, double *, double *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#56d27043eac0282b0d0e4106acedb083"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dcolumn__bmod_8c.html#65523602382b3d96c9852545ae24815d">dmatvec</a> (int, int, int, double *, double *, double *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#65523602382b3d96c9852545ae24815d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dcolumn__bmod_8c.html#5ca322682f98f276feb3c50b31ca56b8">dcolumn_bmod</a> (const int jcol, const int nseg, double *dense, double *tempv, int *segrep, int *repfnz, int fpanelc, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre>  Permission is hereby granted to use or copy this program for any
+  purpose, provided the above notices are retained on all copies.
+  Permission to modify the code and to distribute modified code is
+  granted, provided the above notices are retained, and a notice that
+  the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="5ca322682f98f276feb3c50b31ca56b8"></a><!-- doxytag: member="dcolumn_bmod.c::dcolumn_bmod" ref="5ca322682f98f276feb3c50b31ca56b8" args="(const int jcol, const int nseg, double *dense, double *tempv, int *segrep, int *repfnz, int fpanelc, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dcolumn_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>fpanelc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose:
+ ========
+ Performs numeric block updates (sup-col) in topological order.
+ It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ Special processing on the supernodal portion of L[*,j]
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="56d27043eac0282b0d0e4106acedb083"></a><!-- doxytag: member="dcolumn_bmod.c::dlsolve" ref="56d27043eac0282b0d0e4106acedb083" args="(int, int, double *, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dlsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="65523602382b3d96c9852545ae24815d"></a><!-- doxytag: member="dcolumn_bmod.c::dmatvec" ref="65523602382b3d96c9852545ae24815d" args="(int, int, int, double *, double *, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dmatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="ca18e78d81448d99eec840b19de76efd"></a><!-- doxytag: member="dcolumn_bmod.c::dusolve" ref="ca18e78d81448d99eec840b19de76efd" args="(int, int, double *, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dusolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dcolumn__dfs_8c.html b/DOC/html/dcolumn__dfs_8c.html
new file mode 100644
index 0000000..87015ce
--- /dev/null
+++ b/DOC/html/dcolumn__dfs_8c.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dcolumn_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dcolumn_dfs.c File Reference</h1>Performs a symbolic factorization. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dcolumn__dfs_8c.html#5fd0635776cafb1d697263a0db693b9e">T2_SUPER</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">What type of supernodes we want.  <a href="#5fd0635776cafb1d697263a0db693b9e"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dcolumn__dfs_8c.html#5e1eb3b6035e0d4e358caa044e58292d">dcolumn_dfs</a> (const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *xprune, int *marker, int *parent, int *xplore, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="5fd0635776cafb1d697263a0db693b9e"></a><!-- doxytag: member="dcolumn_dfs.c::T2_SUPER" ref="5fd0635776cafb1d697263a0db693b9e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define T2_SUPER          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="5e1eb3b6035e0d4e358caa044e58292d"></a><!-- doxytag: member="dcolumn_dfs.c::dcolumn_dfs" ref="5e1eb3b6035e0d4e358caa044e58292d" args="(const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *xprune, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dcolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   DCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS 
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal 
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dcomplex_8c.html b/DOC/html/dcomplex_8c.html
new file mode 100644
index 0000000..9e3b413
--- /dev/null
+++ b/DOC/html/dcomplex_8c.html
@@ -0,0 +1,258 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dcomplex.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dcomplex.c File Reference</h1>Common arithmetic for <a class="el" href="structcomplex.html">complex</a> type. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include <stdio.h></code><br>
+<code>#include "<a class="el" href="slu__dcomplex_8h-source.html">slu_dcomplex.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dcomplex_8c.html#4cfde2671a83833a15c5b48517781db0">z_div</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *c, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *a, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *b)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Complex Division c = a/b.  <a href="#4cfde2671a83833a15c5b48517781db0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dcomplex_8c.html#f701b1c549ee8dcf6767742a91681b55">z_abs</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns sqrt(z.r^2 + z.i^2).  <a href="#f701b1c549ee8dcf6767742a91681b55"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dcomplex_8c.html#47b00c33108809a1a9a94ffea7ef2097">z_abs1</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Approximates the abs. Returns abs(z.r) + abs(z.i).  <a href="#47b00c33108809a1a9a94ffea7ef2097"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dcomplex_8c.html#b03337c37aa8b70db9a3bac9368fb06c">z_exp</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *r, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the exponentiation.  <a href="#b03337c37aa8b70db9a3bac9368fb06c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dcomplex_8c.html#753978ee017e26dbdab16a40cf45b2cb">d_cnjg</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *r, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the <a class="el" href="structcomplex.html">complex</a> conjugate.  <a href="#753978ee017e26dbdab16a40cf45b2cb"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dcomplex_8c.html#58f08c15442d32d787301386ed99ac01">d_imag</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the imaginary part.  <a href="#58f08c15442d32d787301386ed99ac01"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dcomplex_8c.html#36451f8af6b7bd3a4d5f655ead8d5ee4">z_sgn</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">SIGN functions for <a class="el" href="structcomplex.html">complex</a> number. Returns z/abs(z).  <a href="#36451f8af6b7bd3a4d5f655ead8d5ee4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dcomplex_8c.html#29f4b8ea3e1309c47c2b1f783c6efa89">z_sqrt</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Square-root of a <a class="el" href="structcomplex.html">complex</a> number.  <a href="#29f4b8ea3e1309c47c2b1f783c6efa89"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> This file defines common arithmetic operations for <a class="el" href="structcomplex.html">complex</a> type.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="753978ee017e26dbdab16a40cf45b2cb"></a><!-- doxytag: member="dcomplex.c::d_cnjg" ref="753978ee017e26dbdab16a40cf45b2cb" args="(doublecomplex *r, doublecomplex *z)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void d_cnjg           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>z</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="58f08c15442d32d787301386ed99ac01"></a><!-- doxytag: member="dcomplex.c::d_imag" ref="58f08c15442d32d787301386ed99ac01" args="(doublecomplex *z)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double d_imag           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>z</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f701b1c549ee8dcf6767742a91681b55"></a><!-- doxytag: member="dcomplex.c::z_abs" ref="f701b1c549ee8dcf6767742a91681b55" args="(doublecomplex *z)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double z_abs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>z</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="47b00c33108809a1a9a94ffea7ef2097"></a><!-- doxytag: member="dcomplex.c::z_abs1" ref="47b00c33108809a1a9a94ffea7ef2097" args="(doublecomplex *z)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double z_abs1           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>z</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4cfde2671a83833a15c5b48517781db0"></a><!-- doxytag: member="dcomplex.c::z_div" ref="4cfde2671a83833a15c5b48517781db0" args="(doublecomplex *c, doublecomplex *a, doublecomplex *b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void z_div           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>b</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b03337c37aa8b70db9a3bac9368fb06c"></a><!-- doxytag: member="dcomplex.c::z_exp" ref="b03337c37aa8b70db9a3bac9368fb06c" args="(doublecomplex *r, doublecomplex *z)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void z_exp           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>z</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="36451f8af6b7bd3a4d5f655ead8d5ee4"></a><!-- doxytag: member="dcomplex.c::z_sgn" ref="36451f8af6b7bd3a4d5f655ead8d5ee4" args="(doublecomplex *z)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structdoublecomplex.html">doublecomplex</a> z_sgn           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>z</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="29f4b8ea3e1309c47c2b1f783c6efa89"></a><!-- doxytag: member="dcomplex.c::z_sqrt" ref="29f4b8ea3e1309c47c2b1f783c6efa89" args="(doublecomplex *z)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structdoublecomplex.html">doublecomplex</a> z_sqrt           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>z</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dcopy__to__ucol_8c.html b/DOC/html/dcopy__to__ucol_8c.html
new file mode 100644
index 0000000..c10c9f7
--- /dev/null
+++ b/DOC/html/dcopy__to__ucol_8c.html
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dcopy_to_ucol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dcopy_to_ucol.c File Reference</h1>Copy a computed column of U to the compressed data structure. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dcopy__to__ucol_8c.html#ce3034cff6ce6be9e0b0f69cda42f196">dcopy_to_ucol</a> (int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, double *dense, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="ce3034cff6ce6be9e0b0f69cda42f196"></a><!-- doxytag: member="dcopy_to_ucol.c::dcopy_to_ucol" ref="ce3034cff6ce6be9e0b0f69cda42f196" args="(int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, double *dense, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dcopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ddiagonal_8c.html b/DOC/html/ddiagonal_8c.html
new file mode 100644
index 0000000..03921fe
--- /dev/null
+++ b/DOC/html/ddiagonal_8c.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ddiagonal.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ddiagonal.c File Reference</h1>Auxiliary routines to work with diagonal elements. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ddiagonal_8c.html#fb322f8a71fc9c29b8f0860f82be31bb">dfill_diag</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ddiagonal_8c.html#6dcc4428df5c858dc58955919c696a00">ddominate</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="6dcc4428df5c858dc58955919c696a00"></a><!-- doxytag: member="ddiagonal.c::ddominate" ref="6dcc4428df5c858dc58955919c696a00" args="(int n, NCformat *Astore)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ddominate           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structNCformat.html">NCformat</a> * </td>
+          <td class="paramname"> <em>Astore</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fb322f8a71fc9c29b8f0860f82be31bb"></a><!-- doxytag: member="ddiagonal.c::dfill_diag" ref="fb322f8a71fc9c29b8f0860f82be31bb" args="(int n, NCformat *Astore)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dfill_diag           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structNCformat.html">NCformat</a> * </td>
+          <td class="paramname"> <em>Astore</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dfgmr_8c.html b/DOC/html/dfgmr_8c.html
new file mode 100644
index 0000000..30c5386
--- /dev/null
+++ b/DOC/html/dfgmr_8c.html
@@ -0,0 +1,210 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/dfgmr.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/dfgmr.c File Reference</h1>flexible GMRES from ITSOL developed by Yousef Saad. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dfgmr_8c.html#70fac857a29f956523d4c8c05e13f177">epsmac</a>   1.0e-16</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dfgmr_8c.html#b67e7a07556055c505aae6e65c937e39">ddot_</a> (int *, double[], int *, double[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dfgmr_8c.html#61a0022627cc1977966c0067f1f12e26">dnrm2_</a> (int *, double[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dfgmr_8c.html#70923b9fe57b546dfe14462a6be22de2">dfgmr</a> (int n, void(*dmatvec)(double, double[], double, double[]), void(*dpsolve)(int, double[], double[]), double *rhs, double *sol, double tol, int im, int *itmax, FILE *fits)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="70fac857a29f956523d4c8c05e13f177"></a><!-- doxytag: member="dfgmr.c::epsmac" ref="70fac857a29f956523d4c8c05e13f177" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define epsmac   1.0e-16          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="b67e7a07556055c505aae6e65c937e39"></a><!-- doxytag: member="dfgmr.c::ddot_" ref="b67e7a07556055c505aae6e65c937e39" args="(int *, double[], int *, double[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double ddot_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="70923b9fe57b546dfe14462a6be22de2"></a><!-- doxytag: member="dfgmr.c::dfgmr" ref="70923b9fe57b546dfe14462a6be22de2" args="(int n, void(*dmatvec)(double, double[], double, double[]), void(*dpsolve)(int, double[], double[]), double *rhs, double *sol, double tol, int im, int *itmax, FILE *fits)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dfgmr           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(double, double[], double, double[]) </td>
+          <td class="paramname"> <em>dmatvec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(int, double[], double[]) </td>
+          <td class="paramname"> <em>dpsolve</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>sol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>im</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>itmax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fits</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="61a0022627cc1977966c0067f1f12e26"></a><!-- doxytag: member="dfgmr.c::dnrm2_" ref="61a0022627cc1977966c0067f1f12e26" args="(int *, double[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dnrm2_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dgscon_8c.html b/DOC/html/dgscon_8c.html
new file mode 100644
index 0000000..aa2043a
--- /dev/null
+++ b/DOC/html/dgscon_8c.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dgscon.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dgscon.c File Reference</h1>Estimates reciprocal of the condition number of a general matrix. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgscon_8c.html#2c7a4267d306243d3ceb15531522033e">dgscon</a> (char *norm, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, double anorm, double *rcond, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat, int *info)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Modified from lapack routines DGECON.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="2c7a4267d306243d3ceb15531522033e"></a><!-- doxytag: member="dgscon.c::dgscon" ref="2c7a4267d306243d3ceb15531522033e" args="(char *norm, SuperMatrix *L, SuperMatrix *U, double anorm, double *rcond, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgscon           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>norm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>anorm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   DGSCON estimates the reciprocal of the condition number of a general 
+   real matrix A, in either the 1-norm or the infinity-norm, using   
+   the LU factorization computed by DGETRF.   *</pre><p>
+<pre>   An estimate is obtained for norm(inv(A)), and the reciprocal of the   
+   condition number is computed as   
+      RCOND = 1 / ( norm(A) * norm(inv(A)) ).</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>    NORM    (input) char*
+            Specifies whether the 1-norm condition number or the   
+            infinity-norm condition number is required:   
+            = '1' or 'O':  1-norm;   
+            = 'I':         Infinity-norm.</pre><p>
+<pre>    L       (input) SuperMatrix*
+            The factor L from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf()</a>. Use compressed row subscripts storage for supernodes,
+            i.e., L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre>    U       (input) SuperMatrix*
+            The factor U from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+            Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre>    ANORM   (input) double
+            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
+            If NORM = 'I', the infinity-norm of the original matrix A.</pre><p>
+<pre>    RCOND   (output) double*
+           The reciprocal of the condition number of the matrix A,   
+           computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><p>
+<pre>    INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dgsequ_8c.html b/DOC/html/dgsequ_8c.html
new file mode 100644
index 0000000..897e653
--- /dev/null
+++ b/DOC/html/dgsequ_8c.html
@@ -0,0 +1,145 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dgsequ.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dgsequ.c File Reference</h1>Computes row and column scalings. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgsequ_8c.html#af22b247cc134fb0ba90285e84ccebb4">dgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, double *r, double *c, double *rowcnd, double *colcnd, double *amax, int *info)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver related.  <a href="#af22b247cc134fb0ba90285e84ccebb4"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Modified from LAPACK routine DGEEQU
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="af22b247cc134fb0ba90285e84ccebb4"></a><!-- doxytag: member="dgsequ.c::dgsequ" ref="af22b247cc134fb0ba90285e84ccebb4" args="(SuperMatrix *A, double *r, double *c, double *rowcnd, double *colcnd, double *amax, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgsequ           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   DGSEQU computes row and column scalings intended to equilibrate an   
+   M-by-N sparse matrix A and reduce its condition number. R returns the row
+   scale factors and C the column scale factors, chosen to try to make   
+   the largest element in each row and column of the matrix B with   
+   elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.</pre><p>
+<pre>   R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
+   number and BIGNUM = largest safe number.  Use of these scaling   
+   factors is not guaranteed to reduce the condition number of A but   
+   works well in practice.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The matrix of dimension (A->nrow, A->ncol) whose equilibration
+           factors are to be computed. The type of A can be:
+           Stype = SLU_NC; Dtype = SLU_D; Mtype = SLU_GE.</pre><p>
+<pre>   R       (output) double*, size A->nrow
+           If INFO = 0 or INFO > M, R contains the row scale factors   
+           for A.</pre><p>
+<pre>   C       (output) double*, size A->ncol
+           If INFO = 0,  C contains the column scale factors for A.</pre><p>
+<pre>   ROWCND  (output) double*
+           If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
+           smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
+           AMAX is neither too large nor too small, it is not worth   
+           scaling by R.</pre><p>
+<pre>   COLCND  (output) double*
+           If INFO = 0, COLCND contains the ratio of the smallest   
+           C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
+           worth scaling by C.</pre><p>
+<pre>   AMAX    (output) double*
+           Absolute value of largest matrix element.  If AMAX is very   
+           close to overflow or very close to underflow, the matrix   
+           should be scaled.</pre><p>
+<pre>   INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value   
+           > 0:  if INFO = i,  and i is   
+                 <= A->nrow:  the i-th row of A is exactly zero   
+                 >  A->ncol:  the (i-M)-th column of A is exactly zero</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dgsisx_8c.html b/DOC/html/dgsisx_8c.html
new file mode 100644
index 0000000..16ca5d7
--- /dev/null
+++ b/DOC/html/dgsisx_8c.html
@@ -0,0 +1,495 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dgsisx.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dgsisx.c File Reference</h1>Computes an approximate solutions of linear equations A*X=B or A'*X=B. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgsisx_8c.html#bcbb363b5bc23f538d1210f39bb1d672">dgsisx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *perm_r, int *etree, char *equed, double *R, d [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.2) --
+ Lawrence Berkeley National Laboratory.
+ November, 2010
+ August, 2011
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="bcbb363b5bc23f538d1210f39bb1d672"></a><!-- doxytag: member="dgsisx.c::dgsisx" ref="bcbb363b5bc23f538d1210f39bb1d672" args="(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r, int *etree, char *equed, double *R, double *C, SuperMatrix *L, SuperMatrix *U, void *work, int lwork, SuperMatrix *B, SuperMatrix *X, double *recip_pivot_growth, double *rcond, mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgsisx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> DGSISX computes an approximate solutions of linear equations
+ A*X=B or A'*X=B, using the ILU factorization from <a class="el" href="dgsitrf_8c.html#ffb50badd1ff77dbe19f6df360f98e50">dgsitrf()</a>.
+ An estimation of the condition number is provided. 
+ The routine performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A is
+	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+	     = TRANS or CONJ).</pre><p>
+<pre>	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+	     matrix that usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the matrix A (after equilibration if options->Equil = YES)
+	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>	1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+	     and info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	1.6. The system of equations is solved for X using the factored form
+	     of A.</pre><p>
+<pre>	1.7. options->IterRefine is not used</pre><p>
+<pre>	1.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>	1.9. options for ILU only
+	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+		entries of modulus 1 on the diagonal and off-diagonal entries
+		of modulus at most 1. If MC64 fails, <a class="el" href="dgsequ_8c.html#af22b247cc134fb0ba90285e84ccebb4" title="Driver related.">dgsequ()</a> is used to
+		equilibrate the system.
+              ( Default: LargeDiag )
+	     2) options->ILU_DropTol = tau is the threshold for dropping.
+		For L, it is used directly (for the whole row in a supernode);
+		For U, ||A(:,i)||_oo * tau is used as the threshold
+	        for the	i-th column.
+		If a secondary dropping rule is required, tau will
+	        also be used to compute the second threshold.
+              ( Default: 1e-4 )
+	     3) options->ILU_FillFactor = gamma, used as the initial guess
+		of memory growth.
+		If a secondary dropping rule is required, it will also
+              be used as an upper bound of the memory.
+              ( Default: 10 )
+	     4) options->ILU_DropRule specifies the dropping rule.
+		Option	      Meaning
+		======	      ===========
+		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+			      p = gamma * nnz(A(:,j)).
+		DROP_AREA:    Variation of ILUTP, for j-th column, use
+			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+			      Otherwise
+				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+			      tau_U(j) uses the similar rule.
+			      NOTE: the thresholds used by L and U are separate.
+		DROP_INTERP:  Compute the second dropping threshold by
+			      interpolation instead of sorting (default).
+			      In this case, the actual fill ratio is not
+			      guaranteed smaller than gamma.
+		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+		( Default: DROP_BASIC | DROP_AREA )
+	     5) options->ILU_Norm is the criterion of measuring the magnitude
+		of a row in a supernode of L. ( Default is INF_NORM )
+		options->ILU_Norm	RowSize(x[1:n])
+		=================	===============
+		ONE_NORM		||x||_1 / n
+		TWO_NORM		||x||_2 / sqrt(n)
+		INF_NORM		max{|x[i]|}
+	     6) options->ILU_MILU specifies the type of MILU's variation.
+		= SILU: do not perform Modified ILU;
+		= SMILU_1 (not recommended):
+		    U(i,i) := U(i,i) + sum(dropped entries);
+		= SMILU_2:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+		= SMILU_3:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+		NOTE: Even SMILU_1 does not preserve the column sum because of
+		late dropping.
+              ( Default: SILU )
+	     7) options->ILU_FillTol is used as the perturbation when
+		encountering zero pivots. If some U(i,i) = 0, so that U is
+		exactly singular, then
+		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+              ( Default: 1e-2 )</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+	to the transpose of A:</pre><p>
+<pre>	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A' is
+	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>	2.2. Permute columns of transpose(A) (rows of A),
+	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+	     usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the transpose(A) (after equilibration if
+	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+	     permutation Pr determined by partial pivoting.</pre><p>
+<pre>	2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+	     And info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	2.6. The system of equations is solved for X using the factored form
+	     of transpose(A).</pre><p>
+<pre>	2.7. If options->IterRefine is not used.</pre><p>
+<pre>	2.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the LU decomposition will be performed and how the
+	   system will be solved.</pre><p>
+<pre> A	   (input/output) SuperMatrix*
+	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+	   of the linear equations is A->nrow. Currently, the type of A can be:
+	   Stype = SLU_NC or SLU_NR, Dtype = SLU_D, Mtype = SLU_GE.
+	   In the future, more general A may be handled.</pre><p>
+<pre>	   On entry, If options->Fact = FACTORED and equed is not 'N',
+	   then A must have been equilibrated by the scaling factors in
+	   R and/or C.
+	   On exit, A is not modified
+         if options->Equil = NO, or
+         if options->Equil = YES but equed = 'N' on exit, or
+         if options->RowPerm = NO.</pre><p>
+<pre>	   Otherwise, if options->Equil = YES and equed is not 'N',
+	   A is scaled as follows:
+	   If A->Stype = SLU_NC:
+	     equed = 'R':  A := diag(R) * A
+	     equed = 'C':  A := A * diag(C)
+	     equed = 'B':  A := diag(R) * A * diag(C).
+	   If A->Stype = SLU_NR:
+	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre>         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+            the matrix to an I-matrix, that is A is modified as follows:
+            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+            off-diagonal entries of modulus at most 1. P is a permutation
+            obtained from MC64.
+            If MC64 fails, <a class="el" href="dgsequ_8c.html#af22b247cc134fb0ba90285e84ccebb4" title="Driver related.">dgsequ()</a> is used to equilibrate the system,
+            and A is scaled as above, but no permutation is involved.
+            On exit, A is restored to the orginal row numbering, so
+            Dr*A*Dc is returned.</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+	   which defines the permutation matrix Pc; perm_c[i] = j means
+	   column i of A is in position j in A*Pc.
+	   On exit, perm_c may be overwritten by the product of the input
+	   perm_c and a permutation that postorders the elimination tree
+	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+	   is already in postorder.</pre><p>
+<pre>	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+	   which describes permutation of columns of transpose(A) 
+	   (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+	   which defines the permutation matrix Pr, and is determined
+	   by MC64 first then followed by partial pivoting.
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+	   determines permutation of rows of transpose(A)
+	   (columns of A) as described above.</pre><p>
+<pre>	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	   will try to use the input perm_r, unless a certain threshold
+	   criterion is violated. In that case, perm_r is overwritten by a
+	   new permutation determined by partial pivoting or diagonal
+	   threshold pivoting.
+	   Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+	   Elimination tree of Pc'*A'*A*Pc.
+	   If options->Fact != FACTORED and options->Fact != DOFACT,
+	   etree is an input argument, otherwise it is an output argument.
+	   Note: etree is a vector of parent pointers for a forest whose
+	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+	   Specifies the form of equilibration that was done.
+	   = 'N': No equilibration.
+	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+	   = 'B': Both row and column equilibration, i.e., A was replaced 
+		  by diag(R)*A*diag(C).
+	   If options->Fact = FACTORED, equed is an input argument,
+	   otherwise it is an output argument.</pre><p>
+<pre> R	   (input/output) double*, dimension (A->nrow)
+	   The row scale factors for A or transpose(A).
+	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+	   If equed = 'N' or 'C', R is not accessed.
+	   If options->Fact = FACTORED, R is an input argument,
+	       otherwise, R is output.
+	   If options->Fact = FACTORED and equed = 'R' or 'B', each element
+	       of R must be positive.</pre><p>
+<pre> C	   (input/output) double*, dimension (A->ncol)
+	   The column scale factors for A or transpose(A).
+	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+	   If equed = 'N' or 'R', C is not accessed.
+	   If options->Fact = FACTORED, C is an input argument,
+	       otherwise, C is output.
+	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+	       of C must be positive.</pre><p>
+<pre> L	   (output) SuperMatrix*
+	   The factor L from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses compressed row subscripts storage for supernodes, i.e.,
+	   L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre> U	   (output) SuperMatrix*
+	   The factor U from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses column-wise storage scheme, i.e., U has types:
+	   Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+	   User supplied workspace, should be large enough
+	   to hold data structures for factors L and U.
+	   On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 mem_usage->total_needed; no other side effects.</pre><p>
+<pre>	   See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B	   (input/output) SuperMatrix*
+	   B has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+	   On entry, the right hand side matrix.
+	   If B->ncol = 0, only LU decomposition is performed, the triangular
+			   solve is skipped.
+	   On exit,
+	      if equed = 'N', B is not modified; otherwise
+	      if A->Stype = SLU_NC:
+		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+		    B is overwritten by diag(R)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+		    B is overwritten by diag(C)*B;
+	      if A->Stype = SLU_NR:
+		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+		    B is overwritten by diag(C)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+		    B is overwritten by diag(R)*B.</pre><p>
+<pre> X	   (output) SuperMatrix*
+	   X has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+	   to the original system of equations. Note that A and B are modified
+	   on exit if equed is not 'N', and the solution to the equilibrated
+	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+	   and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) double*
+	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+	   The infinity norm is used. If recip_pivot_growth is much less
+	   than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) double*
+	   The estimate of the reciprocal condition number of the matrix A
+	   after equilibration (if done). If rcond is less than the machine
+	   precision (in particular, if rcond = 0), the matrix is singular
+	   to working precision. This condition is indicated by a return
+	   code of info > 0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+	   Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+	     The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+	     The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+	     The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+	  Record the statistics on runtime and floating-point operation count.
+	  See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+	   > 0: if info = i, and i is
+		<= A->ncol: number of zero pivots. They are replaced by small
+		      entries due to options->ILU_FillTol.
+		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+		      precision, meaning that the matrix is singular to
+		      working precision. Nevertheless, the solution and
+		      error bounds are computed because there are a number
+		      of situations where the computed solution can be more
+		      accurate than the value of RCOND would suggest.
+		> A->ncol+1: number of bytes allocated when memory allocation
+		      failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dgsitrf_8c.html b/DOC/html/dgsitrf_8c.html
new file mode 100644
index 0000000..084f9e1
--- /dev/null
+++ b/DOC/html/dgsitrf_8c.html
@@ -0,0 +1,248 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dgsitrf.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dgsitrf.c File Reference</h1>Computes an ILU factorization of a general sparse matrix. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgsitrf_8c.html#ffb50badd1ff77dbe19f6df360f98e50">dgsitrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int panel_size, int *etree, void *work, int lwork, [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.1) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="ffb50badd1ff77dbe19f6df360f98e50"></a><!-- doxytag: member="dgsitrf.c::dgsitrf" ref="ffb50badd1ff77dbe19f6df360f98e50" args="(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size, int *etree, void *work, int lwork, int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgsitrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> DGSITRF computes an ILU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the ILU decomposition will be performed.</pre><p>
+<pre> A	    (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+	    (A->nrow, A->ncol). The type of A can be:
+	    Stype = SLU_NCP; Dtype = SLU_D; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+	    To control degree of relaxing supernodes. If the number
+	    of nodes (columns) in a subtree of the elimination tree is less
+	    than relax, this subtree is considered as one supernode,
+	    regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+	    A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+	    Elimination tree of A'*A.
+	    Note: etree is a vector of parent pointers for a forest whose
+	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+	    On input, the columns of A should be permuted so that the
+	    etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+	    User-supplied work space and space for the output data structures.
+	    Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the
+	    permutation matrix Pc; perm_c[i] = j means column i of A is
+	    in position j in A*Pc.
+	    When searching for diagonal, perm_c[*] is applied to the
+	    row subscripts of A, so that diagonal threshold pivoting
+	    can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+	    Row permutation vector which defines the permutation matrix Pr,
+	    perm_r[i] = j means row i of A is in position j in Pr*A.
+	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	       will try to use the input perm_r, unless a certain threshold
+	       criterion is violated. In that case, perm_r is overwritten by
+	       a new permutation determined by partial pivoting or diagonal
+	       threshold pivoting.
+	    Otherwise, perm_r is output argument;</pre><p>
+<pre> L	    (output) SuperMatrix*
+	    The factor L from the factorization Pr*A=L*U; use compressed row
+	    subscripts storage for supernodes, i.e., L has type:
+	    Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre> U	    (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+	    storage scheme, i.e., U has types: Stype = SLU_NC,
+	    Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+	    Record the statistics on runtime and floating-point operation count.
+	    See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+	    = 0: successful exit
+	    < 0: if info = -i, the i-th argument had an illegal value
+	    > 0: if info = i, and i is
+	       <= A->ncol: number of zero pivots. They are replaced by small
+		  entries according to options->ILU_FillTol.
+	       > A->ncol: number of bytes allocated when memory allocation
+		  failure occurred, plus A->ncol. If lwork = -1, it is
+		  the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays:
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 4 of them:
+	      marker/marker1 are used for panel dfs, see (ilu_)<a class="el" href="dpanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">dpanel_dfs.c</a>;
+	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+	      marker_relax(has its own space) is used for relaxed supernodes.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+	Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the
+	last column of a supernode.
+	The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+	supernodal representative r, repfnz[r] is the location of the first
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+	the panel diagonal. These are filled in during <a class="el" href="dpanel__dfs_8c.html#2a809488b87d2c1a9b2a574b726e8517">dpanel_dfs()</a>, and are
+	used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+		   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a>.
+	It is also used by the dropping routine <a class="el" href="ilu__ddrop__row_8c.html#380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dgsrfs_8c.html b/DOC/html/dgsrfs_8c.html
new file mode 100644
index 0000000..5c193cb
--- /dev/null
+++ b/DOC/html/dgsrfs_8c.html
@@ -0,0 +1,249 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dgsrfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dgsrfs.c File Reference</h1>Improves computed solution to a system of inear equations. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dgsrfs_8c.html#3641b6d4c21b7a852dbb32c2b693302e">ITMAX</a>   5</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgsrfs_8c.html#db43f7a2408ddb763f36fbfcc0482f28">dgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="structSuperMatrix.html"> [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Modified from lapack routine DGERFS
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="3641b6d4c21b7a852dbb32c2b693302e"></a><!-- doxytag: member="dgsrfs.c::ITMAX" ref="3641b6d4c21b7a852dbb32c2b693302e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ITMAX   5          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="db43f7a2408ddb763f36fbfcc0482f28"></a><!-- doxytag: member="dgsrfs.c::dgsrfs" ref="db43f7a2408ddb763f36fbfcc0482f28" args="(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U, int *perm_c, int *perm_r, char *equed, double *R, double *C, SuperMatrix *B, SuperMatrix *X, double *ferr, double *berr, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgsrfs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   DGSRFS improves the computed solution to a system of linear   
+   equations and provides error bounds and backward error estimates for 
+   the solution.</pre><p>
+<pre>   If equilibration was performed, the system becomes:
+           (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The original matrix A in the system, or the scaled A if
+           equilibration was done. The type of A can be:
+           Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_GE.</pre><p>
+<pre>   L       (input) SuperMatrix*
+	     The factor L from the factorization Pr*A*Pc=L*U. Use
+           compressed row subscripts storage for supernodes, 
+           i.e., L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre>   U       (input) SuperMatrix*
+           The factor U from the factorization Pr*A*Pc=L*U as computed by
+           <a class="el" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf()</a>. Use column-wise storage scheme, 
+           i.e., U has types: Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre>   perm_c  (input) int*, dimension (A->ncol)
+	     Column permutation vector, which defines the 
+           permutation matrix Pc; perm_c[i] = j means column i of A is 
+           in position j in A*Pc.</pre><p>
+<pre>   perm_r  (input) int*, dimension (A->nrow)
+           Row permutation vector, which defines the permutation matrix Pr;
+           perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>   equed   (input) Specifies the form of equilibration that was done.
+           = 'N': No equilibration.
+           = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+           = 'C': Column equilibration, i.e., A was postmultiplied by
+                  diag(C).
+           = 'B': Both row and column equilibration, i.e., A was replaced 
+                  by diag(R)*A*diag(C).</pre><p>
+<pre>   R       (input) double*, dimension (A->nrow)
+           The row scale factors for A.
+           If equed = 'R' or 'B', A is premultiplied by diag(R).
+           If equed = 'N' or 'C', R is not accessed.</pre><p>
+<pre>   C       (input) double*, dimension (A->ncol)
+           The column scale factors for A.
+           If equed = 'C' or 'B', A is postmultiplied by diag(C).
+           If equed = 'N' or 'R', C is not accessed.</pre><p>
+<pre>   B       (input) SuperMatrix*
+           B has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+           The right hand side matrix B.
+           if equed = 'R' or 'B', B is premultiplied by diag(R).</pre><p>
+<pre>   X       (input/output) SuperMatrix*
+           X has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+           On entry, the solution matrix X, as computed by <a class="el" href="dgstrs_8c.html#6e3eace519372b7dfcd053e0d3614fc1">dgstrs()</a>.
+           On exit, the improved solution matrix X.
+           if *equed = 'C' or 'B', X should be premultiplied by diag(C)
+               in order to obtain the solution to the original system.</pre><p>
+<pre>   FERR    (output) double*, dimension (B->ncol)   
+           The estimated forward error bound for each solution vector   
+           X(j) (the j-th column of the solution matrix X).   
+           If XTRUE is the true solution corresponding to X(j), FERR(j) 
+           is an estimated upper bound for the magnitude of the largest 
+           element in (X(j) - XTRUE) divided by the magnitude of the   
+           largest element in X(j).  The estimate is as reliable as   
+           the estimate for RCOND, and is almost always a slight   
+           overestimate of the true error.</pre><p>
+<pre>   BERR    (output) double*, dimension (B->ncol)   
+           The componentwise relative backward error of each solution   
+           vector X(j) (i.e., the smallest relative change in   
+           any element of A or B that makes X(j) an exact solution).</pre><p>
+<pre>   stat     (output) SuperLUStat_t*
+            Record the statistics on runtime and floating-point operation count.
+            See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre>   info    (output) int*   
+           = 0:  successful exit   
+            < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    Internal Parameters   
+    ===================</pre><p>
+<pre>    ITMAX is the maximum number of steps of iterative refinement.</pre><p>
+<pre> </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dgssv_8c.html b/DOC/html/dgssv_8c.html
new file mode 100644
index 0000000..e0ee1dd
--- /dev/null
+++ b/DOC/html/dgssv_8c.html
@@ -0,0 +1,202 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dgssv.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dgssv.c File Reference</h1>Solves the system of linear equations A*X=B. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgssv_8c.html#d804a93a6806ee4d4694df5b753d91af">dgssv</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *perm_r, <a class="el" href="structSuperMatrix.h [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver routines.  <a href="#d804a93a6806ee4d4694df5b753d91af"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="d804a93a6806ee4d4694df5b753d91af"></a><!-- doxytag: member="dgssv.c::dgssv" ref="d804a93a6806ee4d4694df5b753d91af" args="(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U, SuperMatrix *B, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgssv           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> DGSSV solves the system of linear equations A*X=B, using the
+ LU factorization from DGSTRF. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. Permute the columns of A, forming A*Pc, where Pc
+           is a permutation matrix. For more details of this step, 
+           see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.2. Factor A as Pr*A*Pc=L*U with the permutation Pr determined
+           by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      1.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+      above algorithm to the transpose of A:</pre><p>
+<pre>      2.1. Permute columns of transpose(A) (rows of A),
+           forming transpose(A)*Pc, where Pc is a permutation matrix. 
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.2. Factor A as Pr*transpose(A)*Pc=L*U with the permutation Pr
+           determined by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      2.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR; Dtype = SLU_D; Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre> perm_c  (input/output) int*
+         If A->Stype = SLU_NC, column permutation vector of size A->ncol
+         which defines the permutation matrix Pc; perm_c[i] = j means 
+         column i of A is in position j in A*Pc.
+         If A->Stype = SLU_NR, column permutation vector of size A->nrow
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre>         If options->ColPerm = MY_PERMC or options->Fact = SamePattern or
+            options->Fact = SamePattern_SameRowPerm, it is an input argument.
+            On exit, perm_c may be overwritten by the product of the input
+            perm_c and a permutation that postorders the elimination tree
+            of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+            is already in postorder.
+         Otherwise, it is an output argument.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined 
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.
+         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->RowPerm = MY_PERMR or
+            options->Fact = SamePattern_SameRowPerm, perm_r is an
+            input argument.
+         otherwise it is an output argument.</pre><p>
+<pre> L       (output) SuperMatrix*
+         The factor L from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+         > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                so the solution could not be computed.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dgssvx_8c.html b/DOC/html/dgssvx_8c.html
new file mode 100644
index 0000000..09ae810
--- /dev/null
+++ b/DOC/html/dgssvx_8c.html
@@ -0,0 +1,450 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dgssvx.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dgssvx.c File Reference</h1>Solves the system of linear equations A*X=B or A'*X=B. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgssvx_8c.html#a463b60835d9bca4a4bb1386076d1488">dgssvx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *perm_r, int *etree, char *equed, double *R, d [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="a463b60835d9bca4a4bb1386076d1488"></a><!-- doxytag: member="dgssvx.c::dgssvx" ref="a463b60835d9bca4a4bb1386076d1488" args="(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r, int *etree, char *equed, double *R, double *C, SuperMatrix *L, SuperMatrix *U, void *work, int lwork, SuperMatrix *B, SuperMatrix *X, double *recip_pivot_growth, double *rcond, double *ferr, double *berr, mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgssvx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> DGSSVX solves the system of linear equations A*X=B or A'*X=B, using
+ the LU factorization from <a class="el" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf()</a>. Error bounds on the solution and
+ a condition estimate are also provided. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A is
+           overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+           (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+           = TRANS or CONJ).</pre><p>
+<pre>      1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+           matrix that usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the matrix A (after equilibration if options->Equil = YES)
+           as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>      1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form of 
+           A is used to estimate the condition number of the matrix A. If
+           the reciprocal of the condition number is less than machine
+           precision, info = A->ncol+1 is returned as a warning, but the
+           routine still goes on to solve for X and computes error bounds
+           as described below.</pre><p>
+<pre>      1.6. The system of equations is solved for X using the factored form
+           of A.</pre><p>
+<pre>      1.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      1.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R)
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+      to the transpose of A:</pre><p>
+<pre>      2.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A' is
+           overwritten by diag(R)*A'*diag(C) and B by diag(R)*B 
+           (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>      2.2. Permute columns of transpose(A) (rows of A), 
+           forming transpose(A)*Pc, where Pc is a permutation matrix that 
+           usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the transpose(A) (after equilibration if 
+           options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+           permutation Pr determined by partial pivoting.</pre><p>
+<pre>      2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form 
+           of transpose(A) is used to estimate the condition number of the
+           matrix A. If the reciprocal of the condition number
+           is less than machine precision, info = A->nrow+1 is returned as
+           a warning, but the routine still goes on to solve for X and
+           computes error bounds as described below.</pre><p>
+<pre>      2.6. The system of equations is solved for X using the factored form
+           of transpose(A).</pre><p>
+<pre>      2.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      2.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R) 
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input/output) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of the linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR, Dtype = SLU_D, Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre>         On entry, If options->Fact = FACTORED and equed is not 'N', 
+         then A must have been equilibrated by the scaling factors in
+         R and/or C.  
+         On exit, A is not modified if options->Equil = NO, or if 
+         options->Equil = YES but equed = 'N' on exit.
+         Otherwise, if options->Equil = YES and equed is not 'N',
+         A is scaled as follows:
+         If A->Stype = SLU_NC:
+           equed = 'R':  A := diag(R) * A
+           equed = 'C':  A := A * diag(C)
+           equed = 'B':  A := diag(R) * A * diag(C).
+         If A->Stype = SLU_NR:
+           equed = 'R':  transpose(A) := diag(R) * transpose(A)
+           equed = 'C':  transpose(A) := transpose(A) * diag(C)
+           equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+         which defines the permutation matrix Pc; perm_c[i] = j means
+         column i of A is in position j in A*Pc.
+         On exit, perm_c may be overwritten by the product of the input
+         perm_c and a permutation that postorders the elimination tree
+         of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+         is already in postorder.</pre><p>
+<pre>         If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.</pre><p>
+<pre>         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+         will try to use the input perm_r, unless a certain threshold
+         criterion is violated. In that case, perm_r is overwritten by a
+         new permutation determined by partial pivoting or diagonal
+         threshold pivoting.
+         Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+         Elimination tree of Pc'*A'*A*Pc.
+         If options->Fact != FACTORED and options->Fact != DOFACT,
+         etree is an input argument, otherwise it is an output argument.
+         Note: etree is a vector of parent pointers for a forest whose
+         vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+         Specifies the form of equilibration that was done.
+         = 'N': No equilibration.
+         = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+         = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+         = 'B': Both row and column equilibration, i.e., A was replaced 
+                by diag(R)*A*diag(C).
+         If options->Fact = FACTORED, equed is an input argument,
+         otherwise it is an output argument.</pre><p>
+<pre> R       (input/output) double*, dimension (A->nrow)
+         The row scale factors for A or transpose(A).
+         If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+         If equed = 'N' or 'C', R is not accessed.
+         If options->Fact = FACTORED, R is an input argument,
+             otherwise, R is output.
+         If options->zFact = FACTORED and equed = 'R' or 'B', each element
+             of R must be positive.</pre><p>
+<pre> C       (input/output) double*, dimension (A->ncol)
+         The column scale factors for A or transpose(A).
+         If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+         If equed = 'N' or 'R', C is not accessed.
+         If options->Fact = FACTORED, C is an input argument,
+             otherwise, C is output.
+         If options->Fact = FACTORED and equed = 'C' or 'B', each element
+             of C must be positive.</pre><p>
+<pre> L       (output) SuperMatrix*
+	   The factor L from the factorization
+             Pr*A*Pc=L*U              (if A->Stype SLU_= NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+         User supplied workspace, should be large enough
+         to hold data structures for factors L and U.
+         On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               mem_usage->total_needed; no other side effects.</pre><p>
+<pre>         See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         If B->ncol = 0, only LU decomposition is performed, the triangular
+                         solve is skipped.
+         On exit,
+            if equed = 'N', B is not modified; otherwise
+            if A->Stype = SLU_NC:
+               if options->Trans = NOTRANS and equed = 'R' or 'B',
+                  B is overwritten by diag(R)*B;
+               if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+                  B is overwritten by diag(C)*B;
+            if A->Stype = SLU_NR:
+               if options->Trans = NOTRANS and equed = 'C' or 'B',
+                  B is overwritten by diag(C)*B;
+               if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+                  B is overwritten by diag(R)*B.</pre><p>
+<pre> X       (output) SuperMatrix*
+         X has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE. 
+         If info = 0 or info = A->ncol+1, X contains the solution matrix
+         to the original system of equations. Note that A and B are modified
+         on exit if equed is not 'N', and the solution to the equilibrated
+         system is inv(diag(C))*X if options->Trans = NOTRANS and
+         equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+         and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) double*
+         The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+         The infinity norm is used. If recip_pivot_growth is much less
+         than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) double*
+         The estimate of the reciprocal condition number of the matrix A
+         after equilibration (if done). If rcond is less than the machine
+         precision (in particular, if rcond = 0), the matrix is singular
+         to working precision. This condition is indicated by a return
+         code of info > 0.</pre><p>
+<pre> FERR    (output) double*, dimension (B->ncol)   
+         The estimated forward error bound for each solution vector   
+         X(j) (the j-th column of the solution matrix X).   
+         If XTRUE is the true solution corresponding to X(j), FERR(j) 
+         is an estimated upper bound for the magnitude of the largest 
+         element in (X(j) - XTRUE) divided by the magnitude of the   
+         largest element in X(j).  The estimate is as reliable as   
+         the estimate for RCOND, and is almost always a slight   
+         overestimate of the true error.
+         If options->IterRefine = NOREFINE, ferr = 1.0.</pre><p>
+<pre> BERR    (output) double*, dimension (B->ncol)
+         The componentwise relative backward error of each solution   
+         vector X(j) (i.e., the smallest relative change in   
+         any element of A or B that makes X(j) an exact solution).
+         If options->IterRefine = NOREFINE, berr = 1.0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+         Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+           The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+           The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+           The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+         = 0: successful exit   
+         < 0: if info = -i, the i-th argument had an illegal value   
+         > 0: if info = i, and i is   
+              <= A->ncol: U(i,i) is exactly zero. The factorization has   
+                    been completed, but the factor U is exactly   
+                    singular, so the solution and error bounds   
+                    could not be computed.   
+              = A->ncol+1: U is nonsingular, but RCOND is less than machine
+                    precision, meaning that the matrix is singular to
+                    working precision. Nevertheless, the solution and
+                    error bounds are computed because there are a number
+                    of situations where the computed solution can be more
+                    accurate than the value of RCOND would suggest.   
+              > A->ncol+1: number of bytes allocated when memory allocation
+                    failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dgstrf_8c.html b/DOC/html/dgstrf_8c.html
new file mode 100644
index 0000000..9fc00eb
--- /dev/null
+++ b/DOC/html/dgstrf_8c.html
@@ -0,0 +1,261 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dgstrf.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dgstrf.c File Reference</h1>Computes an LU factorization of a general sparse matrix. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int panel_size, int *etree, void *work, int lwork, i [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="65a25ed27f2524e9cbc8f6ce8cd22c38"></a><!-- doxytag: member="dgstrf.c::dgstrf" ref="65a25ed27f2524e9cbc8f6ce8cd22c38" args="(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size, int *etree, void *work, int lwork, int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgstrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> DGSTRF computes an LU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper 
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = SLU_NCP; Dtype = SLU_D; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+          To control degree of relaxing supernodes. If the number
+          of nodes (columns) in a subtree of the elimination tree is less
+          than relax, this subtree is considered as one supernode,
+          regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+          A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+          Elimination tree of A'*A.
+          Note: etree is a vector of parent pointers for a forest whose
+          vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+          On input, the columns of A should be permuted so that the
+          etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+          User-supplied work space and space for the output data structures.
+          Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the 
+          permutation matrix Pc; perm_c[i] = j means column i of A is 
+          in position j in A*Pc.
+          When searching for diagonal, perm_c[*] is applied to the
+          row subscripts of A, so that diagonal threshold pivoting
+          can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+          Row permutation vector which defines the permutation matrix Pr,
+          perm_r[i] = j means row i of A is in position j in Pr*A.
+          If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+             will try to use the input perm_r, unless a certain threshold
+             criterion is violated. In that case, perm_r is overwritten by
+             a new permutation determined by partial pivoting or diagonal
+             threshold pivoting.
+          Otherwise, perm_r is output argument;</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = SLU_NC, 
+          Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+          = 0: successful exit
+          < 0: if info = -i, the i-th argument had an illegal value
+          > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                and division by zero will occur if it is used to solve a
+                system of equations.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol. If lwork = -1, it is
+                the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays: 
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   xprune[0:n-1]: xprune[*] points to locations in subscript 
+	vector lsub[*]. For column i, xprune[i] denotes the point where 
+	structural pruning begins. I.e. only xlsub[i],..,xprune[i]-1 need 
+	to be traversed for symbolic factorization.</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been 
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 3 of them: marker/marker1 are used for panel dfs, 
+	      see <a class="el" href="dpanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">dpanel_dfs.c</a>; marker2 is used for inner-factorization,
+            see <a class="el" href="dcolumn__dfs_8c.html" title="Performs a symbolic factorization.">dcolumn_dfs.c</a>.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+      Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs) 
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the 
+	last column of a supernode.
+      The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a 
+	supernodal representative r, repfnz[r] is the location of the first 
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below 
+      the panel diagonal. These are filled in during <a class="el" href="dpanel__dfs_8c.html#2a809488b87d2c1a9b2a574b726e8517">dpanel_dfs()</a>, and are
+      used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+	    	   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__ddefs_8h.html" title="Header file for real operations.">slu_ddefs.h</a>.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dgstrs_8c.html b/DOC/html/dgstrs_8c.html
new file mode 100644
index 0000000..70b8258
--- /dev/null
+++ b/DOC/html/dgstrs_8c.html
@@ -0,0 +1,332 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dgstrs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dgstrs.c File Reference</h1>Solves a system using LU factorization. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgstrs_8c.html#ca18e78d81448d99eec840b19de76efd">dusolve</a> (int, int, double *, double *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#ca18e78d81448d99eec840b19de76efd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgstrs_8c.html#56d27043eac0282b0d0e4106acedb083">dlsolve</a> (int, int, double *, double *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#56d27043eac0282b0d0e4106acedb083"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgstrs_8c.html#65523602382b3d96c9852545ae24815d">dmatvec</a> (int, int, int, double *, double *, double *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#65523602382b3d96c9852545ae24815d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgstrs_8c.html#6e3eace519372b7dfcd053e0d3614fc1">dgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, int *perm_c, int *perm_r, <a class="el" href="structSuperMatri [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgstrs_8c.html#1532445fd4c7e1e91d5bd11dbf78364f">dprint_soln</a> (int n, int nrhs, double *soln)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="6e3eace519372b7dfcd053e0d3614fc1"></a><!-- doxytag: member="dgstrs.c::dgstrs" ref="6e3eace519372b7dfcd053e0d3614fc1" args="(trans_t trans, SuperMatrix *L, SuperMatrix *U, int *perm_c, int *perm_r, SuperMatrix *B, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgstrs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> DGSTRS solves a system of linear equations A*X=B or A'*X=B
+ with A sparse and B dense, using the LU factorization computed by
+ DGSTRF.</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre> L       (input) SuperMatrix*
+         The factor L from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf()</a>. Use compressed row subscripts storage for supernodes,
+         i.e., L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (input) SuperMatrix*
+         The factor U from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre> perm_c  (input) int*, dimension (L->ncol)
+	   Column permutation vector, which defines the 
+         permutation matrix Pc; perm_c[i] = j means column i of A is 
+         in position j in A*Pc.</pre><p>
+<pre> perm_r  (input) int*, dimension (L->nrow)
+         Row permutation vector, which defines the permutation matrix Pr; 
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+ 	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="56d27043eac0282b0d0e4106acedb083"></a><!-- doxytag: member="dgstrs.c::dlsolve" ref="56d27043eac0282b0d0e4106acedb083" args="(int, int, double *, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dlsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="65523602382b3d96c9852545ae24815d"></a><!-- doxytag: member="dgstrs.c::dmatvec" ref="65523602382b3d96c9852545ae24815d" args="(int, int, int, double *, double *, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dmatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="1532445fd4c7e1e91d5bd11dbf78364f"></a><!-- doxytag: member="dgstrs.c::dprint_soln" ref="1532445fd4c7e1e91d5bd11dbf78364f" args="(int n, int nrhs, double *soln)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dprint_soln           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>soln</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ca18e78d81448d99eec840b19de76efd"></a><!-- doxytag: member="dgstrs.c::dusolve" ref="ca18e78d81448d99eec840b19de76efd" args="(int, int, double *, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dusolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ditersol1_8c.html b/DOC/html/ditersol1_8c.html
new file mode 100644
index 0000000..9a22b9e
--- /dev/null
+++ b/DOC/html/ditersol1_8c.html
@@ -0,0 +1,367 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/ditersol1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/ditersol1.c File Reference</h1>Example #2 showing how to use ILU to precondition GMRES. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#0361a1766c36ff38205dc63f1b329afd">dpsolve</a> (int n, double x[], double y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#367b39a8f8095885ffb10c66c6652aff">dmatvec_mult</a> (double alpha, double x[], double beta, double y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">GLOBAL_EQUED</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">GLOBAL_A_ORIG</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.2) --
+ Lawrence Berkeley National Laboratory
+ November, 2010
+ August, 2011</pre><p>
+<pre> This example shows that ILU is computed from the equilibrated matrix,
+ but the preconditioned GMRES is applied to the original system.
+ The driver routine DGSISX is called twice to perform factorization
+ and apply preconditioner separately.</pre><p>
+<pre> Note that DGSISX performs the following factorization:
+     Pr*Dr*A*Dc*Pc^T ~= LU
+ with Pr being obtained from MC64 statically then partial pivoting
+ dybamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><p>
+<pre> We need to save a copy of the original matrix A, then solve
+ the original system, A*x = B, using FGMRES.
+ Each GMRES step requires requires 2 procedures:
+   1) Apply preconditioner M^{-1} = Dc*Pc^T*U^{-1}*L^{-1}*Pr*Dr
+   2) Matrix-vector multiplication: w = A*v</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="367b39a8f8095885ffb10c66c6652aff"></a><!-- doxytag: member="ditersol1.c::dmatvec_mult" ref="367b39a8f8095885ffb10c66c6652aff" args="(double alpha, double x[], double beta, double y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dmatvec_mult           </td>
+          <td>(</td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0361a1766c36ff38205dc63f1b329afd"></a><!-- doxytag: member="ditersol1.c::dpsolve" ref="0361a1766c36ff38205dc63f1b329afd" args="(int n, double x[], double y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dpsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="ditersol1.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="d42e5c3013507184841cdfee652a0c18"></a><!-- doxytag: member="ditersol1.c::GLOBAL_A" ref="d42e5c3013507184841cdfee652a0c18" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* <a class="el" href="zitersol1_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f1beb2a8fb47df4eb505addfef02814c"></a><!-- doxytag: member="ditersol1.c::GLOBAL_A_ORIG" ref="f1beb2a8fb47df4eb505addfef02814c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">GLOBAL_A_ORIG</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c5dce1561e620f6a6f6b6f17d82df4e8"></a><!-- doxytag: member="ditersol1.c::GLOBAL_C" ref="c5dce1561e620f6a6f6b6f17d82df4e8" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double * <a class="el" href="zitersol1_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="869338b25a186a486edd0cf1850a7fbb"></a><!-- doxytag: member="ditersol1.c::GLOBAL_EQUED" ref="869338b25a186a486edd0cf1850a7fbb" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* <a class="el" href="zitersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">GLOBAL_EQUED</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0f5cf27b325ef2874c953290f74c9d0a"></a><!-- doxytag: member="ditersol1.c::GLOBAL_L" ref="0f5cf27b325ef2874c953290f74c9d0a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="19718c440adb41fbebcb4bafedbf932c"></a><!-- doxytag: member="ditersol1.c::GLOBAL_MEM_USAGE" ref="19718c440adb41fbebcb4bafedbf932c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structmem__usage__t.html">mem_usage_t</a>* <a class="el" href="zitersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="64b516645b16ef03c6fd0d692e6eb277"></a><!-- doxytag: member="ditersol1.c::GLOBAL_OPTIONS" ref="64b516645b16ef03c6fd0d692e6eb277" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a>* <a class="el" href="zitersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fbcb1904a71d92b04c1aef1cede6c4b1"></a><!-- doxytag: member="ditersol1.c::GLOBAL_PERM_C" ref="fbcb1904a71d92b04c1aef1cede6c4b1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="zitersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5a42ee721355f1c852f770661834be93"></a><!-- doxytag: member="ditersol1.c::GLOBAL_PERM_R" ref="5a42ee721355f1c852f770661834be93" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int * <a class="el" href="zitersol1_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8cb83de814c7fbf89011ba08bb602ce0"></a><!-- doxytag: member="ditersol1.c::GLOBAL_R" ref="8cb83de814c7fbf89011ba08bb602ce0" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* <a class="el" href="zitersol1_8c.html#8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="96a062252c26544370e8feae987c6d16"></a><!-- doxytag: member="ditersol1.c::GLOBAL_STAT" ref="96a062252c26544370e8feae987c6d16" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* <a class="el" href="zitersol1_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="000ad5c2198e4309802b4478ed08a98c"></a><!-- doxytag: member="ditersol1.c::GLOBAL_U" ref="000ad5c2198e4309802b4478ed08a98c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ditersol_8c.html b/DOC/html/ditersol_8c.html
new file mode 100644
index 0000000..210e6c7
--- /dev/null
+++ b/DOC/html/ditersol_8c.html
@@ -0,0 +1,333 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/ditersol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/ditersol.c File Reference</h1>Example #1 showing how to use ILU to precondition GMRES. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#0361a1766c36ff38205dc63f1b329afd">dpsolve</a> (int n, double x[], double y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#367b39a8f8095885ffb10c66c6652aff">dmatvec_mult</a> (double alpha, double x[], double beta, double y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.2) --
+ Lawrence Berkeley National Laboratory
+ November, 2010
+ August, 2011</pre><p>
+<pre> This example shows that ILU is computed from the equilibrated matrix,
+ and the preconditioned GMRES is applied to the equilibrated system.
+ The driver routine DGSISX is called twice to perform factorization
+ and apply preconditioner separately.</pre><p>
+<pre> Note that DGSISX performs the following factorization:
+     Pr*Dr*A*Dc*Pc^T ~= LU
+ with Pr being obtained from MC64 statically then partial pivoting
+ dybamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><p>
+<pre> We can solve the transformed system, A1*y = Dr*B, using FGMRES.
+ B is first overwritten as Dr*B.
+ Then GMRES step requires requires 2 procedures:
+   1) Apply preconditioner M^{-1} = Pc^T*U^{-1}*L^{-1}*Pr
+   2) Matrix-vector multiplication: w = A1*v</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="367b39a8f8095885ffb10c66c6652aff"></a><!-- doxytag: member="ditersol.c::dmatvec_mult" ref="367b39a8f8095885ffb10c66c6652aff" args="(double alpha, double x[], double beta, double y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dmatvec_mult           </td>
+          <td>(</td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0361a1766c36ff38205dc63f1b329afd"></a><!-- doxytag: member="ditersol.c::dpsolve" ref="0361a1766c36ff38205dc63f1b329afd" args="(int n, double x[], double y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dpsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="ditersol.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="d42e5c3013507184841cdfee652a0c18"></a><!-- doxytag: member="ditersol.c::GLOBAL_A" ref="d42e5c3013507184841cdfee652a0c18" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* <a class="el" href="zitersol1_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c5dce1561e620f6a6f6b6f17d82df4e8"></a><!-- doxytag: member="ditersol.c::GLOBAL_C" ref="c5dce1561e620f6a6f6b6f17d82df4e8" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double * <a class="el" href="zitersol1_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0f5cf27b325ef2874c953290f74c9d0a"></a><!-- doxytag: member="ditersol.c::GLOBAL_L" ref="0f5cf27b325ef2874c953290f74c9d0a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="19718c440adb41fbebcb4bafedbf932c"></a><!-- doxytag: member="ditersol.c::GLOBAL_MEM_USAGE" ref="19718c440adb41fbebcb4bafedbf932c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structmem__usage__t.html">mem_usage_t</a>* <a class="el" href="zitersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="64b516645b16ef03c6fd0d692e6eb277"></a><!-- doxytag: member="ditersol.c::GLOBAL_OPTIONS" ref="64b516645b16ef03c6fd0d692e6eb277" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a>* <a class="el" href="zitersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fbcb1904a71d92b04c1aef1cede6c4b1"></a><!-- doxytag: member="ditersol.c::GLOBAL_PERM_C" ref="fbcb1904a71d92b04c1aef1cede6c4b1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="zitersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5a42ee721355f1c852f770661834be93"></a><!-- doxytag: member="ditersol.c::GLOBAL_PERM_R" ref="5a42ee721355f1c852f770661834be93" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int * <a class="el" href="zitersol1_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8cb83de814c7fbf89011ba08bb602ce0"></a><!-- doxytag: member="ditersol.c::GLOBAL_R" ref="8cb83de814c7fbf89011ba08bb602ce0" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* <a class="el" href="zitersol1_8c.html#8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="96a062252c26544370e8feae987c6d16"></a><!-- doxytag: member="ditersol.c::GLOBAL_STAT" ref="96a062252c26544370e8feae987c6d16" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* <a class="el" href="zitersol1_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="000ad5c2198e4309802b4478ed08a98c"></a><!-- doxytag: member="ditersol.c::GLOBAL_U" ref="000ad5c2198e4309802b4478ed08a98c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dlacon_8c.html b/DOC/html/dlacon_8c.html
new file mode 100644
index 0000000..5118d4c
--- /dev/null
+++ b/DOC/html/dlacon_8c.html
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dlacon.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dlacon.c File Reference</h1>Estimates the 1-norm. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dlacon_8c.html#51b3babab7bbf03500dbc5ede2a682b3">d_sign</a>(a, b)   (b >= 0 ? fabs(a) : -fabs(a))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dlacon_8c.html#dccc1e5692ca1dd160d0ca2a17e1b12c">i_dnnt</a>(a)   ( a>=0 ? floor(a+.5) : -floor(.5-a) )</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlacon_8c.html#4187621e84a9554552e3fa8098542801">dlacon_</a> (int *n, double *v, double *x, int *isgn, double *est, int *kase)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="51b3babab7bbf03500dbc5ede2a682b3"></a><!-- doxytag: member="dlacon.c::d_sign" ref="51b3babab7bbf03500dbc5ede2a682b3" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define d_sign          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   (b >= 0 ? fabs(a) : -fabs(a))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="dccc1e5692ca1dd160d0ca2a17e1b12c"></a><!-- doxytag: member="dlacon.c::i_dnnt" ref="dccc1e5692ca1dd160d0ca2a17e1b12c" args="(a)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define i_dnnt          </td>
+          <td>(</td>
+          <td class="paramtype">a </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( a>=0 ? floor(a+.5) : -floor(.5-a) )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="4187621e84a9554552e3fa8098542801"></a><!-- doxytag: member="dlacon.c::dlacon_" ref="4187621e84a9554552e3fa8098542801" args="(int *n, double *v, double *x, int *isgn, double *est, int *kase)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dlacon_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>v</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>isgn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>est</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>kase</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   DLACON estimates the 1-norm of a square matrix A.   
+   Reverse communication is used for evaluating matrix-vector products.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   N      (input) INT
+          The order of the matrix.  N >= 1.</pre><p>
+<pre>   V      (workspace) DOUBLE PRECISION array, dimension (N)   
+          On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
+          (W is not returned).</pre><p>
+<pre>   X      (input/output) DOUBLE PRECISION array, dimension (N)   
+          On an intermediate return, X should be overwritten by   
+                A * X,   if KASE=1,   
+                A' * X,  if KASE=2,
+         and DLACON must be re-called with all the other parameters   
+          unchanged.</pre><p>
+<pre>   ISGN   (workspace) INT array, dimension (N)</pre><p>
+<pre>   EST    (output) DOUBLE PRECISION   
+          An estimate (a lower bound) for norm(A).</pre><p>
+<pre>   KASE   (input/output) INT
+          On the initial call to DLACON, KASE should be 0.   
+          On an intermediate return, KASE will be 1 or 2, indicating   
+          whether X should be overwritten by A * X  or A' * X.   
+          On the final return from DLACON, KASE will again be 0.</pre><p>
+<pre>   Further Details   
+   ======= =======</pre><p>
+<pre>   Contributed by Nick Higham, University of Manchester.   
+   Originally named CONEST, dated March 16, 1988.</pre><p>
+<pre>   Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
+   a real or <a class="el" href="structcomplex.html">complex</a> matrix, with applications to condition estimation", 
+   ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
+   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dlamch_8c.html b/DOC/html/dlamch_8c.html
new file mode 100644
index 0000000..a19d87c
--- /dev/null
+++ b/DOC/html/dlamch_8c.html
@@ -0,0 +1,584 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dlamch.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dlamch.c File Reference</h1>Determines double precision machine parameters. <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dlamch_8c.html#ca1e6c3771fa0306e1dad2b11d22a8e5">TRUE_</a>   (1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dlamch_8c.html#d4986ecbba005b963f63a85f7c8c281d">FALSE_</a>   (0)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dlamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs</a>(x)   ((x) >= 0 ? (x) : -(x))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dlamch_8c.html#c6afabdc09a49a433ee19d8a9486056d">min</a>(a, b)   ((a) <= (b) ? (a) : (b))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dlamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max</a>(a, b)   ((a) >= (b) ? (a) : (b))</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dlamch_8c.html#8f8bef103c45d87276d6508164f5883c">dlamch_</a> (char *cmach)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlamch_8c.html#eaa4a6b78a27d38535ca1a7dc010c92e">dlamc1_</a> (int *beta, int *t, int *rnd, int *ieee1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlamch_8c.html#a05275111d3110333608138f59f3f8c3">dlamc2_</a> (int *beta, int *t, int *rnd, double *eps, int *emin, double *rmin, int *emax, double *rmax)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dlamch_8c.html#35cd4981c9a7d3c46226a75f68720dad">dlamc3_</a> (double *a, double *b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlamch_8c.html#141c735fa5fb73f28150470ee91da0f9">dlamc4_</a> (int *emin, double *start, int *base)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlamch_8c.html#0309c617fb0124d2d3ca73dfbdda9fa9">dlamc5_</a> (int *beta, int *p, int *emin, int *ieee, int *emax, double *rmax)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dlamch_8c.html#9537f19743fcaaac6231895afa9f9e4d">pow_di</a> (double *ap, int *bp)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+       -- LAPACK auxiliary routine (version 2.0) --   
+       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
+       Courant Institute, Argonne National Lab, and Rice University   
+       October 31, 1992   
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="3aa069ac3980707dae1e0530f50d59e4"></a><!-- doxytag: member="dlamch.c::abs" ref="3aa069ac3980707dae1e0530f50d59e4" args="(x)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define abs          </td>
+          <td>(</td>
+          <td class="paramtype">x </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((x) >= 0 ? (x) : -(x))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d4986ecbba005b963f63a85f7c8c281d"></a><!-- doxytag: member="dlamch.c::FALSE_" ref="d4986ecbba005b963f63a85f7c8c281d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FALSE_   (0)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ffe776513b24d84b39af8ab0930fef7f"></a><!-- doxytag: member="dlamch.c::max" ref="ffe776513b24d84b39af8ab0930fef7f" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define max          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((a) >= (b) ? (a) : (b))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c6afabdc09a49a433ee19d8a9486056d"></a><!-- doxytag: member="dlamch.c::min" ref="c6afabdc09a49a433ee19d8a9486056d" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define min          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((a) <= (b) ? (a) : (b))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ca1e6c3771fa0306e1dad2b11d22a8e5"></a><!-- doxytag: member="dlamch.c::TRUE_" ref="ca1e6c3771fa0306e1dad2b11d22a8e5" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TRUE_   (1)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="eaa4a6b78a27d38535ca1a7dc010c92e"></a><!-- doxytag: member="dlamch.c::dlamc1_" ref="eaa4a6b78a27d38535ca1a7dc010c92e" args="(int *beta, int *t, int *rnd, int *ieee1)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dlamc1_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>t</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>ieee1</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+    =======</pre><p>
+<pre>    DLAMC1 determines the machine parameters given by BETA, T, RND, and   
+    IEEE1.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    BETA    (output) INT   
+            The base of the machine.</pre><p>
+<pre>    T       (output) INT   
+            The number of ( BETA ) digits in the mantissa.</pre><p>
+<pre>    RND     (output) INT   
+            Specifies whether proper rounding  ( RND = .TRUE. )  or   
+            chopping  ( RND = .FALSE. )  occurs in addition. This may not</pre><p>
+<pre>            be a reliable guide to the way in which the machine performs</pre><p>
+<pre>            its arithmetic.</pre><p>
+<pre>    IEEE1   (output) INT   
+            Specifies whether rounding appears to be done in the IEEE   
+            'round to nearest' style.</pre><p>
+<pre>    Further Details   
+    ===============</pre><p>
+<pre>    The routine is based on the routine  ENVRON  by Malcolm and   
+    incorporates suggestions by Gentleman and Marovich. See</pre><p>
+<pre>       Malcolm M. A. (1972) Algorithms to reveal properties of   
+          floating-point arithmetic. Comms. of the ACM, 15, 949-951.</pre><p>
+<pre>       Gentleman W. M. and Marovich S. B. (1974) More on algorithms   
+          that reveal properties of floating point arithmetic units.   
+          Comms. of the ACM, 17, 276-277.</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="a05275111d3110333608138f59f3f8c3"></a><!-- doxytag: member="dlamch.c::dlamc2_" ref="a05275111d3110333608138f59f3f8c3" args="(int *beta, int *t, int *rnd, double *eps, int *emin, double *rmin, int *emax, double *rmax)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dlamc2_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>t</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>eps</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>emin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rmin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>emax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rmax</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    DLAMC2 determines the machine parameters specified in its argument   
+    list.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    BETA    (output) INT   
+            The base of the machine.</pre><p>
+<pre>    T       (output) INT   
+            The number of ( BETA ) digits in the mantissa.</pre><p>
+<pre>    RND     (output) INT   
+            Specifies whether proper rounding  ( RND = .TRUE. )  or   
+            chopping  ( RND = .FALSE. )  occurs in addition. This may not</pre><p>
+<pre>            be a reliable guide to the way in which the machine performs</pre><p>
+<pre>            its arithmetic.</pre><p>
+<pre>    EPS     (output) DOUBLE PRECISION   
+            The smallest positive number such that</pre><p>
+<pre>               fl( 1.0 - EPS ) .LT. 1.0,</pre><p>
+<pre>            where fl denotes the computed value.</pre><p>
+<pre>    EMIN    (output) INT   
+            The minimum exponent before (gradual) underflow occurs.</pre><p>
+<pre>    RMIN    (output) DOUBLE PRECISION   
+            The smallest normalized number for the machine, given by   
+            BASE**( EMIN - 1 ), where  BASE  is the floating point value</pre><p>
+<pre>            of BETA.</pre><p>
+<pre>    EMAX    (output) INT   
+            The maximum exponent before overflow occurs.</pre><p>
+<pre>    RMAX    (output) DOUBLE PRECISION   
+            The largest positive number for the machine, given by   
+            BASE**EMAX * ( 1 - EPS ), where  BASE  is the floating point</pre><p>
+<pre>            value of BETA.</pre><p>
+<pre>    Further Details   
+    ===============</pre><p>
+<pre>    The computation of  EPS  is based on a routine PARANOIA by   
+    W. Kahan of the University of California at Berkeley.</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="35cd4981c9a7d3c46226a75f68720dad"></a><!-- doxytag: member="dlamch.c::dlamc3_" ref="35cd4981c9a7d3c46226a75f68720dad" args="(double *a, double *b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dlamc3_           </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>b</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    DLAMC3  is intended to force  A  and  B  to be stored prior to doing</pre><p>
+<pre>    the addition of  A  and  B ,  for use in situations where optimizers</pre><p>
+<pre>    might hold one of these in a register.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    A, B    (input) DOUBLE PRECISION   
+            The values A and B.</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="141c735fa5fb73f28150470ee91da0f9"></a><!-- doxytag: member="dlamch.c::dlamc4_" ref="141c735fa5fb73f28150470ee91da0f9" args="(int *emin, double *start, int *base)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dlamc4_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>emin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>start</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>base</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    DLAMC4 is a service routine for DLAMC2.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    EMIN    (output) EMIN   
+            The minimum exponent before (gradual) underflow, computed by</pre><p>
+<pre>            setting A = START and dividing by BASE until the previous A   
+            can not be recovered.</pre><p>
+<pre>    START   (input) DOUBLE PRECISION   
+            The starting point for determining EMIN.</pre><p>
+<pre>    BASE    (input) INT   
+            The base of the machine.</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="0309c617fb0124d2d3ca73dfbdda9fa9"></a><!-- doxytag: member="dlamch.c::dlamc5_" ref="0309c617fb0124d2d3ca73dfbdda9fa9" args="(int *beta, int *p, int *emin, int *ieee, int *emax, double *rmax)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dlamc5_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>emin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>ieee</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>emax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rmax</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    DLAMC5 attempts to compute RMAX, the largest machine floating-point   
+    number, without overflow.  It assumes that EMAX + <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(EMIN)</a> sum   
+    approximately to a power of 2.  It will fail on machines where this   
+    assumption does not hold, for example, the Cyber 205 (EMIN = -28625,</pre><p>
+<pre>    EMAX = 28718).  It will also fail if the value supplied for EMIN is   
+    too large (i.e. too close to zero), probably with overflow.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    BETA    (input) INT   
+            The base of floating-point arithmetic.</pre><p>
+<pre>    P       (input) INT   
+            The number of base BETA digits in the mantissa of a   
+            floating-point value.</pre><p>
+<pre>    EMIN    (input) INT   
+            The minimum exponent before (gradual) underflow.</pre><p>
+<pre>    IEEE    (input) INT   
+            A int flag specifying whether or not the arithmetic   
+            system is thought to comply with the IEEE standard.</pre><p>
+<pre>    EMAX    (output) INT   
+            The largest exponent before overflow</pre><p>
+<pre>    RMAX    (output) DOUBLE PRECISION   
+            The largest machine floating-point number.</pre><p>
+<pre>   =====================================================================</pre><p>
+<pre>       First compute LEXP and UEXP, two powers of 2 that bound   
+       <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(EMIN)</a>. We then assume that EMAX + <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(EMIN)</a> will sum   
+       approximately to the bound that is closest to <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(EMIN)</a>.   
+       (EMAX is the exponent of the required number RMAX).
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="8f8bef103c45d87276d6508164f5883c"></a><!-- doxytag: member="dlamch.c::dlamch_" ref="8f8bef103c45d87276d6508164f5883c" args="(char *cmach)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dlamch_           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>cmach</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    DLAMCH determines double precision machine parameters.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    CMACH   (input) CHARACTER*1   
+            Specifies the value to be returned by DLAMCH:   
+            = 'E' or 'e',   DLAMCH := eps   
+            = 'S' or 's ,   DLAMCH := sfmin   
+            = 'B' or 'b',   DLAMCH := base   
+            = 'P' or 'p',   DLAMCH := eps*base   
+            = 'N' or 'n',   DLAMCH := t   
+            = 'R' or 'r',   DLAMCH := rnd   
+            = 'M' or 'm',   DLAMCH := emin   
+            = 'U' or 'u',   DLAMCH := rmin   
+            = 'L' or 'l',   DLAMCH := emax   
+            = 'O' or 'o',   DLAMCH := rmax</pre><p>
+<pre>            where</pre><p>
+<pre>            eps   = relative machine precision   
+            sfmin = safe minimum, such that 1/sfmin does not overflow   
+            base  = base of the machine   
+            prec  = eps*base   
+            t     = number of (base) digits in the mantissa   
+            rnd   = 1.0 when rounding occurs in addition, 0.0 otherwise   
+            emin  = minimum exponent before (gradual) underflow   
+            rmin  = underflow threshold - base**(emin-1)   
+            emax  = largest exponent before overflow   
+            rmax  = overflow threshold  - (base**emax)*(1-eps)</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="9537f19743fcaaac6231895afa9f9e4d"></a><!-- doxytag: member="dlamch.c::pow_di" ref="9537f19743fcaaac6231895afa9f9e4d" args="(double *ap, int *bp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double pow_di           </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>ap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>bp</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dlangs_8c.html b/DOC/html/dlangs_8c.html
new file mode 100644
index 0000000..83017a3
--- /dev/null
+++ b/DOC/html/dlangs_8c.html
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dlangs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dlangs.c File Reference</h1>Returns the value of the one norm. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dlangs_8c.html#75a53f4464b95c63adad9e1f63f44d1c">dlangs</a> (char *norm, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Modified from lapack routine DLANGE 
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="75a53f4464b95c63adad9e1f63f44d1c"></a><!-- doxytag: member="dlangs.c::dlangs" ref="75a53f4464b95c63adad9e1f63f44d1c" args="(char *norm, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dlangs           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>norm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   DLANGS returns the value of the one norm, or the Frobenius norm, or 
+   the infinity norm, or the element of largest absolute value of a 
+   real matrix A.</pre><p>
+<pre>   Description   
+   ===========</pre><p>
+<pre>   DLANGE returns the value</pre><p>
+<pre>      DLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm'   
+               (   
+               ( norm1(A),         NORM = '1', 'O' or 'o'   
+               (   
+               ( normI(A),         NORM = 'I' or 'i'   
+               (   
+               ( normF(A),         NORM = 'F', 'f', 'E' or 'e'</pre><p>
+<pre>   where  norm1  denotes the  one norm of a matrix (maximum column sum), 
+   normI  denotes the  infinity norm  of a matrix  (maximum row sum) and 
+   normF  denotes the  Frobenius norm of a matrix (square root of sum of 
+   squares).  Note that  max(abs(A(i,j)))  is not a  matrix norm.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   NORM    (input) CHARACTER*1   
+           Specifies the value to be returned in DLANGE as described above.   
+   A       (input) SuperMatrix*
+           The M by N sparse matrix A.</pre><p>
+<pre>  =====================================================================
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dlaqgs_8c.html b/DOC/html/dlaqgs_8c.html
new file mode 100644
index 0000000..12c36a0
--- /dev/null
+++ b/DOC/html/dlaqgs_8c.html
@@ -0,0 +1,160 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dlaqgs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dlaqgs.c File Reference</h1>Equlibrates a general sprase matrix. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dlaqgs_8c.html#0656018abfc9fa2821827415f5d5ea57">THRESH</a>   (0.1)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dlaqgs_8c.html#07e1fa4926680eb02069087f0aa26fa1">dlaqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, double *r, double *c, double rowcnd, double colcnd, double amax, char *equed)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Modified from LAPACK routine DLAQGE
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="0656018abfc9fa2821827415f5d5ea57"></a><!-- doxytag: member="dlaqgs.c::THRESH" ref="0656018abfc9fa2821827415f5d5ea57" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define THRESH   (0.1)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="07e1fa4926680eb02069087f0aa26fa1"></a><!-- doxytag: member="dlaqgs.c::dlaqgs" ref="07e1fa4926680eb02069087f0aa26fa1" args="(SuperMatrix *A, double *r, double *c, double rowcnd, double colcnd, double amax, char *equed)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dlaqgs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   DLAQGS equilibrates a general sparse M by N matrix A using the row and   
+   scaling factors in the vectors R and C.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input/output) SuperMatrix*
+           On exit, the equilibrated matrix.  See EQUED for the form of 
+           the equilibrated matrix. The type of A can be:
+	    Stype = NC; Dtype = SLU_D; Mtype = GE.</pre><p>
+<pre>   R       (input) double*, dimension (A->nrow)
+           The row scale factors for A.</pre><p>
+<pre>   C       (input) double*, dimension (A->ncol)
+           The column scale factors for A.</pre><p>
+<pre>   ROWCND  (input) double
+           Ratio of the smallest R(i) to the largest R(i).</pre><p>
+<pre>   COLCND  (input) double
+           Ratio of the smallest C(i) to the largest C(i).</pre><p>
+<pre>   AMAX    (input) double
+           Absolute value of largest matrix entry.</pre><p>
+<pre>   EQUED   (output) char*
+           Specifies the form of equilibration that was done.   
+           = 'N':  No equilibration   
+           = 'R':  Row equilibration, i.e., A has been premultiplied by  
+                   diag(R).   
+           = 'C':  Column equilibration, i.e., A has been postmultiplied  
+                   by diag(C).   
+           = 'B':  Both row and column equilibration, i.e., A has been
+                   replaced by diag(R) * A * diag(C).</pre><p>
+<pre>   Internal Parameters   
+   ===================</pre><p>
+<pre>   THRESH is a threshold value used to decide if row or column scaling   
+   should be done based on the ratio of the row or column scaling   
+   factors.  If ROWCND < THRESH, row scaling is done, and if   
+   COLCND < THRESH, column scaling is done.</pre><p>
+<pre>   LARGE and SMALL are threshold values used to decide if row scaling   
+   should be done based on the absolute size of the largest matrix   
+   element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dldperm_8c.html b/DOC/html/dldperm_8c.html
new file mode 100644
index 0000000..37ae551
--- /dev/null
+++ b/DOC/html/dldperm_8c.html
@@ -0,0 +1,283 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dldperm.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dldperm.c File Reference</h1>Finds a row permutation so that the matrix has large entries on the diagonal. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dldperm_8c.html#1e6fb0c8dd36aef071ef165136ece781">mc64id_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dldperm_8c.html#1bf33c16a135cdc671242aed1705e1cd">mc64ad_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *, <a class="el" href="slu__zdefs_8h.html#b6 [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dldperm_8c.html#5c6a8de5e809f2094735965027adf532">dldperm</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> job, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> n, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> nnz, <a class="el" href="slu__zdefs [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="5c6a8de5e809f2094735965027adf532"></a><!-- doxytag: member="dldperm.c::dldperm" ref="5c6a8de5e809f2094735965027adf532" args="(int_t job, int_t n, int_t nnz, int_t colptr[], int_t adjncy[], double nzval[], int_t *perm, double u[], double v[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dldperm           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>job</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>colptr</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>adjncy</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>nzval</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>perm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>u</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>v</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   DLDPERM finds a row permutation so that the matrix has large
+   entries on the diagonal.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> job    (input) int
+        Control the action. Possible values for JOB are:
+        = 1 : Compute a row permutation of the matrix so that the
+              permuted matrix has as many entries on its diagonal as
+              possible. The values on the diagonal are of arbitrary size.
+              HSL subroutine MC21A/AD is used for this.
+        = 2 : Compute a row permutation of the matrix so that the smallest 
+              value on the diagonal of the permuted matrix is maximized.
+        = 3 : Compute a row permutation of the matrix so that the smallest
+              value on the diagonal of the permuted matrix is maximized.
+              The algorithm differs from the one used for JOB = 2 and may
+              have quite a different performance.
+        = 4 : Compute a row permutation of the matrix so that the sum
+              of the diagonal entries of the permuted matrix is maximized.
+        = 5 : Compute a row permutation of the matrix so that the product
+              of the diagonal entries of the permuted matrix is maximized
+              and vectors to scale the matrix so that the nonzero diagonal 
+              entries of the permuted matrix are one in absolute value and 
+              all the off-diagonal entries are less than or equal to one in 
+              absolute value.
+        Restriction: 1 <= JOB <= 5.</pre><p>
+<pre> n      (input) int
+        The order of the matrix.</pre><p>
+<pre> nnz    (input) int
+        The number of nonzeros in the matrix.</pre><p>
+<pre> adjncy (input) int*, of size nnz
+        The adjacency structure of the matrix, which contains the row
+        indices of the nonzeros.</pre><p>
+<pre> colptr (input) int*, of size n+1
+        The pointers to the beginning of each column in ADJNCY.</pre><p>
+<pre> nzval  (input) double*, of size nnz
+        The nonzero values of the matrix. nzval[k] is the value of
+        the entry corresponding to adjncy[k].
+        It is not used if job = 1.</pre><p>
+<pre> perm   (output) int*, of size n
+        The permutation vector. perm[i] = j means row i in the
+        original matrix is in row j of the permuted matrix.</pre><p>
+<pre> u      (output) double*, of size n
+        If job = 5, the natural logarithms of the row scaling factors.</pre><p>
+<pre> v      (output) double*, of size n
+        If job = 5, the natural logarithms of the column scaling factors. 
+        The scaled matrix B has entries b_ij = a_ij * exp(u_i + v_j).
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="1bf33c16a135cdc671242aed1705e1cd"></a><!-- doxytag: member="dldperm.c::mc64ad_" ref="1bf33c16a135cdc671242aed1705e1cd" args="(int_t *, int_t *, int_t *, int_t[], int_t[], double[], int_t *, int_t[], int_t *, int_t[], int_t *, double[], int_t[], int_t[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64ad_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1e6fb0c8dd36aef071ef165136ece781"></a><!-- doxytag: member="dldperm.c::mc64id_" ref="1e6fb0c8dd36aef071ef165136ece781" args="(int_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64id_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dlinsol1_8c.html b/DOC/html/dlinsol1_8c.html
new file mode 100644
index 0000000..36287f0
--- /dev/null
+++ b/DOC/html/dlinsol1_8c.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/dlinsol1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/dlinsol1.c File Reference</h1><code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="dlinsol1.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dlinsol_8c.html b/DOC/html/dlinsol_8c.html
new file mode 100644
index 0000000..e148226
--- /dev/null
+++ b/DOC/html/dlinsol_8c.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/dlinsol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/dlinsol.c File Reference</h1><code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsol_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="dlinsol.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dlinsolx1_8c.html b/DOC/html/dlinsolx1_8c.html
new file mode 100644
index 0000000..b391290
--- /dev/null
+++ b/DOC/html/dlinsolx1_8c.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/dlinsolx1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/dlinsolx1.c File Reference</h1><code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsolx1_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsolx1_8c.html#693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> *trans)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="dlinsolx1.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="693ba86aac49435e82cf3a57a4412744"></a><!-- doxytag: member="dlinsolx1.c::parse_command_line" ref="693ba86aac49435e82cf3a57a4412744" args="(int argc, char *argv[], int *lwork, double *u, yes_no_t *equil, trans_t *trans)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void parse_command_line           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> * </td>
+          <td class="paramname"> <em>equil</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+          <td class="paramname"> <em>trans</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dlinsolx2_8c.html b/DOC/html/dlinsolx2_8c.html
new file mode 100644
index 0000000..3f22242
--- /dev/null
+++ b/DOC/html/dlinsolx2_8c.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/dlinsolx2.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/dlinsolx2.c File Reference</h1><code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsolx2_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsolx2_8c.html#693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> *trans)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="dlinsolx2.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="693ba86aac49435e82cf3a57a4412744"></a><!-- doxytag: member="dlinsolx2.c::parse_command_line" ref="693ba86aac49435e82cf3a57a4412744" args="(int argc, char *argv[], int *lwork, double *u, yes_no_t *equil, trans_t *trans)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void parse_command_line           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> * </td>
+          <td class="paramname"> <em>equil</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+          <td class="paramname"> <em>trans</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dlinsolx_8c.html b/DOC/html/dlinsolx_8c.html
new file mode 100644
index 0000000..7b7fe6b
--- /dev/null
+++ b/DOC/html/dlinsolx_8c.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/dlinsolx.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/dlinsolx.c File Reference</h1><code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsolx_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsolx_8c.html#693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> *trans)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="dlinsolx.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="693ba86aac49435e82cf3a57a4412744"></a><!-- doxytag: member="dlinsolx.c::parse_command_line" ref="693ba86aac49435e82cf3a57a4412744" args="(int argc, char *argv[], int *lwork, double *u, yes_no_t *equil, trans_t *trans)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void parse_command_line           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> * </td>
+          <td class="paramname"> <em>equil</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+          <td class="paramname"> <em>trans</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dmemory_8c.html b/DOC/html/dmemory_8c.html
new file mode 100644
index 0000000..4a4df2f
--- /dev/null
+++ b/DOC/html/dmemory_8c.html
@@ -0,0 +1,976 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dmemory.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dmemory.c File Reference</h1>Memory details. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#1ef4d4db4d5e1fe0719416163e0e51ae">StackFull</a>(x)   ( x + Glu->stack.used >= Glu->stack.size )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#c11b1c3847a3d397e9675de40782134d">NotDoubleAlign</a>(addr)   ( (long int)addr & 7 )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#c8204d321846eb4b23d563eac7e5bfa7">DoubleAlign</a>(addr)   ( ((long int)addr + 7) & ~7L )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#70ca807c578a0c495f7ce5edb0215e2b">TempSpace</a>(m, w)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#7b2a35bfd2e6c9d03e2a6ccdba9fa847">Reduce</a>(alpha)   ((alpha + 1) / 2)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#fe3104df9ace895f5332843534ae99b4">dexpand</a> (int *prev_len,<a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> type,int len_to_copy,int keep_prev,<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Expand the existing storage to accommodate more fill-ins.  <a href="#fe3104df9ace895f5332843534ae99b4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#0ae701a41439ca8af10604920e2f72ba">dLUWorkInit</a> (int m, int n, int panel_size, int **iworkptr, double **dworkptr, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate known working storage. Returns 0 if success, otherwise returns the number of bytes allocated so far when failure occurred.  <a href="#0ae701a41439ca8af10604920e2f72ba"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#1540850a622674131bd1ea6a4f91cd56">copy_mem_double</a> (int, void *, void *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#adb43e6ea6725f06d04704a1db3dc0be">dStackCompress</a> (<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Compress the work[] array to remove fragmentation.  <a href="#adb43e6ea6725f06d04704a1db3dc0be"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#cb29e96116d7b170d6f021a87a4763e6">dSetupSpace</a> (void *work, int lwork, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Setup the memory model to be used for factorization.  <a href="#cb29e96116d7b170d6f021a87a4763e6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#00f228f45bab7594bea821b70eedbf51">duser_malloc</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#8412c8f776ad7cfe599a5b601310fb8e">duser_free</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#b59eea34474da95fb3dc125400a1287e">copy_mem_int</a> (int, void *, void *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#4c226087c09a94ff40b92b14fa46fc53">user_bcopy</a> (char *, char *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#e94c561110fcc75c31cda89105fd0a6c">dQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *mem_usage)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#61aaccf587a78d15d79c4cc79f80e8b0">ilu_dQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *mem_usage)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#e2ca2ac5e9a763fd3f07487343e4522e">dLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a> fact, void *work, int lwork, int m, int n, int annz, int panel_size, double fill_ratio, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for the data structures common to all factor routines.  <a href="#e2ca2ac5e9a763fd3f07487343e4522e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#aa5359da217b433b43bf6c8e2d29aa45">dSetRWork</a> (int m, int panel_size, double *dworkptr, double **dense, double **tempv)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays.  <a href="#aa5359da217b433b43bf6c8e2d29aa45"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#a7d9129a2b0dc259ccccc8d6d2218cf8">dLUWorkFree</a> (int *iwork, double *dwork, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines.  <a href="#a7d9129a2b0dc259ccccc8d6d2218cf8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#9aff5dfe301496ef7c9234789975c043">dLUMemXpand</a> (int jcol, int next, <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> mem_type, int *maxlen, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization.  <a href="#9aff5dfe301496ef7c9234789975c043"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#eed250713fbfb3fac567d7a503774ccc">dallocateA</a> (int n, int nnz, double **a, int **asub, int **xa)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A.  <a href="#eed250713fbfb3fac567d7a503774ccc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#8f2b9305cb611c37e7f627da902451a8">doubleMalloc</a> (int n)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#c8b6d99155644578a5e5542c32040cfe">doubleCalloc</a> (int n)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#5c9b1e24d07635068c014999d44672aa">dmemory_usage</a> (const int nzlmax, const int nzumax, const int nzlumax, const int n)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="c8204d321846eb4b23d563eac7e5bfa7"></a><!-- doxytag: member="dmemory.c::DoubleAlign" ref="c8204d321846eb4b23d563eac7e5bfa7" args="(addr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DoubleAlign          </td>
+          <td>(</td>
+          <td class="paramtype">addr </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( ((long int)addr + 7) & ~7L )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c11b1c3847a3d397e9675de40782134d"></a><!-- doxytag: member="dmemory.c::NotDoubleAlign" ref="c11b1c3847a3d397e9675de40782134d" args="(addr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NotDoubleAlign          </td>
+          <td>(</td>
+          <td class="paramtype">addr </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( (long int)addr & 7 )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7b2a35bfd2e6c9d03e2a6ccdba9fa847"></a><!-- doxytag: member="dmemory.c::Reduce" ref="7b2a35bfd2e6c9d03e2a6ccdba9fa847" args="(alpha)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define Reduce          </td>
+          <td>(</td>
+          <td class="paramtype">alpha </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((alpha + 1) / 2)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1ef4d4db4d5e1fe0719416163e0e51ae"></a><!-- doxytag: member="dmemory.c::StackFull" ref="1ef4d4db4d5e1fe0719416163e0e51ae" args="(x)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define StackFull          </td>
+          <td>(</td>
+          <td class="paramtype">x </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( x + Glu->stack.used >= Glu->stack.size )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="70ca807c578a0c495f7ce5edb0215e2b"></a><!-- doxytag: member="dmemory.c::TempSpace" ref="70ca807c578a0c495f7ce5edb0215e2b" args="(m, w)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TempSpace          </td>
+          <td>(</td>
+          <td class="paramtype">m,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">w </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">( (2*w + 4 + <a class="code" href="slu__util_8h.html#9b7b2a5116ee487722b0967317ab6360">NO_MARKER</a>) * m * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) + \
+                              (w + 1) * m * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>) )
+</pre></div>
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="1540850a622674131bd1ea6a4f91cd56"></a><!-- doxytag: member="dmemory.c::copy_mem_double" ref="1540850a622674131bd1ea6a4f91cd56" args="(int, void *, void *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void copy_mem_double           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>howmany</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>old</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>new</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b59eea34474da95fb3dc125400a1287e"></a><!-- doxytag: member="dmemory.c::copy_mem_int" ref="b59eea34474da95fb3dc125400a1287e" args="(int, void *, void *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void copy_mem_int           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="eed250713fbfb3fac567d7a503774ccc"></a><!-- doxytag: member="dmemory.c::dallocateA" ref="eed250713fbfb3fac567d7a503774ccc" args="(int n, int nnz, double **a, int **asub, int **xa)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dallocateA           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>xa</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fe3104df9ace895f5332843534ae99b4"></a><!-- doxytag: member="dmemory.c::dexpand" ref="fe3104df9ace895f5332843534ae99b4" args="(int *prev_len,MemType type,int len_to_copy,int keep_prev,GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void * dexpand           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>prev_len</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> </td>
+          <td class="paramname"> <em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>len_to_copy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>keep_prev</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e2ca2ac5e9a763fd3f07487343e4522e"></a><!-- doxytag: member="dmemory.c::dLUMemInit" ref="e2ca2ac5e9a763fd3f07487343e4522e" args="(fact_t fact, void *work, int lwork, int m, int n, int annz, int panel_size, double fill_ratio, SuperMatrix *L, SuperMatrix *U, GlobalLU_t *Glu, int **iwork, double **dwork)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dLUMemInit           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a> </td>
+          <td class="paramname"> <em>fact</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>annz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>fill_ratio</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>iwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname"> <em>dwork</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Memory-related.<p>
+<pre>
+ For those unpredictable size, estimate as fill_ratio * nnz(A).
+ Return value:
+     If lwork = -1, return the estimated amount of space required, plus n;
+     otherwise, return the amount of space actually allocated when
+     memory allocation failure occurred.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="9aff5dfe301496ef7c9234789975c043"></a><!-- doxytag: member="dmemory.c::dLUMemXpand" ref="9aff5dfe301496ef7c9234789975c043" args="(int jcol, int next, MemType mem_type, int *maxlen, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dLUMemXpand           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>next</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> </td>
+          <td class="paramname"> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>maxlen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="a7d9129a2b0dc259ccccc8d6d2218cf8"></a><!-- doxytag: member="dmemory.c::dLUWorkFree" ref="a7d9129a2b0dc259ccccc8d6d2218cf8" args="(int *iwork, double *dwork, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dLUWorkFree           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>dwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0ae701a41439ca8af10604920e2f72ba"></a><!-- doxytag: member="dmemory.c::dLUWorkInit" ref="0ae701a41439ca8af10604920e2f72ba" args="(int m, int n, int panel_size, int **iworkptr, double **dworkptr, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dLUWorkInit           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>iworkptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname"> <em>dworkptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5c9b1e24d07635068c014999d44672aa"></a><!-- doxytag: member="dmemory.c::dmemory_usage" ref="5c9b1e24d07635068c014999d44672aa" args="(const int nzlmax, const int nzumax, const int nzlumax, const int n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dmemory_usage           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nzlmax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nzumax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nzlumax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c8b6d99155644578a5e5542c32040cfe"></a><!-- doxytag: member="dmemory.c::doubleCalloc" ref="c8b6d99155644578a5e5542c32040cfe" args="(int n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* doubleCalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8f2b9305cb611c37e7f627da902451a8"></a><!-- doxytag: member="dmemory.c::doubleMalloc" ref="8f2b9305cb611c37e7f627da902451a8" args="(int n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* doubleMalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e94c561110fcc75c31cda89105fd0a6c"></a><!-- doxytag: member="dmemory.c::dQuerySpace" ref="e94c561110fcc75c31cda89105fd0a6c" args="(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="aa5359da217b433b43bf6c8e2d29aa45"></a><!-- doxytag: member="dmemory.c::dSetRWork" ref="aa5359da217b433b43bf6c8e2d29aa45" args="(int m, int panel_size, double *dworkptr, double **dense, double **tempv)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dSetRWork           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>dworkptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname"> <em>tempv</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cb29e96116d7b170d6f021a87a4763e6"></a><!-- doxytag: member="dmemory.c::dSetupSpace" ref="cb29e96116d7b170d6f021a87a4763e6" args="(void *work, int lwork, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dSetupSpace           </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+lwork = 0: use system malloc; lwork > 0: use user-supplied work[] space. 
+</div>
+</div><p>
+<a class="anchor" name="adb43e6ea6725f06d04704a1db3dc0be"></a><!-- doxytag: member="dmemory.c::dStackCompress" ref="adb43e6ea6725f06d04704a1db3dc0be" args="(GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dStackCompress           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8412c8f776ad7cfe599a5b601310fb8e"></a><!-- doxytag: member="dmemory.c::duser_free" ref="8412c8f776ad7cfe599a5b601310fb8e" args="(int, int, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void duser_free           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>bytes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>which_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="00f228f45bab7594bea821b70eedbf51"></a><!-- doxytag: member="dmemory.c::duser_malloc" ref="00f228f45bab7594bea821b70eedbf51" args="(int, int, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void * duser_malloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>bytes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>which_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="61aaccf587a78d15d79c4cc79f80e8b0"></a><!-- doxytag: member="dmemory.c::ilu_dQuerySpace" ref="61aaccf587a78d15d79c4cc79f80e8b0" args="(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_dQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="4c226087c09a94ff40b92b14fa46fc53"></a><!-- doxytag: member="dmemory.c::user_bcopy" ref="4c226087c09a94ff40b92b14fa46fc53" args="(char *, char *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void user_bcopy           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dmyblas2_8c.html b/DOC/html/dmyblas2_8c.html
new file mode 100644
index 0000000..eaae450
--- /dev/null
+++ b/DOC/html/dmyblas2_8c.html
@@ -0,0 +1,180 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dmyblas2.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dmyblas2.c File Reference</h1>Level 2 Blas operations. <a href="#_details">More...</a>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmyblas2_8c.html#986e55bb6eac4e68b78c98b8276557db">dlsolve</a> (int ldm, int ncol, double *M, double *rhs)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#986e55bb6eac4e68b78c98b8276557db"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmyblas2_8c.html#47847fb71c3589e4d725db85052896fd">dusolve</a> (int ldm, int ncol, double *M, double *rhs)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#47847fb71c3589e4d725db85052896fd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmyblas2_8c.html#703303b4c9cdd6074c55e83970db83b6">dmatvec</a> (int ldm, int nrow, int ncol, double *M, double *vec, double *Mxvec)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#703303b4c9cdd6074c55e83970db83b6"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> Purpose: Level 2 BLAS operations: solves and matvec, written in C. Note: This is only used when the system lacks an efficient BLAS library.  <hr><h2>Function Documentation</h2>
+<a class="anchor" name="986e55bb6eac4e68b78c98b8276557db"></a><!-- doxytag: member="dmyblas2.c::dlsolve" ref="986e55bb6eac4e68b78c98b8276557db" args="(int ldm, int ncol, double *M, double *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dlsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="703303b4c9cdd6074c55e83970db83b6"></a><!-- doxytag: member="dmyblas2.c::dmatvec" ref="703303b4c9cdd6074c55e83970db83b6" args="(int ldm, int nrow, int ncol, double *M, double *vec, double *Mxvec)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dmatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="47847fb71c3589e4d725db85052896fd"></a><!-- doxytag: member="dmyblas2.c::dusolve" ref="47847fb71c3589e4d725db85052896fd" args="(int ldm, int ncol, double *M, double *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dusolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/doxygen.css b/DOC/html/doxygen.css
new file mode 100644
index 0000000..74c22a2
--- /dev/null
+++ b/DOC/html/doxygen.css
@@ -0,0 +1,433 @@
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+BODY,TD {
+	font-size: 90%;
+}
+H1 {
+	text-align: center;
+	font-size: 160%;
+}
+H2 {
+	font-size: 120%;
+}
+H3 {
+	font-size: 100%;
+}
+CAPTION { 
+	font-weight: bold 
+}
+DIV.qindex {
+	width: 100%;
+	background-color: #e8eef2;
+	border: 1px solid #84b0c7;
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+	line-height: 140%;
+}
+DIV.navpath {
+	width: 100%;
+	background-color: #e8eef2;
+	border: 1px solid #84b0c7;
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+	line-height: 140%;
+}
+DIV.navtab {
+       background-color: #e8eef2;
+       border: 1px solid #84b0c7;
+       text-align: center;
+       margin: 2px;
+       margin-right: 15px;
+       padding: 2px;
+}
+TD.navtab {
+       font-size: 70%;
+}
+A.qindex {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D;
+}
+A.qindex:visited {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D
+}
+A.qindex:hover {
+	text-decoration: none;
+	background-color: #ddddff;
+}
+A.qindexHL {
+	text-decoration: none;
+	font-weight: bold;
+	background-color: #6666cc;
+	color: #ffffff;
+	border: 1px double #9295C2;
+}
+A.qindexHL:hover {
+	text-decoration: none;
+	background-color: #6666cc;
+	color: #ffffff;
+}
+A.qindexHL:visited { 
+	text-decoration: none; 
+	background-color: #6666cc; 
+	color: #ffffff 
+}
+A.el { 
+	text-decoration: none; 
+	font-weight: bold 
+}
+A.elRef { 
+	font-weight: bold 
+}
+A.code:link { 
+	text-decoration: none; 
+	font-weight: normal; 
+	color: #0000FF
+}
+A.code:visited { 
+	text-decoration: none; 
+	font-weight: normal; 
+	color: #0000FF
+}
+A.codeRef:link { 
+	font-weight: normal; 
+	color: #0000FF
+}
+A.codeRef:visited { 
+	font-weight: normal; 
+	color: #0000FF
+}
+A:hover { 
+	text-decoration: none; 	
+	background-color: #f2f2ff 
+}
+DL.el { 
+	margin-left: -1cm 
+}
+.fragment {
+       font-family: monospace, fixed;
+       font-size: 95%;
+}
+PRE.fragment {
+	border: 1px solid #CCCCCC;
+	background-color: #f5f5f5;
+	margin-top: 4px;
+	margin-bottom: 4px;
+	margin-left: 2px;
+	margin-right: 8px;
+	padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 4px;
+	padding-bottom: 4px;
+}
+DIV.ah { 
+	background-color: black; 
+	font-weight: bold; 
+	color: #ffffff; 
+	margin-bottom: 3px; 
+	margin-top: 3px 
+}
+
+DIV.groupHeader {
+       margin-left: 16px;
+       margin-top: 12px;
+       margin-bottom: 6px;
+       font-weight: bold;
+}
+DIV.groupText { 
+	margin-left: 16px; 
+	font-style: italic; 
+	font-size: 90% 
+}
+BODY {
+	background: white;
+	color: black;
+	margin-right: 20px;
+	margin-left: 20px;
+}
+TD.indexkey {
+	background-color: #e8eef2;
+	font-weight: bold;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #CCCCCC;
+}
+TD.indexvalue {
+	background-color: #e8eef2;
+	font-style: italic;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #CCCCCC;
+}
+TR.memlist {
+	background-color: #f0f0f0; 
+}
+P.formulaDsp { 
+	text-align: center; 
+}
+IMG.formulaDsp {
+}
+IMG.formulaInl { 
+	vertical-align: middle; 
+}
+SPAN.keyword       { color: #008000 }
+SPAN.keywordtype   { color: #604020 }
+SPAN.keywordflow   { color: #e08000 }
+SPAN.comment       { color: #800000 }
+SPAN.preprocessor  { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral   { color: #008080 }
+SPAN.vhdldigit     { color: #ff00ff }
+SPAN.vhdlchar      { color: #000000 }
+SPAN.vhdlkeyword   { color: #700070 }
+SPAN.vhdllogic     { color: #ff0000 }
+
+.mdescLeft {
+	padding: 0px 8px 4px 8px;
+	font-size: 80%;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.mdescRight {
+        padding: 0px 8px 4px 8px;
+	font-size: 80%;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.memItemLeft {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memItemRight {
+	padding: 1px 8px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplItemLeft {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: none;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplItemRight {
+	padding: 1px 8px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: none;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplParams {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	color: #606060;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.search { 
+	color: #003399;
+	font-weight: bold;
+}
+FORM.search {
+	margin-bottom: 0px;
+	margin-top: 0px;
+}
+INPUT.search { 
+	font-size: 75%;
+	color: #000080;
+	font-weight: normal;
+	background-color: #e8eef2;
+}
+TD.tiny { 
+	font-size: 75%;
+}
+a {
+	color: #1A41A8;
+}
+a:visited {
+	color: #2A3798;
+}
+.dirtab { 
+	padding: 4px;
+	border-collapse: collapse;
+	border: 1px solid #84b0c7;
+}
+TH.dirtab { 
+	background: #e8eef2;
+	font-weight: bold;
+}
+HR { 
+	height: 1px;
+	border: none;
+	border-top: 1px solid black;
+}
+
+/* Style for detailed member documentation */
+.memtemplate {
+	font-size: 80%;
+	color: #606060;
+	font-weight: normal;
+	margin-left: 3px;
+} 
+.memnav { 
+	background-color: #e8eef2;
+	border: 1px solid #84b0c7;
+	text-align: center;
+	margin: 2px;
+	margin-right: 15px;
+	padding: 2px;
+}
+.memitem {
+	padding: 4px;
+	background-color: #eef3f5;
+	border-width: 1px;
+	border-style: solid;
+	border-color: #dedeee;
+	-moz-border-radius: 8px 8px 8px 8px;
+}
+.memname {
+	white-space: nowrap;
+	font-weight: bold;
+}
+.memdoc{
+	padding-left: 10px;
+}
+.memproto {
+	background-color: #d5e1e8;
+	width: 100%;
+	border-width: 1px;
+	border-style: solid;
+	border-color: #84b0c7;
+	font-weight: bold;
+	-moz-border-radius: 8px 8px 8px 8px;
+}
+.paramkey {
+	text-align: right;
+}
+.paramtype {
+	white-space: nowrap;
+}
+.paramname {
+	color: #602020;
+	font-style: italic;
+	white-space: nowrap;
+}
+/* End Styling for detailed member documentation */
+
+/* for the tree view */
+.ftvtree {
+	font-family: sans-serif;
+	margin:0.5em;
+}
+.directory { 
+	font-size: 9pt; 
+	font-weight: bold; 
+}
+.directory h3 { 
+	margin: 0px; 
+	margin-top: 1em; 
+	font-size: 11pt; 
+}
+.directory > h3 { 
+	margin-top: 0; 
+}
+.directory p { 
+	margin: 0px; 
+	white-space: nowrap; 
+}
+.directory div { 
+	display: none; 
+	margin: 0px; 
+}
+.directory img { 
+	vertical-align: -30%; 
+}
+
diff --git a/DOC/html/doxygen.png b/DOC/html/doxygen.png
new file mode 100644
index 0000000..f0a274b
Binary files /dev/null and b/DOC/html/doxygen.png differ
diff --git a/DOC/html/dpanel__bmod_8c.html b/DOC/html/dpanel__bmod_8c.html
new file mode 100644
index 0000000..1a777d1
--- /dev/null
+++ b/DOC/html/dpanel__bmod_8c.html
@@ -0,0 +1,258 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dpanel_bmod.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dpanel_bmod.c File Reference</h1>Performs numeric block updates. <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dpanel__bmod_8c.html#56d27043eac0282b0d0e4106acedb083">dlsolve</a> (int, int, double *, double *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#56d27043eac0282b0d0e4106acedb083"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dpanel__bmod_8c.html#65523602382b3d96c9852545ae24815d">dmatvec</a> (int, int, int, double *, double *, double *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#65523602382b3d96c9852545ae24815d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dpanel__bmod_8c.html#3ffa3b0456b4e2d587556bd0f717315d">dcheck_tempv</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dpanel__bmod_8c.html#192df249a9fc13ad49bf3f2cd79aba65">dpanel_bmod</a> (const int m, const int w, const int jcol, const int nseg, double *dense, double *tempv, int *segrep, int *repfnz, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="3ffa3b0456b4e2d587556bd0f717315d"></a><!-- doxytag: member="dpanel_bmod.c::dcheck_tempv" ref="3ffa3b0456b4e2d587556bd0f717315d" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dcheck_tempv           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="56d27043eac0282b0d0e4106acedb083"></a><!-- doxytag: member="dpanel_bmod.c::dlsolve" ref="56d27043eac0282b0d0e4106acedb083" args="(int, int, double *, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dlsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="65523602382b3d96c9852545ae24815d"></a><!-- doxytag: member="dpanel_bmod.c::dmatvec" ref="65523602382b3d96c9852545ae24815d" args="(int, int, int, double *, double *, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dmatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="192df249a9fc13ad49bf3f2cd79aba65"></a><!-- doxytag: member="dpanel_bmod.c::dpanel_bmod" ref="192df249a9fc13ad49bf3f2cd79aba65" args="(const int m, const int w, const int jcol, const int nseg, double *dense, double *tempv, int *segrep, int *repfnz, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dpanel_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>    Performs numeric block updates (sup-panel) in topological order.
+    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+    Special processing on the supernodal portion of L[*,j]</pre><p>
+<pre>    Before entering this routine, the original nonzeros in the panel 
+    were already copied into the spa[m,w].</pre><p>
+<pre>    Updated/Output parameters-
+    dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
+    collectively in the m-by-w vector dense[*]. 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dpanel__dfs_8c.html b/DOC/html/dpanel__dfs_8c.html
new file mode 100644
index 0000000..a59850d
--- /dev/null
+++ b/DOC/html/dpanel__dfs_8c.html
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dpanel_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dpanel_dfs.c File Reference</h1>Peforms a symbolic factorization on a panel of symbols. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dpanel__dfs_8c.html#2a809488b87d2c1a9b2a574b726e8517">dpanel_dfs</a> (const int m, const int w, const int jcol, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, double *dense, int *panel_lsub, int *segrep, int *repfnz, int *xprune, i [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="2a809488b87d2c1a9b2a574b726e8517"></a><!-- doxytag: member="dpanel_dfs.c::dpanel_dfs" ref="2a809488b87d2c1a9b2a574b726e8517" args="(const int m, const int w, const int jcol, SuperMatrix *A, int *perm_r, int *nseg, double *dense, int *panel_lsub, int *segrep, int *repfnz, int *xprune, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dpanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel. 
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a 
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dpivotL_8c.html b/DOC/html/dpivotL_8c.html
new file mode 100644
index 0000000..66b92f3
--- /dev/null
+++ b/DOC/html/dpivotL_8c.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dpivotL.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dpivotL.c File Reference</h1>Performs numerical pivoting. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dpivotL_8c.html#c9bc2a5673ddfce2452bf4a88b97a266">dpivotL</a> (const int jcol, const double u, int *usepr, int *perm_r, int *iperm_r, int *iperm_c, int *pivrow, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="c9bc2a5673ddfce2452bf4a88b97a266"></a><!-- doxytag: member="dpivotL.c::dpivotL" ref="c9bc2a5673ddfce2452bf4a88b97a266" args="(const int jcol, const double u, int *usepr, int *perm_r, int *iperm_r, int *iperm_c, int *pivrow, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dpivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+           pivot row = k;
+       ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+           pivot row = j;
+       ELSE
+           pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0      success;
+                 i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dpivotgrowth_8c.html b/DOC/html/dpivotgrowth_8c.html
new file mode 100644
index 0000000..04e6b5f
--- /dev/null
+++ b/DOC/html/dpivotgrowth_8c.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dpivotgrowth.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dpivotgrowth.c File Reference</h1>Computes the reciprocal pivot growth factor. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dpivotgrowth_8c.html#770618182a3841e8d10a26a4eb97418a">dPivotGrowth</a> (int ncols, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">S [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="770618182a3841e8d10a26a4eb97418a"></a><!-- doxytag: member="dpivotgrowth.c::dPivotGrowth" ref="770618182a3841e8d10a26a4eb97418a" args="(int ncols, SuperMatrix *A, int *perm_c, SuperMatrix *L, SuperMatrix *U)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dPivotGrowth           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> Compute the reciprocal pivot growth factor of the leading ncols columns
+ of the matrix, using the formula:
+     min_j ( max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>) / max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(U_ij)</a>) )</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> ncols    (input) int
+          The number of columns of matrices A, L and U.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = NC; Dtype = SLU_D; Mtype = GE.</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SC; Dtype = SLU_D; Mtype = TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = NC;
+          Dtype = SLU_D; Mtype = TRU.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dpruneL_8c.html b/DOC/html/dpruneL_8c.html
new file mode 100644
index 0000000..ee82497
--- /dev/null
+++ b/DOC/html/dpruneL_8c.html
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dpruneL.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dpruneL.c File Reference</h1>Prunes the L-structure. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dpruneL_8c.html#525e73335e6aeaa1e851a52800bf3965">dpruneL</a> (const int jcol, const int *perm_r, const int pivrow, const int nseg, const int *segrep, const int *repfnz, int *xprune, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ *</pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="525e73335e6aeaa1e851a52800bf3965"></a><!-- doxytag: member="dpruneL.c::dpruneL" ref="525e73335e6aeaa1e851a52800bf3965" args="(const int jcol, const int *perm_r, const int pivrow, const int nseg, const int *segrep, const int *repfnz, int *xprune, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dpruneL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Prunes the L-structure of supernodes whose L-structure
+   contains the current pivot row "pivrow"
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dreadhb_8c.html b/DOC/html/dreadhb_8c.html
new file mode 100644
index 0000000..6522ce1
--- /dev/null
+++ b/DOC/html/dreadhb_8c.html
@@ -0,0 +1,344 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dreadhb.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dreadhb.c File Reference</h1>Read a matrix stored in Harwell-Boeing format. <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadhb_8c.html#b87732418a8ca2e99d65165ea7f9a2c5">dDumpLine</a> (FILE *fp)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line.  <a href="#b87732418a8ca2e99d65165ea7f9a2c5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadhb_8c.html#84a11fcb3558dba9f846610da6fbec2c">dParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadhb_8c.html#341d1f00e157073d681d37e87c417e69">dParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadhb_8c.html#fbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadhb_8c.html#cca1e3b19661f732344b530c8cbf25c3">dReadValues</a> (FILE *fp, int n, double *destination, int perline, int persize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadhb_8c.html#2a9cf14ec04bddd25fc04ddebc437317">dreadhb</a> (int *nrow, int *ncol, int *nonz, double **nzval, int **rowind, int **colptr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines.  <a href="#2a9cf14ec04bddd25fc04ddebc437317"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Purpose
+ =======</pre><p>
+<pre> Read a DOUBLE PRECISION matrix stored in Harwell-Boeing format 
+ as described below.</pre><p>
+<pre> Line 1 (A72,A8) 
+  	Col. 1 - 72   Title (TITLE) 
+	Col. 73 - 80  Key (KEY)</pre><p>
+<pre> Line 2 (5I14) 
+ 	Col. 1 - 14   Total number of lines excluding header (TOTCRD) 
+ 	Col. 15 - 28  Number of lines for pointers (PTRCRD) 
+ 	Col. 29 - 42  Number of lines for row (or variable) indices (INDCRD) 
+ 	Col. 43 - 56  Number of lines for numerical values (VALCRD) 
+	Col. 57 - 70  Number of lines for right-hand sides (RHSCRD) 
+                    (including starting guesses and solution vectors 
+		       if present) 
+           	      (zero indicates no right-hand side data is present)</pre><p>
+<pre> Line 3 (A3, 11X, 4I14) 
+   	Col. 1 - 3    Matrix type (see below) (MXTYPE) 
+ 	Col. 15 - 28  Number of rows (or variables) (NROW) 
+ 	Col. 29 - 42  Number of columns (or elements) (NCOL) 
+	Col. 43 - 56  Number of row (or variable) indices (NNZERO) 
+	              (equal to number of entries for assembled matrices) 
+ 	Col. 57 - 70  Number of elemental matrix entries (NELTVL) 
+	              (zero in the case of assembled matrices) 
+ Line 4 (2A16, 2A20) 
+ 	Col. 1 - 16   Format for pointers (PTRFMT) 
+	Col. 17 - 32  Format for row (or variable) indices (INDFMT) 
+	Col. 33 - 52  Format for numerical values of coefficient matrix (VALFMT) 
+ 	Col. 53 - 72 Format for numerical values of right-hand sides (RHSFMT)</pre><p>
+<pre> Line 5 (A3, 11X, 2I14) Only present if there are right-hand sides present 
+    	Col. 1 	      Right-hand side type: 
+	         	  F for full storage or M for same format as matrix 
+    	Col. 2        G if a starting vector(s) (Guess) is supplied. (RHSTYP) 
+    	Col. 3        X if an exact solution vector(s) is supplied. 
+	Col. 15 - 28  Number of right-hand sides (NRHS) 
+	Col. 29 - 42  Number of row indices (NRHSIX) 
+          	      (ignored in case of unassembled matrices)</pre><p>
+<pre> The three character type field on line 3 describes the matrix type. 
+ The following table lists the permitted values for each of the three 
+ characters. As an example of the type field, RSA denotes that the matrix 
+ is real, symmetric, and assembled.</pre><p>
+<pre> First Character: 
+	R Real matrix 
+	C Complex matrix 
+	P Pattern only (no numerical values supplied)</pre><p>
+<pre> Second Character: 
+	S Symmetric 
+	U Unsymmetric 
+	H Hermitian 
+	Z Skew symmetric 
+	R Rectangular</pre><p>
+<pre> Third Character: 
+	A Assembled 
+	E Elemental matrices (unassembled)</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="b87732418a8ca2e99d65165ea7f9a2c5"></a><!-- doxytag: member="dreadhb.c::dDumpLine" ref="b87732418a8ca2e99d65165ea7f9a2c5" args="(FILE *fp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dDumpLine           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="341d1f00e157073d681d37e87c417e69"></a><!-- doxytag: member="dreadhb.c::dParseFloatFormat" ref="341d1f00e157073d681d37e87c417e69" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dParseFloatFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="84a11fcb3558dba9f846610da6fbec2c"></a><!-- doxytag: member="dreadhb.c::dParseIntFormat" ref="84a11fcb3558dba9f846610da6fbec2c" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dParseIntFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2a9cf14ec04bddd25fc04ddebc437317"></a><!-- doxytag: member="dreadhb.c::dreadhb" ref="2a9cf14ec04bddd25fc04ddebc437317" args="(int *nrow, int *ncol, int *nonz, double **nzval, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dreadhb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nonz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cca1e3b19661f732344b530c8cbf25c3"></a><!-- doxytag: member="dreadhb.c::dReadValues" ref="cca1e3b19661f732344b530c8cbf25c3" args="(FILE *fp, int n, double *destination, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dReadValues           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>destination</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fbec2a501b92e7e7bb13af2e21520522"></a><!-- doxytag: member="dreadhb.c::ReadVector" ref="fbec2a501b92e7e7bb13af2e21520522" args="(FILE *fp, int n, int *where, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int ReadVector           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>where</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dreadrb_8c.html b/DOC/html/dreadrb_8c.html
new file mode 100644
index 0000000..43901ca
--- /dev/null
+++ b/DOC/html/dreadrb_8c.html
@@ -0,0 +1,296 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dreadrb.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dreadrb.c File Reference</h1>Read a matrix stored in Rutherford-Boeing format. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadrb_8c.html#f815bcc4cd6c6b297588886829ce6cb2">dDumpLine</a> (FILE *fp)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line.  <a href="#f815bcc4cd6c6b297588886829ce6cb2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadrb_8c.html#e766b0ec3051c146313ff37802decbb7">dParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadrb_8c.html#940db08f01ba40731b65b3bc88c52ae1">dParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadrb_8c.html#fbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadrb_8c.html#b3ebe1f51db0ee2e5abd6a2248185585">dReadValues</a> (FILE *fp, int n, double *destination, int perline, int persize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadrb_8c.html#675b0881eef06ac2d7e09e1c3e1c0403">dreadrb</a> (int *nrow, int *ncol, int *nonz, double **nzval, int **rowind, int **colptr)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre><p>
+Purpose =======<p>
+Read a DOUBLE PRECISION matrix stored in Rutherford-Boeing format as described below.<p>
+Line 1 (A72, A8) Col. 1 - 72 Title (TITLE) Col. 73 - 80 Matrix name / identifier (MTRXID)<p>
+Line 2 (I14, 3(1X, I13)) Col. 1 - 14 Total number of lines excluding header (TOTCRD) Col. 16 - 28 Number of lines for pointers (PTRCRD) Col. 30 - 42 Number of lines for row (or variable) indices (INDCRD) Col. 44 - 56 Number of lines for numerical values (VALCRD)<p>
+Line 3 (A3, 11X, 4(1X, I13)) Col. 1 - 3 Matrix type (see below) (MXTYPE) Col. 15 - 28 Compressed Column: Number of rows (NROW) Elemental: Largest integer used to index variable (MVAR) Col. 30 - 42 Compressed Column: Number of columns (NCOL) Elemental: Number of element matrices (NELT) Col. 44 - 56 Compressed Column: Number of entries (NNZERO) Elemental: Number of variable indeces (NVARIX) Col. 58 - 70 Compressed Column: Unused, explicitly zero Elemental: Number of elemental matrix entrie [...]
+Line 4 (2A16, A20) Col. 1 - 16 Fortran format for pointers (PTRFMT) Col. 17 - 32 Fortran format for row (or variable) indices (INDFMT) Col. 33 - 52 Fortran format for numerical values of coefficient matrix (VALFMT) (blank in the case of matrix patterns)<p>
+The three character type field on line 3 describes the matrix type. The following table lists the permitted values for each of the three characters. As an example of the type field, RSA denotes that the matrix is real, symmetric, and assembled.<p>
+First Character: R Real matrix C Complex matrix I integer matrix P Pattern only (no numerical values supplied) Q Pattern only (numerical values supplied in associated auxiliary value file)<p>
+Second Character: S Symmetric U Unsymmetric H Hermitian Z Skew symmetric R Rectangular<p>
+Third Character: A Compressed column form E Elemental form<hr><h2>Function Documentation</h2>
+<a class="anchor" name="f815bcc4cd6c6b297588886829ce6cb2"></a><!-- doxytag: member="dreadrb.c::dDumpLine" ref="f815bcc4cd6c6b297588886829ce6cb2" args="(FILE *fp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int dDumpLine           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="940db08f01ba40731b65b3bc88c52ae1"></a><!-- doxytag: member="dreadrb.c::dParseFloatFormat" ref="940db08f01ba40731b65b3bc88c52ae1" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int dParseFloatFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e766b0ec3051c146313ff37802decbb7"></a><!-- doxytag: member="dreadrb.c::dParseIntFormat" ref="e766b0ec3051c146313ff37802decbb7" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int dParseIntFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="675b0881eef06ac2d7e09e1c3e1c0403"></a><!-- doxytag: member="dreadrb.c::dreadrb" ref="675b0881eef06ac2d7e09e1c3e1c0403" args="(int *nrow, int *ncol, int *nonz, double **nzval, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dreadrb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nonz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b3ebe1f51db0ee2e5abd6a2248185585"></a><!-- doxytag: member="dreadrb.c::dReadValues" ref="b3ebe1f51db0ee2e5abd6a2248185585" args="(FILE *fp, int n, double *destination, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int dReadValues           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>destination</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fbec2a501b92e7e7bb13af2e21520522"></a><!-- doxytag: member="dreadrb.c::ReadVector" ref="fbec2a501b92e7e7bb13af2e21520522" args="(FILE *fp, int n, int *where, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int ReadVector           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>where</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dreadtriple_8c.html b/DOC/html/dreadtriple_8c.html
new file mode 100644
index 0000000..f5d3928
--- /dev/null
+++ b/DOC/html/dreadtriple_8c.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dreadtriple.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dreadtriple.c File Reference</h1>Read a matrix stored in triplet (coordinate) format. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadtriple_8c.html#c79bc303193d42d6a40148211796eff0">dreadtriple</a> (int *m, int *n, int *nonz, double **nzval, int **rowind, int **colptr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadtriple_8c.html#d97776a2c12802db12e668f6d2da7901">dreadrhs</a> (int m, double *b)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="d97776a2c12802db12e668f6d2da7901"></a><!-- doxytag: member="dreadtriple.c::dreadrhs" ref="d97776a2c12802db12e668f6d2da7901" args="(int m, double *b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dreadrhs           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>b</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c79bc303193d42d6a40148211796eff0"></a><!-- doxytag: member="dreadtriple.c::dreadtriple" ref="c79bc303193d42d6a40148211796eff0" args="(int *m, int *n, int *nonz, double **nzval, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dreadtriple           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nonz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dsnode__bmod_8c.html b/DOC/html/dsnode__bmod_8c.html
new file mode 100644
index 0000000..2ef638d
--- /dev/null
+++ b/DOC/html/dsnode__bmod_8c.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dsnode_bmod.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dsnode_bmod.c File Reference</h1>Performs numeric block updates within the relaxed snode. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dsnode__bmod_8c.html#1466b84198911ff34e828a811e70831e">dsnode_bmod</a> (const int jcol, const int jsupno, const int fsupc, double *dense, double *tempv, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode.  <a href="#1466b84198911ff34e828a811e70831e"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="1466b84198911ff34e828a811e70831e"></a><!-- doxytag: member="dsnode_bmod.c::dsnode_bmod" ref="1466b84198911ff34e828a811e70831e" args="(const int jcol, const int jsupno, const int fsupc, double *dense, double *tempv, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dsnode_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jsupno</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>fsupc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dsnode__dfs_8c.html b/DOC/html/dsnode__dfs_8c.html
new file mode 100644
index 0000000..02f061f
--- /dev/null
+++ b/DOC/html/dsnode__dfs_8c.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dsnode_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dsnode_dfs.c File Reference</h1>Determines the union of row structures of columns within the relaxed node. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dsnode__dfs_8c.html#80b831678c233741661d8386d8736da1">dsnode_dfs</a> (const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *xprune, int *marker, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="80b831678c233741661d8386d8736da1"></a><!-- doxytag: member="dsnode_dfs.c::dsnode_dfs" ref="80b831678c233741661d8386d8736da1" args="(const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *xprune, int *marker, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dsnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="dsnode__dfs_8c.html#80b831678c233741661d8386d8736da1">dsnode_dfs()</a> - Determine the union of the row structures of those 
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dsp__blas2_8c.html b/DOC/html/dsp__blas2_8c.html
new file mode 100644
index 0000000..0fc7ff8
--- /dev/null
+++ b/DOC/html/dsp__blas2_8c.html
@@ -0,0 +1,403 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dsp_blas2.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dsp_blas2.c File Reference</h1>Sparse BLAS 2, using some dense BLAS 2 operations. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dsp__blas2_8c.html#ca18e78d81448d99eec840b19de76efd">dusolve</a> (int, int, double *, double *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#ca18e78d81448d99eec840b19de76efd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dsp__blas2_8c.html#56d27043eac0282b0d0e4106acedb083">dlsolve</a> (int, int, double *, double *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#56d27043eac0282b0d0e4106acedb083"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dsp__blas2_8c.html#65523602382b3d96c9852545ae24815d">dmatvec</a> (int, int, int, double *, double *, double *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#65523602382b3d96c9852545ae24815d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dsp__blas2_8c.html#aa92ff654356fe62f70ebef5815627e4">sp_dtrsv</a> (char *uplo, char *trans, char *diag, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, double *x, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat, int *info)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b.  <a href="#aa92ff654356fe62f70ebef5815627e4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dsp__blas2_8c.html#221dfb4c5cbc550095a989c61fec4993">sp_dgemv</a> (char *trans, double alpha, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, double *x, int incx, double beta, double *y, int incy)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y,.  <a href="#221dfb4c5cbc550095a989c61fec4993"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="56d27043eac0282b0d0e4106acedb083"></a><!-- doxytag: member="dsp_blas2.c::dlsolve" ref="56d27043eac0282b0d0e4106acedb083" args="(int, int, double *, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dlsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="65523602382b3d96c9852545ae24815d"></a><!-- doxytag: member="dsp_blas2.c::dmatvec" ref="65523602382b3d96c9852545ae24815d" args="(int, int, int, double *, double *, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dmatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="ca18e78d81448d99eec840b19de76efd"></a><!-- doxytag: member="dsp_blas2.c::dusolve" ref="ca18e78d81448d99eec840b19de76efd" args="(int, int, double *, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dusolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="221dfb4c5cbc550095a989c61fec4993"></a><!-- doxytag: member="dsp_blas2.c::sp_dgemv" ref="221dfb4c5cbc550095a989c61fec4993" args="(char *trans, double alpha, SuperMatrix *A, double *x, int incx, double beta, double *y, int incy)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_dgemv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incy</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   <a class="el" href="dsp__blas2_8c.html#221dfb4c5cbc550095a989c61fec4993" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x...">sp_dgemv()</a>  performs one of the matrix-vector operations   
+      y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
+   where alpha and beta are scalars, x and y are vectors and A is a
+   sparse A->nrow by A->ncol matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANS  - (input) char*
+            On entry, TRANS specifies the operation to be performed as   
+            follows:   
+               TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
+               TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
+               TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.</pre><p>
+<pre>   ALPHA  - (input) double
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+            Currently, the type of A can be:
+                Stype = NC or NCP; Dtype = SLU_D; Mtype = GE. 
+            In the future, more general A can be handled.</pre><p>
+<pre>   X      - (input) double*, array of DIMENSION at least   
+            ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
+            and at least   
+            ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
+            Before entry, the incremented array X must contain the   
+            vector x.</pre><p>
+<pre>   INCX   - (input) int
+            On entry, INCX specifies the increment for the elements of   
+            X. INCX must not be zero.</pre><p>
+<pre>   BETA   - (input) double
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then Y need not be set on input.</pre><p>
+<pre>   Y      - (output) double*,  array of DIMENSION at least   
+            ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
+            and at least   
+            ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
+            Before entry with BETA non-zero, the incremented array Y   
+            must contain the vector y. On exit, Y is overwritten by the 
+            updated vector y.</pre><p>
+<pre>   INCY   - (input) int
+            On entry, INCY specifies the increment for the elements of   
+            Y. INCY must not be zero.</pre><p>
+<pre>   ==== Sparse Level 2 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="aa92ff654356fe62f70ebef5815627e4"></a><!-- doxytag: member="dsp_blas2.c::sp_dtrsv" ref="aa92ff654356fe62f70ebef5815627e4" args="(char *uplo, char *trans, char *diag, SuperMatrix *L, SuperMatrix *U, double *x, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_dtrsv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>uplo</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>diag</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose
+   =======</pre><p>
+<pre>   <a class="el" href="dsp__blas2_8c.html#aa92ff654356fe62f70ebef5815627e4" title="Solves one of the systems of equations A*x = b, or A'*x = b.">sp_dtrsv()</a> solves one of the systems of equations   
+       A*x = b,   or   A'*x = b,
+   where b and x are n element vectors and A is a sparse unit , or   
+   non-unit, upper or lower triangular matrix.   
+   No test for singularity or near-singularity is included in this   
+   routine. Such tests must be performed before calling this routine.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   uplo   - (input) char*
+            On entry, uplo specifies whether the matrix is an upper or   
+             lower triangular matrix as follows:   
+                uplo = 'U' or 'u'   A is an upper triangular matrix.   
+                uplo = 'L' or 'l'   A is a lower triangular matrix.</pre><p>
+<pre>   trans  - (input) char*
+             On entry, trans specifies the equations to be solved as   
+             follows:   
+                trans = 'N' or 'n'   A*x = b.   
+                trans = 'T' or 't'   A'*x = b.
+                trans = 'C' or 'c'   A'*x = b.</pre><p>
+<pre>   diag   - (input) char*
+             On entry, diag specifies whether or not A is unit   
+             triangular as follows:   
+                diag = 'U' or 'u'   A is assumed to be unit triangular.   
+                diag = 'N' or 'n'   A is not assumed to be unit   
+                                    triangular.</pre><p>
+<pre>   L       - (input) SuperMatrix*
+	       The factor L from the factorization Pr*A*Pc=L*U. Use
+             compressed row subscripts storage for supernodes,
+             i.e., L has types: Stype = SC, Dtype = SLU_D, Mtype = TRLU.</pre><p>
+<pre>   U       - (input) SuperMatrix*
+	        The factor U from the factorization Pr*A*Pc=L*U.
+	        U has types: Stype = NC, Dtype = SLU_D, Mtype = TRU.</pre><p>
+<pre>   x       - (input/output) double*
+             Before entry, the incremented array X must contain the n   
+             element right-hand side vector b. On exit, X is overwritten 
+             with the solution vector x.</pre><p>
+<pre>   info    - (output) int*
+             If *info = -i, the i-th argument had an illegal value.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dsp__blas3_8c.html b/DOC/html/dsp__blas3_8c.html
new file mode 100644
index 0000000..1fcb330
--- /dev/null
+++ b/DOC/html/dsp__blas3_8c.html
@@ -0,0 +1,199 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dsp_blas3.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dsp_blas3.c File Reference</h1>Sparse BLAS3, using some dense BLAS3 operations. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dsp__blas3_8c.html#6c8c4772ca0f241a43c5561b646fb749">sp_dgemm</a> (char *transa, char *transb, int m, int n, int k, double alpha, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, double *b, int ldb, double beta, double *c, int ldc)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="6c8c4772ca0f241a43c5561b646fb749"></a><!-- doxytag: member="dsp_blas3.c::sp_dgemm" ref="6c8c4772ca0f241a43c5561b646fb749" args="(char *transa, char *transb, int m, int n, int k, double alpha, SuperMatrix *A, double *b, int ldb, double beta, double *c, int ldc)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_dgemm           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transa</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   sp_d performs one of the matrix-matrix operations</pre><p>
+<pre>      C := alpha*op( A )*op( B ) + beta*C,</pre><p>
+<pre>   where  op( X ) is one of</pre><p>
+<pre>      op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),</pre><p>
+<pre>   alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
+   an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANSA - (input) char*
+            On entry, TRANSA specifies the form of op( A ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSA = 'N' or 'n',  op( A ) = A.   
+               TRANSA = 'T' or 't',  op( A ) = A'.   
+               TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
+            Unchanged on exit.</pre><p>
+<pre>   TRANSB - (input) char*
+            On entry, TRANSB specifies the form of op( B ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSB = 'N' or 'n',  op( B ) = B.   
+               TRANSB = 'T' or 't',  op( B ) = B'.   
+               TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
+            Unchanged on exit.</pre><p>
+<pre>   M      - (input) int   
+            On entry,  M  specifies  the number of rows of the matrix 
+	     op( A ) and of the matrix C.  M must be at least zero. 
+	     Unchanged on exit.</pre><p>
+<pre>   N      - (input) int
+            On entry,  N specifies the number of columns of the matrix 
+	     op( B ) and the number of columns of the matrix C. N must be 
+	     at least zero.
+	     Unchanged on exit.</pre><p>
+<pre>   K      - (input) int
+            On entry, K specifies the number of columns of the matrix 
+	     op( A ) and the number of rows of the matrix op( B ). K must 
+	     be at least  zero.   
+           Unchanged on exit.</pre><p>
+<pre>   ALPHA  - (input) double
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+            Currently, the type of A can be:
+                Stype = NC or NCP; Dtype = SLU_D; Mtype = GE. 
+            In the future, more general A can be handled.</pre><p>
+<pre>   B      - DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb is 
+            n when TRANSB = 'N' or 'n',  and is  k otherwise.   
+            Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
+            part of the array B must contain the matrix B, otherwise 
+            the leading n by k part of the array B must contain the 
+            matrix B.   
+            Unchanged on exit.</pre><p>
+<pre>   LDB    - (input) int
+            On entry, LDB specifies the first dimension of B as declared 
+            in the calling (sub) program. LDB must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max( 1, n )</a>.  
+            Unchanged on exit.</pre><p>
+<pre>   BETA   - (input) double
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then C need not be set on input.</pre><p>
+<pre>   C      - DOUBLE PRECISION array of DIMENSION ( LDC, n ).   
+            Before entry, the leading m by n part of the array C must 
+            contain the matrix C,  except when beta is zero, in which 
+            case C need not be set on entry.   
+            On exit, the array C is overwritten by the m by n matrix 
+	     ( alpha*op( A )*B + beta*C ).</pre><p>
+<pre>   LDC    - (input) int
+            On entry, LDC specifies the first dimension of C as declared 
+            in the calling (sub)program. LDC must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max(1,m)</a>.   
+            Unchanged on exit.</pre><p>
+<pre>   ==== Sparse Level 3 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dutil_8c.html b/DOC/html/dutil_8c.html
new file mode 100644
index 0000000..d8af18c
--- /dev/null
+++ b/DOC/html/dutil_8c.html
@@ -0,0 +1,994 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dutil.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dutil.c File Reference</h1>Matrix utility functions. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#4a177c54dafbe3640c26caa49eeee1de">dCreate_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, double *nzval, int *rowind, int *colptr, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related.  <a href="#4a177c54dafbe3640c26caa49eeee1de"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#db108b8f4be1e79a2e469a4406cbff54">dCreate_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, double *nzval, int *colind, int *rowptr, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#0d19111d89390832cad2fb4b6477a40c">dCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *B)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B.  <a href="#0d19111d89390832cad2fb4b6477a40c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#12ac523141a258590a76bdad390928fd">dCreate_Dense_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *X, int m, int n, double *x, int ldx, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> stype, <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> dty [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#503dd1eb30f1ca80e04ad2180366c518">dCopy_Dense_Matrix</a> (int M, int N, double *X, int ldx, double *Y, int ldy)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#b0cecf427cd82e8b92974a72ecd4d1cb">dCreate_SuperNode_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, int m, int n, int nnz, double *nzval, int *nzval_colptr, int *rowind, int *rowind_colptr, int *col_to_sup, int *sup_to_col, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> st [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#2163cd7a6b59accc8feb7b40ea2732bd">dCompRow_to_CompCol</a> (int m, int n, int nnz, double *a, int *colind, int *rowptr, double **at, int **rowind, int **colptr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage.  <a href="#2163cd7a6b59accc8feb7b40ea2732bd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#2c061ebaaabe5e1bd83ba564b439d8c8">dPrint_CompCol_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging.  <a href="#2c061ebaaabe5e1bd83ba564b439d8c8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#402c1ab7977c2f9f5de62e8c66c451f0">dPrint_SuperNode_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#5af0eda3e0026a251a06d320df15a372">dPrint_Dense_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#73eb5fcbf916fc45d05e38767bd7efb3">dprint_lu_col</a> (char *msg, int jcol, int pivrow, int *xprune, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor.  <a href="#73eb5fcbf916fc45d05e38767bd7efb3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#fee83da536b48eda60b21a7e3ac120f7">dcheck_tempv</a> (int n, double *tempv)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check whether tempv[] == 0. This should be true before and after calling any numeric routines, i.e., "panel_bmod" and "column_bmod".  <a href="#fee83da536b48eda60b21a7e3ac120f7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#cdfe40e3085c29fd483b63a15ed163c7">dGenXtrue</a> (int n, int nrhs, double *x, int ldx)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#83b6ea01e8b7df0cc9c6fe5261647367">dFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, int nrhs, double *x, int ldx, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's.  <a href="#83b6ea01e8b7df0cc9c6fe5261647367"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#5594dfec40e37514e00e85a90e8973b5">dfill</a> (double *a, int alen, double dval)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fills a double precision array with a given value.  <a href="#5594dfec40e37514e00e85a90e8973b5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#e6aa0b8725411ba46ac42ee55503ee0f">dinf_norm_error</a> (int nrhs, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *X, double *xtrue)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector.  <a href="#e6aa0b8725411ba46ac42ee55503ee0f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#4c6e5de0836eb95d08cd15a4da367bcc">dPrintPerf</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *mem_usage, double rpg, double rcond, double *ferr, double *berr, char *equed, <a class="el" href="s [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Print performance of the code.  <a href="#4c6e5de0836eb95d08cd15a4da367bcc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#457e11c8736d30b7da4ee14feb422ed0">print_double_vec</a> (char *what, int n, double *vec)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.1) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ August 1, 2008</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="fee83da536b48eda60b21a7e3ac120f7"></a><!-- doxytag: member="dutil.c::dcheck_tempv" ref="fee83da536b48eda60b21a7e3ac120f7" args="(int n, double *tempv)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dcheck_tempv           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>tempv</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2163cd7a6b59accc8feb7b40ea2732bd"></a><!-- doxytag: member="dutil.c::dCompRow_to_CompCol" ref="2163cd7a6b59accc8feb7b40ea2732bd" args="(int m, int n, int nnz, double *a, int *colind, int *rowptr, double **at, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dCompRow_to_CompCol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>colind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname"> <em>at</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0d19111d89390832cad2fb4b6477a40c"></a><!-- doxytag: member="dutil.c::dCopy_CompCol_Matrix" ref="0d19111d89390832cad2fb4b6477a40c" args="(SuperMatrix *A, SuperMatrix *B)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dCopy_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="503dd1eb30f1ca80e04ad2180366c518"></a><!-- doxytag: member="dutil.c::dCopy_Dense_Matrix" ref="503dd1eb30f1ca80e04ad2180366c518" args="(int M, int N, double *X, int ldx, double *Y, int ldy)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dCopy_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>Y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldy</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Copies a two-dimensional matrix X to another matrix Y. 
+</div>
+</div><p>
+<a class="anchor" name="4a177c54dafbe3640c26caa49eeee1de"></a><!-- doxytag: member="dutil.c::dCreate_CompCol_Matrix" ref="4a177c54dafbe3640c26caa49eeee1de" args="(SuperMatrix *A, int m, int n, int nnz, double *nzval, int *rowind, int *colptr, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dCreate_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="db108b8f4be1e79a2e469a4406cbff54"></a><!-- doxytag: member="dutil.c::dCreate_CompRow_Matrix" ref="db108b8f4be1e79a2e469a4406cbff54" args="(SuperMatrix *A, int m, int n, int nnz, double *nzval, int *colind, int *rowptr, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dCreate_CompRow_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>colind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="12ac523141a258590a76bdad390928fd"></a><!-- doxytag: member="dutil.c::dCreate_Dense_Matrix" ref="12ac523141a258590a76bdad390928fd" args="(SuperMatrix *X, int m, int n, double *x, int ldx, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dCreate_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b0cecf427cd82e8b92974a72ecd4d1cb"></a><!-- doxytag: member="dutil.c::dCreate_SuperNode_Matrix" ref="b0cecf427cd82e8b92974a72ecd4d1cb" args="(SuperMatrix *L, int m, int n, int nnz, double *nzval, int *nzval_colptr, int *rowind, int *rowind_colptr, int *col_to_sup, int *sup_to_col, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dCreate_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nzval_colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowind_colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>col_to_sup</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>sup_to_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5594dfec40e37514e00e85a90e8973b5"></a><!-- doxytag: member="dutil.c::dfill" ref="5594dfec40e37514e00e85a90e8973b5" args="(double *a, int alen, double dval)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dfill           </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>alen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>dval</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="83b6ea01e8b7df0cc9c6fe5261647367"></a><!-- doxytag: member="dutil.c::dFillRHS" ref="83b6ea01e8b7df0cc9c6fe5261647367" args="(trans_t trans, int nrhs, double *x, int ldx, SuperMatrix *A, SuperMatrix *B)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dFillRHS           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cdfe40e3085c29fd483b63a15ed163c7"></a><!-- doxytag: member="dutil.c::dGenXtrue" ref="cdfe40e3085c29fd483b63a15ed163c7" args="(int n, int nrhs, double *x, int ldx)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dGenXtrue           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e6aa0b8725411ba46ac42ee55503ee0f"></a><!-- doxytag: member="dutil.c::dinf_norm_error" ref="e6aa0b8725411ba46ac42ee55503ee0f" args="(int nrhs, SuperMatrix *X, double *xtrue)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dinf_norm_error           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>xtrue</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2c061ebaaabe5e1bd83ba564b439d8c8"></a><!-- doxytag: member="dutil.c::dPrint_CompCol_Matrix" ref="2c061ebaaabe5e1bd83ba564b439d8c8" args="(char *what, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dPrint_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5af0eda3e0026a251a06d320df15a372"></a><!-- doxytag: member="dutil.c::dPrint_Dense_Matrix" ref="5af0eda3e0026a251a06d320df15a372" args="(char *what, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dPrint_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="73eb5fcbf916fc45d05e38767bd7efb3"></a><!-- doxytag: member="dutil.c::dprint_lu_col" ref="73eb5fcbf916fc45d05e38767bd7efb3" args="(char *msg, int jcol, int pivrow, int *xprune, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dprint_lu_col           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>msg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="402c1ab7977c2f9f5de62e8c66c451f0"></a><!-- doxytag: member="dutil.c::dPrint_SuperNode_Matrix" ref="402c1ab7977c2f9f5de62e8c66c451f0" args="(char *what, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dPrint_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4c6e5de0836eb95d08cd15a4da367bcc"></a><!-- doxytag: member="dutil.c::dPrintPerf" ref="4c6e5de0836eb95d08cd15a4da367bcc" args="(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage, double rpg, double rcond, double *ferr, double *berr, char *equed, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dPrintPerf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>rpg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="457e11c8736d30b7da4ee14feb422ed0"></a><!-- doxytag: member="dutil.c::print_double_vec" ref="457e11c8736d30b7da4ee14feb422ed0" args="(char *what, int n, double *vec)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">print_double_vec           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>vec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/dzsum1_8c.html b/DOC/html/dzsum1_8c.html
new file mode 100644
index 0000000..f5001c0
--- /dev/null
+++ b/DOC/html/dzsum1_8c.html
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/dzsum1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/dzsum1.c File Reference</h1>Takes sum of the absolute values of a <a class="el" href="structcomplex.html">complex</a> vector and returns a double precision result. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__dcomplex_8h-source.html">slu_dcomplex.h</a>"</code><br>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dzsum1_8c.html#5a76da95c549c41790389a76e12fdcb5">CX</a>(I)   cx[(I)-1]</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dzsum1_8c.html#3fade9d45be0f00827565d6d0f37fe5d">dzsum1_</a> (int *n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *cx, int *incx)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+     -- LAPACK auxiliary routine (version 2.0) --   
+     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
+     Courant Institute, Argonne National Lab, and Rice University   
+     October 31, 1992   
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="5a76da95c549c41790389a76e12fdcb5"></a><!-- doxytag: member="dzsum1.c::CX" ref="5a76da95c549c41790389a76e12fdcb5" args="(I)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define CX          </td>
+          <td>(</td>
+          <td class="paramtype">I </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   cx[(I)-1]</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="3fade9d45be0f00827565d6d0f37fe5d"></a><!-- doxytag: member="dzsum1.c::dzsum1_" ref="3fade9d45be0f00827565d6d0f37fe5d" args="(int *n, doublecomplex *cx, int *incx)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dzsum1_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>cx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>incx</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    DZSUM1 takes the sum of the absolute values of a <a class="el" href="structcomplex.html">complex</a>   
+    vector and returns a double precision result.</pre><p>
+<pre>    Based on DZASUM from the Level 1 BLAS.   
+    The change is to use the 'genuine' absolute value.</pre><p>
+<pre>    Contributed by Nick Higham for use with ZLACON.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    N       (input) INT   
+            The number of elements in the vector CX.</pre><p>
+<pre>    CX      (input) COMPLEX*16 array, dimension (N)   
+            The vector whose elements will be summed.</pre><p>
+<pre>    INCX    (input) INT   
+            The spacing between successive values of CX.  INCX > 0.</pre><p>
+<pre>    ===================================================================== 
+</pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/fgmr_8c.html b/DOC/html/fgmr_8c.html
new file mode 100644
index 0000000..753d547
--- /dev/null
+++ b/DOC/html/fgmr_8c.html
@@ -0,0 +1,315 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/fgmr.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/fgmr.c File Reference</h1><code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include <string.h></code><br>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="fgmr_8c.html#70fac857a29f956523d4c8c05e13f177">epsmac</a>   1.0e-16</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="fgmr_8c.html#b67e7a07556055c505aae6e65c937e39">ddot_</a> (int *, double[], int *, double[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="fgmr_8c.html#61a0022627cc1977966c0067f1f12e26">dnrm2_</a> (int *, double[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="fgmr_8c.html#5112358cf2de43341aaff9fba0066afc">daxpy_</a> (int *, double *, double[], int *, double[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="fgmr_8c.html#de4ae85292ee27821cebf1655290b25b">dcopy_</a> (int *, double[], int *, double[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="fgmr_8c.html#0a1472abec17ef62976ff38e54db01d1">fgmr</a> (int n, void(*matvec)(double, double[], double, double[]), void(*psolve)(int, double[], double[]), double *rhs, double *sol, double tol, int im, int *itmax, FILE *fits)</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="70fac857a29f956523d4c8c05e13f177"></a><!-- doxytag: member="fgmr.c::epsmac" ref="70fac857a29f956523d4c8c05e13f177" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define epsmac   1.0e-16          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="5112358cf2de43341aaff9fba0066afc"></a><!-- doxytag: member="fgmr.c::daxpy_" ref="5112358cf2de43341aaff9fba0066afc" args="(int *, double *, double[], int *, double[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void daxpy_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="de4ae85292ee27821cebf1655290b25b"></a><!-- doxytag: member="fgmr.c::dcopy_" ref="de4ae85292ee27821cebf1655290b25b" args="(int *, double[], int *, double[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dcopy_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b67e7a07556055c505aae6e65c937e39"></a><!-- doxytag: member="fgmr.c::ddot_" ref="b67e7a07556055c505aae6e65c937e39" args="(int *, double[], int *, double[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double ddot_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="61a0022627cc1977966c0067f1f12e26"></a><!-- doxytag: member="fgmr.c::dnrm2_" ref="61a0022627cc1977966c0067f1f12e26" args="(int *, double[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dnrm2_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0a1472abec17ef62976ff38e54db01d1"></a><!-- doxytag: member="fgmr.c::fgmr" ref="0a1472abec17ef62976ff38e54db01d1" args="(int n, void(*matvec)(double, double[], double, double[]), void(*psolve)(int, double[], double[]), double *rhs, double *sol, double tol, int im, int *itmax, FILE *fits)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int fgmr           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(double, double[], double, double[]) </td>
+          <td class="paramname"> <em>matvec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(int, double[], double[]) </td>
+          <td class="paramname"> <em>psolve</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>sol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>im</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>itmax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fits</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/files.html b/DOC/html/files.html
new file mode 100644
index 0000000..143ba46
--- /dev/null
+++ b/DOC/html/files.html
@@ -0,0 +1,256 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: File Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>File List</h1>Here is a list of all files with brief descriptions:<table>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="cfgmr_8c.html">cfgmr.c</a></td><td class="indexvalue">Flexible GMRES from ITSOL developed by Yousef Saad </td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="citersol_8c.html">citersol.c</a></td><td class="indexvalue">Example #1 showing how to use ILU to precondition GMRES </td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="citersol1_8c.html">citersol1.c</a></td><td class="indexvalue">Example #2 showing how to use ILU to precondition GMRES </td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="clinsol_8c.html">clinsol.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="clinsol1_8c.html">clinsol1.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="clinsolx_8c.html">clinsolx.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="clinsolx1_8c.html">clinsolx1.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="clinsolx2_8c.html">clinsolx2.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="dfgmr_8c.html">dfgmr.c</a></td><td class="indexvalue">Flexible GMRES from ITSOL developed by Yousef Saad </td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="ditersol_8c.html">ditersol.c</a></td><td class="indexvalue">Example #1 showing how to use ILU to precondition GMRES </td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="ditersol1_8c.html">ditersol1.c</a></td><td class="indexvalue">Example #2 showing how to use ILU to precondition GMRES </td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="dlinsol_8c.html">dlinsol.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="dlinsol1_8c.html">dlinsol1.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="dlinsolx_8c.html">dlinsolx.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="dlinsolx1_8c.html">dlinsolx1.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="dlinsolx2_8c.html">dlinsolx2.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="fgmr_8c.html">fgmr.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="sfgmr_8c.html">sfgmr.c</a></td><td class="indexvalue">Flexible GMRES from ITSOL developed by Yousef Saad </td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="sitersol_8c.html">sitersol.c</a></td><td class="indexvalue">Example #1 showing how to use ILU to precondition GMRES </td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="sitersol1_8c.html">sitersol1.c</a></td><td class="indexvalue">Example #2 showing how to use ILU to precondition GMRES </td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="slinsol_8c.html">slinsol.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="slinsol1_8c.html">slinsol1.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="slinsolx_8c.html">slinsolx.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="slinsolx1_8c.html">slinsolx1.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="slinsolx2_8c.html">slinsolx2.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="EXAMPLE_2sp__ienv_8c.html">sp_ienv.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="superlu_8c.html">superlu.c</a></td><td class="indexvalue">Small 5x5 example </td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="zfgmr_8c.html">zfgmr.c</a></td><td class="indexvalue">Flexible GMRES from ITSOL developed by Yousef Saad </td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="zitersol_8c.html">zitersol.c</a></td><td class="indexvalue">Example #1 showing how to use ILU to precondition GMRES </td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="zitersol1_8c.html">zitersol1.c</a></td><td class="indexvalue">Example #2 showing how to use ILU to precondition GMRES </td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="zlinsol_8c.html">zlinsol.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="zlinsol1_8c.html">zlinsol1.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="zlinsolx_8c.html">zlinsolx.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="zlinsolx1_8c.html">zlinsolx1.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">EXAMPLE/<a class="el" href="zlinsolx2_8c.html">zlinsolx2.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ccolumn__bmod_8c.html">ccolumn_bmod.c</a></td><td class="indexvalue">Performs numeric block updates </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ccolumn__dfs_8c.html">ccolumn_dfs.c</a></td><td class="indexvalue">Performs a symbolic factorization </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ccopy__to__ucol_8c.html">ccopy_to_ucol.c</a></td><td class="indexvalue">Copy a computed column of U to the compressed data structure </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cdiagonal_8c.html">cdiagonal.c</a></td><td class="indexvalue">Auxiliary routines to work with diagonal elements </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cgscon_8c.html">cgscon.c</a></td><td class="indexvalue">Estimates reciprocal of the condition number of a general matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cgsequ_8c.html">cgsequ.c</a></td><td class="indexvalue">Computes row and column scalings </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cgsisx_8c.html">cgsisx.c</a></td><td class="indexvalue">Computes an approximate solutions of linear equations A*X=B or A'*X=B </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cgsitrf_8c.html">cgsitrf.c</a></td><td class="indexvalue">Computes an ILU factorization of a general sparse matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cgsrfs_8c.html">cgsrfs.c</a></td><td class="indexvalue">Improves computed solution to a system of inear equations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cgssv_8c.html">cgssv.c</a></td><td class="indexvalue">Solves the system of linear equations A*X=B </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cgssvx_8c.html">cgssvx.c</a></td><td class="indexvalue">Solves the system of linear equations A*X=B or A'*X=B </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cgstrf_8c.html">cgstrf.c</a></td><td class="indexvalue">Computes an LU factorization of a general sparse matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cgstrs_8c.html">cgstrs.c</a></td><td class="indexvalue">Solves a system using LU factorization </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="clacon_8c.html">clacon.c</a></td><td class="indexvalue">Estimates the 1-norm </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="clangs_8c.html">clangs.c</a></td><td class="indexvalue">Returns the value of the one norm </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="claqgs_8c.html">claqgs.c</a></td><td class="indexvalue">Equlibrates a general sprase matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cldperm_8c.html">cldperm.c</a></td><td class="indexvalue">Finds a row permutation so that the matrix has large entries on the diagonal </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cmemory_8c.html">cmemory.c</a></td><td class="indexvalue">Memory details </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cmyblas2_8c.html">cmyblas2.c</a></td><td class="indexvalue">Level 2 Blas operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="colamd_8c.html">colamd.c</a></td><td class="indexvalue">A sparse matrix column ordering algorithm </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="colamd_8h.html">colamd.h</a> <a href="colamd_8h-source.html">[code]</a></td><td class="indexvalue">Colamd prototypes and definitions </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cpanel__bmod_8c.html">cpanel_bmod.c</a></td><td class="indexvalue">Performs numeric block updates </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cpanel__dfs_8c.html">cpanel_dfs.c</a></td><td class="indexvalue">Peforms a symbolic factorization on a panel of symbols </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cpivotgrowth_8c.html">cpivotgrowth.c</a></td><td class="indexvalue">Computes the reciprocal pivot growth factor </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cpivotL_8c.html">cpivotL.c</a></td><td class="indexvalue">Performs numerical pivoting </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cpruneL_8c.html">cpruneL.c</a></td><td class="indexvalue">Prunes the L-structure </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="creadhb_8c.html">creadhb.c</a></td><td class="indexvalue">Read a matrix stored in Harwell-Boeing format </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="creadrb_8c.html">creadrb.c</a></td><td class="indexvalue">Read a matrix stored in Rutherford-Boeing format </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="creadtriple_8c.html">creadtriple.c</a></td><td class="indexvalue">Read a matrix stored in triplet (coordinate) format </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="csnode__bmod_8c.html">csnode_bmod.c</a></td><td class="indexvalue">Performs numeric block updates within the relaxed snode </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="csnode__dfs_8c.html">csnode_dfs.c</a></td><td class="indexvalue">Determines the union of row structures of columns within the relaxed node </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="csp__blas2_8c.html">csp_blas2.c</a></td><td class="indexvalue">Sparse BLAS 2, using some dense BLAS 2 operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="csp__blas3_8c.html">csp_blas3.c</a></td><td class="indexvalue">Sparse BLAS3, using some dense BLAS3 operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="cutil_8c.html">cutil.c</a></td><td class="indexvalue">Matrix utility functions </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dcolumn__bmod_8c.html">dcolumn_bmod.c</a></td><td class="indexvalue">Performs numeric block updates </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dcolumn__dfs_8c.html">dcolumn_dfs.c</a></td><td class="indexvalue">Performs a symbolic factorization </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dcomplex_8c.html">dcomplex.c</a></td><td class="indexvalue">Common arithmetic for <a class="el" href="structcomplex.html">complex</a> type </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dcopy__to__ucol_8c.html">dcopy_to_ucol.c</a></td><td class="indexvalue">Copy a computed column of U to the compressed data structure </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ddiagonal_8c.html">ddiagonal.c</a></td><td class="indexvalue">Auxiliary routines to work with diagonal elements </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dgscon_8c.html">dgscon.c</a></td><td class="indexvalue">Estimates reciprocal of the condition number of a general matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dgsequ_8c.html">dgsequ.c</a></td><td class="indexvalue">Computes row and column scalings </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dgsisx_8c.html">dgsisx.c</a></td><td class="indexvalue">Computes an approximate solutions of linear equations A*X=B or A'*X=B </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dgsitrf_8c.html">dgsitrf.c</a></td><td class="indexvalue">Computes an ILU factorization of a general sparse matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dgsrfs_8c.html">dgsrfs.c</a></td><td class="indexvalue">Improves computed solution to a system of inear equations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dgssv_8c.html">dgssv.c</a></td><td class="indexvalue">Solves the system of linear equations A*X=B </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dgssvx_8c.html">dgssvx.c</a></td><td class="indexvalue">Solves the system of linear equations A*X=B or A'*X=B </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dgstrf_8c.html">dgstrf.c</a></td><td class="indexvalue">Computes an LU factorization of a general sparse matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dgstrs_8c.html">dgstrs.c</a></td><td class="indexvalue">Solves a system using LU factorization </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dlacon_8c.html">dlacon.c</a></td><td class="indexvalue">Estimates the 1-norm </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dlamch_8c.html">dlamch.c</a></td><td class="indexvalue">Determines double precision machine parameters </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dlangs_8c.html">dlangs.c</a></td><td class="indexvalue">Returns the value of the one norm </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dlaqgs_8c.html">dlaqgs.c</a></td><td class="indexvalue">Equlibrates a general sprase matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dldperm_8c.html">dldperm.c</a></td><td class="indexvalue">Finds a row permutation so that the matrix has large entries on the diagonal </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dmemory_8c.html">dmemory.c</a></td><td class="indexvalue">Memory details </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dmyblas2_8c.html">dmyblas2.c</a></td><td class="indexvalue">Level 2 Blas operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dpanel__bmod_8c.html">dpanel_bmod.c</a></td><td class="indexvalue">Performs numeric block updates </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dpanel__dfs_8c.html">dpanel_dfs.c</a></td><td class="indexvalue">Peforms a symbolic factorization on a panel of symbols </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dpivotgrowth_8c.html">dpivotgrowth.c</a></td><td class="indexvalue">Computes the reciprocal pivot growth factor </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dpivotL_8c.html">dpivotL.c</a></td><td class="indexvalue">Performs numerical pivoting </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dpruneL_8c.html">dpruneL.c</a></td><td class="indexvalue">Prunes the L-structure </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dreadhb_8c.html">dreadhb.c</a></td><td class="indexvalue">Read a matrix stored in Harwell-Boeing format </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dreadrb_8c.html">dreadrb.c</a></td><td class="indexvalue">Read a matrix stored in Rutherford-Boeing format </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dreadtriple_8c.html">dreadtriple.c</a></td><td class="indexvalue">Read a matrix stored in triplet (coordinate) format </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dsnode__bmod_8c.html">dsnode_bmod.c</a></td><td class="indexvalue">Performs numeric block updates within the relaxed snode </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dsnode__dfs_8c.html">dsnode_dfs.c</a></td><td class="indexvalue">Determines the union of row structures of columns within the relaxed node </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dsp__blas2_8c.html">dsp_blas2.c</a></td><td class="indexvalue">Sparse BLAS 2, using some dense BLAS 2 operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dsp__blas3_8c.html">dsp_blas3.c</a></td><td class="indexvalue">Sparse BLAS3, using some dense BLAS3 operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dutil_8c.html">dutil.c</a></td><td class="indexvalue">Matrix utility functions </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="dzsum1_8c.html">dzsum1.c</a></td><td class="indexvalue">Takes sum of the absolute values of a <a class="el" href="structcomplex.html">complex</a> vector and returns a double precision result </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="get__perm__c_8c.html">get_perm_c.c</a></td><td class="indexvalue">Matrix permutation operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="heap__relax__snode_8c.html">heap_relax_snode.c</a></td><td class="indexvalue">Identify the initial relaxed supernodes </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="html__mainpage_8h.html">html_mainpage.h</a> <a href="html__mainpage_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="icmax1_8c.html">icmax1.c</a></td><td class="indexvalue">Finds the index of the element whose real part has maximum absolute value </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__ccolumn__dfs_8c.html">ilu_ccolumn_dfs.c</a></td><td class="indexvalue">Performs a symbolic factorization </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__ccopy__to__ucol_8c.html">ilu_ccopy_to_ucol.c</a></td><td class="indexvalue">Copy a computed column of U to the compressed data structure and drop some small entries </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__cdrop__row_8c.html">ilu_cdrop_row.c</a></td><td class="indexvalue">Drop small rows from L </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__cpanel__dfs_8c.html">ilu_cpanel_dfs.c</a></td><td class="indexvalue">Peforms a symbolic factorization on a panel of symbols and record the entries with maximum absolute value in each column </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__cpivotL_8c.html">ilu_cpivotL.c</a></td><td class="indexvalue">Performs numerical pivoting </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__csnode__dfs_8c.html">ilu_csnode_dfs.c</a></td><td class="indexvalue">Determines the union of row structures of columns within the relaxed node </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__dcolumn__dfs_8c.html">ilu_dcolumn_dfs.c</a></td><td class="indexvalue">Performs a symbolic factorization </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__dcopy__to__ucol_8c.html">ilu_dcopy_to_ucol.c</a></td><td class="indexvalue">Copy a computed column of U to the compressed data structure and drop some small entries </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__ddrop__row_8c.html">ilu_ddrop_row.c</a></td><td class="indexvalue">Drop small rows from L </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__dpanel__dfs_8c.html">ilu_dpanel_dfs.c</a></td><td class="indexvalue">Peforms a symbolic factorization on a panel of symbols and record the entries with maximum absolute value in each column </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__dpivotL_8c.html">ilu_dpivotL.c</a></td><td class="indexvalue">Performs numerical pivoting </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__dsnode__dfs_8c.html">ilu_dsnode_dfs.c</a></td><td class="indexvalue">Determines the union of row structures of columns within the relaxed node </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__heap__relax__snode_8c.html">ilu_heap_relax_snode.c</a></td><td class="indexvalue">Identify the initial relaxed supernodes </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__relax__snode_8c.html">ilu_relax_snode.c</a></td><td class="indexvalue">Identify initial relaxed supernodes </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__scolumn__dfs_8c.html">ilu_scolumn_dfs.c</a></td><td class="indexvalue">Performs a symbolic factorization </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__scopy__to__ucol_8c.html">ilu_scopy_to_ucol.c</a></td><td class="indexvalue">Copy a computed column of U to the compressed data structure and drop some small entries </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__sdrop__row_8c.html">ilu_sdrop_row.c</a></td><td class="indexvalue">Drop small rows from L </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__spanel__dfs_8c.html">ilu_spanel_dfs.c</a></td><td class="indexvalue">Peforms a symbolic factorization on a panel of symbols and record the entries with maximum absolute value in each column </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__spivotL_8c.html">ilu_spivotL.c</a></td><td class="indexvalue">Performs numerical pivoting </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__ssnode__dfs_8c.html">ilu_ssnode_dfs.c</a></td><td class="indexvalue">Determines the union of row structures of columns within the relaxed node </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__zcolumn__dfs_8c.html">ilu_zcolumn_dfs.c</a></td><td class="indexvalue">Performs a symbolic factorization </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__zcopy__to__ucol_8c.html">ilu_zcopy_to_ucol.c</a></td><td class="indexvalue">Copy a computed column of U to the compressed data structure and drop some small entries </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__zdrop__row_8c.html">ilu_zdrop_row.c</a></td><td class="indexvalue">Drop small rows from L </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__zpanel__dfs_8c.html">ilu_zpanel_dfs.c</a></td><td class="indexvalue">Peforms a symbolic factorization on a panel of symbols and record the entries with maximum absolute value in each column </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__zpivotL_8c.html">ilu_zpivotL.c</a></td><td class="indexvalue">Performs numerical pivoting </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ilu__zsnode__dfs_8c.html">ilu_zsnode_dfs.c</a></td><td class="indexvalue">Determines the union of row structures of columns within the relaxed node </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="izmax1_8c.html">izmax1.c</a></td><td class="indexvalue">Finds the index of the element whose real part has maximum absolute value </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="lsame_8c.html">lsame.c</a></td><td class="indexvalue">Check if CA is the same letter as CB regardless of case </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="mark__relax_8c.html">mark_relax.c</a></td><td class="indexvalue">Record the rows pivoted by the relaxed supernodes </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="mc64ad_8c.html">mc64ad.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="memory_8c.html">memory.c</a></td><td class="indexvalue">Precision-independent memory-related routines </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="mmd_8c.html">mmd.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="qselect_8c.html">qselect.c</a></td><td class="indexvalue">Quickselect: returns the k-th (zero-based) largest value in A[] </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="relax__snode_8c.html">relax_snode.c</a></td><td class="indexvalue">Identify initial relaxed supernodes </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="scolumn__bmod_8c.html">scolumn_bmod.c</a></td><td class="indexvalue">Performs numeric block updates </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="scolumn__dfs_8c.html">scolumn_dfs.c</a></td><td class="indexvalue">Performs a symbolic factorization </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="scomplex_8c.html">scomplex.c</a></td><td class="indexvalue">Common arithmetic for <a class="el" href="structcomplex.html">complex</a> type </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="scopy__to__ucol_8c.html">scopy_to_ucol.c</a></td><td class="indexvalue">Copy a computed column of U to the compressed data structure </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="scsum1_8c.html">scsum1.c</a></td><td class="indexvalue">Takes sum of the absolute values of a <a class="el" href="structcomplex.html">complex</a> vector and returns a single precision result </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sdiagonal_8c.html">sdiagonal.c</a></td><td class="indexvalue">Auxiliary routines to work with diagonal elements </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sgscon_8c.html">sgscon.c</a></td><td class="indexvalue">Estimates reciprocal of the condition number of a general matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sgsequ_8c.html">sgsequ.c</a></td><td class="indexvalue">Computes row and column scalings </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sgsisx_8c.html">sgsisx.c</a></td><td class="indexvalue">Computes an approximate solutions of linear equations A*X=B or A'*X=B </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sgsitrf_8c.html">sgsitrf.c</a></td><td class="indexvalue">Computes an ILU factorization of a general sparse matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sgsrfs_8c.html">sgsrfs.c</a></td><td class="indexvalue">Improves computed solution to a system of inear equations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sgssv_8c.html">sgssv.c</a></td><td class="indexvalue">Solves the system of linear equations A*X=B </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sgssvx_8c.html">sgssvx.c</a></td><td class="indexvalue">Solves the system of linear equations A*X=B or A'*X=B </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sgstrf_8c.html">sgstrf.c</a></td><td class="indexvalue">Computes an LU factorization of a general sparse matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sgstrs_8c.html">sgstrs.c</a></td><td class="indexvalue">Solves a system using LU factorization </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="slacon_8c.html">slacon.c</a></td><td class="indexvalue">Estimates the 1-norm </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="slamch_8c.html">slamch.c</a></td><td class="indexvalue">Determines single precision machine parameters and other service routines </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="slangs_8c.html">slangs.c</a></td><td class="indexvalue">Returns the value of the one norm </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="slaqgs_8c.html">slaqgs.c</a></td><td class="indexvalue">Equlibrates a general sprase matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sldperm_8c.html">sldperm.c</a></td><td class="indexvalue">Finds a row permutation so that the matrix has large entries on the diagonal </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="slu__cdefs_8h.html">slu_cdefs.h</a> <a href="slu__cdefs_8h-source.html">[code]</a></td><td class="indexvalue">Header file for real operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="slu__Cnames_8h.html">slu_Cnames.h</a> <a href="slu__Cnames_8h-source.html">[code]</a></td><td class="indexvalue">Macros defining how C routines will be called </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="slu__dcomplex_8h.html">slu_dcomplex.h</a> <a href="slu__dcomplex_8h-source.html">[code]</a></td><td class="indexvalue">Header file for <a class="el" href="structcomplex.html">complex</a> operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="slu__ddefs_8h.html">slu_ddefs.h</a> <a href="slu__ddefs_8h-source.html">[code]</a></td><td class="indexvalue">Header file for real operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="slu__scomplex_8h.html">slu_scomplex.h</a> <a href="slu__scomplex_8h-source.html">[code]</a></td><td class="indexvalue">Header file for <a class="el" href="structcomplex.html">complex</a> operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="slu__sdefs_8h.html">slu_sdefs.h</a> <a href="slu__sdefs_8h-source.html">[code]</a></td><td class="indexvalue">Header file for real operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="slu__util_8h.html">slu_util.h</a> <a href="slu__util_8h-source.html">[code]</a></td><td class="indexvalue">Utility header file </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="slu__zdefs_8h.html">slu_zdefs.h</a> <a href="slu__zdefs_8h-source.html">[code]</a></td><td class="indexvalue">Header file for real operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="smemory_8c.html">smemory.c</a></td><td class="indexvalue">Memory details </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="smyblas2_8c.html">smyblas2.c</a></td><td class="indexvalue">Level 2 Blas operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sp__coletree_8c.html">sp_coletree.c</a></td><td class="indexvalue">Tree layout and computation routines </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="SRC_2sp__ienv_8c.html">sp_ienv.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sp__preorder_8c.html">sp_preorder.c</a></td><td class="indexvalue">Permute and performs functions on columns of orginal matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="spanel__bmod_8c.html">spanel_bmod.c</a></td><td class="indexvalue">Performs numeric block updates </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="spanel__dfs_8c.html">spanel_dfs.c</a></td><td class="indexvalue">Peforms a symbolic factorization on a panel of symbols </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="spivotgrowth_8c.html">spivotgrowth.c</a></td><td class="indexvalue">Computes the reciprocal pivot growth factor </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="spivotL_8c.html">spivotL.c</a></td><td class="indexvalue">Performs numerical pivoting </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="spruneL_8c.html">spruneL.c</a></td><td class="indexvalue">Prunes the L-structure </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sreadhb_8c.html">sreadhb.c</a></td><td class="indexvalue">Read a matrix stored in Harwell-Boeing format </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sreadrb_8c.html">sreadrb.c</a></td><td class="indexvalue">Read a matrix stored in Rutherford-Boeing format </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sreadtriple_8c.html">sreadtriple.c</a></td><td class="indexvalue">Read a matrix stored in triplet (coordinate) format </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ssnode__bmod_8c.html">ssnode_bmod.c</a></td><td class="indexvalue">Performs numeric block updates within the relaxed snode </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ssnode__dfs_8c.html">ssnode_dfs.c</a></td><td class="indexvalue">Determines the union of row structures of columns within the relaxed node </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ssp__blas2_8c.html">ssp_blas2.c</a></td><td class="indexvalue">Sparse BLAS 2, using some dense BLAS 2 operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="ssp__blas3_8c.html">ssp_blas3.c</a></td><td class="indexvalue">Sparse BLAS3, using some dense BLAS3 operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="superlu__enum__consts_8h.html">superlu_enum_consts.h</a> <a href="superlu__enum__consts_8h-source.html">[code]</a></td><td class="indexvalue">Enum constants header file </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="superlu__timer_8c.html">superlu_timer.c</a></td><td class="indexvalue">Returns the time used </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="supermatrix_8h.html">supermatrix.h</a> <a href="supermatrix_8h-source.html">[code]</a></td><td class="indexvalue">Defines matrix types </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="sutil_8c.html">sutil.c</a></td><td class="indexvalue">Matrix utility functions </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="util_8c.html">util.c</a></td><td class="indexvalue">Utility functions </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="xerbla_8c.html">xerbla.c</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zcolumn__bmod_8c.html">zcolumn_bmod.c</a></td><td class="indexvalue">Performs numeric block updates </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zcolumn__dfs_8c.html">zcolumn_dfs.c</a></td><td class="indexvalue">Performs a symbolic factorization </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zcopy__to__ucol_8c.html">zcopy_to_ucol.c</a></td><td class="indexvalue">Copy a computed column of U to the compressed data structure </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zdiagonal_8c.html">zdiagonal.c</a></td><td class="indexvalue">Auxiliary routines to work with diagonal elements </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zgscon_8c.html">zgscon.c</a></td><td class="indexvalue">Estimates reciprocal of the condition number of a general matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zgsequ_8c.html">zgsequ.c</a></td><td class="indexvalue">Computes row and column scalings </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zgsisx_8c.html">zgsisx.c</a></td><td class="indexvalue">Computes an approximate solutions of linear equations A*X=B or A'*X=B </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zgsitrf_8c.html">zgsitrf.c</a></td><td class="indexvalue">Computes an ILU factorization of a general sparse matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zgsrfs_8c.html">zgsrfs.c</a></td><td class="indexvalue">Improves computed solution to a system of inear equations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zgssv_8c.html">zgssv.c</a></td><td class="indexvalue">Solves the system of linear equations A*X=B </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zgssvx_8c.html">zgssvx.c</a></td><td class="indexvalue">Solves the system of linear equations A*X=B or A'*X=B </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zgstrf_8c.html">zgstrf.c</a></td><td class="indexvalue">Computes an LU factorization of a general sparse matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zgstrs_8c.html">zgstrs.c</a></td><td class="indexvalue">Solves a system using LU factorization </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zlacon_8c.html">zlacon.c</a></td><td class="indexvalue">Estimates the 1-norm </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zlangs_8c.html">zlangs.c</a></td><td class="indexvalue">Returns the value of the one norm </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zlaqgs_8c.html">zlaqgs.c</a></td><td class="indexvalue">Equlibrates a general sprase matrix </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zldperm_8c.html">zldperm.c</a></td><td class="indexvalue">Finds a row permutation so that the matrix has large entries on the diagonal </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zmemory_8c.html">zmemory.c</a></td><td class="indexvalue">Memory details </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zmyblas2_8c.html">zmyblas2.c</a></td><td class="indexvalue">Level 2 Blas operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zpanel__bmod_8c.html">zpanel_bmod.c</a></td><td class="indexvalue">Performs numeric block updates </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zpanel__dfs_8c.html">zpanel_dfs.c</a></td><td class="indexvalue">Peforms a symbolic factorization on a panel of symbols </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zpivotgrowth_8c.html">zpivotgrowth.c</a></td><td class="indexvalue">Computes the reciprocal pivot growth factor </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zpivotL_8c.html">zpivotL.c</a></td><td class="indexvalue">Performs numerical pivoting </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zpruneL_8c.html">zpruneL.c</a></td><td class="indexvalue">Prunes the L-structure </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zreadhb_8c.html">zreadhb.c</a></td><td class="indexvalue">Read a matrix stored in Harwell-Boeing format </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zreadrb_8c.html">zreadrb.c</a></td><td class="indexvalue">Read a matrix stored in Rutherford-Boeing format </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zreadtriple_8c.html">zreadtriple.c</a></td><td class="indexvalue">Read a matrix stored in triplet (coordinate) format </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zsnode__bmod_8c.html">zsnode_bmod.c</a></td><td class="indexvalue">Performs numeric block updates within the relaxed snode </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zsnode__dfs_8c.html">zsnode_dfs.c</a></td><td class="indexvalue">Determines the union of row structures of columns within the relaxed node </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zsp__blas2_8c.html">zsp_blas2.c</a></td><td class="indexvalue">Sparse BLAS 2, using some dense BLAS 2 operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zsp__blas3_8c.html">zsp_blas3.c</a></td><td class="indexvalue">Sparse BLAS3, using some dense BLAS3 operations </td></tr>
+  <tr><td class="indexkey">SRC/<a class="el" href="zutil_8c.html">zutil.c</a></td><td class="indexvalue">Matrix utility functions </td></tr>
+</table>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/functions.html b/DOC/html/functions.html
new file mode 100644
index 0000000..057f48b
--- /dev/null
+++ b/DOC/html/functions.html
@@ -0,0 +1,324 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="#index_a"><span>a</span></a></li>
+      <li><a href="#index_c"><span>c</span></a></li>
+      <li><a href="#index_d"><span>d</span></a></li>
+      <li><a href="#index_e"><span>e</span></a></li>
+      <li><a href="#index_f"><span>f</span></a></li>
+      <li><a href="#index_h"><span>h</span></a></li>
+      <li><a href="#index_i"><span>i</span></a></li>
+      <li><a href="#index_l"><span>l</span></a></li>
+      <li><a href="#index_m"><span>m</span></a></li>
+      <li><a href="#index_n"><span>n</span></a></li>
+      <li><a href="#index_o"><span>o</span></a></li>
+      <li><a href="#index_p"><span>p</span></a></li>
+      <li><a href="#index_r"><span>r</span></a></li>
+      <li><a href="#index_s"><span>s</span></a></li>
+      <li><a href="#index_t"><span>t</span></a></li>
+      <li><a href="#index_u"><span>u</span></a></li>
+      <li><a href="#index_x"><span>x</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all struct and union fields with links to the structures/unions they belong to:
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>array
+: <a class="el" href="structLU__stack__t.html#c76a2713e4f4c516d7189303b6f82c8d">LU_stack_t</a>
+</ul>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>col_to_sup
+: <a class="el" href="structSCformat.html#75a51eef4af5a906cde9a32eddcb2fc1">SCformat</a>
+, <a class="el" href="structSCPformat.html#ba16553c2896f7c88450621f18b54bae">SCPformat</a>
+<li>colbeg
+: <a class="el" href="structNCPformat.html#2192334a0f76d4c18784caa1f8783f01">NCPformat</a>
+<li>colend
+: <a class="el" href="structNCPformat.html#86dcc41e83595a12ecd88d57748430c0">NCPformat</a>
+<li>colind
+: <a class="el" href="structNRformat.html#25b76fc1f79b314a99c1e8f8522d77af">NRformat</a>
+, <a class="el" href="structNRformat__loc.html#5d192fc35ba0915afa42f36eca0e2d78">NRformat_loc</a>
+<li>ColPerm
+: <a class="el" href="structsuperlu__options__t.html#f6e41a7d8ca989c5396f6edc67be0409">superlu_options_t</a>
+<li>colptr
+: <a class="el" href="structNCformat.html#881f460e39f34bbbf70909b6b0629adc">NCformat</a>
+<li>ConditionNumber
+: <a class="el" href="structsuperlu__options__t.html#3394d6658ec588071a9fee24a728eb07">superlu_options_t</a>
+</ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>degree
+: <a class="el" href="structColamd__Row__struct.html#01e336d70f1cbe2ac615d4b23c480ecd">Colamd_Row_struct</a>
+<li>degree_next
+: <a class="el" href="structColamd__Col__struct.html#39ab48d1ea2a8f6d365b60886c9ac5a1">Colamd_Col_struct</a>
+<li>DiagPivotThresh
+: <a class="el" href="structsuperlu__options__t.html#e574f08a3f4094dae8f635690b71d944">superlu_options_t</a>
+<li>Dtype
+: <a class="el" href="structSuperMatrix.html#edd4bd451819549620b49076a62dfdcc">SuperMatrix</a>
+</ul>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>Equil
+: <a class="el" href="structsuperlu__options__t.html#3fe998e3518ad90532072fa8929a1e2f">superlu_options_t</a>
+<li>expanders
+: <a class="el" href="structGlobalLU__t.html#edd2ee950bd57f92d4aa9028738b9bdc">GlobalLU_t</a>
+<li>expansions
+: <a class="el" href="structSuperLUStat__t.html#b0281af9350a75b2d4a3108b8bc0bf23">SuperLUStat_t</a>
+</ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>Fact
+: <a class="el" href="structsuperlu__options__t.html#cbd3cc1d27bbaf5bc168ebbbd6bf60fe">superlu_options_t</a>
+<li>first_column
+: <a class="el" href="structColamd__Row__struct.html#f7bf4c87b04e63e6b1abc2c86e8d1376">Colamd_Row_struct</a>
+<li>for_lu
+: <a class="el" href="structmem__usage__t.html#ea63300065ca81e5387c1706d7b3e705">mem_usage_t</a>
+<li>fst_row
+: <a class="el" href="structNRformat__loc.html#cab0ad4c74c4b4f0c68647f98b430cd9">NRformat_loc</a>
+</ul>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>hash
+: <a class="el" href="structColamd__Col__struct.html#babfe23e6edb41b345085470e52d7264">Colamd_Col_struct</a>
+<li>hash_next
+: <a class="el" href="structColamd__Col__struct.html#640f93b7885fb94b7dc0330041b53795">Colamd_Col_struct</a>
+<li>headhash
+: <a class="el" href="structColamd__Col__struct.html#16435510e5d93025bb7b9f5715a5ba1c">Colamd_Col_struct</a>
+</ul>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>i
+: <a class="el" href="structdoublecomplex.html#336ddbef83d1878426558d417a6ecfbb">doublecomplex</a>
+, <a class="el" href="structcomplex.html#5eefa12b02189d694af536bc7d8726be">complex</a>
+<li>ILU_DropRule
+: <a class="el" href="structsuperlu__options__t.html#c0ca2f81f68ad7596f2ada5739acc4d5">superlu_options_t</a>
+<li>ILU_DropTol
+: <a class="el" href="structsuperlu__options__t.html#4f629bb593cb42f213887d521c8f2288">superlu_options_t</a>
+<li>ILU_FillFactor
+: <a class="el" href="structsuperlu__options__t.html#cf43941c86c9f3d1b46a6655f97bac70">superlu_options_t</a>
+<li>ILU_FillTol
+: <a class="el" href="structsuperlu__options__t.html#8021fa436ad10dfdee734364bcd428c5">superlu_options_t</a>
+<li>ILU_MILU
+: <a class="el" href="structsuperlu__options__t.html#74708fd3231a761394bed90da1eba63b">superlu_options_t</a>
+<li>ILU_MILU_Dim
+: <a class="el" href="structsuperlu__options__t.html#ba6edb00ac03655feb075bf9d6904d18">superlu_options_t</a>
+<li>ILU_Norm
+: <a class="el" href="structsuperlu__options__t.html#d8ed1b7a0243a10193ff792053b281c9">superlu_options_t</a>
+<li>IterRefine
+: <a class="el" href="structsuperlu__options__t.html#3e40fb39641e0caf27feb6998d21d98a">superlu_options_t</a>
+</ul>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>lda
+: <a class="el" href="structDNformat.html#6b584837b30f33849c6c3b070aade816">DNformat</a>
+<li>length
+: <a class="el" href="structColamd__Col__struct.html#c61e32f7e56a6673058c0d57cb170f22">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#4cf6076c6aeab980aa2add1c24913c35">Colamd_Row_struct</a>
+<li>lsub
+: <a class="el" href="structGlobalLU__t.html#4e7e8cd3ba09e252a04eaf0b8af5fccd">GlobalLU_t</a>
+<li>lusup
+: <a class="el" href="structGlobalLU__t.html#726d0a12957a3de9a841b833b8451c09">GlobalLU_t</a>
+</ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>m_loc
+: <a class="el" href="structNRformat__loc.html#90413dc3eb197a83b70cc0d97e4c54af">NRformat_loc</a>
+<li>mark
+: <a class="el" href="structColamd__Row__struct.html#00b8bd69ce2b84d9b75c5503d80c5080">Colamd_Row_struct</a>
+<li>mem
+: <a class="el" href="structe__node.html#6a040bdcee064559b0b480a96ccfac65">e_node</a>
+<li>MemModel
+: <a class="el" href="structGlobalLU__t.html#9089591bf01db5135a9d52cb732b0f3c">GlobalLU_t</a>
+<li>Mtype
+: <a class="el" href="structSuperMatrix.html#42877db0cfad1033374474f48e4b3fc4">SuperMatrix</a>
+</ul>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>n
+: <a class="el" href="structGlobalLU__t.html#48fcf5a7ff751514d92feeb40370fe5e">GlobalLU_t</a>
+<li>ncol
+: <a class="el" href="structSuperMatrix.html#b8b85bf206c36ebc2223cc2ec6acbe8c">SuperMatrix</a>
+<li>nnz
+: <a class="el" href="structNRformat.html#e3652d6a08cf47208db6abbd162bdee2">NRformat</a>
+, <a class="el" href="structSCformat.html#3808f35bd097fbc0a39e3e65ee2a8d4a">SCformat</a>
+, <a class="el" href="structNCformat.html#ffa2566dd89ea8ce6422f788887b5b27">NCformat</a>
+, <a class="el" href="structSCPformat.html#d4b6e7424269c3cbe9a368604433870e">SCPformat</a>
+, <a class="el" href="structNCPformat.html#c8c12ffc9edd0906608612727ad406ed">NCPformat</a>
+<li>nnz_loc
+: <a class="el" href="structNRformat__loc.html#41c309cb83dedeaa82c0e4e137ea4785">NRformat_loc</a>
+<li>nrow
+: <a class="el" href="structSuperMatrix.html#b1d854b814f0757e7ff7e0da01c6ef43">SuperMatrix</a>
+<li>nsuper
+: <a class="el" href="structSCformat.html#afffc008b0b8e57b9cdf5689a527bd8c">SCformat</a>
+, <a class="el" href="structSCPformat.html#20ee99d8cfb0cecad94373e2eb5abef8">SCPformat</a>
+<li>num_expansions
+: <a class="el" href="structGlobalLU__t.html#1923c63f76eab75f5022f025c25a82a7">GlobalLU_t</a>
+<li>nzlmax
+: <a class="el" href="structGlobalLU__t.html#1f77873222d31cd15eb781fdbf18df18">GlobalLU_t</a>
+<li>nzlumax
+: <a class="el" href="structGlobalLU__t.html#e67b1da1b096e92b7ddadf6e4a159481">GlobalLU_t</a>
+<li>nzumax
+: <a class="el" href="structGlobalLU__t.html#5238cd65bea5ca45046238d908073982">GlobalLU_t</a>
+<li>nzval
+: <a class="el" href="structSCPformat.html#028e5f9ef15054302c1403969c37a0fb">SCPformat</a>
+, <a class="el" href="structNCPformat.html#519ed66fdf9da30c76c079474503c764">NCPformat</a>
+, <a class="el" href="structNCformat.html#a3e85810bb190b7359d8aaa956a64e64">NCformat</a>
+, <a class="el" href="structSCformat.html#25011a4746e4cf0a6fbc38ba45a70e91">SCformat</a>
+, <a class="el" href="structDNformat.html#54a061275c52aa9e38f4cb65da46d48c">DNformat</a>
+, <a class="el" href="structNRformat.html#3933d6611dc87efede947b08ea8d83f2">NRformat</a>
+, <a class="el" href="structNRformat__loc.html#08b19d74f15e6475f43565035ae898ca">NRformat_loc</a>
+<li>nzval_colbeg
+: <a class="el" href="structSCPformat.html#a9bae5f483aa1a22aec18f5c2393f05e">SCPformat</a>
+<li>nzval_colend
+: <a class="el" href="structSCPformat.html#098e9a5c87e2c0b35c82852b1910334d">SCPformat</a>
+<li>nzval_colptr
+: <a class="el" href="structSCformat.html#41e93b73c8bce9326f035e3647ee94ca">SCformat</a>
+</ul>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>ops
+: <a class="el" href="structSuperLUStat__t.html#ec6afa389e49ac9d04dc44e24805c99d">SuperLUStat_t</a>
+<li>order
+: <a class="el" href="structColamd__Col__struct.html#22ecb292b2471f0a09316656713bfe6e">Colamd_Col_struct</a>
+</ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>p
+: <a class="el" href="structColamd__Row__struct.html#cb0d165350cbbdad8dc4260bd48b1f80">Colamd_Row_struct</a>
+<li>panel_histo
+: <a class="el" href="structSuperLUStat__t.html#9a15399d38ecaf731ec300977f268b75">SuperLUStat_t</a>
+<li>parent
+: <a class="el" href="structColamd__Col__struct.html#abae0343baec2ef7f9681bf60a23bacf">Colamd_Col_struct</a>
+<li>ParSymbFact
+: <a class="el" href="structsuperlu__options__t.html#e2f1847e26bce58631ca5d58ad3d46ed">superlu_options_t</a>
+<li>PivotGrowth
+: <a class="el" href="structsuperlu__options__t.html#a75cfd534f156c78b7dc69e7e68596da">superlu_options_t</a>
+<li>prev
+: <a class="el" href="structColamd__Col__struct.html#23aaabe8f73f1ae9016ea4bb24d494a7">Colamd_Col_struct</a>
+<li>PrintStat
+: <a class="el" href="structsuperlu__options__t.html#afe514c5a01fe24b70cc636621a86576">superlu_options_t</a>
+</ul>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>r
+: <a class="el" href="structdoublecomplex.html#7b1a3f489cadc006bfe2fda973267af6">doublecomplex</a>
+, <a class="el" href="structcomplex.html#6b24d5cc84eef41dbe90b79e93de030f">complex</a>
+<li>RefineInitialized
+: <a class="el" href="structsuperlu__options__t.html#6cfb6d3c0e8d5d2c8b4b813883e395b7">superlu_options_t</a>
+<li>RefineSteps
+: <a class="el" href="structSuperLUStat__t.html#472eadaf612c983b8829ae40b09f411b">SuperLUStat_t</a>
+<li>ReplaceTinyPivot
+: <a class="el" href="structsuperlu__options__t.html#791051ffa3861ba7203b0a1da2e6bf4b">superlu_options_t</a>
+<li>rowind
+: <a class="el" href="structSCPformat.html#5b4ccbb31fa3a7c2372b5a297453e200">SCPformat</a>
+, <a class="el" href="structNCPformat.html#8a27cd5a756bc313cc3c487a84e8ba30">NCPformat</a>
+, <a class="el" href="structNCformat.html#16eb8492bb5694035ef3e620ea8c77b1">NCformat</a>
+, <a class="el" href="structSCformat.html#ec8a46751f64a94238495838aaed7cd2">SCformat</a>
+<li>rowind_colbeg
+: <a class="el" href="structSCPformat.html#1bd16ec6ab44636e56da09d65fbe8402">SCPformat</a>
+<li>rowind_colend
+: <a class="el" href="structSCPformat.html#09c1770c0baad3c1152d48587ad084b4">SCPformat</a>
+<li>rowind_colptr
+: <a class="el" href="structSCformat.html#7683b1730b067ae2058004f0f18ad88d">SCformat</a>
+<li>RowPerm
+: <a class="el" href="structsuperlu__options__t.html#d38e45769deca7564ea75caec2ad58e6">superlu_options_t</a>
+<li>rowptr
+: <a class="el" href="structNRformat__loc.html#add0788ee704ffb7000b0485ee128061">NRformat_loc</a>
+, <a class="el" href="structNRformat.html#552302eb293088d4b7040f487b430ba7">NRformat</a>
+</ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>score
+: <a class="el" href="structColamd__Col__struct.html#a3cc8f4e719f65ba6fead93f272d7237">Colamd_Col_struct</a>
+<li>shared1
+: <a class="el" href="structColamd__Col__struct.html#54fd02e0751a496e05ed7f21a2b2a1f0">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#2562d9df5820b202cd5e83696fc053f5">Colamd_Row_struct</a>
+<li>shared2
+: <a class="el" href="structColamd__Col__struct.html#f228addd53ebe168293e7e5c3edd372e">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#eb2ca96dcadf6490c614ed559acef59a">Colamd_Row_struct</a>
+<li>shared3
+: <a class="el" href="structColamd__Col__struct.html#5fc60d7e3cd5df5789a2999c08b47732">Colamd_Col_struct</a>
+<li>shared4
+: <a class="el" href="structColamd__Col__struct.html#4ff41bc973d32218127f4922e4c7019a">Colamd_Col_struct</a>
+<li>size
+: <a class="el" href="structe__node.html#2b5a49fe848fe66d1643a37ae2a842eb">e_node</a>
+, <a class="el" href="structLU__stack__t.html#f05e6775b79809e7bcc0c92da24c12f5">LU_stack_t</a>
+<li>SolveInitialized
+: <a class="el" href="structsuperlu__options__t.html#246344bda7ff7d5547101c2f01737ee7">superlu_options_t</a>
+<li>stack
+: <a class="el" href="structGlobalLU__t.html#9c8f24b1d7ed85996df0ab869b472b0e">GlobalLU_t</a>
+<li>start
+: <a class="el" href="structColamd__Col__struct.html#55c862b22c87023300b5ccb3044e0409">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#24285056395b1cf2e28ea3810d67d09d">Colamd_Row_struct</a>
+<li>Store
+: <a class="el" href="structSuperMatrix.html#73ebca1b46bb24536226b9378e01c5b5">SuperMatrix</a>
+<li>Stype
+: <a class="el" href="structSuperMatrix.html#b37e181824f50a405272451afc399952">SuperMatrix</a>
+<li>sup_to_col
+: <a class="el" href="structSCformat.html#d5cb1b2ae17c5fe554c3b70721718b08">SCformat</a>
+<li>sup_to_colbeg
+: <a class="el" href="structSCPformat.html#345ad774183c979674dd0960a930508e">SCPformat</a>
+<li>sup_to_colend
+: <a class="el" href="structSCPformat.html#8e470d085ca7b39645336943a1f2eae6">SCPformat</a>
+<li>supno
+: <a class="el" href="structGlobalLU__t.html#fe003e9f68a924d5ba66c6f655bea55c">GlobalLU_t</a>
+<li>SymmetricMode
+: <a class="el" href="structsuperlu__options__t.html#ad1b52d0366ae8601e97fab5c470c45d">superlu_options_t</a>
+</ul>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>thickness
+: <a class="el" href="structColamd__Col__struct.html#a52760c0c184f617d10b9946618ebc9b">Colamd_Col_struct</a>
+<li>TinyPivots
+: <a class="el" href="structSuperLUStat__t.html#d752e80fc9fa85195ec9c0e9a17b481c">SuperLUStat_t</a>
+<li>top1
+: <a class="el" href="structLU__stack__t.html#3ba965e6621326c518c95d791afe6fef">LU_stack_t</a>
+<li>top2
+: <a class="el" href="structLU__stack__t.html#1ae2a485bc81409ceb05bce271363901">LU_stack_t</a>
+<li>total_needed
+: <a class="el" href="structmem__usage__t.html#7225324e3925e071e95a58d49367a88a">mem_usage_t</a>
+<li>Trans
+: <a class="el" href="structsuperlu__options__t.html#23fa8259c7091d82f10f0dfc7718dc36">superlu_options_t</a>
+</ul>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>ucol
+: <a class="el" href="structGlobalLU__t.html#f9e46ab287726ab6be2c22cca773856d">GlobalLU_t</a>
+<li>used
+: <a class="el" href="structLU__stack__t.html#78ad1773677b220bd843c9d84bbda869">LU_stack_t</a>
+<li>usub
+: <a class="el" href="structGlobalLU__t.html#96b0443ea47703100b9ecad92137dda9">GlobalLU_t</a>
+<li>utime
+: <a class="el" href="structSuperLUStat__t.html#5eccc9eba32b749c87f7a97991cfdc18">SuperLUStat_t</a>
+</ul>
+<h3><a class="anchor" name="index_x">- x -</a></h3><ul>
+<li>xlsub
+: <a class="el" href="structGlobalLU__t.html#c6f1655e303e2947524c29182d0f6a1e">GlobalLU_t</a>
+<li>xlusup
+: <a class="el" href="structGlobalLU__t.html#aa63b1382a358278bd2775c921a84246">GlobalLU_t</a>
+<li>xsup
+: <a class="el" href="structGlobalLU__t.html#94902a11c68912c2d456a58edd29f31d">GlobalLU_t</a>
+<li>xusub
+: <a class="el" href="structGlobalLU__t.html#4cbf4786dd6fc6541d5e097b27ab6835">GlobalLU_t</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/functions_vars.html b/DOC/html/functions_vars.html
new file mode 100644
index 0000000..5991ce4
--- /dev/null
+++ b/DOC/html/functions_vars.html
@@ -0,0 +1,324 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields - Variables</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="#index_a"><span>a</span></a></li>
+      <li><a href="#index_c"><span>c</span></a></li>
+      <li><a href="#index_d"><span>d</span></a></li>
+      <li><a href="#index_e"><span>e</span></a></li>
+      <li><a href="#index_f"><span>f</span></a></li>
+      <li><a href="#index_h"><span>h</span></a></li>
+      <li><a href="#index_i"><span>i</span></a></li>
+      <li><a href="#index_l"><span>l</span></a></li>
+      <li><a href="#index_m"><span>m</span></a></li>
+      <li><a href="#index_n"><span>n</span></a></li>
+      <li><a href="#index_o"><span>o</span></a></li>
+      <li><a href="#index_p"><span>p</span></a></li>
+      <li><a href="#index_r"><span>r</span></a></li>
+      <li><a href="#index_s"><span>s</span></a></li>
+      <li><a href="#index_t"><span>t</span></a></li>
+      <li><a href="#index_u"><span>u</span></a></li>
+      <li><a href="#index_x"><span>x</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>array
+: <a class="el" href="structLU__stack__t.html#c76a2713e4f4c516d7189303b6f82c8d">LU_stack_t</a>
+</ul>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>col_to_sup
+: <a class="el" href="structSCformat.html#75a51eef4af5a906cde9a32eddcb2fc1">SCformat</a>
+, <a class="el" href="structSCPformat.html#ba16553c2896f7c88450621f18b54bae">SCPformat</a>
+<li>colbeg
+: <a class="el" href="structNCPformat.html#2192334a0f76d4c18784caa1f8783f01">NCPformat</a>
+<li>colend
+: <a class="el" href="structNCPformat.html#86dcc41e83595a12ecd88d57748430c0">NCPformat</a>
+<li>colind
+: <a class="el" href="structNRformat.html#25b76fc1f79b314a99c1e8f8522d77af">NRformat</a>
+, <a class="el" href="structNRformat__loc.html#5d192fc35ba0915afa42f36eca0e2d78">NRformat_loc</a>
+<li>ColPerm
+: <a class="el" href="structsuperlu__options__t.html#f6e41a7d8ca989c5396f6edc67be0409">superlu_options_t</a>
+<li>colptr
+: <a class="el" href="structNCformat.html#881f460e39f34bbbf70909b6b0629adc">NCformat</a>
+<li>ConditionNumber
+: <a class="el" href="structsuperlu__options__t.html#3394d6658ec588071a9fee24a728eb07">superlu_options_t</a>
+</ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>degree
+: <a class="el" href="structColamd__Row__struct.html#01e336d70f1cbe2ac615d4b23c480ecd">Colamd_Row_struct</a>
+<li>degree_next
+: <a class="el" href="structColamd__Col__struct.html#39ab48d1ea2a8f6d365b60886c9ac5a1">Colamd_Col_struct</a>
+<li>DiagPivotThresh
+: <a class="el" href="structsuperlu__options__t.html#e574f08a3f4094dae8f635690b71d944">superlu_options_t</a>
+<li>Dtype
+: <a class="el" href="structSuperMatrix.html#edd4bd451819549620b49076a62dfdcc">SuperMatrix</a>
+</ul>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>Equil
+: <a class="el" href="structsuperlu__options__t.html#3fe998e3518ad90532072fa8929a1e2f">superlu_options_t</a>
+<li>expanders
+: <a class="el" href="structGlobalLU__t.html#edd2ee950bd57f92d4aa9028738b9bdc">GlobalLU_t</a>
+<li>expansions
+: <a class="el" href="structSuperLUStat__t.html#b0281af9350a75b2d4a3108b8bc0bf23">SuperLUStat_t</a>
+</ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>Fact
+: <a class="el" href="structsuperlu__options__t.html#cbd3cc1d27bbaf5bc168ebbbd6bf60fe">superlu_options_t</a>
+<li>first_column
+: <a class="el" href="structColamd__Row__struct.html#f7bf4c87b04e63e6b1abc2c86e8d1376">Colamd_Row_struct</a>
+<li>for_lu
+: <a class="el" href="structmem__usage__t.html#ea63300065ca81e5387c1706d7b3e705">mem_usage_t</a>
+<li>fst_row
+: <a class="el" href="structNRformat__loc.html#cab0ad4c74c4b4f0c68647f98b430cd9">NRformat_loc</a>
+</ul>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>hash
+: <a class="el" href="structColamd__Col__struct.html#babfe23e6edb41b345085470e52d7264">Colamd_Col_struct</a>
+<li>hash_next
+: <a class="el" href="structColamd__Col__struct.html#640f93b7885fb94b7dc0330041b53795">Colamd_Col_struct</a>
+<li>headhash
+: <a class="el" href="structColamd__Col__struct.html#16435510e5d93025bb7b9f5715a5ba1c">Colamd_Col_struct</a>
+</ul>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>i
+: <a class="el" href="structdoublecomplex.html#336ddbef83d1878426558d417a6ecfbb">doublecomplex</a>
+, <a class="el" href="structcomplex.html#5eefa12b02189d694af536bc7d8726be">complex</a>
+<li>ILU_DropRule
+: <a class="el" href="structsuperlu__options__t.html#c0ca2f81f68ad7596f2ada5739acc4d5">superlu_options_t</a>
+<li>ILU_DropTol
+: <a class="el" href="structsuperlu__options__t.html#4f629bb593cb42f213887d521c8f2288">superlu_options_t</a>
+<li>ILU_FillFactor
+: <a class="el" href="structsuperlu__options__t.html#cf43941c86c9f3d1b46a6655f97bac70">superlu_options_t</a>
+<li>ILU_FillTol
+: <a class="el" href="structsuperlu__options__t.html#8021fa436ad10dfdee734364bcd428c5">superlu_options_t</a>
+<li>ILU_MILU
+: <a class="el" href="structsuperlu__options__t.html#74708fd3231a761394bed90da1eba63b">superlu_options_t</a>
+<li>ILU_MILU_Dim
+: <a class="el" href="structsuperlu__options__t.html#ba6edb00ac03655feb075bf9d6904d18">superlu_options_t</a>
+<li>ILU_Norm
+: <a class="el" href="structsuperlu__options__t.html#d8ed1b7a0243a10193ff792053b281c9">superlu_options_t</a>
+<li>IterRefine
+: <a class="el" href="structsuperlu__options__t.html#3e40fb39641e0caf27feb6998d21d98a">superlu_options_t</a>
+</ul>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>lda
+: <a class="el" href="structDNformat.html#6b584837b30f33849c6c3b070aade816">DNformat</a>
+<li>length
+: <a class="el" href="structColamd__Col__struct.html#c61e32f7e56a6673058c0d57cb170f22">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#4cf6076c6aeab980aa2add1c24913c35">Colamd_Row_struct</a>
+<li>lsub
+: <a class="el" href="structGlobalLU__t.html#4e7e8cd3ba09e252a04eaf0b8af5fccd">GlobalLU_t</a>
+<li>lusup
+: <a class="el" href="structGlobalLU__t.html#726d0a12957a3de9a841b833b8451c09">GlobalLU_t</a>
+</ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>m_loc
+: <a class="el" href="structNRformat__loc.html#90413dc3eb197a83b70cc0d97e4c54af">NRformat_loc</a>
+<li>mark
+: <a class="el" href="structColamd__Row__struct.html#00b8bd69ce2b84d9b75c5503d80c5080">Colamd_Row_struct</a>
+<li>mem
+: <a class="el" href="structe__node.html#6a040bdcee064559b0b480a96ccfac65">e_node</a>
+<li>MemModel
+: <a class="el" href="structGlobalLU__t.html#9089591bf01db5135a9d52cb732b0f3c">GlobalLU_t</a>
+<li>Mtype
+: <a class="el" href="structSuperMatrix.html#42877db0cfad1033374474f48e4b3fc4">SuperMatrix</a>
+</ul>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>n
+: <a class="el" href="structGlobalLU__t.html#48fcf5a7ff751514d92feeb40370fe5e">GlobalLU_t</a>
+<li>ncol
+: <a class="el" href="structSuperMatrix.html#b8b85bf206c36ebc2223cc2ec6acbe8c">SuperMatrix</a>
+<li>nnz
+: <a class="el" href="structNRformat.html#e3652d6a08cf47208db6abbd162bdee2">NRformat</a>
+, <a class="el" href="structSCformat.html#3808f35bd097fbc0a39e3e65ee2a8d4a">SCformat</a>
+, <a class="el" href="structNCformat.html#ffa2566dd89ea8ce6422f788887b5b27">NCformat</a>
+, <a class="el" href="structSCPformat.html#d4b6e7424269c3cbe9a368604433870e">SCPformat</a>
+, <a class="el" href="structNCPformat.html#c8c12ffc9edd0906608612727ad406ed">NCPformat</a>
+<li>nnz_loc
+: <a class="el" href="structNRformat__loc.html#41c309cb83dedeaa82c0e4e137ea4785">NRformat_loc</a>
+<li>nrow
+: <a class="el" href="structSuperMatrix.html#b1d854b814f0757e7ff7e0da01c6ef43">SuperMatrix</a>
+<li>nsuper
+: <a class="el" href="structSCformat.html#afffc008b0b8e57b9cdf5689a527bd8c">SCformat</a>
+, <a class="el" href="structSCPformat.html#20ee99d8cfb0cecad94373e2eb5abef8">SCPformat</a>
+<li>num_expansions
+: <a class="el" href="structGlobalLU__t.html#1923c63f76eab75f5022f025c25a82a7">GlobalLU_t</a>
+<li>nzlmax
+: <a class="el" href="structGlobalLU__t.html#1f77873222d31cd15eb781fdbf18df18">GlobalLU_t</a>
+<li>nzlumax
+: <a class="el" href="structGlobalLU__t.html#e67b1da1b096e92b7ddadf6e4a159481">GlobalLU_t</a>
+<li>nzumax
+: <a class="el" href="structGlobalLU__t.html#5238cd65bea5ca45046238d908073982">GlobalLU_t</a>
+<li>nzval
+: <a class="el" href="structSCPformat.html#028e5f9ef15054302c1403969c37a0fb">SCPformat</a>
+, <a class="el" href="structNCPformat.html#519ed66fdf9da30c76c079474503c764">NCPformat</a>
+, <a class="el" href="structNCformat.html#a3e85810bb190b7359d8aaa956a64e64">NCformat</a>
+, <a class="el" href="structSCformat.html#25011a4746e4cf0a6fbc38ba45a70e91">SCformat</a>
+, <a class="el" href="structDNformat.html#54a061275c52aa9e38f4cb65da46d48c">DNformat</a>
+, <a class="el" href="structNRformat.html#3933d6611dc87efede947b08ea8d83f2">NRformat</a>
+, <a class="el" href="structNRformat__loc.html#08b19d74f15e6475f43565035ae898ca">NRformat_loc</a>
+<li>nzval_colbeg
+: <a class="el" href="structSCPformat.html#a9bae5f483aa1a22aec18f5c2393f05e">SCPformat</a>
+<li>nzval_colend
+: <a class="el" href="structSCPformat.html#098e9a5c87e2c0b35c82852b1910334d">SCPformat</a>
+<li>nzval_colptr
+: <a class="el" href="structSCformat.html#41e93b73c8bce9326f035e3647ee94ca">SCformat</a>
+</ul>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>ops
+: <a class="el" href="structSuperLUStat__t.html#ec6afa389e49ac9d04dc44e24805c99d">SuperLUStat_t</a>
+<li>order
+: <a class="el" href="structColamd__Col__struct.html#22ecb292b2471f0a09316656713bfe6e">Colamd_Col_struct</a>
+</ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>p
+: <a class="el" href="structColamd__Row__struct.html#cb0d165350cbbdad8dc4260bd48b1f80">Colamd_Row_struct</a>
+<li>panel_histo
+: <a class="el" href="structSuperLUStat__t.html#9a15399d38ecaf731ec300977f268b75">SuperLUStat_t</a>
+<li>parent
+: <a class="el" href="structColamd__Col__struct.html#abae0343baec2ef7f9681bf60a23bacf">Colamd_Col_struct</a>
+<li>ParSymbFact
+: <a class="el" href="structsuperlu__options__t.html#e2f1847e26bce58631ca5d58ad3d46ed">superlu_options_t</a>
+<li>PivotGrowth
+: <a class="el" href="structsuperlu__options__t.html#a75cfd534f156c78b7dc69e7e68596da">superlu_options_t</a>
+<li>prev
+: <a class="el" href="structColamd__Col__struct.html#23aaabe8f73f1ae9016ea4bb24d494a7">Colamd_Col_struct</a>
+<li>PrintStat
+: <a class="el" href="structsuperlu__options__t.html#afe514c5a01fe24b70cc636621a86576">superlu_options_t</a>
+</ul>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>r
+: <a class="el" href="structdoublecomplex.html#7b1a3f489cadc006bfe2fda973267af6">doublecomplex</a>
+, <a class="el" href="structcomplex.html#6b24d5cc84eef41dbe90b79e93de030f">complex</a>
+<li>RefineInitialized
+: <a class="el" href="structsuperlu__options__t.html#6cfb6d3c0e8d5d2c8b4b813883e395b7">superlu_options_t</a>
+<li>RefineSteps
+: <a class="el" href="structSuperLUStat__t.html#472eadaf612c983b8829ae40b09f411b">SuperLUStat_t</a>
+<li>ReplaceTinyPivot
+: <a class="el" href="structsuperlu__options__t.html#791051ffa3861ba7203b0a1da2e6bf4b">superlu_options_t</a>
+<li>rowind
+: <a class="el" href="structSCPformat.html#5b4ccbb31fa3a7c2372b5a297453e200">SCPformat</a>
+, <a class="el" href="structNCPformat.html#8a27cd5a756bc313cc3c487a84e8ba30">NCPformat</a>
+, <a class="el" href="structNCformat.html#16eb8492bb5694035ef3e620ea8c77b1">NCformat</a>
+, <a class="el" href="structSCformat.html#ec8a46751f64a94238495838aaed7cd2">SCformat</a>
+<li>rowind_colbeg
+: <a class="el" href="structSCPformat.html#1bd16ec6ab44636e56da09d65fbe8402">SCPformat</a>
+<li>rowind_colend
+: <a class="el" href="structSCPformat.html#09c1770c0baad3c1152d48587ad084b4">SCPformat</a>
+<li>rowind_colptr
+: <a class="el" href="structSCformat.html#7683b1730b067ae2058004f0f18ad88d">SCformat</a>
+<li>RowPerm
+: <a class="el" href="structsuperlu__options__t.html#d38e45769deca7564ea75caec2ad58e6">superlu_options_t</a>
+<li>rowptr
+: <a class="el" href="structNRformat__loc.html#add0788ee704ffb7000b0485ee128061">NRformat_loc</a>
+, <a class="el" href="structNRformat.html#552302eb293088d4b7040f487b430ba7">NRformat</a>
+</ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>score
+: <a class="el" href="structColamd__Col__struct.html#a3cc8f4e719f65ba6fead93f272d7237">Colamd_Col_struct</a>
+<li>shared1
+: <a class="el" href="structColamd__Col__struct.html#54fd02e0751a496e05ed7f21a2b2a1f0">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#2562d9df5820b202cd5e83696fc053f5">Colamd_Row_struct</a>
+<li>shared2
+: <a class="el" href="structColamd__Col__struct.html#f228addd53ebe168293e7e5c3edd372e">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#eb2ca96dcadf6490c614ed559acef59a">Colamd_Row_struct</a>
+<li>shared3
+: <a class="el" href="structColamd__Col__struct.html#5fc60d7e3cd5df5789a2999c08b47732">Colamd_Col_struct</a>
+<li>shared4
+: <a class="el" href="structColamd__Col__struct.html#4ff41bc973d32218127f4922e4c7019a">Colamd_Col_struct</a>
+<li>size
+: <a class="el" href="structe__node.html#2b5a49fe848fe66d1643a37ae2a842eb">e_node</a>
+, <a class="el" href="structLU__stack__t.html#f05e6775b79809e7bcc0c92da24c12f5">LU_stack_t</a>
+<li>SolveInitialized
+: <a class="el" href="structsuperlu__options__t.html#246344bda7ff7d5547101c2f01737ee7">superlu_options_t</a>
+<li>stack
+: <a class="el" href="structGlobalLU__t.html#9c8f24b1d7ed85996df0ab869b472b0e">GlobalLU_t</a>
+<li>start
+: <a class="el" href="structColamd__Col__struct.html#55c862b22c87023300b5ccb3044e0409">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#24285056395b1cf2e28ea3810d67d09d">Colamd_Row_struct</a>
+<li>Store
+: <a class="el" href="structSuperMatrix.html#73ebca1b46bb24536226b9378e01c5b5">SuperMatrix</a>
+<li>Stype
+: <a class="el" href="structSuperMatrix.html#b37e181824f50a405272451afc399952">SuperMatrix</a>
+<li>sup_to_col
+: <a class="el" href="structSCformat.html#d5cb1b2ae17c5fe554c3b70721718b08">SCformat</a>
+<li>sup_to_colbeg
+: <a class="el" href="structSCPformat.html#345ad774183c979674dd0960a930508e">SCPformat</a>
+<li>sup_to_colend
+: <a class="el" href="structSCPformat.html#8e470d085ca7b39645336943a1f2eae6">SCPformat</a>
+<li>supno
+: <a class="el" href="structGlobalLU__t.html#fe003e9f68a924d5ba66c6f655bea55c">GlobalLU_t</a>
+<li>SymmetricMode
+: <a class="el" href="structsuperlu__options__t.html#ad1b52d0366ae8601e97fab5c470c45d">superlu_options_t</a>
+</ul>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>thickness
+: <a class="el" href="structColamd__Col__struct.html#a52760c0c184f617d10b9946618ebc9b">Colamd_Col_struct</a>
+<li>TinyPivots
+: <a class="el" href="structSuperLUStat__t.html#d752e80fc9fa85195ec9c0e9a17b481c">SuperLUStat_t</a>
+<li>top1
+: <a class="el" href="structLU__stack__t.html#3ba965e6621326c518c95d791afe6fef">LU_stack_t</a>
+<li>top2
+: <a class="el" href="structLU__stack__t.html#1ae2a485bc81409ceb05bce271363901">LU_stack_t</a>
+<li>total_needed
+: <a class="el" href="structmem__usage__t.html#7225324e3925e071e95a58d49367a88a">mem_usage_t</a>
+<li>Trans
+: <a class="el" href="structsuperlu__options__t.html#23fa8259c7091d82f10f0dfc7718dc36">superlu_options_t</a>
+</ul>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>ucol
+: <a class="el" href="structGlobalLU__t.html#f9e46ab287726ab6be2c22cca773856d">GlobalLU_t</a>
+<li>used
+: <a class="el" href="structLU__stack__t.html#78ad1773677b220bd843c9d84bbda869">LU_stack_t</a>
+<li>usub
+: <a class="el" href="structGlobalLU__t.html#96b0443ea47703100b9ecad92137dda9">GlobalLU_t</a>
+<li>utime
+: <a class="el" href="structSuperLUStat__t.html#5eccc9eba32b749c87f7a97991cfdc18">SuperLUStat_t</a>
+</ul>
+<h3><a class="anchor" name="index_x">- x -</a></h3><ul>
+<li>xlsub
+: <a class="el" href="structGlobalLU__t.html#c6f1655e303e2947524c29182d0f6a1e">GlobalLU_t</a>
+<li>xlusup
+: <a class="el" href="structGlobalLU__t.html#aa63b1382a358278bd2775c921a84246">GlobalLU_t</a>
+<li>xsup
+: <a class="el" href="structGlobalLU__t.html#94902a11c68912c2d456a58edd29f31d">GlobalLU_t</a>
+<li>xusub
+: <a class="el" href="structGlobalLU__t.html#4cbf4786dd6fc6541d5e097b27ab6835">GlobalLU_t</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/get__perm__c_8c.html b/DOC/html/get__perm__c_8c.html
new file mode 100644
index 0000000..aec8634
--- /dev/null
+++ b/DOC/html/get__perm__c_8c.html
@@ -0,0 +1,395 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/get_perm_c.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/get_perm_c.c File Reference</h1>Matrix permutation operations. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<code>#include "<a class="el" href="colamd_8h-source.html">colamd.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="get__perm__c_8c.html#792508355b6bef974fcd9e214de40c8e">genmmd_</a> (int *, int *, int *, int *, int *, int *, int *, int *, int *, int *, int *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="get__perm__c_8c.html#e92c26cd488b7a86b8277cee2773d8ef">get_colamd</a> (const int m, const int n, const int nnz, int *colptr, int *rowind, int *perm_c)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="get__perm__c_8c.html#90f30e2b284864f6a800a98ceaff8fbc">getata</a> (const int m, const int n, const int nz, int *colptr, int *rowind, int *atanz, int **ata_colptr, int **ata_rowind)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="get__perm__c_8c.html#486ee50799ff66abe91efa46a5950a57">at_plus_a</a> (const int n, const int nz, int *colptr, int *rowind, int *bnz, int **b_colptr, int **b_rowind)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="get__perm__c_8c.html#aecb6e6e7a3e97356050bcfdf2573796">get_perm_c</a> (int ispec, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.1) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ August 1, 2008
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="486ee50799ff66abe91efa46a5950a57"></a><!-- doxytag: member="get_perm_c.c::at_plus_a" ref="486ee50799ff66abe91efa46a5950a57" args="(const int n, const int nz, int *colptr, int *rowind, int *bnz, int **b_colptr, int **b_rowind)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void at_plus_a           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>bnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>b_colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>b_rowind</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> Form the structure of A'+A. A is an n-by-n matrix in column oriented
+ format represented by (colptr, rowind). The output A'+A is in column
+ oriented format (symmetrically, also row oriented), represented by
+ (b_colptr, b_rowind).
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="792508355b6bef974fcd9e214de40c8e"></a><!-- doxytag: member="get_perm_c.c::genmmd_" ref="792508355b6bef974fcd9e214de40c8e" args="(int *, int *, int *, int *, int *, int *, int *, int *, int *, int *, int *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int genmmd_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e92c26cd488b7a86b8277cee2773d8ef"></a><!-- doxytag: member="get_perm_c.c::get_colamd" ref="e92c26cd488b7a86b8277cee2773d8ef" args="(const int m, const int n, const int nnz, int *colptr, int *rowind, int *perm_c)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void get_colamd           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="aecb6e6e7a3e97356050bcfdf2573796"></a><!-- doxytag: member="get_perm_c.c::get_perm_c" ref="aecb6e6e7a3e97356050bcfdf2573796" args="(int ispec, SuperMatrix *A, int *perm_c)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void get_perm_c           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ispec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> GET_PERM_C obtains a permutation matrix Pc, by applying the multiple
+ minimum degree ordering code by Joseph Liu to matrix A'*A or A+A'.
+ or using approximate minimum degree column ordering by Davis et. al.
+ The LU factorization of A*Pc tends to have less fill than the LU 
+ factorization of A.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> ispec   (input) int
+         Specifies the type of column ordering to reduce fill:
+         = 1: minimum degree on the structure of A^T * A
+         = 2: minimum degree on the structure of A^T + A
+         = 3: approximate minimum degree for unsymmetric matrices
+         If ispec == 0, the natural ordering (i.e., Pc = I) is returned.</pre><p>
+<pre> A       (input) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of the linear equations is A->nrow. Currently, the type of A 
+         can be: Stype = NC; Dtype = _D; Mtype = GE. In the future,
+         more general A can be handled.</pre><p>
+<pre> perm_c  (output) int*
+	   Column permutation vector of size A->ncol, which defines the 
+         permutation matrix Pc; perm_c[i] = j means column i of A is 
+         in position j in A*Pc.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="90f30e2b284864f6a800a98ceaff8fbc"></a><!-- doxytag: member="get_perm_c.c::getata" ref="90f30e2b284864f6a800a98ceaff8fbc" args="(const int m, const int n, const int nz, int *colptr, int *rowind, int *atanz, int **ata_colptr, int **ata_rowind)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void getata           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>atanz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>ata_colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>ata_rowind</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> Form the structure of A'*A. A is an m-by-n matrix in column oriented
+ format represented by (colptr, rowind). The output A'*A is in column
+ oriented format (symmetrically, also row oriented), represented by
+ (ata_colptr, ata_rowind).</pre><p>
+<pre> This routine is modified from GETATA routine by Tim Davis.
+ The complexity of this algorithm is: SUM_{i=1,m} r(i)^2,
+ i.e., the sum of the square of the row counts.</pre><p>
+<pre> Questions
+ =========
+     o  Do I need to withhold the *dense* rows?
+     o  How do I know the number of nonzeros in A'*A?
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals.html b/DOC/html/globals.html
new file mode 100644
index 0000000..dd3c80c
--- /dev/null
+++ b/DOC/html/globals.html
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index__">- _ -</a></h3><ul>
+<li>_compare_()
+: <a class="el" href="ilu__cdrop__row_8c.html#8ddf1742e9078a786574bb5aa80aed2a">ilu_cdrop_row.c</a>
+, <a class="el" href="ilu__zdrop__row_8c.html#8ddf1742e9078a786574bb5aa80aed2a">ilu_zdrop_row.c</a>
+, <a class="el" href="ilu__sdrop__row_8c.html#8ddf1742e9078a786574bb5aa80aed2a">ilu_sdrop_row.c</a>
+, <a class="el" href="ilu__ddrop__row_8c.html#8ddf1742e9078a786574bb5aa80aed2a">ilu_ddrop_row.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x61.html b/DOC/html/globals_0x61.html
new file mode 100644
index 0000000..1c120ea
--- /dev/null
+++ b/DOC/html/globals_0x61.html
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li class="current"><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>A
+: <a class="el" href="ilu__cdrop__row_8c.html#4f397f6aca9178eb3de2026fc159fa55">ilu_cdrop_row.c</a>
+, <a class="el" href="ilu__ddrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">ilu_ddrop_row.c</a>
+, <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">ilu_zdrop_row.c</a>
+, <a class="el" href="ilu__sdrop__row_8c.html#4f397f6aca9178eb3de2026fc159fa55">ilu_sdrop_row.c</a>
+<li>ABORT
+: <a class="el" href="slu__util_8h.html#a4b133a54309e2c6e4ba69f3ff1141c2">slu_util.h</a>
+<li>abs
+: <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">slamch.c</a>
+, <a class="el" href="dlamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">dlamch.c</a>
+, <a class="el" href="mc64ad_8c.html#6a010865b10e541735fa2da8f3cd062d">mc64ad.c</a>
+<li>ADD_
+: <a class="el" href="slu__Cnames_8h.html#42e4b5fadd9f6757585096fa059eea29">slu_Cnames.h</a>
+<li>ADD__
+: <a class="el" href="slu__Cnames_8h.html#64e86942f56cb415dbbbf31c6f390542">slu_Cnames.h</a>
+<li>ALIVE
+: <a class="el" href="colamd_8c.html#d8beef706da0344be19d59438fcdab6d">colamd.c</a>
+<li>ASSERT
+: <a class="el" href="colamd_8c.html#87e006a00875d2e518652108f6cb5790">colamd.c</a>
+<li>at_plus_a()
+: <a class="el" href="get__perm__c_8c.html#486ee50799ff66abe91efa46a5950a57">get_perm_c.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x62.html b/DOC/html/globals_0x62.html
new file mode 100644
index 0000000..75aaebb
--- /dev/null
+++ b/DOC/html/globals_0x62.html
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li class="current"><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>BOTH
+: <a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30627abe5a430420baf29ebe1940a7f2fb">superlu_enum_consts.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x63.html b/DOC/html/globals_0x63.html
new file mode 100644
index 0000000..b24ee76
--- /dev/null
+++ b/DOC/html/globals_0x63.html
@@ -0,0 +1,455 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li class="current"><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>c__1
+: <a class="el" href="mc64ad_8c.html#6566a5239e1e0fecb5a4488ba16a1425">mc64ad.c</a>
+<li>c__2
+: <a class="el" href="mc64ad_8c.html#9338daec563ba129d8db4bb5b9efcdbc">mc64ad.c</a>
+<li>c_abs()
+: <a class="el" href="slu__scomplex_8h.html#f55ee2cd6c55b5ad16136940080c9f67">slu_scomplex.h</a>
+, <a class="el" href="scomplex_8c.html#fc2967f7b71477625eb58de94a6e4c71">scomplex.c</a>
+<li>c_abs1()
+: <a class="el" href="scomplex_8c.html#6a6e9259e2eadc976a783d1b0e8f013b">scomplex.c</a>
+, <a class="el" href="slu__scomplex_8h.html#47b65089087d28e542f04907937cb8a9">slu_scomplex.h</a>
+<li>c_add
+: <a class="el" href="slu__scomplex_8h.html#f3df9377099fd2cba886d217734ce884">slu_scomplex.h</a>
+<li>C_CALL
+: <a class="el" href="slu__Cnames_8h.html#26f0902a7057c96ab11966ab8404f4f6">slu_Cnames.h</a>
+<li>c_div()
+: <a class="el" href="scomplex_8c.html#19814f5030befb85c4bb07e0fac34a7b">scomplex.c</a>
+, <a class="el" href="slu__scomplex_8h.html#6b7d3c87a3029e808bb32eed7dad81f7">slu_scomplex.h</a>
+<li>c_eq
+: <a class="el" href="slu__scomplex_8h.html#82b7c0f8931b82e92d24a076eab0e82e">slu_scomplex.h</a>
+<li>c_exp()
+: <a class="el" href="scomplex_8c.html#6111d345ee625a35d42da30db28c6041">scomplex.c</a>
+, <a class="el" href="slu__scomplex_8h.html#36d8645ac9bf1eb00128329fe5edb982">slu_scomplex.h</a>
+<li>c_sgn()
+: <a class="el" href="scomplex_8c.html#ee98d3dfc6ee26d36a2e095bd28414e5">scomplex.c</a>
+, <a class="el" href="slu__scomplex_8h.html#8b1147936f5b008b9cba0a9745199519">slu_scomplex.h</a>
+<li>c_sqrt()
+: <a class="el" href="scomplex_8c.html#8e9b533cd4055cb200a5d63152754898">scomplex.c</a>
+, <a class="el" href="slu__scomplex_8h.html#d2e9c9356a42769f53e741e68e1aac9d">slu_scomplex.h</a>
+<li>c_sub
+: <a class="el" href="slu__scomplex_8h.html#0fe6bb9dac5f735dd69a127519a9c841">slu_scomplex.h</a>
+<li>callocateA()
+: <a class="el" href="cmemory_8c.html#d952b424acd036108ca2f5a0bd9d3739">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#22ec97af17a44cd9aae6aeae3de50e87">slu_cdefs.h</a>
+<li>caxpy_()
+: <a class="el" href="ilu__cdrop__row_8c.html#d2fab81da5258afef212287a41f4e8bc">ilu_cdrop_row.c</a>
+<li>cc_conj
+: <a class="el" href="slu__scomplex_8h.html#c917679ece23ee5f61e994fb56b30e1c">slu_scomplex.h</a>
+<li>cc_mult
+: <a class="el" href="slu__scomplex_8h.html#515037047a218e7f77c4f495b1d6abca">slu_scomplex.h</a>
+<li>ccheck_tempv()
+: <a class="el" href="cpanel__bmod_8c.html#7d4a7510d7b09e116c70302b138eee42">cpanel_bmod.c</a>
+, <a class="el" href="cutil_8c.html#972fd0ea7e3abcd9f8d3322d425def4e">cutil.c</a>
+<li>ccolumn_bmod()
+: <a class="el" href="ccolumn__bmod_8c.html#16ef1a229e74ac6264d11b35757dccf2">ccolumn_bmod.c</a>
+, <a class="el" href="slu__cdefs_8h.html#19d15802e430420a5512a8e9bbe42d64">slu_cdefs.h</a>
+<li>ccolumn_dfs()
+: <a class="el" href="ccolumn__dfs_8c.html#0ee0b19c54923ca3b1875679fb05aea7">ccolumn_dfs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#6aace79c0009c9a5a32219753f51b695">slu_cdefs.h</a>
+<li>cCompRow_to_CompCol()
+: <a class="el" href="cutil_8c.html#25187d2687836e013bb8a8da5822416c">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#3891d961d41be3af94b755b27d371c1d">slu_cdefs.h</a>
+<li>ccopy_()
+: <a class="el" href="ilu__ccopy__to__ucol_8c.html#db60937f3436da2e6d66dc11af4317e6">ilu_ccopy_to_ucol.c</a>
+, <a class="el" href="ilu__cdrop__row_8c.html#db60937f3436da2e6d66dc11af4317e6">ilu_cdrop_row.c</a>
+<li>cCopy_CompCol_Matrix()
+: <a class="el" href="cutil_8c.html#6954ae5638f7ba23ae15c403313d93b2">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#2b7edfb65023104b0f88f5aaab393248">slu_cdefs.h</a>
+<li>cCopy_Dense_Matrix()
+: <a class="el" href="cutil_8c.html#626267a542de9e81c94f1f6049c68c2f">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#7378a64fc445fa7e0101059d7353f4ac">slu_cdefs.h</a>
+<li>ccopy_to_ucol()
+: <a class="el" href="ccopy__to__ucol_8c.html#918c42aba84eb7e0cce4b143dbcb4ed1">ccopy_to_ucol.c</a>
+, <a class="el" href="slu__cdefs_8h.html#247f30177d193339d293899fe702afe6">slu_cdefs.h</a>
+<li>cCreate_CompCol_Matrix()
+: <a class="el" href="cutil_8c.html#bb6caf8afa858f9adaf0ff8421ac03dd">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#4f54bdbff678075fdf06720bbb299346">slu_cdefs.h</a>
+<li>cCreate_CompRow_Matrix()
+: <a class="el" href="cutil_8c.html#58b408cacf22c559b9b361ae10956f90">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#866240e7f5a35e821bc898d2e5ba26fc">slu_cdefs.h</a>
+<li>cCreate_Dense_Matrix()
+: <a class="el" href="cutil_8c.html#a1e1455807ad7dbf3a5b63842eccd3ae">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#9af123cab0520e5800a1b60668a09de6">slu_cdefs.h</a>
+<li>cCreate_SuperNode_Matrix()
+: <a class="el" href="cutil_8c.html#b70481bde9dc947f9dc1f42580fe6086">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#63d7d14c6a2312b9f95844e5055deae9">slu_cdefs.h</a>
+<li>cdominate()
+: <a class="el" href="cdiagonal_8c.html#c766fce6c33f168e47c3e9a098cb2432">cdiagonal.c</a>
+<li>cdotc_()
+: <a class="el" href="cfgmr_8c.html#118d4bd5ee21ac6a5738f2b9a4b6fd70">cfgmr.c</a>
+<li>cDumpLine()
+: <a class="el" href="creadhb_8c.html#d09b12d41114fe05457517797a07cc18">creadhb.c</a>
+, <a class="el" href="creadrb_8c.html#2d52636395e794c245819afa89a9898d">creadrb.c</a>
+<li>cexpand()
+: <a class="el" href="cmemory_8c.html#3996260179c0a72397776571b4b19164">cmemory.c</a>
+<li>cfgmr()
+: <a class="el" href="cfgmr_8c.html#5be26920e5ae10ff3669ee91f9f15d73">cfgmr.c</a>
+<li>cfill()
+: <a class="el" href="cutil_8c.html#0987feeb2bd380db917660cde3352ec7">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#614eea417aeb37825463637f47c980ba">slu_cdefs.h</a>
+<li>cfill_diag()
+: <a class="el" href="cdiagonal_8c.html#c7bdb6c5924a0097d341cf65e27587d5">cdiagonal.c</a>
+<li>cFillRHS()
+: <a class="el" href="cutil_8c.html#1fd859b01a2660fee78c2ed6336c2c86">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#afc07318b1802f00402e7d8afbeaaeae">slu_cdefs.h</a>
+<li>cGenXtrue()
+: <a class="el" href="cutil_8c.html#ca22454204c3e0c894b1ccb7d31c325c">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#7f454dd3045fdd51e8bf0d29c7561fe5">slu_cdefs.h</a>
+<li>cgscon()
+: <a class="el" href="cgscon_8c.html#e836085920601b3b0717a4f623ab460e">cgscon.c</a>
+, <a class="el" href="slu__cdefs_8h.html#2ca330446884f122ee31f4f2b5243abe">slu_cdefs.h</a>
+<li>cgsequ()
+: <a class="el" href="slu__cdefs_8h.html#d34b27648bc5b43d1ad19dd017f8273f">slu_cdefs.h</a>
+, <a class="el" href="cgsequ_8c.html#36bb68fea3ee44ff05eb7da2ee059fa5">cgsequ.c</a>
+<li>cgsisv()
+: <a class="el" href="slu__cdefs_8h.html#908282efea752470dcd38f794b435dbc">slu_cdefs.h</a>
+<li>cgsisx()
+: <a class="el" href="cgsisx_8c.html#adff8c65cafef191464b3d10bbcbbe7c">cgsisx.c</a>
+, <a class="el" href="slu__cdefs_8h.html#35048de8a07c47ab61c15793f63ad398">slu_cdefs.h</a>
+<li>cgsitrf()
+: <a class="el" href="cgsitrf_8c.html#16b6ae6c8a2812e62ace44629f313bc6">cgsitrf.c</a>
+, <a class="el" href="slu__cdefs_8h.html#82dc99bce4d9b50c3534eb424d03182b">slu_cdefs.h</a>
+<li>cgsrfs()
+: <a class="el" href="cgsrfs_8c.html#45c3a69a2e1025c59b2d96be63f65b71">cgsrfs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#64715c1d0510eaf5f8e37f2465e9e8d6">slu_cdefs.h</a>
+<li>cgssv()
+: <a class="el" href="cgssv_8c.html#b592d134574c9813b7f8959026c94e8f">cgssv.c</a>
+, <a class="el" href="slu__cdefs_8h.html#58aff6521bb64732e981ce5779820a89">slu_cdefs.h</a>
+<li>cgssvx()
+: <a class="el" href="cgssvx_8c.html#f659b3121feb5ebd8810a5868d3bca12">cgssvx.c</a>
+, <a class="el" href="slu__cdefs_8h.html#264b6681cc04244cdd116978acfe4e2a">slu_cdefs.h</a>
+<li>cgstrf()
+: <a class="el" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf.c</a>
+, <a class="el" href="slu__cdefs_8h.html#1743ff4c80f33a0ae166a61a691c348a">slu_cdefs.h</a>
+<li>cgstrs()
+: <a class="el" href="cgstrs_8c.html#19517b9d29e4faf9ae777ca6fb9d415b">cgstrs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#a45033d577ad2afbe488a837d6aba8cf">slu_cdefs.h</a>
+<li>CHECK_MALLOC
+: <a class="el" href="slu__util_8h.html#35401f732a50d2a0af33db1ea224b1f6">slu_util.h</a>
+<li>check_perm()
+: <a class="el" href="sp__preorder_8c.html#c79059104ae6abf212c41986820d358c">sp_preorder.c</a>
+<li>check_repfnz()
+: <a class="el" href="slu__util_8h.html#9e29ce75ab694aa7fdb32b7644f9da69">slu_util.h</a>
+, <a class="el" href="util_8c.html#f27aecac055064fa7581c854848f7e7b">util.c</a>
+<li>check_tempv()
+: <a class="el" href="slu__cdefs_8h.html#2cfc97393b65ddc5a40fdc523a50003a">slu_cdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#c1bba297faf9fa0cb8d4e945138b5a21">slu_ddefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#46e1e8ccffc9a076461dbd042ae91654">slu_sdefs.h</a>
+, <a class="el" href="slu__zdefs_8h.html#821f68442e6f5db3ec997699120a2215">slu_zdefs.h</a>
+<li>cinf_norm_error()
+: <a class="el" href="cutil_8c.html#1936a1981a1b766e102aec4be7d98f57">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#293818022b119a511598f4766c54a1ee">slu_cdefs.h</a>
+<li>clacon_()
+: <a class="el" href="clacon_8c.html#f4536a78f0ee7097ef59278c8cf14295">clacon.c</a>
+<li>clangs()
+: <a class="el" href="clangs_8c.html#3e9baabe44cf6d5779cae55b80bc5763">clangs.c</a>
+<li>claqgs()
+: <a class="el" href="claqgs_8c.html#0cf5dcef08d22df154acf807beb43ea1">claqgs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#dbc57dc56d0c962aa148a573895883b0">slu_cdefs.h</a>
+<li>cldperm()
+: <a class="el" href="cldperm_8c.html#0ea12c5d13e30e24ad3e48e4ab521f4f">cldperm.c</a>
+, <a class="el" href="slu__cdefs_8h.html#c7a85f8c55c71b4f4d454c4d62ffbfae">slu_cdefs.h</a>
+<li>clear_mark()
+: <a class="el" href="colamd_8c.html#7eb036c63565d8fc7c05e1074510601a">colamd.c</a>
+<li>clsolve()
+: <a class="el" href="ccolumn__bmod_8c.html#39d81cbea11f613524e674a8c2e18c5f">ccolumn_bmod.c</a>
+, <a class="el" href="cgstrs_8c.html#39d81cbea11f613524e674a8c2e18c5f">cgstrs.c</a>
+, <a class="el" href="cmyblas2_8c.html#2e70ad44c5da4a8f97a62eb718d3e72c">cmyblas2.c</a>
+, <a class="el" href="cpanel__bmod_8c.html#39d81cbea11f613524e674a8c2e18c5f">cpanel_bmod.c</a>
+, <a class="el" href="csp__blas2_8c.html#39d81cbea11f613524e674a8c2e18c5f">csp_blas2.c</a>
+<li>cLUMemInit()
+: <a class="el" href="cmemory_8c.html#6b958c6272421d091bdd9a2e7fdbafcd">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#0f124ea0294cce1fb4c467b1d63ac209">slu_cdefs.h</a>
+<li>cLUMemXpand()
+: <a class="el" href="cmemory_8c.html#8f2864f34ca668aeccb8298052a5c449">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#255ed62863700298939edfda48ae534a">slu_cdefs.h</a>
+<li>cLUWorkFree()
+: <a class="el" href="cmemory_8c.html#d4e33e7a64f75e058e9a8ebd479fa004">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#a759583daf08db801cf6fe8018442d4c">slu_cdefs.h</a>
+<li>cLUWorkInit()
+: <a class="el" href="cmemory_8c.html#4b8e519a51391274f40066ea72e82583">cmemory.c</a>
+<li>cmatvec()
+: <a class="el" href="ccolumn__bmod_8c.html#09be65495be35085027bc26454dc3e74">ccolumn_bmod.c</a>
+, <a class="el" href="cgstrs_8c.html#09be65495be35085027bc26454dc3e74">cgstrs.c</a>
+, <a class="el" href="cmyblas2_8c.html#70608abfb6247329a7d69f6ed5231ed9">cmyblas2.c</a>
+, <a class="el" href="cpanel__bmod_8c.html#09be65495be35085027bc26454dc3e74">cpanel_bmod.c</a>
+, <a class="el" href="csp__blas2_8c.html#09be65495be35085027bc26454dc3e74">csp_blas2.c</a>
+<li>cmatvec_mult()
+: <a class="el" href="citersol_8c.html#d48f5fcdc4961220795817c195e2a411">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#d48f5fcdc4961220795817c195e2a411">citersol1.c</a>
+<li>cmemory_usage()
+: <a class="el" href="cmemory_8c.html#43ff5010762c14ea7591d23cf48403a3">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#cea36c2598bb3f8a27b6985634d2b8e9">slu_cdefs.h</a>
+<li>COL
+: <a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e303e66f07732b51f2cb52e13d598f8abda">superlu_enum_consts.h</a>
+<li>COL_IS_ALIVE
+: <a class="el" href="colamd_8c.html#50f9ca65904b13f345862cb46d08d84b">colamd.c</a>
+<li>COL_IS_DEAD
+: <a class="el" href="colamd_8c.html#a08664bd5b8133f28dbeedc9a030fc86">colamd.c</a>
+<li>COL_IS_DEAD_PRINCIPAL
+: <a class="el" href="colamd_8c.html#003c0e2dae54bcb7c680333304dd4dcb">colamd.c</a>
+<li>colamd()
+: <a class="el" href="colamd_8h.html#f5cec4b6391e4c20abfaa6da39975bca">colamd.h</a>
+, <a class="el" href="colamd_8c.html#4ace2482b681af56de48dd3ba8971baf">colamd.c</a>
+<li>COLAMD
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89cfc08a15679354a375b679f7d907867c3">superlu_enum_consts.h</a>
+<li>COLAMD_C
+: <a class="el" href="colamd_8h.html#339fb9b07ed315667cc4542c15116c83">colamd.h</a>
+<li>Colamd_Col
+: <a class="el" href="colamd_8h.html#059db10cdebbb878b50bfcd2e023315a">colamd.h</a>
+<li>COLAMD_DEFRAG_COUNT
+: <a class="el" href="colamd_8h.html#babfabfa19364ec563aa9c15bcc9714e">colamd.h</a>
+<li>COLAMD_DENSE_COL
+: <a class="el" href="colamd_8h.html#f92de54efdec91d7ab64e7bec07eb12c">colamd.h</a>
+<li>COLAMD_DENSE_ROW
+: <a class="el" href="colamd_8h.html#45a417439d08823fa620ca00d834dd61">colamd.h</a>
+<li>COLAMD_ERROR_A_not_present
+: <a class="el" href="colamd_8h.html#2347fb9e509c8bf9b97a50f96dea281c">colamd.h</a>
+<li>COLAMD_ERROR_A_too_small
+: <a class="el" href="colamd_8h.html#323108d44db4186fad5a2066139f70b7">colamd.h</a>
+<li>COLAMD_ERROR_col_length_negative
+: <a class="el" href="colamd_8h.html#3b6df4a489ed0c7de8ad12251cdac5d6">colamd.h</a>
+<li>COLAMD_ERROR_internal_error
+: <a class="el" href="colamd_8h.html#e97b9ba07b455e4ce07c53a4d71c1169">colamd.h</a>
+<li>COLAMD_ERROR_ncol_negative
+: <a class="el" href="colamd_8h.html#2feedddbe535286cbea9eca9fca91f45">colamd.h</a>
+<li>COLAMD_ERROR_nnz_negative
+: <a class="el" href="colamd_8h.html#7147ea7a9d673f17ef856e9914f90c81">colamd.h</a>
+<li>COLAMD_ERROR_nrow_negative
+: <a class="el" href="colamd_8h.html#8e848cfde5cdf42fcb316695305f8002">colamd.h</a>
+<li>COLAMD_ERROR_out_of_memory
+: <a class="el" href="colamd_8h.html#703f11265b521c931cdd44709d141fca">colamd.h</a>
+<li>COLAMD_ERROR_p0_nonzero
+: <a class="el" href="colamd_8h.html#58b5d911cc825b4334ade136bad3afd3">colamd.h</a>
+<li>COLAMD_ERROR_p_not_present
+: <a class="el" href="colamd_8h.html#51d3f9714a4cb80c0f54dea5d0c5f95f">colamd.h</a>
+<li>COLAMD_ERROR_row_index_out_of_bounds
+: <a class="el" href="colamd_8h.html#0559e0ff07deab1841e7aaee8cde51e6">colamd.h</a>
+<li>COLAMD_INFO1
+: <a class="el" href="colamd_8h.html#569d56a773011e0b4e465b3f5830e80b">colamd.h</a>
+<li>COLAMD_INFO2
+: <a class="el" href="colamd_8h.html#2161fd78bbd688f943250d1d7583284b">colamd.h</a>
+<li>COLAMD_INFO3
+: <a class="el" href="colamd_8h.html#15d83814c573d742764ff83e9d1d67fc">colamd.h</a>
+<li>COLAMD_KNOBS
+: <a class="el" href="colamd_8h.html#e92bb10d09f7cd004f07d1baddf90548">colamd.h</a>
+<li>COLAMD_OK
+: <a class="el" href="colamd_8h.html#a754fd30d924c5c8d2d402fa0a482d72">colamd.h</a>
+<li>COLAMD_OK_BUT_JUMBLED
+: <a class="el" href="colamd_8h.html#c0d7f3882e6e9e39527aa2195dd23789">colamd.h</a>
+<li>COLAMD_R
+: <a class="el" href="colamd_8h.html#52e8a8827c11d9c2a1f1b87e09bc8dc0">colamd.h</a>
+<li>colamd_recommended()
+: <a class="el" href="colamd_8c.html#ac7214b99bcf4db1b13547521367817f">colamd.c</a>
+, <a class="el" href="colamd_8h.html#9b48c9b9eb5dce7e9ca42174208b1015">colamd.h</a>
+<li>COLAMD_RECOMMENDED
+: <a class="el" href="colamd_8h.html#a6980d68bd04f7567d7d0bd40b244c2f">colamd.h</a>
+<li>colamd_report()
+: <a class="el" href="colamd_8h.html#7cfa2e07413d0bc9489f10ac881faa51">colamd.h</a>
+, <a class="el" href="colamd_8c.html#85f2c13be93dea98e624144272d00eed">colamd.c</a>
+<li>Colamd_Row
+: <a class="el" href="colamd_8h.html#8a1ceeb79ebba705abb1d27469f4a358">colamd.h</a>
+<li>colamd_set_defaults()
+: <a class="el" href="colamd_8c.html#cd15277a8a063dd0586e280004a92c89">colamd.c</a>
+, <a class="el" href="colamd_8h.html#e582ce20a46b5ef39434acb9d66fe2ca">colamd.h</a>
+<li>COLAMD_STATS
+: <a class="el" href="colamd_8h.html#411703fc0a994b83ec0e00df1abfc0f7">colamd.h</a>
+<li>COLAMD_STATUS
+: <a class="el" href="colamd_8h.html#6a4201ce55dfa3a6375b90097e8c747e">colamd.h</a>
+<li>COLPERM
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72ed701176980ed77fa7e65315bdae5dc5">superlu_enum_consts.h</a>
+<li>colperm_t
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c">superlu_enum_consts.h</a>
+<li>COMM
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e726f451ba8ea6ae9cd569eb91e2126376b">superlu_enum_consts.h</a>
+<li>complexCalloc()
+: <a class="el" href="cmemory_8c.html#1e625ecaeb259e2dd79667ffbfb816c0">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#f558e3813415369a8805c473a7eaa5e8">slu_cdefs.h</a>
+<li>complexMalloc()
+: <a class="el" href="cmemory_8c.html#0af029f557e5014a2d6797436b925f53">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#db98fa14a907e0e848a35e896d4040db">slu_cdefs.h</a>
+<li>CONJ
+: <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d6226a53d2d0576982e73a770a90087a619">superlu_enum_consts.h</a>
+<li>copy_mem_complex()
+: <a class="el" href="cmemory_8c.html#e8af819e1072d711fd22ce91c1e928fc">cmemory.c</a>
+<li>copy_mem_double()
+: <a class="el" href="dmemory_8c.html#1540850a622674131bd1ea6a4f91cd56">dmemory.c</a>
+<li>copy_mem_doublecomplex()
+: <a class="el" href="zmemory_8c.html#a0ef433984e57ac0dacc29c5e3b53ecf">zmemory.c</a>
+<li>copy_mem_float()
+: <a class="el" href="smemory_8c.html#00d00daa40d07c16e3ae6bfd87c70e3d">smemory.c</a>
+<li>copy_mem_int()
+: <a class="el" href="dmemory_8c.html#b59eea34474da95fb3dc125400a1287e">dmemory.c</a>
+, <a class="el" href="cmemory_8c.html#b59eea34474da95fb3dc125400a1287e">cmemory.c</a>
+, <a class="el" href="memory_8c.html#3b606bbd7cce73c19bffca851721e9ac">memory.c</a>
+, <a class="el" href="smemory_8c.html#b59eea34474da95fb3dc125400a1287e">smemory.c</a>
+, <a class="el" href="zmemory_8c.html#b59eea34474da95fb3dc125400a1287e">zmemory.c</a>
+<li>countnz()
+: <a class="el" href="slu__zdefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc">slu_zdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc">slu_ddefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc">slu_sdefs.h</a>
+, <a class="el" href="slu__cdefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc">slu_cdefs.h</a>
+, <a class="el" href="util_8c.html#cac794ae60517b94cb755975b51b9538">util.c</a>
+<li>cpanel_bmod()
+: <a class="el" href="cpanel__bmod_8c.html#e38539c04b47f4c159e18684e435902b">cpanel_bmod.c</a>
+, <a class="el" href="slu__cdefs_8h.html#c37d9a28b8745daf72ae1d5ad29c140d">slu_cdefs.h</a>
+<li>cpanel_dfs()
+: <a class="el" href="cpanel__dfs_8c.html#052edfd06c5aeab7a37b5fa558a06602">cpanel_dfs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#780968651deed587e187bd7661edbb20">slu_cdefs.h</a>
+<li>cParseFloatFormat()
+: <a class="el" href="creadhb_8c.html#352f5f08cd40d9d5720207c20b3dc9ca">creadhb.c</a>
+, <a class="el" href="creadrb_8c.html#38c28f0c6247583fd686959c0b3d416c">creadrb.c</a>
+<li>cParseIntFormat()
+: <a class="el" href="creadhb_8c.html#5c4a2643da5963b5476e372f988bbd8d">creadhb.c</a>
+, <a class="el" href="creadrb_8c.html#9cd499747b7a42c6086b922fc9e37844">creadrb.c</a>
+<li>cPivotGrowth()
+: <a class="el" href="cpivotgrowth_8c.html#cda3921f49d46be7eaa23b58bc2b09c5">cpivotgrowth.c</a>
+, <a class="el" href="slu__cdefs_8h.html#9a5b1cc4e96708825cc21108ebbeb061">slu_cdefs.h</a>
+<li>cpivotL()
+: <a class="el" href="cpivotL_8c.html#e6bc95a2710538cc5ce0904f90ef7f05">cpivotL.c</a>
+, <a class="el" href="slu__cdefs_8h.html#4a31e35e95f28f69549ffa45bebd4499">slu_cdefs.h</a>
+<li>cPrint_CompCol_Matrix()
+: <a class="el" href="slu__cdefs_8h.html#f091472c1fb3c085c384bf52b3bebd8d">slu_cdefs.h</a>
+, <a class="el" href="cutil_8c.html#dbd15bf3edf77d21b1c4c5096dcacf7f">cutil.c</a>
+<li>cPrint_Dense_Matrix()
+: <a class="el" href="cutil_8c.html#069950e573473aa7fcf3739bcfac5983">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#1cbad8400b16c776b112f20b8645757d">slu_cdefs.h</a>
+<li>cprint_lu_col()
+: <a class="el" href="cutil_8c.html#4fc78919cd6e7744cec4a8b32031d571">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#4f43048c524cbdac07232ab635e67364">slu_cdefs.h</a>
+<li>cprint_soln()
+: <a class="el" href="cgstrs_8c.html#e8df96516a8a07b44c8e82c6ae734ab6">cgstrs.c</a>
+<li>cPrint_SuperNode_Matrix()
+: <a class="el" href="cutil_8c.html#1eeeb7938a9874f086c97b88b82645dd">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#8482f76b710a91d26250bca719b9d00c">slu_cdefs.h</a>
+<li>cPrintPerf()
+: <a class="el" href="cutil_8c.html#84a1610e172fb59a0bc19a1dadcb9fbe">cutil.c</a>
+<li>cpruneL()
+: <a class="el" href="slu__cdefs_8h.html#65d7df9e58c2415f455dbe6db9a99f2b">slu_cdefs.h</a>
+, <a class="el" href="cpruneL_8c.html#a230bea3429693147cefbc58ce7b50d1">cpruneL.c</a>
+<li>cpsolve()
+: <a class="el" href="citersol_8c.html#455d0df27a76044ba598ec4dccd0abfa">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#455d0df27a76044ba598ec4dccd0abfa">citersol1.c</a>
+<li>cQuerySpace()
+: <a class="el" href="cmemory_8c.html#34d8cd030775d267947b68a4dacfbabb">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#7ac9ff71eef6bf8c52c41eb9209a0caf">slu_cdefs.h</a>
+<li>creadhb()
+: <a class="el" href="creadhb_8c.html#75118673183b533e85d3300b9d12e0b8">creadhb.c</a>
+, <a class="el" href="slu__cdefs_8h.html#34243c626347c973358d3d095802783b">slu_cdefs.h</a>
+<li>creadmt()
+: <a class="el" href="slu__cdefs_8h.html#88701835280a367a90b9ea2a73f946f0">slu_cdefs.h</a>
+<li>creadrb()
+: <a class="el" href="slu__cdefs_8h.html#0cce050053c795f6b9c52174008bf775">slu_cdefs.h</a>
+, <a class="el" href="creadrb_8c.html#af2ecfdc506c8a67ac3356758edd5502">creadrb.c</a>
+<li>creadrhs()
+: <a class="el" href="creadtriple_8c.html#5daca19d6cd5379145d89f172703fa6b">creadtriple.c</a>
+<li>creadtriple()
+: <a class="el" href="creadtriple_8c.html#784a2e9d5ddef7abd1706abeb73ee498">creadtriple.c</a>
+, <a class="el" href="slu__cdefs_8h.html#7c84a33df79e533f6167e4a1e9ce89cb">slu_cdefs.h</a>
+<li>cReadValues()
+: <a class="el" href="creadhb_8c.html#a8fcc9991808e214c9760aafa83ac02c">creadhb.c</a>
+, <a class="el" href="creadrb_8c.html#7737ab09a4d223433775e2566867ce8c">creadrb.c</a>
+<li>cs_mult
+: <a class="el" href="slu__scomplex_8h.html#a675d825b907fe4d939ddc2533b38bb8">slu_scomplex.h</a>
+<li>cSetRWork()
+: <a class="el" href="slu__cdefs_8h.html#f3bbcd362fb260a0dba5488a3e4ee926">slu_cdefs.h</a>
+, <a class="el" href="cmemory_8c.html#ff3d90f7f22f882faf8ba0dcf68b0f9c">cmemory.c</a>
+<li>cSetupSpace()
+: <a class="el" href="cmemory_8c.html#c62dd03d1789ef6363db31ad2491ada9">cmemory.c</a>
+<li>csnode_bmod()
+: <a class="el" href="slu__cdefs_8h.html#ab1987caf36c8eedcf605b59e56a9d5d">slu_cdefs.h</a>
+, <a class="el" href="csnode__bmod_8c.html#b5d22385d602a4fe7b7955129fc54ac8">csnode_bmod.c</a>
+<li>csnode_dfs()
+: <a class="el" href="csnode__dfs_8c.html#1c7b34abd214279177619773ad24b759">csnode_dfs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#c98da7d6b5809dadb1cae9bc019619ce">slu_cdefs.h</a>
+<li>cStackCompress()
+: <a class="el" href="cmemory_8c.html#98ec5775d491718006688922903496ae">cmemory.c</a>
+<li>cswap_()
+: <a class="el" href="ilu__cdrop__row_8c.html#99bbeac6877c802badc06579386125b7">ilu_cdrop_row.c</a>
+<li>cuser_free()
+: <a class="el" href="cmemory_8c.html#a4c66bfc4bbf0fed0e2babbf34504bf5">cmemory.c</a>
+<li>cuser_malloc()
+: <a class="el" href="cmemory_8c.html#fdfe5f4689b0aaedf46d034809711754">cmemory.c</a>
+<li>cusolve()
+: <a class="el" href="ccolumn__bmod_8c.html#34580dfcbd886fe93845353ac7dbeaa1">ccolumn_bmod.c</a>
+, <a class="el" href="cgstrs_8c.html#34580dfcbd886fe93845353ac7dbeaa1">cgstrs.c</a>
+, <a class="el" href="csp__blas2_8c.html#34580dfcbd886fe93845353ac7dbeaa1">csp_blas2.c</a>
+, <a class="el" href="cmyblas2_8c.html#7eca4ad25e05a68037a682483f9786f1">cmyblas2.c</a>
+<li>CX
+: <a class="el" href="scsum1_8c.html#5a76da95c549c41790389a76e12fdcb5">scsum1.c</a>
+, <a class="el" href="izmax1_8c.html#5a76da95c549c41790389a76e12fdcb5">izmax1.c</a>
+, <a class="el" href="dzsum1_8c.html#5a76da95c549c41790389a76e12fdcb5">dzsum1.c</a>
+, <a class="el" href="icmax1_8c.html#5a76da95c549c41790389a76e12fdcb5">icmax1.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x64.html b/DOC/html/globals_0x64.html
new file mode 100644
index 0000000..4897179
--- /dev/null
+++ b/DOC/html/globals_0x64.html
@@ -0,0 +1,419 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li class="current"><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>d_cnjg()
+: <a class="el" href="dcomplex_8c.html#753978ee017e26dbdab16a40cf45b2cb">dcomplex.c</a>
+, <a class="el" href="slu__dcomplex_8h.html#753978ee017e26dbdab16a40cf45b2cb">slu_dcomplex.h</a>
+<li>d_imag()
+: <a class="el" href="slu__dcomplex_8h.html#7a81445c4ec55ec40b6c5f3014887e61">slu_dcomplex.h</a>
+, <a class="el" href="dcomplex_8c.html#58f08c15442d32d787301386ed99ac01">dcomplex.c</a>
+<li>d_sign
+: <a class="el" href="dlacon_8c.html#51b3babab7bbf03500dbc5ede2a682b3">dlacon.c</a>
+, <a class="el" href="slacon_8c.html#51b3babab7bbf03500dbc5ede2a682b3">slacon.c</a>
+<li>dabs
+: <a class="el" href="slamch_8c.html#d1f46d2294c121413c66c8777190a874">slamch.c</a>
+<li>dallocateA()
+: <a class="el" href="dmemory_8c.html#eed250713fbfb3fac567d7a503774ccc">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#3a86154bfb6453d6358ef52ab1ecfe2d">slu_ddefs.h</a>
+<li>dasum_()
+: <a class="el" href="ilu__ddrop__row_8c.html#be00831e789ca38cf884de56ddf70bd7">ilu_ddrop_row.c</a>
+<li>daxpy_()
+: <a class="el" href="ilu__ddrop__row_8c.html#5112358cf2de43341aaff9fba0066afc">ilu_ddrop_row.c</a>
+, <a class="el" href="fgmr_8c.html#5112358cf2de43341aaff9fba0066afc">fgmr.c</a>
+<li>dcheck_tempv()
+: <a class="el" href="dpanel__bmod_8c.html#3ffa3b0456b4e2d587556bd0f717315d">dpanel_bmod.c</a>
+, <a class="el" href="dutil_8c.html#fee83da536b48eda60b21a7e3ac120f7">dutil.c</a>
+<li>dcolumn_bmod()
+: <a class="el" href="slu__ddefs_8h.html#351174e818ab7d5149ec9dc116b3a242">slu_ddefs.h</a>
+, <a class="el" href="dcolumn__bmod_8c.html#5ca322682f98f276feb3c50b31ca56b8">dcolumn_bmod.c</a>
+<li>dcolumn_dfs()
+: <a class="el" href="dcolumn__dfs_8c.html#5e1eb3b6035e0d4e358caa044e58292d">dcolumn_dfs.c</a>
+, <a class="el" href="slu__ddefs_8h.html#1414b492a902b8da3c2e1b620b922644">slu_ddefs.h</a>
+<li>dCompRow_to_CompCol()
+: <a class="el" href="dutil_8c.html#2163cd7a6b59accc8feb7b40ea2732bd">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#fab4013ae32ca6413508cefa1e8143d5">slu_ddefs.h</a>
+<li>dcopy_()
+: <a class="el" href="ilu__dcopy__to__ucol_8c.html#24a0d368c78074384922e9d10b43f820">ilu_dcopy_to_ucol.c</a>
+, <a class="el" href="ilu__ddrop__row_8c.html#24a0d368c78074384922e9d10b43f820">ilu_ddrop_row.c</a>
+, <a class="el" href="fgmr_8c.html#de4ae85292ee27821cebf1655290b25b">fgmr.c</a>
+<li>dCopy_CompCol_Matrix()
+: <a class="el" href="dutil_8c.html#0d19111d89390832cad2fb4b6477a40c">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#21c06d544ecb9028142abd70a583dd68">slu_ddefs.h</a>
+<li>dCopy_Dense_Matrix()
+: <a class="el" href="dutil_8c.html#503dd1eb30f1ca80e04ad2180366c518">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#9bf038cd2c143a48a14a562ca1f67e27">slu_ddefs.h</a>
+<li>dcopy_to_ucol()
+: <a class="el" href="dcopy__to__ucol_8c.html#ce3034cff6ce6be9e0b0f69cda42f196">dcopy_to_ucol.c</a>
+, <a class="el" href="slu__ddefs_8h.html#9dfcee23fab091d05a4301e25b3b4227">slu_ddefs.h</a>
+<li>dCreate_CompCol_Matrix()
+: <a class="el" href="dutil_8c.html#4a177c54dafbe3640c26caa49eeee1de">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#3a3d0af1360639f21edacae8f93eb828">slu_ddefs.h</a>
+<li>dCreate_CompRow_Matrix()
+: <a class="el" href="dutil_8c.html#db108b8f4be1e79a2e469a4406cbff54">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#0807ebe794e4353779d2947e9df0f485">slu_ddefs.h</a>
+<li>dCreate_Dense_Matrix()
+: <a class="el" href="dutil_8c.html#12ac523141a258590a76bdad390928fd">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#08d9d6bf3069c89c0c1207967599c4fc">slu_ddefs.h</a>
+<li>dCreate_SuperNode_Matrix()
+: <a class="el" href="dutil_8c.html#b0cecf427cd82e8b92974a72ecd4d1cb">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#649094ccbc54eaed4ca787fd970049f6">slu_ddefs.h</a>
+<li>ddominate()
+: <a class="el" href="ddiagonal_8c.html#6dcc4428df5c858dc58955919c696a00">ddiagonal.c</a>
+<li>ddot_()
+: <a class="el" href="dfgmr_8c.html#b67e7a07556055c505aae6e65c937e39">dfgmr.c</a>
+, <a class="el" href="fgmr_8c.html#b67e7a07556055c505aae6e65c937e39">fgmr.c</a>
+<li>dDumpLine()
+: <a class="el" href="dreadhb_8c.html#b87732418a8ca2e99d65165ea7f9a2c5">dreadhb.c</a>
+, <a class="el" href="dreadrb_8c.html#f815bcc4cd6c6b297588886829ce6cb2">dreadrb.c</a>
+<li>DEAD
+: <a class="el" href="colamd_8c.html#3c8793c7acb4598d2ebcd8288f29ee69">colamd.c</a>
+<li>DEAD_NON_PRINCIPAL
+: <a class="el" href="colamd_8c.html#0f66923672bcc495333995f7d238945f">colamd.c</a>
+<li>DEAD_PRINCIPAL
+: <a class="el" href="colamd_8c.html#c0adce1e7d70351cef4752f3373709af">colamd.c</a>
+<li>DEBUG0
+: <a class="el" href="colamd_8c.html#144524f0a43ebe1a97d576a76f6557a0">colamd.c</a>
+<li>DEBUG1
+: <a class="el" href="colamd_8c.html#5083dbf79682be78336cc6b458c32ab4">colamd.c</a>
+<li>DEBUG2
+: <a class="el" href="colamd_8c.html#65bd10ffc88aa9edca29d4f6ae0da2df">colamd.c</a>
+<li>DEBUG3
+: <a class="el" href="colamd_8c.html#86ce320fe5d3f3088d89fdf451943008">colamd.c</a>
+<li>DEBUG4
+: <a class="el" href="colamd_8c.html#0ff047166d36dd8103bd12a4fbc7f7f9">colamd.c</a>
+<li>DenseSize()
+: <a class="el" href="util_8c.html#9daf07581bce8c0f5c879c5899ce419c">util.c</a>
+<li>Destroy_CompCol_Matrix()
+: <a class="el" href="slu__util_8h.html#4257e4d9cca1db286b73154d81ec3880">slu_util.h</a>
+, <a class="el" href="util_8c.html#27491a8171a480d6c98e6d1e535e1973">util.c</a>
+<li>Destroy_CompCol_Permuted()
+: <a class="el" href="slu__util_8h.html#4de38e1c0ef18dd0791cb206c7f5348f">slu_util.h</a>
+, <a class="el" href="util_8c.html#7285ca16a0b84b4333d71efeb65c0126">util.c</a>
+<li>Destroy_CompRow_Matrix()
+: <a class="el" href="slu__util_8h.html#98cbb427c29a6be1760288b63857bc12">slu_util.h</a>
+, <a class="el" href="util_8c.html#6292e6a8f2b75101294f2e99927b5d2a">util.c</a>
+<li>Destroy_Dense_Matrix()
+: <a class="el" href="slu__util_8h.html#9f7e658f2e17e08b2d88fadc11f2b437">slu_util.h</a>
+, <a class="el" href="util_8c.html#301f89dc9483e5bcdc47fc96e8645cf7">util.c</a>
+<li>Destroy_SuperMatrix_Store()
+: <a class="el" href="slu__util_8h.html#2c43be55861c6e4ee5b806ac16cc382c">slu_util.h</a>
+, <a class="el" href="util_8c.html#c16a0aea75cf99b4d38ec4ede6f13eb4">util.c</a>
+<li>Destroy_SuperNode_Matrix()
+: <a class="el" href="slu__util_8h.html#de01201644d38ff78cd1824ff2e5022b">slu_util.h</a>
+, <a class="el" href="util_8c.html#ea724a390aed4ef00a4b8ed783c60014">util.c</a>
+<li>detect_super_cols()
+: <a class="el" href="colamd_8c.html#27211c7dc11832c4675d8d3fcd7167a0">colamd.c</a>
+<li>dexpand()
+: <a class="el" href="dmemory_8c.html#fe3104df9ace895f5332843534ae99b4">dmemory.c</a>
+<li>dfgmr()
+: <a class="el" href="dfgmr_8c.html#70923b9fe57b546dfe14462a6be22de2">dfgmr.c</a>
+<li>dfill()
+: <a class="el" href="dutil_8c.html#5594dfec40e37514e00e85a90e8973b5">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#b20cdc6e4aed319a43b967496932b3e0">slu_ddefs.h</a>
+<li>dfill_diag()
+: <a class="el" href="ddiagonal_8c.html#fb322f8a71fc9c29b8f0860f82be31bb">ddiagonal.c</a>
+<li>dFillRHS()
+: <a class="el" href="dutil_8c.html#83b6ea01e8b7df0cc9c6fe5261647367">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#ac4705e1c2b9892fd11115ef3cd40bb8">slu_ddefs.h</a>
+<li>dGenXtrue()
+: <a class="el" href="dutil_8c.html#cdfe40e3085c29fd483b63a15ed163c7">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#ebd8d273c58591dc435e1afd4e837d9f">slu_ddefs.h</a>
+<li>dgscon()
+: <a class="el" href="dgscon_8c.html#2c7a4267d306243d3ceb15531522033e">dgscon.c</a>
+, <a class="el" href="slu__ddefs_8h.html#1a5e04478d6d6e4f714fee3080f5a065">slu_ddefs.h</a>
+<li>dgsequ()
+: <a class="el" href="dgsequ_8c.html#af22b247cc134fb0ba90285e84ccebb4">dgsequ.c</a>
+, <a class="el" href="slu__ddefs_8h.html#fba0263dae6d5d3a700e9e7a120d6b87">slu_ddefs.h</a>
+<li>dgsisv()
+: <a class="el" href="slu__ddefs_8h.html#044b42d8bf8016b19c9013e9bee6d6e7">slu_ddefs.h</a>
+<li>dgsisx()
+: <a class="el" href="dgsisx_8c.html#bcbb363b5bc23f538d1210f39bb1d672">dgsisx.c</a>
+, <a class="el" href="slu__ddefs_8h.html#1f70849d53a266fbad14f63ea369caf1">slu_ddefs.h</a>
+<li>dgsitrf()
+: <a class="el" href="dgsitrf_8c.html#ffb50badd1ff77dbe19f6df360f98e50">dgsitrf.c</a>
+, <a class="el" href="slu__ddefs_8h.html#374c532584b83169e7ca686ad9fb26fb">slu_ddefs.h</a>
+<li>dgsrfs()
+: <a class="el" href="dgsrfs_8c.html#db43f7a2408ddb763f36fbfcc0482f28">dgsrfs.c</a>
+, <a class="el" href="slu__ddefs_8h.html#424f8b36e210117c4dea0c590e977bb4">slu_ddefs.h</a>
+<li>dgssv()
+: <a class="el" href="dgssv_8c.html#d804a93a6806ee4d4694df5b753d91af">dgssv.c</a>
+, <a class="el" href="slu__ddefs_8h.html#2c8a0856fb555c352ed0f43989d1d71e">slu_ddefs.h</a>
+<li>dgssvx()
+: <a class="el" href="dgssvx_8c.html#a463b60835d9bca4a4bb1386076d1488">dgssvx.c</a>
+, <a class="el" href="slu__ddefs_8h.html#55ccb099a318043965a941a7fd8cb095">slu_ddefs.h</a>
+<li>dgstrf()
+: <a class="el" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf.c</a>
+, <a class="el" href="slu__ddefs_8h.html#bf0a9c8ab051126eafff67d421f7b99c">slu_ddefs.h</a>
+<li>dgstrs()
+: <a class="el" href="dgstrs_8c.html#6e3eace519372b7dfcd053e0d3614fc1">dgstrs.c</a>
+, <a class="el" href="slu__ddefs_8h.html#8d42744f59d84a50b19aa4c28cf7aded">slu_ddefs.h</a>
+<li>DiagScale_t
+: <a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30">superlu_enum_consts.h</a>
+<li>dinf_norm_error()
+: <a class="el" href="dutil_8c.html#e6aa0b8725411ba46ac42ee55503ee0f">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#d778c065ce9768d1f971d8a556752f11">slu_ddefs.h</a>
+<li>DIST
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72c04fbbdf0d80a4ad25e565541deeebd7">superlu_enum_consts.h</a>
+<li>dlacon_()
+: <a class="el" href="dlacon_8c.html#4187621e84a9554552e3fa8098542801">dlacon.c</a>
+<li>dlamc1_()
+: <a class="el" href="dlamch_8c.html#eaa4a6b78a27d38535ca1a7dc010c92e">dlamch.c</a>
+<li>dlamc2_()
+: <a class="el" href="dlamch_8c.html#a05275111d3110333608138f59f3f8c3">dlamch.c</a>
+<li>dlamc3_()
+: <a class="el" href="dlamch_8c.html#35cd4981c9a7d3c46226a75f68720dad">dlamch.c</a>
+<li>dlamc4_()
+: <a class="el" href="dlamch_8c.html#141c735fa5fb73f28150470ee91da0f9">dlamch.c</a>
+<li>dlamc5_()
+: <a class="el" href="dlamch_8c.html#0309c617fb0124d2d3ca73dfbdda9fa9">dlamch.c</a>
+<li>dlamch_()
+: <a class="el" href="dlamch_8c.html#8f8bef103c45d87276d6508164f5883c">dlamch.c</a>
+, <a class="el" href="slu__ddefs_8h.html#177ab9599e432642729507475d5cea83">slu_ddefs.h</a>
+, <a class="el" href="slu__zdefs_8h.html#177ab9599e432642729507475d5cea83">slu_zdefs.h</a>
+<li>dlangs()
+: <a class="el" href="dlangs_8c.html#75a53f4464b95c63adad9e1f63f44d1c">dlangs.c</a>
+<li>dlaqgs()
+: <a class="el" href="dlaqgs_8c.html#07e1fa4926680eb02069087f0aa26fa1">dlaqgs.c</a>
+, <a class="el" href="slu__ddefs_8h.html#7c3a821ed273808f662ddd41be6c6c97">slu_ddefs.h</a>
+<li>dldperm()
+: <a class="el" href="dldperm_8c.html#5c6a8de5e809f2094735965027adf532">dldperm.c</a>
+, <a class="el" href="slu__ddefs_8h.html#d48bb6b5f8ebecb3263b80aa0588b62e">slu_ddefs.h</a>
+<li>dlsolve()
+: <a class="el" href="dcolumn__bmod_8c.html#56d27043eac0282b0d0e4106acedb083">dcolumn_bmod.c</a>
+, <a class="el" href="dgstrs_8c.html#56d27043eac0282b0d0e4106acedb083">dgstrs.c</a>
+, <a class="el" href="dmyblas2_8c.html#986e55bb6eac4e68b78c98b8276557db">dmyblas2.c</a>
+, <a class="el" href="dpanel__bmod_8c.html#56d27043eac0282b0d0e4106acedb083">dpanel_bmod.c</a>
+, <a class="el" href="dsp__blas2_8c.html#56d27043eac0282b0d0e4106acedb083">dsp_blas2.c</a>
+<li>dLUMemInit()
+: <a class="el" href="dmemory_8c.html#e2ca2ac5e9a763fd3f07487343e4522e">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#a93b6921e772245253231d545072e93c">slu_ddefs.h</a>
+<li>dLUMemXpand()
+: <a class="el" href="slu__ddefs_8h.html#4cc8cb916b6bf5f2238c374aa7339f4c">slu_ddefs.h</a>
+, <a class="el" href="dmemory_8c.html#9aff5dfe301496ef7c9234789975c043">dmemory.c</a>
+<li>dLUWorkFree()
+: <a class="el" href="dmemory_8c.html#a7d9129a2b0dc259ccccc8d6d2218cf8">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#e7976837d1936a3150abf5dd62f0c211">slu_ddefs.h</a>
+<li>dLUWorkInit()
+: <a class="el" href="dmemory_8c.html#0ae701a41439ca8af10604920e2f72ba">dmemory.c</a>
+<li>dmatvec()
+: <a class="el" href="dcolumn__bmod_8c.html#65523602382b3d96c9852545ae24815d">dcolumn_bmod.c</a>
+, <a class="el" href="dsp__blas2_8c.html#65523602382b3d96c9852545ae24815d">dsp_blas2.c</a>
+, <a class="el" href="dgstrs_8c.html#65523602382b3d96c9852545ae24815d">dgstrs.c</a>
+, <a class="el" href="dmyblas2_8c.html#703303b4c9cdd6074c55e83970db83b6">dmyblas2.c</a>
+, <a class="el" href="dpanel__bmod_8c.html#65523602382b3d96c9852545ae24815d">dpanel_bmod.c</a>
+<li>dmatvec_mult()
+: <a class="el" href="ditersol_8c.html#367b39a8f8095885ffb10c66c6652aff">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#367b39a8f8095885ffb10c66c6652aff">ditersol1.c</a>
+<li>dmemory_usage()
+: <a class="el" href="dmemory_8c.html#5c9b1e24d07635068c014999d44672aa">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#a7bf96909e8e3579499f46a84b28d9df">slu_ddefs.h</a>
+<li>dnrm2_()
+: <a class="el" href="ilu__cdrop__row_8c.html#61a0022627cc1977966c0067f1f12e26">ilu_cdrop_row.c</a>
+, <a class="el" href="ilu__ddrop__row_8c.html#d36414a4f46a1195a7f6c5d3480d3118">ilu_ddrop_row.c</a>
+, <a class="el" href="ilu__zdrop__row_8c.html#61a0022627cc1977966c0067f1f12e26">ilu_zdrop_row.c</a>
+, <a class="el" href="dfgmr_8c.html#61a0022627cc1977966c0067f1f12e26">dfgmr.c</a>
+, <a class="el" href="fgmr_8c.html#61a0022627cc1977966c0067f1f12e26">fgmr.c</a>
+, <a class="el" href="ilu__sdrop__row_8c.html#61a0022627cc1977966c0067f1f12e26">ilu_sdrop_row.c</a>
+<li>DOFACT
+: <a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0ae0bd0c48044d1267a827ce526249e168">superlu_enum_consts.h</a>
+<li>DOUBLE
+: <a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e3733465d1d419b1074fb259ef444609e92">superlu_enum_consts.h</a>
+<li>DoubleAlign
+: <a class="el" href="cmemory_8c.html#c8204d321846eb4b23d563eac7e5bfa7">cmemory.c</a>
+, <a class="el" href="dmemory_8c.html#c8204d321846eb4b23d563eac7e5bfa7">dmemory.c</a>
+, <a class="el" href="zmemory_8c.html#c8204d321846eb4b23d563eac7e5bfa7">zmemory.c</a>
+, <a class="el" href="smemory_8c.html#c8204d321846eb4b23d563eac7e5bfa7">smemory.c</a>
+<li>doubleCalloc()
+: <a class="el" href="slu__zdefs_8h.html#2b7be732f4d725dd35799d772473625e">slu_zdefs.h</a>
+, <a class="el" href="dmemory_8c.html#c8b6d99155644578a5e5542c32040cfe">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#2b7be732f4d725dd35799d772473625e">slu_ddefs.h</a>
+<li>doublecomplexCalloc()
+: <a class="el" href="slu__zdefs_8h.html#b7683ac1617339478753ab308a7b0fc5">slu_zdefs.h</a>
+, <a class="el" href="zmemory_8c.html#7c839d769dd079aab4bf852533d96933">zmemory.c</a>
+<li>doublecomplexMalloc()
+: <a class="el" href="slu__zdefs_8h.html#e33b5268048e570c0cdf96498198e821">slu_zdefs.h</a>
+, <a class="el" href="zmemory_8c.html#d681359ed37ac809cc0e456e05655823">zmemory.c</a>
+<li>doubleMalloc()
+: <a class="el" href="slu__zdefs_8h.html#47c4cf79f8c6305147a70de6da2696ac">slu_zdefs.h</a>
+, <a class="el" href="dmemory_8c.html#8f2b9305cb611c37e7f627da902451a8">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#47c4cf79f8c6305147a70de6da2696ac">slu_ddefs.h</a>
+<li>dpanel_bmod()
+: <a class="el" href="dpanel__bmod_8c.html#192df249a9fc13ad49bf3f2cd79aba65">dpanel_bmod.c</a>
+, <a class="el" href="slu__ddefs_8h.html#22cfb6f57857cc7cb3d853ee5467656f">slu_ddefs.h</a>
+<li>dpanel_dfs()
+: <a class="el" href="slu__ddefs_8h.html#ca83bf1fa16a64ea2ee575574a8bb969">slu_ddefs.h</a>
+, <a class="el" href="dpanel__dfs_8c.html#2a809488b87d2c1a9b2a574b726e8517">dpanel_dfs.c</a>
+<li>dParseFloatFormat()
+: <a class="el" href="dreadhb_8c.html#341d1f00e157073d681d37e87c417e69">dreadhb.c</a>
+, <a class="el" href="dreadrb_8c.html#940db08f01ba40731b65b3bc88c52ae1">dreadrb.c</a>
+<li>dParseIntFormat()
+: <a class="el" href="dreadhb_8c.html#84a11fcb3558dba9f846610da6fbec2c">dreadhb.c</a>
+, <a class="el" href="dreadrb_8c.html#e766b0ec3051c146313ff37802decbb7">dreadrb.c</a>
+<li>dPivotGrowth()
+: <a class="el" href="slu__ddefs_8h.html#2c1536c187133a8a8ea5d856a222eec5">slu_ddefs.h</a>
+, <a class="el" href="dpivotgrowth_8c.html#770618182a3841e8d10a26a4eb97418a">dpivotgrowth.c</a>
+<li>dpivotL()
+: <a class="el" href="slu__ddefs_8h.html#09624f0c44de80ee2731e44a333ee01c">slu_ddefs.h</a>
+, <a class="el" href="dpivotL_8c.html#c9bc2a5673ddfce2452bf4a88b97a266">dpivotL.c</a>
+<li>dPrint_CompCol_Matrix()
+: <a class="el" href="slu__ddefs_8h.html#4908a093c1b9d8d96e3fbba6c29673c1">slu_ddefs.h</a>
+, <a class="el" href="dutil_8c.html#2c061ebaaabe5e1bd83ba564b439d8c8">dutil.c</a>
+<li>dPrint_Dense_Matrix()
+: <a class="el" href="slu__ddefs_8h.html#d440b7616886349fe2cde5ac490b0f7d">slu_ddefs.h</a>
+, <a class="el" href="dutil_8c.html#5af0eda3e0026a251a06d320df15a372">dutil.c</a>
+<li>dprint_lu_col()
+: <a class="el" href="slu__ddefs_8h.html#61c31548694df9784dc2612febfedc00">slu_ddefs.h</a>
+, <a class="el" href="dutil_8c.html#73eb5fcbf916fc45d05e38767bd7efb3">dutil.c</a>
+<li>dprint_soln()
+: <a class="el" href="dgstrs_8c.html#1532445fd4c7e1e91d5bd11dbf78364f">dgstrs.c</a>
+<li>dPrint_SuperNode_Matrix()
+: <a class="el" href="slu__ddefs_8h.html#d6acd040a093d5858b9b77d347be954c">slu_ddefs.h</a>
+, <a class="el" href="dutil_8c.html#402c1ab7977c2f9f5de62e8c66c451f0">dutil.c</a>
+<li>dPrintPerf()
+: <a class="el" href="dutil_8c.html#4c6e5de0836eb95d08cd15a4da367bcc">dutil.c</a>
+<li>dpruneL()
+: <a class="el" href="dpruneL_8c.html#525e73335e6aeaa1e851a52800bf3965">dpruneL.c</a>
+, <a class="el" href="slu__ddefs_8h.html#98c8e37fbd3e285de80ae5ebc633c64a">slu_ddefs.h</a>
+<li>dpsolve()
+: <a class="el" href="ditersol1_8c.html#0361a1766c36ff38205dc63f1b329afd">ditersol1.c</a>
+, <a class="el" href="ditersol_8c.html#0361a1766c36ff38205dc63f1b329afd">ditersol.c</a>
+<li>dqselect()
+: <a class="el" href="qselect_8c.html#55283ff1f5ff561072afe7c8ad6ac218">qselect.c</a>
+, <a class="el" href="slu__zdefs_8h.html#293d5d2ac72e4e528ee06d634cb6b59a">slu_zdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#293d5d2ac72e4e528ee06d634cb6b59a">slu_ddefs.h</a>
+<li>dQuerySpace()
+: <a class="el" href="dmemory_8c.html#e94c561110fcc75c31cda89105fd0a6c">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#a28191998cfaddc30d4728535a39d996">slu_ddefs.h</a>
+<li>dreadhb()
+: <a class="el" href="dreadhb_8c.html#2a9cf14ec04bddd25fc04ddebc437317">dreadhb.c</a>
+, <a class="el" href="slu__ddefs_8h.html#be5e29734eb193fdda83f02fbb72a60a">slu_ddefs.h</a>
+<li>dreadmt()
+: <a class="el" href="slu__ddefs_8h.html#efc4e420b7fa27a770b4b9db6ba5cfc4">slu_ddefs.h</a>
+<li>dreadrb()
+: <a class="el" href="slu__ddefs_8h.html#6f74181ecc009862e39a3d512c9dc1ae">slu_ddefs.h</a>
+, <a class="el" href="dreadrb_8c.html#675b0881eef06ac2d7e09e1c3e1c0403">dreadrb.c</a>
+<li>dreadrhs()
+: <a class="el" href="dreadtriple_8c.html#d97776a2c12802db12e668f6d2da7901">dreadtriple.c</a>
+<li>dreadtriple()
+: <a class="el" href="dreadtriple_8c.html#c79bc303193d42d6a40148211796eff0">dreadtriple.c</a>
+, <a class="el" href="slu__ddefs_8h.html#cd7d7ca64b596f459db7e62897c6130a">slu_ddefs.h</a>
+<li>dReadValues()
+: <a class="el" href="dreadrb_8c.html#b3ebe1f51db0ee2e5abd6a2248185585">dreadrb.c</a>
+, <a class="el" href="dreadhb_8c.html#cca1e3b19661f732344b530c8cbf25c3">dreadhb.c</a>
+<li>DROP_AREA
+: <a class="el" href="slu__util_8h.html#e56780c0f0b5afa706231cbe2b1ee82f">slu_util.h</a>
+<li>DROP_BASIC
+: <a class="el" href="slu__util_8h.html#fb51a22d4d20fb9e39acd95129344997">slu_util.h</a>
+<li>DROP_COLUMN
+: <a class="el" href="slu__util_8h.html#741f1ee3e9529b1384492787d09a0c70">slu_util.h</a>
+<li>DROP_DYNAMIC
+: <a class="el" href="slu__util_8h.html#c6089af2caea8fef6aa343cb16fd1646">slu_util.h</a>
+<li>DROP_INTERP
+: <a class="el" href="slu__util_8h.html#ea78484190db0dd61d91743797bf6bfe">slu_util.h</a>
+<li>DROP_PROWS
+: <a class="el" href="slu__util_8h.html#34a649fce94fb9a61524f3b18161aef8">slu_util.h</a>
+<li>DROP_SECONDARY
+: <a class="el" href="slu__util_8h.html#72349305248ecb540ca43f404884bef5">slu_util.h</a>
+<li>dSetRWork()
+: <a class="el" href="dmemory_8c.html#aa5359da217b433b43bf6c8e2d29aa45">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#6248d2471a710335359db300b35c5066">slu_ddefs.h</a>
+<li>dSetupSpace()
+: <a class="el" href="dmemory_8c.html#cb29e96116d7b170d6f021a87a4763e6">dmemory.c</a>
+<li>dsnode_bmod()
+: <a class="el" href="dsnode__bmod_8c.html#1466b84198911ff34e828a811e70831e">dsnode_bmod.c</a>
+, <a class="el" href="slu__ddefs_8h.html#289847afa67421491f96367c7f2fe90f">slu_ddefs.h</a>
+<li>dsnode_dfs()
+: <a class="el" href="slu__ddefs_8h.html#b0fe8232652578797bee690fcd8adfd0">slu_ddefs.h</a>
+, <a class="el" href="dsnode__dfs_8c.html#80b831678c233741661d8386d8736da1">dsnode_dfs.c</a>
+<li>dStackCompress()
+: <a class="el" href="dmemory_8c.html#adb43e6ea6725f06d04704a1db3dc0be">dmemory.c</a>
+<li>dswap_()
+: <a class="el" href="ilu__ddrop__row_8c.html#009fa596702c2777985e4fca6477566e">ilu_ddrop_row.c</a>
+<li>Dtype_t
+: <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">supermatrix.h</a>
+<li>duser_free()
+: <a class="el" href="dmemory_8c.html#8412c8f776ad7cfe599a5b601310fb8e">dmemory.c</a>
+<li>duser_malloc()
+: <a class="el" href="dmemory_8c.html#00f228f45bab7594bea821b70eedbf51">dmemory.c</a>
+<li>dusolve()
+: <a class="el" href="dcolumn__bmod_8c.html#ca18e78d81448d99eec840b19de76efd">dcolumn_bmod.c</a>
+, <a class="el" href="dgstrs_8c.html#ca18e78d81448d99eec840b19de76efd">dgstrs.c</a>
+, <a class="el" href="dsp__blas2_8c.html#ca18e78d81448d99eec840b19de76efd">dsp_blas2.c</a>
+, <a class="el" href="dmyblas2_8c.html#47847fb71c3589e4d725db85052896fd">dmyblas2.c</a>
+<li>dzasum_()
+: <a class="el" href="ilu__zdrop__row_8c.html#fafebe5a243783e920465d5985076dae">ilu_zdrop_row.c</a>
+<li>dznrm2_()
+: <a class="el" href="zfgmr_8c.html#4b8d5195d541b1c827f61e05b5da13a9">zfgmr.c</a>
+, <a class="el" href="ilu__zdrop__row_8c.html#7e669e96b4c0ad6e2000684a34e798b7">ilu_zdrop_row.c</a>
+<li>dzsum1_()
+: <a class="el" href="dzsum1_8c.html#3fade9d45be0f00827565d6d0f37fe5d">dzsum1.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x65.html b/DOC/html/globals_0x65.html
new file mode 100644
index 0000000..68f6575
--- /dev/null
+++ b/DOC/html/globals_0x65.html
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li class="current"><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>EMPTY
+: <a class="el" href="colamd_8c.html#2b7cf2a3641be7b89138615764d60ba3">colamd.c</a>
+, <a class="el" href="slu__util_8h.html#2b7cf2a3641be7b89138615764d60ba3">slu_util.h</a>
+<li>epsmac
+: <a class="el" href="dfgmr_8c.html#70fac857a29f956523d4c8c05e13f177">dfgmr.c</a>
+, <a class="el" href="fgmr_8c.html#70fac857a29f956523d4c8c05e13f177">fgmr.c</a>
+, <a class="el" href="cfgmr_8c.html#70fac857a29f956523d4c8c05e13f177">cfgmr.c</a>
+, <a class="el" href="sfgmr_8c.html#70fac857a29f956523d4c8c05e13f177">sfgmr.c</a>
+, <a class="el" href="zfgmr_8c.html#70fac857a29f956523d4c8c05e13f177">zfgmr.c</a>
+<li>EQUIL
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72a48ad2d4b3120ba615e725d16ec7bf29">superlu_enum_consts.h</a>
+<li>etdfs()
+: <a class="el" href="sp__coletree_8c.html#9da0c72a7b8eaf7a2a69fb6c3340131a">sp_coletree.c</a>
+<li>ETREE
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72837b4404052bca5280c1c918540bc003">superlu_enum_consts.h</a>
+<li>ExpHeader
+: <a class="el" href="slu__util_8h.html#c071de4d8a39e15f13c92a5f60bc16f0">slu_util.h</a>
+<li>EXTRA
+: <a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e37ffb2fb86309c5c698e319b5b6dd8ab3a">superlu_enum_consts.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x66.html b/DOC/html/globals_0x66.html
new file mode 100644
index 0000000..b9e36fd
--- /dev/null
+++ b/DOC/html/globals_0x66.html
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li class="current"><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>F77_CALL_C
+: <a class="el" href="slu__Cnames_8h.html#23a1698b7e10fde5b8d52b8f3a349489">slu_Cnames.h</a>
+<li>FACT
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e721b6692b56d378abb85bd49063721d034">superlu_enum_consts.h</a>
+<li>fact_t
+: <a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">superlu_enum_consts.h</a>
+<li>FACTORED
+: <a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a86901392b6879fba18090792fe8db804">superlu_enum_consts.h</a>
+<li>FALSE
+: <a class="el" href="colamd_8c.html#a93f0eb578d23995850d61f7d61c55c1">colamd.c</a>
+, <a class="el" href="slu__util_8h.html#a93f0eb578d23995850d61f7d61c55c1">slu_util.h</a>
+<li>FALSE_
+: <a class="el" href="slamch_8c.html#d4986ecbba005b963f63a85f7c8c281d">slamch.c</a>
+, <a class="el" href="dlamch_8c.html#d4986ecbba005b963f63a85f7c8c281d">dlamch.c</a>
+<li>FERR
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e7278fd14d7abebae04095cfbe02928f153">superlu_enum_consts.h</a>
+<li>fgmr()
+: <a class="el" href="fgmr_8c.html#0a1472abec17ef62976ff38e54db01d1">fgmr.c</a>
+<li>finalize_disjoint_sets()
+: <a class="el" href="sp__coletree_8c.html#a34f31c4fe6ec2e5ee33f3d04ad9c209">sp_coletree.c</a>
+<li>find()
+: <a class="el" href="sp__coletree_8c.html#7cdfbecc1ca23ee1cc298897bd64a45c">sp_coletree.c</a>
+<li>find_ordering()
+: <a class="el" href="colamd_8c.html#10da36e975e03d3c0fd68dbe14eb27cc">colamd.c</a>
+<li>FIRSTCOL_OF_SNODE
+: <a class="el" href="slu__util_8h.html#745e85e3ef4b1267858c9df86608518c">slu_util.h</a>
+<li>fixupL()
+: <a class="el" href="slu__ddefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf">slu_ddefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf">slu_sdefs.h</a>
+, <a class="el" href="slu__zdefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf">slu_zdefs.h</a>
+, <a class="el" href="util_8c.html#4b97838714471334eba3f4de948d6e7a">util.c</a>
+, <a class="el" href="slu__cdefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf">slu_cdefs.h</a>
+<li>FLOAT
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e729cf4a0866224b0bb4a7a895da27c9c4c">superlu_enum_consts.h</a>
+<li>floatCalloc()
+: <a class="el" href="slu__sdefs_8h.html#3e1230bff11a9e47c35555299bcdcf1b">slu_sdefs.h</a>
+, <a class="el" href="smemory_8c.html#b6dc7fd90a3d13e0c9a8ca8d62def27f">smemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#3e1230bff11a9e47c35555299bcdcf1b">slu_cdefs.h</a>
+<li>floatMalloc()
+: <a class="el" href="slu__sdefs_8h.html#42361c3ce2ba81d149ffba01fbd6f138">slu_sdefs.h</a>
+, <a class="el" href="slu__cdefs_8h.html#42361c3ce2ba81d149ffba01fbd6f138">slu_cdefs.h</a>
+, <a class="el" href="smemory_8c.html#4a866452c5dcba66083ef463662955ee">smemory.c</a>
+<li>flops_t
+: <a class="el" href="slu__util_8h.html#aae6020bb33e780ff6edbd4e45ce08ac">slu_util.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x67.html b/DOC/html/globals_0x67.html
new file mode 100644
index 0000000..07426a4
--- /dev/null
+++ b/DOC/html/globals_0x67.html
@@ -0,0 +1,189 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li class="current"><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>garbage_collection()
+: <a class="el" href="colamd_8c.html#9a0dc18af9f72ad8e436a98980e55c41">colamd.c</a>
+<li>GEMV
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72ad1464db9e9e33f25ab0a3b82c6bd0c4">superlu_enum_consts.h</a>
+<li>genmmd_()
+: <a class="el" href="mmd_8c.html#7b73e4f4f1dee202474aee4a3b2e1146">mmd.c</a>
+, <a class="el" href="get__perm__c_8c.html#792508355b6bef974fcd9e214de40c8e">get_perm_c.c</a>
+<li>get_colamd()
+: <a class="el" href="get__perm__c_8c.html#e92c26cd488b7a86b8277cee2773d8ef">get_perm_c.c</a>
+<li>get_perm_c()
+: <a class="el" href="get__perm__c_8c.html#aecb6e6e7a3e97356050bcfdf2573796">get_perm_c.c</a>
+, <a class="el" href="slu__util_8h.html#263122009c4421188a14285798b7bff7">slu_util.h</a>
+<li>getata()
+: <a class="el" href="get__perm__c_8c.html#90f30e2b284864f6a800a98ceaff8fbc">get_perm_c.c</a>
+<li>GLOBAL_A
+: <a class="el" href="zitersol1_8c.html#d42e5c3013507184841cdfee652a0c18">zitersol1.c</a>
+, <a class="el" href="citersol_8c.html#d42e5c3013507184841cdfee652a0c18">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#d42e5c3013507184841cdfee652a0c18">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#d42e5c3013507184841cdfee652a0c18">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#d42e5c3013507184841cdfee652a0c18">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#d42e5c3013507184841cdfee652a0c18">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#d42e5c3013507184841cdfee652a0c18">sitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#d42e5c3013507184841cdfee652a0c18">zitersol.c</a>
+<li>GLOBAL_A_ORIG
+: <a class="el" href="citersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">citersol1.c</a>
+, <a class="el" href="ditersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">ditersol1.c</a>
+, <a class="el" href="sitersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">sitersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">zitersol1.c</a>
+<li>GLOBAL_C
+: <a class="el" href="citersol_8c.html#3e8f028a8a340f260f7ac67973072999">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#3e8f028a8a340f260f7ac67973072999">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#3e8f028a8a340f260f7ac67973072999">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#3e8f028a8a340f260f7ac67973072999">sitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">zitersol.c</a>
+, <a class="el" href="zitersol1_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">zitersol1.c</a>
+<li>GLOBAL_EQUED
+: <a class="el" href="zitersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">zitersol1.c</a>
+, <a class="el" href="citersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">citersol1.c</a>
+, <a class="el" href="ditersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">ditersol1.c</a>
+, <a class="el" href="sitersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">sitersol1.c</a>
+<li>GLOBAL_L
+: <a class="el" href="citersol_8c.html#0f5cf27b325ef2874c953290f74c9d0a">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#0f5cf27b325ef2874c953290f74c9d0a">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#0f5cf27b325ef2874c953290f74c9d0a">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">sitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#0f5cf27b325ef2874c953290f74c9d0a">zitersol.c</a>
+, <a class="el" href="zitersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">zitersol1.c</a>
+<li>GLOBAL_MEM_USAGE
+: <a class="el" href="citersol_8c.html#19718c440adb41fbebcb4bafedbf932c">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#19718c440adb41fbebcb4bafedbf932c">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#19718c440adb41fbebcb4bafedbf932c">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">sitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#19718c440adb41fbebcb4bafedbf932c">zitersol.c</a>
+, <a class="el" href="zitersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">zitersol1.c</a>
+<li>GLOBAL_OPTIONS
+: <a class="el" href="zitersol_8c.html#64b516645b16ef03c6fd0d692e6eb277">zitersol.c</a>
+, <a class="el" href="citersol_8c.html#64b516645b16ef03c6fd0d692e6eb277">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#64b516645b16ef03c6fd0d692e6eb277">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#64b516645b16ef03c6fd0d692e6eb277">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">sitersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">zitersol1.c</a>
+<li>GLOBAL_PERM_C
+: <a class="el" href="zitersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">zitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">zitersol.c</a>
+, <a class="el" href="ditersol_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">ditersol.c</a>
+, <a class="el" href="citersol_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">citersol1.c</a>
+, <a class="el" href="ditersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">sitersol1.c</a>
+<li>GLOBAL_PERM_R
+: <a class="el" href="citersol_8c.html#5a42ee721355f1c852f770661834be93">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#5a42ee721355f1c852f770661834be93">citersol1.c</a>
+, <a class="el" href="ditersol1_8c.html#5a42ee721355f1c852f770661834be93">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#5a42ee721355f1c852f770661834be93">sitersol.c</a>
+, <a class="el" href="zitersol1_8c.html#5a42ee721355f1c852f770661834be93">zitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#5a42ee721355f1c852f770661834be93">zitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#5a42ee721355f1c852f770661834be93">sitersol1.c</a>
+, <a class="el" href="ditersol_8c.html#5a42ee721355f1c852f770661834be93">ditersol.c</a>
+<li>GLOBAL_R
+: <a class="el" href="citersol1_8c.html#4ff9f80047e0b810344d85feb96941ef">citersol1.c</a>
+, <a class="el" href="sitersol_8c.html#4ff9f80047e0b810344d85feb96941ef">sitersol.c</a>
+, <a class="el" href="zitersol1_8c.html#8cb83de814c7fbf89011ba08bb602ce0">zitersol1.c</a>
+, <a class="el" href="sitersol1_8c.html#4ff9f80047e0b810344d85feb96941ef">sitersol1.c</a>
+, <a class="el" href="ditersol_8c.html#8cb83de814c7fbf89011ba08bb602ce0">ditersol.c</a>
+, <a class="el" href="citersol_8c.html#4ff9f80047e0b810344d85feb96941ef">citersol.c</a>
+, <a class="el" href="zitersol_8c.html#8cb83de814c7fbf89011ba08bb602ce0">zitersol.c</a>
+, <a class="el" href="ditersol1_8c.html#8cb83de814c7fbf89011ba08bb602ce0">ditersol1.c</a>
+<li>GLOBAL_STAT
+: <a class="el" href="zitersol1_8c.html#96a062252c26544370e8feae987c6d16">zitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#96a062252c26544370e8feae987c6d16">zitersol.c</a>
+, <a class="el" href="citersol_8c.html#96a062252c26544370e8feae987c6d16">citersol.c</a>
+, <a class="el" href="sitersol1_8c.html#96a062252c26544370e8feae987c6d16">sitersol1.c</a>
+, <a class="el" href="ditersol1_8c.html#96a062252c26544370e8feae987c6d16">ditersol1.c</a>
+, <a class="el" href="citersol1_8c.html#96a062252c26544370e8feae987c6d16">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#96a062252c26544370e8feae987c6d16">ditersol.c</a>
+, <a class="el" href="sitersol_8c.html#96a062252c26544370e8feae987c6d16">sitersol.c</a>
+<li>GLOBAL_U
+: <a class="el" href="sitersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">sitersol1.c</a>
+, <a class="el" href="citersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#000ad5c2198e4309802b4478ed08a98c">ditersol.c</a>
+, <a class="el" href="zitersol_8c.html#000ad5c2198e4309802b4478ed08a98c">zitersol.c</a>
+, <a class="el" href="sitersol_8c.html#000ad5c2198e4309802b4478ed08a98c">sitersol.c</a>
+, <a class="el" href="zitersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">zitersol1.c</a>
+, <a class="el" href="ditersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">ditersol1.c</a>
+, <a class="el" href="citersol_8c.html#000ad5c2198e4309802b4478ed08a98c">citersol.c</a>
+<li>GluIntArray
+: <a class="el" href="slu__util_8h.html#d3754689b2ab3abc8b3afe4facdd76f3">slu_util.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x68.html b/DOC/html/globals_0x68.html
new file mode 100644
index 0000000..b2c2bf5
--- /dev/null
+++ b/DOC/html/globals_0x68.html
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li class="current"><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>HEAD
+: <a class="el" href="superlu__enum__consts_8h.html#9c99a6c403d30f227aa91cf3b10f6aa40b0955668575b21eb0ab2272aef49f76">superlu_enum_consts.h</a>
+<li>heap_relax_snode()
+: <a class="el" href="slu__util_8h.html#de3f23f612ced035318a59623b6925e5">slu_util.h</a>
+, <a class="el" href="heap__relax__snode_8c.html#059d36bb76b7562c9bb2cbd7870e7ffe">heap_relax_snode.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x69.html b/DOC/html/globals_0x69.html
new file mode 100644
index 0000000..79228c7
--- /dev/null
+++ b/DOC/html/globals_0x69.html
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li class="current"><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>i_dnnt
+: <a class="el" href="dlacon_8c.html#dccc1e5692ca1dd160d0ca2a17e1b12c">dlacon.c</a>
+, <a class="el" href="slacon_8c.html#dccc1e5692ca1dd160d0ca2a17e1b12c">slacon.c</a>
+<li>icamax_()
+: <a class="el" href="ilu__cdrop__row_8c.html#22f0fa95a896ad561e0ab57fea1ef330">ilu_cdrop_row.c</a>
+<li>icmax1_()
+: <a class="el" href="icmax1_8c.html#7315ad1456ee66d31a1171729e6c1c4f">icmax1.c</a>
+<li>idamax_()
+: <a class="el" href="ilu__ddrop__row_8c.html#fdb24942915626f5de65c50cb31c267a">ilu_ddrop_row.c</a>
+<li>ifill()
+: <a class="el" href="slu__util_8h.html#b0dfb6551008bcad5e758defdbd13006">slu_util.h</a>
+, <a class="el" href="util_8c.html#e289773c377a566a2f77c88b21d7f4ae">util.c</a>
+<li>ilu_ccolumn_dfs()
+: <a class="el" href="ilu__ccolumn__dfs_8c.html#61b8082fdb8acb13c983c11acaea87ba">ilu_ccolumn_dfs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#94b01af5a7e93ca2cc3cf52717e767a0">slu_cdefs.h</a>
+<li>ilu_ccopy_to_ucol()
+: <a class="el" href="ilu__ccopy__to__ucol_8c.html#069fdcfba5148dfc923017db03d7eab1">ilu_ccopy_to_ucol.c</a>
+, <a class="el" href="slu__cdefs_8h.html#a9bf5072c6b1c6803b1dba973ac4be3e">slu_cdefs.h</a>
+<li>ilu_cdrop_row()
+: <a class="el" href="ilu__cdrop__row_8c.html#b6bca119c9d5eab7210d0009835e399f">ilu_cdrop_row.c</a>
+, <a class="el" href="slu__cdefs_8h.html#cf639d4fcc71c90f3e966b47787ad834">slu_cdefs.h</a>
+<li>ilu_countnz()
+: <a class="el" href="slu__sdefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85">slu_sdefs.h</a>
+, <a class="el" href="slu__zdefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85">slu_zdefs.h</a>
+, <a class="el" href="util_8c.html#45274d2d42e1a1305101bbe11e47ed65">util.c</a>
+, <a class="el" href="slu__cdefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85">slu_cdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85">slu_ddefs.h</a>
+<li>ilu_cpanel_dfs()
+: <a class="el" href="ilu__cpanel__dfs_8c.html#e528c7a140b699babac3d212a4cfbe4b">ilu_cpanel_dfs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#9f427fadf45d56409840775c99ce8967">slu_cdefs.h</a>
+<li>ilu_cpivotL()
+: <a class="el" href="ilu__cpivotL_8c.html#5eadb2e028608a33e9de84d4d6895796">ilu_cpivotL.c</a>
+, <a class="el" href="slu__cdefs_8h.html#c4edc9f45dad6dd53caca13240690633">slu_cdefs.h</a>
+<li>ilu_cQuerySpace()
+: <a class="el" href="cmemory_8c.html#af50d31c33a4cc3e770b617202ea73e3">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#97e43257315ae194779ffe9c3dc9c213">slu_cdefs.h</a>
+<li>ilu_csnode_dfs()
+: <a class="el" href="ilu__csnode__dfs_8c.html#a6c4a4029db106e8dd56bc0fe1f0090b">ilu_csnode_dfs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#c4e46d9d75c94503e94b4599960479d7">slu_cdefs.h</a>
+<li>ilu_dcolumn_dfs()
+: <a class="el" href="ilu__dcolumn__dfs_8c.html#f164b7b553eed616e2ed95144698fe7a">ilu_dcolumn_dfs.c</a>
+, <a class="el" href="slu__ddefs_8h.html#4b9639419ceb1d7b476f000292022a24">slu_ddefs.h</a>
+<li>ilu_dcopy_to_ucol()
+: <a class="el" href="ilu__dcopy__to__ucol_8c.html#b1802613180b46ffdb7b058a42c38716">ilu_dcopy_to_ucol.c</a>
+, <a class="el" href="slu__ddefs_8h.html#7448553ebd9bd2f4dd9d19c2a988ae8e">slu_ddefs.h</a>
+<li>ilu_ddrop_row()
+: <a class="el" href="slu__ddefs_8h.html#c127b5fda718241500c5a6ee7dae0df5">slu_ddefs.h</a>
+, <a class="el" href="ilu__ddrop__row_8c.html#380317801e05b11930fd1e094db34179">ilu_ddrop_row.c</a>
+<li>ilu_dpanel_dfs()
+: <a class="el" href="ilu__dpanel__dfs_8c.html#0a3d016444b041668956824248d22439">ilu_dpanel_dfs.c</a>
+, <a class="el" href="slu__ddefs_8h.html#5ebb5502086dbb04d4dd640de81de410">slu_ddefs.h</a>
+<li>ilu_dpivotL()
+: <a class="el" href="ilu__dpivotL_8c.html#058d843996bb36b73784b80aae05f04b">ilu_dpivotL.c</a>
+, <a class="el" href="slu__ddefs_8h.html#19d8e83d74fdc411c1f10d76574e4b31">slu_ddefs.h</a>
+<li>ilu_dQuerySpace()
+: <a class="el" href="dmemory_8c.html#61aaccf587a78d15d79c4cc79f80e8b0">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#7b3370283f8f5ce4a3fb0207247cc8e2">slu_ddefs.h</a>
+<li>ilu_dsnode_dfs()
+: <a class="el" href="ilu__dsnode__dfs_8c.html#66dbc4626e59d14b4d3458c4eb841829">ilu_dsnode_dfs.c</a>
+, <a class="el" href="slu__ddefs_8h.html#cd3bf891014254c364adbb0d1b2d1f49">slu_ddefs.h</a>
+<li>ilu_heap_relax_snode()
+: <a class="el" href="ilu__heap__relax__snode_8c.html#ac1a978dda622cdb58c3c2eaee4b4030">ilu_heap_relax_snode.c</a>
+, <a class="el" href="slu__util_8h.html#cd37f89f3fd101b2860c26b45bd4c2a1">slu_util.h</a>
+<li>ilu_relax_snode()
+: <a class="el" href="ilu__relax__snode_8c.html#e0e2bbb8507d800766030635a3bd5a7e">ilu_relax_snode.c</a>
+, <a class="el" href="slu__util_8h.html#2212f489d8bb77b74c61e0a7442796a8">slu_util.h</a>
+<li>ilu_scolumn_dfs()
+: <a class="el" href="ilu__scolumn__dfs_8c.html#7cca59251907bd7e1973d394487f74af">ilu_scolumn_dfs.c</a>
+, <a class="el" href="slu__sdefs_8h.html#ab2366ea3e2cdcbf51b976432fc43616">slu_sdefs.h</a>
+<li>ilu_scopy_to_ucol()
+: <a class="el" href="ilu__scopy__to__ucol_8c.html#ac49754df15a9466857a0eca885f9444">ilu_scopy_to_ucol.c</a>
+, <a class="el" href="slu__sdefs_8h.html#35a18be483569110edc1665d13e260e3">slu_sdefs.h</a>
+<li>ilu_sdrop_row()
+: <a class="el" href="ilu__sdrop__row_8c.html#0d9b169f47790d6eed41107efb445867">ilu_sdrop_row.c</a>
+, <a class="el" href="slu__sdefs_8h.html#5f5e67d3b2d715a388ca99bb28387fb9">slu_sdefs.h</a>
+<li>ilu_set_default_options()
+: <a class="el" href="slu__util_8h.html#fce6cba2b855a4b046f6521d5dd1beb4">slu_util.h</a>
+, <a class="el" href="util_8c.html#fce6cba2b855a4b046f6521d5dd1beb4">util.c</a>
+<li>ilu_spanel_dfs()
+: <a class="el" href="ilu__spanel__dfs_8c.html#fffee4e945eab223be6daa1759e98f60">ilu_spanel_dfs.c</a>
+, <a class="el" href="slu__sdefs_8h.html#a91b3297a15ace9ac5abd65c5e708f2d">slu_sdefs.h</a>
+<li>ilu_spivotL()
+: <a class="el" href="ilu__spivotL_8c.html#9da652b68b6ecee45919cf56f256b7e0">ilu_spivotL.c</a>
+, <a class="el" href="slu__sdefs_8h.html#b7f61e0a95c151f53f8a400bc9c6192e">slu_sdefs.h</a>
+<li>ilu_sQuerySpace()
+: <a class="el" href="slu__sdefs_8h.html#db260ae3f26e2179b1cf33c3e754d6f1">slu_sdefs.h</a>
+, <a class="el" href="smemory_8c.html#e057d714a4952330de0572fa2785b068">smemory.c</a>
+<li>ilu_ssnode_dfs()
+: <a class="el" href="ilu__ssnode__dfs_8c.html#510a9174e442a65aaa83f9ce97390f85">ilu_ssnode_dfs.c</a>
+, <a class="el" href="slu__sdefs_8h.html#714eccb6cd0fb1fc0920e8a52489f1a5">slu_sdefs.h</a>
+<li>ilu_zcolumn_dfs()
+: <a class="el" href="ilu__zcolumn__dfs_8c.html#e44a937bcd7d34ad6b18ad859680d8f1">ilu_zcolumn_dfs.c</a>
+, <a class="el" href="slu__zdefs_8h.html#fc18a3d9096f5d951d28cb6933077233">slu_zdefs.h</a>
+<li>ilu_zcopy_to_ucol()
+: <a class="el" href="slu__zdefs_8h.html#09d54c3f2ea8ecc5e74170c38771ab46">slu_zdefs.h</a>
+, <a class="el" href="ilu__zcopy__to__ucol_8c.html#b3c195f1b0db2f8686e3be3dc5107007">ilu_zcopy_to_ucol.c</a>
+<li>ilu_zdrop_row()
+: <a class="el" href="ilu__zdrop__row_8c.html#f4b8c50d3afed76a8b9809673a7da4f3">ilu_zdrop_row.c</a>
+, <a class="el" href="slu__zdefs_8h.html#94d5ac6f75873f62e1bef9c521534d43">slu_zdefs.h</a>
+<li>ilu_zpanel_dfs()
+: <a class="el" href="slu__zdefs_8h.html#c3883f7039a1c9b1349452d22a972396">slu_zdefs.h</a>
+, <a class="el" href="ilu__zpanel__dfs_8c.html#8bc5f8a774d7fab0ba65cd9bca243435">ilu_zpanel_dfs.c</a>
+<li>ilu_zpivotL()
+: <a class="el" href="ilu__zpivotL_8c.html#857e99bebbdf102f2b9d2ef4a25d1135">ilu_zpivotL.c</a>
+, <a class="el" href="slu__zdefs_8h.html#b9679d0b020666979ae1686461e26ae2">slu_zdefs.h</a>
+<li>ilu_zQuerySpace()
+: <a class="el" href="zmemory_8c.html#dcf560b50ada29ab0807eb50f16c434d">zmemory.c</a>
+, <a class="el" href="slu__zdefs_8h.html#5bc1efbf682521f7f23c16b8a36b81e9">slu_zdefs.h</a>
+<li>ilu_zsnode_dfs()
+: <a class="el" href="ilu__zsnode__dfs_8c.html#6fa78a3059d75e11a66434992dddafab">ilu_zsnode_dfs.c</a>
+, <a class="el" href="slu__zdefs_8h.html#973a22230ce47cdca6dc0d509b246f5b">slu_zdefs.h</a>
+<li>INDEX
+: <a class="el" href="colamd_8c.html#a5fad23b2a5eed790e6661e896a506b7">colamd.c</a>
+<li>INF_NORM
+: <a class="el" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2ff60f12ba71e3a0c889595249955d6cf8">superlu_enum_consts.h</a>
+<li>init_rows_cols()
+: <a class="el" href="colamd_8c.html#d632adbb6b5d2516805a965b42b601c8">colamd.c</a>
+<li>init_scoring()
+: <a class="el" href="colamd_8c.html#c804543e35e2ab481d9e2c19ed0ebcf6">colamd.c</a>
+<li>initialize_disjoint_sets()
+: <a class="el" href="sp__coletree_8c.html#679285dead1583f96db3c978735de380">sp_coletree.c</a>
+<li>int_t
+: <a class="el" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">slu_cdefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">slu_sdefs.h</a>
+, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">slu_zdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">slu_ddefs.h</a>
+<li>intCalloc()
+: <a class="el" href="memory_8c.html#af51f82a79c361236a2d825a59a63403">memory.c</a>
+, <a class="el" href="slu__util_8h.html#f7f89277b471647ea6b3581ca11becd3">slu_util.h</a>
+<li>intMalloc()
+: <a class="el" href="memory_8c.html#49bbe20102e5b541c8e8963afa2bd46a">memory.c</a>
+, <a class="el" href="slu__util_8h.html#c5e3eb5cdc6962ab8238dd3e663bea67">slu_util.h</a>
+<li>isamax_()
+: <a class="el" href="ilu__sdrop__row_8c.html#18eff2aa758918dee76e31b812c88c9f">ilu_sdrop_row.c</a>
+<li>IterRefine_t
+: <a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e37">superlu_enum_consts.h</a>
+<li>ITMAX
+: <a class="el" href="zgsrfs_8c.html#3641b6d4c21b7a852dbb32c2b693302e">zgsrfs.c</a>
+, <a class="el" href="dgsrfs_8c.html#3641b6d4c21b7a852dbb32c2b693302e">dgsrfs.c</a>
+, <a class="el" href="sgsrfs_8c.html#3641b6d4c21b7a852dbb32c2b693302e">sgsrfs.c</a>
+, <a class="el" href="cgsrfs_8c.html#3641b6d4c21b7a852dbb32c2b693302e">cgsrfs.c</a>
+<li>izamax_()
+: <a class="el" href="ilu__zdrop__row_8c.html#f8bf573faadaf4a6cead386258c1421c">ilu_zdrop_row.c</a>
+<li>izmax1_()
+: <a class="el" href="izmax1_8c.html#99d3cc85eec418b836a4949ead25c297">izmax1.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x6b.html b/DOC/html/globals_0x6b.html
new file mode 100644
index 0000000..75e03df
--- /dev/null
+++ b/DOC/html/globals_0x6b.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li class="current"><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_k">- k -</a></h3><ul>
+<li>KILL_NON_PRINCIPAL_COL
+: <a class="el" href="colamd_8c.html#0458a358e752473d86e6f21a56b44a26">colamd.c</a>
+<li>KILL_PRINCIPAL_COL
+: <a class="el" href="colamd_8c.html#7882929a7898e09a3de9e7676ae1aa29">colamd.c</a>
+<li>KILL_ROW
+: <a class="el" href="colamd_8c.html#dde21248544152df48ab70b6da1b38b5">colamd.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x6c.html b/DOC/html/globals_0x6c.html
new file mode 100644
index 0000000..0a05f18
--- /dev/null
+++ b/DOC/html/globals_0x6c.html
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li class="current"><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>L_FST_SUPC
+: <a class="el" href="slu__util_8h.html#0ea367a3afecd30b570d0a46cc819cdf">slu_util.h</a>
+<li>L_NZ_START
+: <a class="el" href="slu__util_8h.html#79b13489e4cd00b09633e0c5e0be1b7c">slu_util.h</a>
+<li>L_SUB
+: <a class="el" href="slu__util_8h.html#8de2450f2d4cf12794954b63a319c423">slu_util.h</a>
+<li>L_SUB_START
+: <a class="el" href="slu__util_8h.html#445a44f88349753bc17f28fbac4df382">slu_util.h</a>
+<li>LargeDiag
+: <a class="el" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adfe03251277f56e77cfc3989ed67adf932">superlu_enum_consts.h</a>
+<li>link()
+: <a class="el" href="sp__coletree_8c.html#b7bc8447f8976dbb19c60dc2e1a12905">sp_coletree.c</a>
+<li>LLVL
+: <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b28456acdeff4ebe8827f33f18599d3137">superlu_enum_consts.h</a>
+<li>Logical
+: <a class="el" href="slu__util_8h.html#30f473cd214dc43270f7a4d54b2887d2">slu_util.h</a>
+<li>lsame_()
+: <a class="el" href="lsame_8c.html#6de88349c1fe993f318dd0643af908c3">lsame.c</a>
+, <a class="el" href="slu__util_8h.html#4d9eb0e1ec853020a42e867b4ff3018c">slu_util.h</a>
+<li>LSUB
+: <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2383f412552e65152b50013e6c5397baa">superlu_enum_consts.h</a>
+<li>LU_space_t
+: <a class="el" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f6">superlu_enum_consts.h</a>
+<li>LUFactFlops()
+: <a class="el" href="util_8c.html#60256c1cabadcd15f555ed6e9d7eedef">util.c</a>
+<li>LUSolveFlops()
+: <a class="el" href="util_8c.html#fdfc4cfea288d5639fb7321929550b8a">util.c</a>
+<li>LUSUP
+: <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b29f159a8a95b7045670b14e7a521ac71e">superlu_enum_consts.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x6d.html b/DOC/html/globals_0x6d.html
new file mode 100644
index 0000000..18a9804
--- /dev/null
+++ b/DOC/html/globals_0x6d.html
@@ -0,0 +1,179 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li class="current"><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>main()
+: <a class="el" href="citersol_8c.html#0ddf1224851353fc92bfbff6f499fa97">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">citersol1.c</a>
+, <a class="el" href="clinsol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">clinsol1.c</a>
+, <a class="el" href="ditersol_8c.html#0ddf1224851353fc92bfbff6f499fa97">ditersol.c</a>
+, <a class="el" href="sitersol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">sitersol1.c</a>
+, <a class="el" href="slinsol_8c.html#0ddf1224851353fc92bfbff6f499fa97">slinsol.c</a>
+, <a class="el" href="ditersol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">ditersol1.c</a>
+, <a class="el" href="slinsol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">slinsol1.c</a>
+, <a class="el" href="slinsolx_8c.html#0ddf1224851353fc92bfbff6f499fa97">slinsolx.c</a>
+, <a class="el" href="clinsolx_8c.html#0ddf1224851353fc92bfbff6f499fa97">clinsolx.c</a>
+, <a class="el" href="dlinsol_8c.html#0ddf1224851353fc92bfbff6f499fa97">dlinsol.c</a>
+, <a class="el" href="slinsolx1_8c.html#0ddf1224851353fc92bfbff6f499fa97">slinsolx1.c</a>
+, <a class="el" href="slinsolx2_8c.html#0ddf1224851353fc92bfbff6f499fa97">slinsolx2.c</a>
+, <a class="el" href="dlinsol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">dlinsol1.c</a>
+, <a class="el" href="superlu_8c.html#e0665038b72011f5c680c660fcb59459">superlu.c</a>
+, <a class="el" href="zitersol_8c.html#0ddf1224851353fc92bfbff6f499fa97">zitersol.c</a>
+, <a class="el" href="clinsol_8c.html#0ddf1224851353fc92bfbff6f499fa97">clinsol.c</a>
+, <a class="el" href="clinsolx1_8c.html#0ddf1224851353fc92bfbff6f499fa97">clinsolx1.c</a>
+, <a class="el" href="dlinsolx_8c.html#0ddf1224851353fc92bfbff6f499fa97">dlinsolx.c</a>
+, <a class="el" href="zitersol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">zitersol1.c</a>
+, <a class="el" href="zlinsol_8c.html#0ddf1224851353fc92bfbff6f499fa97">zlinsol.c</a>
+, <a class="el" href="dlinsolx1_8c.html#0ddf1224851353fc92bfbff6f499fa97">dlinsolx1.c</a>
+, <a class="el" href="zlinsol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">zlinsol1.c</a>
+, <a class="el" href="zlinsolx_8c.html#0ddf1224851353fc92bfbff6f499fa97">zlinsolx.c</a>
+, <a class="el" href="clinsolx2_8c.html#0ddf1224851353fc92bfbff6f499fa97">clinsolx2.c</a>
+, <a class="el" href="dlinsolx2_8c.html#0ddf1224851353fc92bfbff6f499fa97">dlinsolx2.c</a>
+, <a class="el" href="zlinsolx1_8c.html#0ddf1224851353fc92bfbff6f499fa97">zlinsolx1.c</a>
+, <a class="el" href="zlinsolx2_8c.html#0ddf1224851353fc92bfbff6f499fa97">zlinsolx2.c</a>
+, <a class="el" href="sitersol_8c.html#0ddf1224851353fc92bfbff6f499fa97">sitersol.c</a>
+<li>make_set()
+: <a class="el" href="sp__coletree_8c.html#6ecd760efd6eec938f69c6d692d6ddae">sp_coletree.c</a>
+<li>mark_relax()
+: <a class="el" href="slu__util_8h.html#23057ebe27329fd8fc65970c7c3e2b3f">slu_util.h</a>
+, <a class="el" href="mark__relax_8c.html#5e85b0273eec011f0027d8506a20350e">mark_relax.c</a>
+<li>MAX
+: <a class="el" href="colamd_8c.html#fa99ec4acc4ecb2dc3c2d05da15d0e3f">colamd.c</a>
+<li>max
+: <a class="el" href="dlamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">dlamch.c</a>
+, <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">slamch.c</a>
+<li>max_sup_size
+: <a class="el" href="util_8c.html#17dfd68739139149a72dfcbd88bcdf24">util.c</a>
+<li>mc64ad_()
+: <a class="el" href="cldperm_8c.html#1bf33c16a135cdc671242aed1705e1cd">cldperm.c</a>
+, <a class="el" href="dldperm_8c.html#1bf33c16a135cdc671242aed1705e1cd">dldperm.c</a>
+, <a class="el" href="mc64ad_8c.html#122c4a344cc189495e32b7b7f6123e69">mc64ad.c</a>
+, <a class="el" href="sldperm_8c.html#1bf33c16a135cdc671242aed1705e1cd">sldperm.c</a>
+, <a class="el" href="zldperm_8c.html#1bf33c16a135cdc671242aed1705e1cd">zldperm.c</a>
+<li>mc64bd_()
+: <a class="el" href="mc64ad_8c.html#03d088da1e7d8454a0fd4e1d1840b96c">mc64ad.c</a>
+<li>mc64dd_()
+: <a class="el" href="mc64ad_8c.html#23f5c353dc0f33b3171101060a9a555f">mc64ad.c</a>
+<li>mc64ed_()
+: <a class="el" href="mc64ad_8c.html#3926b73b0b519feef70eae9ed9cf282c">mc64ad.c</a>
+<li>mc64fd_()
+: <a class="el" href="mc64ad_8c.html#9b0c810c63b7faf051b21e97a636285c">mc64ad.c</a>
+<li>mc64id_()
+: <a class="el" href="cldperm_8c.html#1e6fb0c8dd36aef071ef165136ece781">cldperm.c</a>
+, <a class="el" href="mc64ad_8c.html#49a5219ef8d6345ee5ae5a34aea76ed6">mc64ad.c</a>
+, <a class="el" href="sldperm_8c.html#1e6fb0c8dd36aef071ef165136ece781">sldperm.c</a>
+, <a class="el" href="zldperm_8c.html#1e6fb0c8dd36aef071ef165136ece781">zldperm.c</a>
+, <a class="el" href="dldperm_8c.html#1e6fb0c8dd36aef071ef165136ece781">dldperm.c</a>
+<li>mc64qd_()
+: <a class="el" href="mc64ad_8c.html#77573ca4776db28859b0ead94b728dc1">mc64ad.c</a>
+<li>mc64rd_()
+: <a class="el" href="mc64ad_8c.html#dbb9a61e53f59a675c30dfd821aad16f">mc64ad.c</a>
+<li>mc64sd_()
+: <a class="el" href="mc64ad_8c.html#ea1b4d8e05692a715e334f472f9a4313">mc64ad.c</a>
+<li>mc64ud_()
+: <a class="el" href="mc64ad_8c.html#52c18d1d9fc3efefba36ba67456b46d1">mc64ad.c</a>
+<li>mc64wd_()
+: <a class="el" href="mc64ad_8c.html#dd3e26b831b8b4bc818b93c4fdce7174">mc64ad.c</a>
+<li>MemType
+: <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">superlu_enum_consts.h</a>
+<li>METIS_AT_PLUS_A
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c5a9874ccc7a94b949bdf71fd65b80061">superlu_enum_consts.h</a>
+<li>MILU_ALPHA
+: <a class="el" href="slu__util_8h.html#90dea7f830398b8c30be7488e24089bb">slu_util.h</a>
+<li>milu_t
+: <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">superlu_enum_consts.h</a>
+<li>MIN
+: <a class="el" href="colamd_8c.html#3acffbd305ee72dcd4593c0d8af64a4f">colamd.c</a>
+<li>min
+: <a class="el" href="mc64ad_8c.html#c6afabdc09a49a433ee19d8a9486056d">mc64ad.c</a>
+, <a class="el" href="dlamch_8c.html#c6afabdc09a49a433ee19d8a9486056d">dlamch.c</a>
+, <a class="el" href="slamch_8c.html#c6afabdc09a49a433ee19d8a9486056d">slamch.c</a>
+<li>MMD_AT_PLUS_A
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89cef4136af63900170017e1edb479e2f14">superlu_enum_consts.h</a>
+<li>MMD_ATA
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c02f70b975e4d4fa6052812c09bdb7349">superlu_enum_consts.h</a>
+<li>mmdelm_()
+: <a class="el" href="mmd_8c.html#52ddf7a4032e5491d42b2105f505299f">mmd.c</a>
+<li>mmdint_()
+: <a class="el" href="mmd_8c.html#6e497816a7ceb220795914fbddc4afb1">mmd.c</a>
+<li>mmdnum_()
+: <a class="el" href="mmd_8c.html#42b9909fb2c920dfc0fa3dfdc4a4f168">mmd.c</a>
+<li>mmdupd_()
+: <a class="el" href="mmd_8c.html#5c016b89c468a56f69713b264690e98b">mmd.c</a>
+<li>Mtype_t
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">supermatrix.h</a>
+<li>mxCallocInt()
+: <a class="el" href="sp__coletree_8c.html#45fdfbf54106113728e1a036977ccf5b">sp_coletree.c</a>
+<li>MY_PERMC
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c7475651fbfee514ff59d61da9e101682">superlu_enum_consts.h</a>
+<li>MY_PERMR
+: <a class="el" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adf19f710e8ebccae9025757e877b6c87aa">superlu_enum_consts.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x6e.html b/DOC/html/globals_0x6e.html
new file mode 100644
index 0000000..94d6cb4
--- /dev/null
+++ b/DOC/html/globals_0x6e.html
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li class="current"><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>NATURAL
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c0425aaf673bebee34014367ea7c3deb1">superlu_enum_consts.h</a>
+<li>NBUCKS
+: <a class="el" href="util_8c.html#70f31d2c4d8d0802751120e07028bd3a">util.c</a>
+<li>NO
+: <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f0d077f5b932ce05e5b9f30c6087a2f31">superlu_enum_consts.h</a>
+<li>NO_MARKER
+: <a class="el" href="slu__util_8h.html#9b7b2a5116ee487722b0967317ab6360">slu_util.h</a>
+<li>NO_MEMTYPE
+: <a class="el" href="slu__util_8h.html#b9ccb8b9963ca083d7f36f5d3acc5744">slu_util.h</a>
+<li>NOCHANGE
+: <a class="el" href="slu__Cnames_8h.html#f42b337af878eff44b9d6792ee59faf7">slu_Cnames.h</a>
+<li>NODROP
+: <a class="el" href="slu__util_8h.html#aa1b4d4ec24548decf1f389060a7d878">slu_util.h</a>
+<li>NOEQUIL
+: <a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30f1e3ee583cb194a25353b4ba7b4798cf">superlu_enum_consts.h</a>
+<li>NOREFINE
+: <a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e375f3a3710645b9041f06dfe164fb336a3">superlu_enum_consts.h</a>
+<li>norm_t
+: <a class="el" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2f">superlu_enum_consts.h</a>
+<li>NOROWPERM
+: <a class="el" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adf25895a1ae8a45131936a32274bd7cdde">superlu_enum_consts.h</a>
+<li>NotDoubleAlign
+: <a class="el" href="dmemory_8c.html#c11b1c3847a3d397e9675de40782134d">dmemory.c</a>
+, <a class="el" href="smemory_8c.html#c11b1c3847a3d397e9675de40782134d">smemory.c</a>
+, <a class="el" href="zmemory_8c.html#c11b1c3847a3d397e9675de40782134d">zmemory.c</a>
+, <a class="el" href="cmemory_8c.html#c11b1c3847a3d397e9675de40782134d">cmemory.c</a>
+<li>NOTRANS
+: <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d628ccffb9caebb7b4520a0653005b22f43">superlu_enum_consts.h</a>
+<li>NPHASES
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e722b9cc65b188ff2b2b764a5f8160c4bfc">superlu_enum_consts.h</a>
+<li>nr_etdfs()
+: <a class="el" href="sp__coletree_8c.html#7fec305add1f9f4c611eacdb2b744bfd">sp_coletree.c</a>
+<li>NUM_TEMPV
+: <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">slu_util.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x6f.html b/DOC/html/globals_0x6f.html
new file mode 100644
index 0000000..8cd0bd1
--- /dev/null
+++ b/DOC/html/globals_0x6f.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li class="current"><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>OLD_CRAY
+: <a class="el" href="slu__Cnames_8h.html#f29cc13eea735d836498590d413904a4">slu_Cnames.h</a>
+<li>ONE_NORM
+: <a class="el" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2fde388e7d1af6bbb3be22c8e758d43d65">superlu_enum_consts.h</a>
+<li>ONES_COMPLEMENT
+: <a class="el" href="colamd_8c.html#f4201cc2809d450d2484680ee1b958ca">colamd.c</a>
+<li>order_children()
+: <a class="el" href="colamd_8c.html#d9896b63f5b2823065686f63a1096130">colamd.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x70.html b/DOC/html/globals_0x70.html
new file mode 100644
index 0000000..4f1c9de
--- /dev/null
+++ b/DOC/html/globals_0x70.html
@@ -0,0 +1,132 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li class="current"><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>PARMETIS
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89ca7108227cd043fe50972a89b34b6d20c">superlu_enum_consts.h</a>
+<li>parse_command_line()
+: <a class="el" href="clinsolx_8c.html#26a449fe0e6f4599404be8f78ed31f20">clinsolx.c</a>
+, <a class="el" href="clinsolx2_8c.html#693ba86aac49435e82cf3a57a4412744">clinsolx2.c</a>
+, <a class="el" href="slinsolx_8c.html#26a449fe0e6f4599404be8f78ed31f20">slinsolx.c</a>
+, <a class="el" href="slinsolx1_8c.html#26a449fe0e6f4599404be8f78ed31f20">slinsolx1.c</a>
+, <a class="el" href="dlinsolx_8c.html#693ba86aac49435e82cf3a57a4412744">dlinsolx.c</a>
+, <a class="el" href="slinsolx2_8c.html#693ba86aac49435e82cf3a57a4412744">slinsolx2.c</a>
+, <a class="el" href="zlinsolx_8c.html#693ba86aac49435e82cf3a57a4412744">zlinsolx.c</a>
+, <a class="el" href="clinsolx1_8c.html#26a449fe0e6f4599404be8f78ed31f20">clinsolx1.c</a>
+, <a class="el" href="dlinsolx1_8c.html#693ba86aac49435e82cf3a57a4412744">dlinsolx1.c</a>
+, <a class="el" href="zlinsolx1_8c.html#693ba86aac49435e82cf3a57a4412744">zlinsolx1.c</a>
+, <a class="el" href="zlinsolx2_8c.html#693ba86aac49435e82cf3a57a4412744">zlinsolx2.c</a>
+, <a class="el" href="dlinsolx2_8c.html#693ba86aac49435e82cf3a57a4412744">dlinsolx2.c</a>
+<li>PhaseType
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72">superlu_enum_consts.h</a>
+<li>pow_di()
+: <a class="el" href="dlamch_8c.html#9537f19743fcaaac6231895afa9f9e4d">dlamch.c</a>
+<li>pow_ri()
+: <a class="el" href="slamch_8c.html#ace5d2e6dbf9c872b611447aa01539c8">slamch.c</a>
+<li>print_complex_vec()
+: <a class="el" href="cutil_8c.html#f6a8d174ff8ba298e99b4ac94794d5e1">cutil.c</a>
+<li>print_double_vec()
+: <a class="el" href="dutil_8c.html#457e11c8736d30b7da4ee14feb422ed0">dutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#ad0c06e9adc1e29a0ab2e78c38119bb4">slu_cdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#ad0c06e9adc1e29a0ab2e78c38119bb4">slu_ddefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#ad0c06e9adc1e29a0ab2e78c38119bb4">slu_sdefs.h</a>
+, <a class="el" href="slu__zdefs_8h.html#ad0c06e9adc1e29a0ab2e78c38119bb4">slu_zdefs.h</a>
+<li>print_doublecomplex_vec()
+: <a class="el" href="zutil_8c.html#d40a765de4b05c0ab07d3299aa93b6da">zutil.c</a>
+<li>print_float_vec()
+: <a class="el" href="sutil_8c.html#75e7f70be5afd936daa4ad0e2ae91300">sutil.c</a>
+<li>print_ilu_options()
+: <a class="el" href="util_8c.html#f68d6594a77880eedb6c7b35aef237ac">util.c</a>
+<li>print_int_vec()
+: <a class="el" href="util_8c.html#ac67c35b47f2aa92a3202769d3eebdeb">util.c</a>
+, <a class="el" href="slu__util_8h.html#8a3ba6cbe163f9c12f6f10ee8ba98fc7">slu_util.h</a>
+<li>print_options()
+: <a class="el" href="util_8c.html#3a041511849362ed44688698c86a9039">util.c</a>
+<li>print_panel_seg()
+: <a class="el" href="util_8c.html#9e2ebe03503cdfc4ab20306d028ca312">util.c</a>
+, <a class="el" href="slu__util_8h.html#48208ca68e95c765c0c55c12b196d79e">slu_util.h</a>
+<li>print_report()
+: <a class="el" href="colamd_8c.html#5ba6567b2e4ac6f69086d2ac7ab5c58a">colamd.c</a>
+<li>PRINTF
+: <a class="el" href="colamd_8c.html#e1649fc947ca37a86917a08354f48d1a">colamd.c</a>
+<li>PrintPerf()
+: <a class="el" href="slu__cdefs_8h.html#7a41152a5800bc02bef17b56e070d0e6">slu_cdefs.h</a>
+, <a class="el" href="slu__zdefs_8h.html#e8ef28d59bc98423cc4e69465edfd736">slu_zdefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#dca8047332d0b0c161945583ecb3435d">slu_sdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#04b5542748fcc2fee77b587e31bb0a02">slu_ddefs.h</a>
+<li>PrintSumm()
+: <a class="el" href="slu__util_8h.html#47292875a12f5601efa82a4350656db8">slu_util.h</a>
+, <a class="el" href="util_8c.html#a88c72f09a077ee18043edff386f4a2c">util.c</a>
+<li>PRIVATE
+: <a class="el" href="colamd_8c.html#5e151c615eda34903514212f05a5ccf8">colamd.c</a>
+<li>PUBLIC
+: <a class="el" href="colamd_8c.html#d17d551e31d1828c68acf40684849b7e">colamd.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x72.html b/DOC/html/globals_0x72.html
new file mode 100644
index 0000000..ce8c3b0
--- /dev/null
+++ b/DOC/html/globals_0x72.html
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li class="current"><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>r_cnjg()
+: <a class="el" href="scomplex_8c.html#dd0e09f7411e03b7516ddedacd6a59df">scomplex.c</a>
+, <a class="el" href="slu__scomplex_8h.html#0837d7f15d3b03860fdd17de957c788c">slu_scomplex.h</a>
+<li>r_imag()
+: <a class="el" href="slu__scomplex_8h.html#29e2cb7ddb38711cdae8f6dc4481a80f">slu_scomplex.h</a>
+, <a class="el" href="scomplex_8c.html#b6bc19479c8838286f451d5d9a6c86a3">scomplex.c</a>
+<li>RCOND
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e729b5c151728d8512307565994c89919d5">superlu_enum_consts.h</a>
+<li>ReadVector()
+: <a class="el" href="dreadhb_8c.html#fbec2a501b92e7e7bb13af2e21520522">dreadhb.c</a>
+, <a class="el" href="dreadrb_8c.html#fbec2a501b92e7e7bb13af2e21520522">dreadrb.c</a>
+, <a class="el" href="sreadhb_8c.html#fbec2a501b92e7e7bb13af2e21520522">sreadhb.c</a>
+, <a class="el" href="sreadrb_8c.html#fbec2a501b92e7e7bb13af2e21520522">sreadrb.c</a>
+, <a class="el" href="creadhb_8c.html#fbec2a501b92e7e7bb13af2e21520522">creadhb.c</a>
+, <a class="el" href="zreadhb_8c.html#fbec2a501b92e7e7bb13af2e21520522">zreadhb.c</a>
+, <a class="el" href="zreadrb_8c.html#fbec2a501b92e7e7bb13af2e21520522">zreadrb.c</a>
+, <a class="el" href="creadrb_8c.html#fbec2a501b92e7e7bb13af2e21520522">creadrb.c</a>
+<li>Reduce
+: <a class="el" href="smemory_8c.html#7b2a35bfd2e6c9d03e2a6ccdba9fa847">smemory.c</a>
+, <a class="el" href="zmemory_8c.html#7b2a35bfd2e6c9d03e2a6ccdba9fa847">zmemory.c</a>
+, <a class="el" href="cmemory_8c.html#7b2a35bfd2e6c9d03e2a6ccdba9fa847">cmemory.c</a>
+, <a class="el" href="dmemory_8c.html#7b2a35bfd2e6c9d03e2a6ccdba9fa847">dmemory.c</a>
+<li>REFINE
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72bb218bd1ec12fd54eaada97721a82be7">superlu_enum_consts.h</a>
+<li>RELAX
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e728abca54580953356d3e1548ddd04a97b">superlu_enum_consts.h</a>
+<li>relax_snode()
+: <a class="el" href="relax__snode_8c.html#d70bc12cb9031ab8aba4a37a18be46e3">relax_snode.c</a>
+, <a class="el" href="slu__util_8h.html#a9dcebe0d2709ff7ab053c3acb8f35af">slu_util.h</a>
+<li>resetrep_col()
+: <a class="el" href="slu__util_8h.html#b71db926d60d7b8fd739df197b766366">slu_util.h</a>
+, <a class="el" href="util_8c.html#67bce8b2142b3be41583de4fbea02cb0">util.c</a>
+<li>ROW
+: <a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30bf470e461303b909bf0dc58084ebafa0">superlu_enum_consts.h</a>
+<li>ROW_IS_ALIVE
+: <a class="el" href="colamd_8c.html#bc775359cfa45ffaf6250522c521110d">colamd.c</a>
+<li>ROW_IS_DEAD
+: <a class="el" href="colamd_8c.html#e200d2ac8149305712af7230f9ee24d5">colamd.c</a>
+<li>ROW_IS_MARKED_DEAD
+: <a class="el" href="colamd_8c.html#0d68b03acc587c11fe6dffbfede78c2d">colamd.c</a>
+<li>ROWPERM
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72e860478cf9b6cf3eb0785958149b676e">superlu_enum_consts.h</a>
+<li>rowperm_t
+: <a class="el" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adf">superlu_enum_consts.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x73.html b/DOC/html/globals_0x73.html
new file mode 100644
index 0000000..4173e97
--- /dev/null
+++ b/DOC/html/globals_0x73.html
@@ -0,0 +1,501 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li class="current"><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>sallocateA()
+: <a class="el" href="slu__sdefs_8h.html#aef6f98786d0bd76103237385ddbeb9f">slu_sdefs.h</a>
+, <a class="el" href="smemory_8c.html#9754e5504550ae4ab763721ebcb7055b">smemory.c</a>
+<li>SamePattern
+: <a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0ad57746dff8e73ad308739bc6cbee4c27">superlu_enum_consts.h</a>
+<li>SamePattern_SameRowPerm
+: <a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a8814b686fe49f5ccc165c04845e112e6">superlu_enum_consts.h</a>
+<li>sasum_()
+: <a class="el" href="ilu__sdrop__row_8c.html#43ef780d8b669dc0b19d41fa6727124f">ilu_sdrop_row.c</a>
+<li>saxpy_()
+: <a class="el" href="ilu__sdrop__row_8c.html#de8ba65d9c44f41e97cf2c40a772cff7">ilu_sdrop_row.c</a>
+<li>scasum_()
+: <a class="el" href="ilu__cdrop__row_8c.html#44105172934892274bea9807a5b2037f">ilu_cdrop_row.c</a>
+<li>scheck_tempv()
+: <a class="el" href="spanel__bmod_8c.html#e6f7d2939a3b49f7b1022645be6dde4e">spanel_bmod.c</a>
+, <a class="el" href="sutil_8c.html#12365f7c1a88d3c18e0ce06383f0e78d">sutil.c</a>
+<li>scnrm2_()
+: <a class="el" href="ilu__cdrop__row_8c.html#ef10aeea1f2500610ded919305e8e84c">ilu_cdrop_row.c</a>
+, <a class="el" href="cfgmr_8c.html#7528cbbfcac44b8a1425b6ac26419c85">cfgmr.c</a>
+<li>scolumn_bmod()
+: <a class="el" href="scolumn__bmod_8c.html#c89043410fd16fe2b8d3b2c902fec9f7">scolumn_bmod.c</a>
+, <a class="el" href="slu__sdefs_8h.html#e21004feb23626f7ea648b46657a257a">slu_sdefs.h</a>
+<li>scolumn_dfs()
+: <a class="el" href="scolumn__dfs_8c.html#c9a044320fe8bfbb051a344686a4cb7d">scolumn_dfs.c</a>
+, <a class="el" href="slu__sdefs_8h.html#20dc9300377cb7240572ba34a31af3d1">slu_sdefs.h</a>
+<li>sCompRow_to_CompCol()
+: <a class="el" href="slu__sdefs_8h.html#ef4be8ddf6a62ef48ca8dfc3a6992634">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#beab98ddf4ff7a83f39132f00df707a3">sutil.c</a>
+<li>scopy_()
+: <a class="el" href="ilu__scopy__to__ucol_8c.html#f839d60e0d4028df30ea1106ce429210">ilu_scopy_to_ucol.c</a>
+, <a class="el" href="ilu__sdrop__row_8c.html#f839d60e0d4028df30ea1106ce429210">ilu_sdrop_row.c</a>
+<li>sCopy_CompCol_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#7369dba9a8c3e34a27bdc9eba73cbe3e">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#a5ed0ac7636b53f6004de03ac6ee5fa2">sutil.c</a>
+<li>sCopy_Dense_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#5ef26ab4351b4ab39c2ef3d0ff5d6cb5">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#cab5fbd47a16ac4dcdfb20a557e77861">sutil.c</a>
+<li>scopy_to_ucol()
+: <a class="el" href="scopy__to__ucol_8c.html#b44d465713c602e68295999c003daf7d">scopy_to_ucol.c</a>
+, <a class="el" href="slu__sdefs_8h.html#249a312149bcf091fcc8adbd0c536cb2">slu_sdefs.h</a>
+<li>sCreate_CompCol_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#bb3d30eea43abc536793244e7564e70d">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#579e4609791c29f1b5f118e8fad589a1">sutil.c</a>
+<li>sCreate_CompRow_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#77496309d539716f616365a2515aa653">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#24a4f9ba12c52c73a132b0b3b374603e">sutil.c</a>
+<li>sCreate_Dense_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#ca98118f5539f098beff0b70c041c2e6">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#f67168ae9d7920841831576f6298158b">sutil.c</a>
+<li>sCreate_SuperNode_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#f4386b0d87e1c8886b58fcf9d243bc12">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#cd3569a74da2e6a7d634675014fea82f">sutil.c</a>
+<li>scsum1_()
+: <a class="el" href="scsum1_8c.html#5d1c88cf76514de82b3ab994dd6990f4">scsum1.c</a>
+<li>sdominate()
+: <a class="el" href="sdiagonal_8c.html#1c23412db51d68adf32515fa5bdc9c88">sdiagonal.c</a>
+<li>sdot_()
+: <a class="el" href="sfgmr_8c.html#6152533add9e764be3ad22884976d20d">sfgmr.c</a>
+<li>sDumpLine()
+: <a class="el" href="sreadhb_8c.html#752858dee322b95e4175c3f5d42ad6cd">sreadhb.c</a>
+, <a class="el" href="sreadrb_8c.html#d40eef9e3223cc000a38a8fb326f1dd1">sreadrb.c</a>
+<li>set_default_options()
+: <a class="el" href="slu__util_8h.html#4792687285a879f7955029421ba99795">slu_util.h</a>
+, <a class="el" href="util_8c.html#4792687285a879f7955029421ba99795">util.c</a>
+<li>SetIWork()
+: <a class="el" href="memory_8c.html#dbbe5a57b4ed64564c887fb52d798c54">memory.c</a>
+, <a class="el" href="slu__util_8h.html#eaaa4cb43f415698df4f891e1a1afaa4">slu_util.h</a>
+<li>sexpand()
+: <a class="el" href="smemory_8c.html#a2862f14356be7d9f12bfdfc175137a1">smemory.c</a>
+<li>sfgmr()
+: <a class="el" href="sfgmr_8c.html#ce249a05c158a15db1e6526e955f35ee">sfgmr.c</a>
+<li>sfill()
+: <a class="el" href="slu__sdefs_8h.html#2d734e40276e89a3ef04bf79bc21acb6">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#cbd3b859941f0ed660ddb178b9f898f9">sutil.c</a>
+<li>sfill_diag()
+: <a class="el" href="sdiagonal_8c.html#4ca1f3e4bce5bcd3e19bc3932cbb1206">sdiagonal.c</a>
+<li>sFillRHS()
+: <a class="el" href="slu__sdefs_8h.html#c8b784b5551863e8d50047ee280c34cf">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#51d71bcf7e5497c9e64a6dcecc9fe30b">sutil.c</a>
+<li>sGenXtrue()
+: <a class="el" href="slu__sdefs_8h.html#b79adc3c2d496feb17f359aa303211fc">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#ae1faea15add2d01572b7ce6d037ac47">sutil.c</a>
+<li>SGN
+: <a class="el" href="ilu__cpivotL_8c.html#95ed41486ca0ed53262e4b8934d4afac">ilu_cpivotL.c</a>
+, <a class="el" href="ilu__dpivotL_8c.html#95ed41486ca0ed53262e4b8934d4afac">ilu_dpivotL.c</a>
+, <a class="el" href="ilu__spivotL_8c.html#95ed41486ca0ed53262e4b8934d4afac">ilu_spivotL.c</a>
+, <a class="el" href="ilu__zpivotL_8c.html#95ed41486ca0ed53262e4b8934d4afac">ilu_zpivotL.c</a>
+<li>sgscon()
+: <a class="el" href="sgscon_8c.html#76b21c7561d5bce81821a76c3465601b">sgscon.c</a>
+, <a class="el" href="slu__sdefs_8h.html#1c910cf12639a22a03727ad204575b3b">slu_sdefs.h</a>
+<li>sgsequ()
+: <a class="el" href="sgsequ_8c.html#d8a808e807e38c32c08cfbeadb088f08">sgsequ.c</a>
+, <a class="el" href="slu__sdefs_8h.html#3dbdb406f2fb8b186f0f8d3a4cd2d60d">slu_sdefs.h</a>
+<li>sgsisv()
+: <a class="el" href="slu__sdefs_8h.html#ff6cdbb84f0fbd4cbce7a64ea1f7eb20">slu_sdefs.h</a>
+<li>sgsisx()
+: <a class="el" href="sgsisx_8c.html#7ef921fcca8189c43499e3e89e7e05ce">sgsisx.c</a>
+, <a class="el" href="slu__sdefs_8h.html#b57375a81b174861bcb68ed11861a4f5">slu_sdefs.h</a>
+<li>sgsitrf()
+: <a class="el" href="slu__sdefs_8h.html#22204c4186c4412ee33cd16285ee6bb0">slu_sdefs.h</a>
+, <a class="el" href="sgsitrf_8c.html#25788392a605519048cafa995b641fcc">sgsitrf.c</a>
+<li>sgsrfs()
+: <a class="el" href="sgsrfs_8c.html#a619758588187cd5ad69a10a808d18f6">sgsrfs.c</a>
+, <a class="el" href="slu__sdefs_8h.html#e824bcb507f76ad3053d845352fb6b3d">slu_sdefs.h</a>
+<li>sgssv()
+: <a class="el" href="sgssv_8c.html#6d5d8cc5159f2230fc059d0e382a63b8">sgssv.c</a>
+, <a class="el" href="slu__sdefs_8h.html#44bbae3b1218d951ed229c461a5f14b6">slu_sdefs.h</a>
+<li>sgssvx()
+: <a class="el" href="sgssvx_8c.html#f372ad744992d76301a23ae20a290b3c">sgssvx.c</a>
+, <a class="el" href="slu__sdefs_8h.html#4d6a37b565522c7c77a173826588deee">slu_sdefs.h</a>
+<li>sgstrf()
+: <a class="el" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf.c</a>
+, <a class="el" href="slu__sdefs_8h.html#f006a81b576fffa92a1c848ac3191c70">slu_sdefs.h</a>
+<li>sgstrs()
+: <a class="el" href="sgstrs_8c.html#9b6e1e555af9cf109ef3a584054a91e2">sgstrs.c</a>
+, <a class="el" href="slu__sdefs_8h.html#ea450a9c52512127d6eaaebf0a65f9ce">slu_sdefs.h</a>
+<li>shortint
+: <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">mmd.c</a>
+<li>SILU
+: <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0b9ad3d6f1e495ef4761e20b58cc77453">superlu_enum_consts.h</a>
+<li>sinf_norm_error()
+: <a class="el" href="slu__sdefs_8h.html#ba0eeda28d139bf88878880edd3cca5a">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#e25fa2d7b1de8cb8bb2297c42b72727a">sutil.c</a>
+<li>SINGLE
+: <a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e373388f7110f6f25a54e215eb75d5d7516">superlu_enum_consts.h</a>
+<li>slacon_()
+: <a class="el" href="slacon_8c.html#865b6cfd089f47842f95ecfcb1c88355">slacon.c</a>
+<li>slamc1_()
+: <a class="el" href="slamch_8c.html#865afb9b3184a99ab01e8d34b147f227">slamch.c</a>
+<li>slamc2_()
+: <a class="el" href="slamch_8c.html#13ac82b8c5bbb0c2392aefba4177e4fc">slamch.c</a>
+<li>slamc3_()
+: <a class="el" href="slamch_8c.html#a422da346f4ae26603bbc9b657191e5f">slamch.c</a>
+<li>slamc4_()
+: <a class="el" href="slamch_8c.html#0f5092460355cf3d3461688e37cc70a0">slamch.c</a>
+<li>slamc5_()
+: <a class="el" href="slamch_8c.html#ed7eefa5a851c36909eee77beed124b0">slamch.c</a>
+<li>slamch_()
+: <a class="el" href="slamch_8c.html#5458a369e694e54bb5758774f492b6cb">slamch.c</a>
+, <a class="el" href="slu__cdefs_8h.html#47c1dd1b8332f4366d5c5112219fdb3a">slu_cdefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#47c1dd1b8332f4366d5c5112219fdb3a">slu_sdefs.h</a>
+<li>slangs()
+: <a class="el" href="slangs_8c.html#201bfd9f2017cf5904aada9f21f23ab2">slangs.c</a>
+<li>slaqgs()
+: <a class="el" href="slaqgs_8c.html#f44216962efdebc7e1117b273743e84f">slaqgs.c</a>
+, <a class="el" href="slu__sdefs_8h.html#fe4b556cd9d484f53606d114f83649d4">slu_sdefs.h</a>
+<li>sldperm()
+: <a class="el" href="sldperm_8c.html#6c181d905cb61481e86ddfce701e74a0">sldperm.c</a>
+, <a class="el" href="slu__sdefs_8h.html#69557d06b4e300aa6aca944561f3bb32">slu_sdefs.h</a>
+<li>slsolve()
+: <a class="el" href="scolumn__bmod_8c.html#a8bbeb2abbd5a10ac13fa9b48504691c">scolumn_bmod.c</a>
+, <a class="el" href="sgstrs_8c.html#a8bbeb2abbd5a10ac13fa9b48504691c">sgstrs.c</a>
+, <a class="el" href="smyblas2_8c.html#2c2e291d9f0825630425f05925633916">smyblas2.c</a>
+, <a class="el" href="spanel__bmod_8c.html#a8bbeb2abbd5a10ac13fa9b48504691c">spanel_bmod.c</a>
+, <a class="el" href="ssp__blas2_8c.html#a8bbeb2abbd5a10ac13fa9b48504691c">ssp_blas2.c</a>
+<li>SLU_C
+: <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e291901b589b5f96dbc8619450aacc22d0bf39">supermatrix.h</a>
+<li>SLU_D
+: <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190b5c3b3a455e3b3a64d805d76f19ac6dc">supermatrix.h</a>
+<li>SLU_DN
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796a59ca236b51fe0c7bd7c80c70e345768">supermatrix.h</a>
+<li>SLU_GE
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60ea9ef3cae331a60a4bcc353bb57ad5db">supermatrix.h</a>
+<li>SLU_HEL
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60bba0b28718f648302d6f710d7d66d1fb">supermatrix.h</a>
+<li>SLU_HEU
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60bada9d0add93fd4fbe17b9d6758d38f8">supermatrix.h</a>
+<li>SLU_NC
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b87960993c31a9ba98c523bfab0d759c1a628">supermatrix.h</a>
+<li>SLU_NCP
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b879625e4eb65ac258dadb9abccd65337cfe4">supermatrix.h</a>
+<li>SLU_NR
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796ac74fbf90a105db9be6795b5be9221ca">supermatrix.h</a>
+<li>SLU_NR_loc
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796b96ddd65efd6342d0ac532bb47eb39a0">supermatrix.h</a>
+<li>slu_PrintInt10()
+: <a class="el" href="slu__util_8h.html#de363dcb4babb66fa0e5f51bd2e6e42c">slu_util.h</a>
+, <a class="el" href="util_8c.html#52adbcf3d0b17d26fa9fc133c911993d">util.c</a>
+<li>SLU_S
+: <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e291900da7fdd394e36c76e7aa215d6a79162d">supermatrix.h</a>
+<li>SLU_SC
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b879679d0f76e80f9b57ebdab6a0c76720462">supermatrix.h</a>
+<li>SLU_SCP
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b879635ab293720f39593ceff43e8989f4de6">supermatrix.h</a>
+<li>SLU_SR
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b87969677060bfc0641fb53defdb70caa8cf5">supermatrix.h</a>
+<li>SLU_SYL
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d6091b9ee4e608cb7c7cf7572703fbd3506">supermatrix.h</a>
+<li>SLU_SYU
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d600d509f1e8285653c36f81b10626fb747">supermatrix.h</a>
+<li>SLU_TRL
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d604defa99d9ff8ed4af7a92547b3faf9fb">supermatrix.h</a>
+<li>SLU_TRLU
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60fee10f9836531b012b1b80cf36355b67">supermatrix.h</a>
+<li>SLU_TRU
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60a9aea83e745716e0da54d738feb19cba">supermatrix.h</a>
+<li>SLU_TRUU
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d600c7113548d3d5a292cb2265477436ad7">supermatrix.h</a>
+<li>SLU_Z
+: <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e291901ace1e51c238b13622aaa733ef3b2a47">supermatrix.h</a>
+<li>sLUMemInit()
+: <a class="el" href="slu__sdefs_8h.html#f68715ec86cde90aa31fec07164d6ea6">slu_sdefs.h</a>
+, <a class="el" href="smemory_8c.html#adb7d9338f2fd9700f84951708cd8064">smemory.c</a>
+<li>sLUMemXpand()
+: <a class="el" href="slu__sdefs_8h.html#9af26d0426eb0bb63755880f2e67e7b7">slu_sdefs.h</a>
+, <a class="el" href="smemory_8c.html#80077f82e6d512e415519daed9dc3345">smemory.c</a>
+<li>sLUWorkFree()
+: <a class="el" href="slu__sdefs_8h.html#9035f0d2a50cf5d8e29287572bd1be83">slu_sdefs.h</a>
+, <a class="el" href="smemory_8c.html#0e837042fa6f4b27eb2cbfc2f80387fa">smemory.c</a>
+<li>sLUWorkInit()
+: <a class="el" href="smemory_8c.html#bc603ef3859778fb5631cf3d3b951de6">smemory.c</a>
+<li>smatvec()
+: <a class="el" href="scolumn__bmod_8c.html#b452e957171a4d0d9cfe6abb3d8a950c">scolumn_bmod.c</a>
+, <a class="el" href="sgstrs_8c.html#b452e957171a4d0d9cfe6abb3d8a950c">sgstrs.c</a>
+, <a class="el" href="smyblas2_8c.html#3ba02ba32ea4e0eae40802c9c5d082e1">smyblas2.c</a>
+, <a class="el" href="spanel__bmod_8c.html#b452e957171a4d0d9cfe6abb3d8a950c">spanel_bmod.c</a>
+, <a class="el" href="ssp__blas2_8c.html#b452e957171a4d0d9cfe6abb3d8a950c">ssp_blas2.c</a>
+<li>smatvec_mult()
+: <a class="el" href="sitersol_8c.html#d45b4dfe6fd3558b4c213cc08128d3a1">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#d45b4dfe6fd3558b4c213cc08128d3a1">sitersol1.c</a>
+<li>smemory_usage()
+: <a class="el" href="slu__sdefs_8h.html#b50ebebf3a620086366b6c310d52d681">slu_sdefs.h</a>
+, <a class="el" href="smemory_8c.html#658f955c5532813bd0490502efae563f">smemory.c</a>
+<li>SMILU_1
+: <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0183527dc1ee50ab34678f314925fdda0">superlu_enum_consts.h</a>
+<li>SMILU_2
+: <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff032a052178fd394b8110900fcb5702c13">superlu_enum_consts.h</a>
+<li>SMILU_3
+: <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff01e723dc87c76c9a21094300fc29e7274">superlu_enum_consts.h</a>
+<li>snode_profile()
+: <a class="el" href="slu__util_8h.html#01ded59744addeefd265dbb22d9f37d0">slu_util.h</a>
+<li>snrm2_()
+: <a class="el" href="ilu__sdrop__row_8c.html#c419c8b8797339212c62cd423e3e652c">ilu_sdrop_row.c</a>
+, <a class="el" href="sfgmr_8c.html#4ed20001c29f50f0a4f3261861086cc8">sfgmr.c</a>
+<li>SOL_COMM
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e7231560b869ae176dae4e9160656d5b9eb">superlu_enum_consts.h</a>
+<li>SOLVE
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72b9fc7975179c642bbac2b6ffd8fa3579">superlu_enum_consts.h</a>
+<li>sp_cgemm()
+: <a class="el" href="csp__blas3_8c.html#23c01569bec7ec0c247eb5df98f67841">csp_blas3.c</a>
+, <a class="el" href="slu__cdefs_8h.html#0473a1696817ed02c501ca8af8ff0285">slu_cdefs.h</a>
+<li>sp_cgemv()
+: <a class="el" href="csp__blas2_8c.html#1adbbd2f478e6a22843d82a07d42fb63">csp_blas2.c</a>
+, <a class="el" href="slu__cdefs_8h.html#59e320a29e9ded59a46e8d64619ffac6">slu_cdefs.h</a>
+<li>sp_coletree()
+: <a class="el" href="slu__util_8h.html#f8198f26bef3c82fbb8601fc5a8e0d9e">slu_util.h</a>
+, <a class="el" href="sp__coletree_8c.html#a0494ba5c3e08e41a10ce8a2d96f8c49">sp_coletree.c</a>
+<li>sp_ctrsv()
+: <a class="el" href="csp__blas2_8c.html#51cbd689a51632885b9b034002631a6e">csp_blas2.c</a>
+, <a class="el" href="slu__cdefs_8h.html#8299a994a223b7178314fe7faff74508">slu_cdefs.h</a>
+<li>sp_dgemm()
+: <a class="el" href="dsp__blas3_8c.html#6c8c4772ca0f241a43c5561b646fb749">dsp_blas3.c</a>
+, <a class="el" href="slu__ddefs_8h.html#b776edfed8eb517dc4d037e76ed2bb24">slu_ddefs.h</a>
+<li>sp_dgemv()
+: <a class="el" href="dsp__blas2_8c.html#221dfb4c5cbc550095a989c61fec4993">dsp_blas2.c</a>
+, <a class="el" href="slu__ddefs_8h.html#505f6c005fe6a0cdcbf00512a1e4823a">slu_ddefs.h</a>
+<li>sp_dtrsv()
+: <a class="el" href="dsp__blas2_8c.html#aa92ff654356fe62f70ebef5815627e4">dsp_blas2.c</a>
+, <a class="el" href="slu__ddefs_8h.html#f7ab3b2b81d10a67b258956bfc468740">slu_ddefs.h</a>
+<li>sp_ienv()
+: <a class="el" href="slu__util_8h.html#72be96e75e58564c4322ef9ef73ca65f">slu_util.h</a>
+, <a class="el" href="SRC_2sp__ienv_8c.html#21109476f1261abd6b256a393f5fd9e7">sp_ienv.c</a>
+<li>sp_preorder()
+: <a class="el" href="slu__util_8h.html#df9c573cbfb4520a5ea820702d27cfa5">slu_util.h</a>
+, <a class="el" href="sp__preorder_8c.html#d3a9a45f02456022c7eba79e17e215bc">sp_preorder.c</a>
+<li>sp_sgemm()
+: <a class="el" href="slu__sdefs_8h.html#35b4a0e44c32443df609069021d27812">slu_sdefs.h</a>
+, <a class="el" href="ssp__blas3_8c.html#4922193147765a6b36d753e5db65a268">ssp_blas3.c</a>
+<li>sp_sgemv()
+: <a class="el" href="ssp__blas2_8c.html#3a14fab0d3fc42c621199aed6962ab3e">ssp_blas2.c</a>
+, <a class="el" href="slu__sdefs_8h.html#9e543b2d14781b56ef349114012b4fc9">slu_sdefs.h</a>
+<li>sp_strsv()
+: <a class="el" href="slu__sdefs_8h.html#a6d287b6b9bcaf72a692343e614c429c">slu_sdefs.h</a>
+, <a class="el" href="ssp__blas2_8c.html#b9e8302d09840e67df27ddd4defaa621">ssp_blas2.c</a>
+<li>sp_symetree()
+: <a class="el" href="sp__coletree_8c.html#657d6b291654432e815392c2a00d2b84">sp_coletree.c</a>
+<li>sp_zgemm()
+: <a class="el" href="slu__zdefs_8h.html#723eb34b4ba347bbaa753c5d66cca4ab">slu_zdefs.h</a>
+, <a class="el" href="zsp__blas3_8c.html#2648905c9e6009b63d3bf0bb4d673e8e">zsp_blas3.c</a>
+<li>sp_zgemv()
+: <a class="el" href="zsp__blas2_8c.html#9ea39731f07b4c2ab20e44c97ffd773c">zsp_blas2.c</a>
+, <a class="el" href="slu__zdefs_8h.html#295a004dbce1f1b0aa48e7cb319da461">slu_zdefs.h</a>
+<li>sp_ztrsv()
+: <a class="el" href="slu__zdefs_8h.html#4f8e25c2e20af0219ad6719db052f3d7">slu_zdefs.h</a>
+, <a class="el" href="zsp__blas2_8c.html#070a51d222072a18d8d6ac91381b4859">zsp_blas2.c</a>
+<li>spanel_bmod()
+: <a class="el" href="slu__sdefs_8h.html#51486936a9ff5079afed80eb5bf8a3e0">slu_sdefs.h</a>
+, <a class="el" href="spanel__bmod_8c.html#1d0a6dc46d27416a6d5864dda1dba577">spanel_bmod.c</a>
+<li>spanel_dfs()
+: <a class="el" href="slu__sdefs_8h.html#77baf210393e04fa71d4e73b5e60e556">slu_sdefs.h</a>
+, <a class="el" href="spanel__dfs_8c.html#4d512383dafe1497b987e35d74eab9d8">spanel_dfs.c</a>
+<li>sParseFloatFormat()
+: <a class="el" href="sreadhb_8c.html#97275461fb2f2435189f35f5dd7c3fce">sreadhb.c</a>
+, <a class="el" href="sreadrb_8c.html#40bcf62d1e9ac32095b5868b35cef780">sreadrb.c</a>
+<li>sParseIntFormat()
+: <a class="el" href="sreadrb_8c.html#3ff3c5edc1cf7301cff66260418cac52">sreadrb.c</a>
+, <a class="el" href="sreadhb_8c.html#b0bd0cdb6d30a7cb74e401aa6ac3bce1">sreadhb.c</a>
+<li>SpaSize()
+: <a class="el" href="util_8c.html#5789a3d7549a127e955680283ecfe44e">util.c</a>
+<li>spcoletree()
+: <a class="el" href="slu__util_8h.html#0bccee6dda29384503240026c062bfc6">slu_util.h</a>
+<li>sPivotGrowth()
+: <a class="el" href="spivotgrowth_8c.html#9079b4ce43557af65fee107bc8f8d66f">spivotgrowth.c</a>
+, <a class="el" href="slu__sdefs_8h.html#cb8787465a6296109b9a306d5a315ff8">slu_sdefs.h</a>
+<li>spivotL()
+: <a class="el" href="spivotL_8c.html#6adadb830ad13360ce6656212f49fb29">spivotL.c</a>
+, <a class="el" href="slu__sdefs_8h.html#d7ddf03faedae25b4d73e0b6b33bf50c">slu_sdefs.h</a>
+<li>sPrint_CompCol_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#5cd6efad9d9fb7aef8a984f5e3cff66b">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#dc7fea2acb7f41b9818b189720b297a5">sutil.c</a>
+<li>sPrint_Dense_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#25b29c47333295f4aa744e541e277ea0">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#dac44427ccc5c67f7f00744d1fc8501e">sutil.c</a>
+<li>sprint_lu_col()
+: <a class="el" href="sutil_8c.html#3b1baccb0a743b085244b5c9c58616d8">sutil.c</a>
+, <a class="el" href="slu__sdefs_8h.html#297455c494a78c098b2bf418edbc6b16">slu_sdefs.h</a>
+<li>sprint_soln()
+: <a class="el" href="sgstrs_8c.html#d582f185cce067a3f9dd4225248af758">sgstrs.c</a>
+<li>sPrint_SuperNode_Matrix()
+: <a class="el" href="sutil_8c.html#2dfd96c3fba192a18a95e89735f8dedf">sutil.c</a>
+, <a class="el" href="slu__sdefs_8h.html#eb289a84407c9cbbb33cdf3dbb1dacbe">slu_sdefs.h</a>
+<li>sPrintPerf()
+: <a class="el" href="sutil_8c.html#e654ed8c97398a81ad9cf2bac09bbdce">sutil.c</a>
+<li>spruneL()
+: <a class="el" href="slu__sdefs_8h.html#cf9da2c45289246ef663fc4a96d1ad78">slu_sdefs.h</a>
+, <a class="el" href="spruneL_8c.html#81686daf606ed26d55e3b441ed939f08">spruneL.c</a>
+<li>spsolve()
+: <a class="el" href="sitersol1_8c.html#ba0747af8c12b8617ee149febff83471">sitersol1.c</a>
+, <a class="el" href="sitersol_8c.html#ba0747af8c12b8617ee149febff83471">sitersol.c</a>
+<li>sqselect()
+: <a class="el" href="qselect_8c.html#5a36bc5d24fe074bc4f3cfb65d7f0ae8">qselect.c</a>
+, <a class="el" href="slu__sdefs_8h.html#98d44fe59660f87330b0172151a76141">slu_sdefs.h</a>
+, <a class="el" href="slu__cdefs_8h.html#98d44fe59660f87330b0172151a76141">slu_cdefs.h</a>
+<li>sQuerySpace()
+: <a class="el" href="smemory_8c.html#ce83037d40e06fba28a0b787df4fbece">smemory.c</a>
+, <a class="el" href="slu__sdefs_8h.html#1357f9a3b2ffb9522883ad84affa63e3">slu_sdefs.h</a>
+<li>sreadhb()
+: <a class="el" href="sreadhb_8c.html#ad3b24bf891015e699d67ed53fb3b21b">sreadhb.c</a>
+, <a class="el" href="slu__sdefs_8h.html#734dbf3f5d66b2a53d88e69daaad729e">slu_sdefs.h</a>
+<li>sreadmt()
+: <a class="el" href="slu__sdefs_8h.html#b345670a95db3f9c4b9c451224db8227">slu_sdefs.h</a>
+<li>sreadrb()
+: <a class="el" href="slu__sdefs_8h.html#d992a573876b4abfe192ec2bc207f6b0">slu_sdefs.h</a>
+, <a class="el" href="sreadrb_8c.html#9db4e3af3f6d1037a275ebb516efe51c">sreadrb.c</a>
+<li>sreadrhs()
+: <a class="el" href="sreadtriple_8c.html#8d3e9341e80abc5aa02486a549621534">sreadtriple.c</a>
+<li>sreadtriple()
+: <a class="el" href="slu__sdefs_8h.html#e99cb18465c8992235a7bc003237f692">slu_sdefs.h</a>
+, <a class="el" href="sreadtriple_8c.html#408246d01d1879fa188dd4e28602795d">sreadtriple.c</a>
+<li>sReadValues()
+: <a class="el" href="sreadrb_8c.html#43a5fc149958a15cd7e3a30b2a1411cf">sreadrb.c</a>
+, <a class="el" href="sreadhb_8c.html#d90abece4b82f3f44fdefa92c28bda09">sreadhb.c</a>
+<li>sSetRWork()
+: <a class="el" href="slu__sdefs_8h.html#b5b2859bf1ef1900506dfa702574c6ad">slu_sdefs.h</a>
+, <a class="el" href="smemory_8c.html#da7e5387084d37939efddbcbf6a6eca1">smemory.c</a>
+<li>sSetupSpace()
+: <a class="el" href="smemory_8c.html#146216d4543e94e7ec4783eada50bf4c">smemory.c</a>
+<li>ssnode_bmod()
+: <a class="el" href="ssnode__bmod_8c.html#60492cc66830945bd7b3521c18312d4a">ssnode_bmod.c</a>
+, <a class="el" href="slu__sdefs_8h.html#60e60255360fae0b1458da070690a3a2">slu_sdefs.h</a>
+<li>ssnode_dfs()
+: <a class="el" href="ssnode__dfs_8c.html#5b66817c89ddf9f74e4773b49dc72872">ssnode_dfs.c</a>
+, <a class="el" href="slu__sdefs_8h.html#d9d54c8dfc11f1e034b4b7175be60ffb">slu_sdefs.h</a>
+<li>sStackCompress()
+: <a class="el" href="smemory_8c.html#abb6ccd3c62fa5284cd5de4fb4c7f533">smemory.c</a>
+<li>sswap_()
+: <a class="el" href="ilu__sdrop__row_8c.html#2ea44e9849dcb189a4e81f09d97e3c95">ilu_sdrop_row.c</a>
+<li>stack_end_t
+: <a class="el" href="superlu__enum__consts_8h.html#9c99a6c403d30f227aa91cf3b10f6aa4">superlu_enum_consts.h</a>
+<li>StackFull
+: <a class="el" href="cmemory_8c.html#1ef4d4db4d5e1fe0719416163e0e51ae">cmemory.c</a>
+, <a class="el" href="smemory_8c.html#1ef4d4db4d5e1fe0719416163e0e51ae">smemory.c</a>
+, <a class="el" href="zmemory_8c.html#1ef4d4db4d5e1fe0719416163e0e51ae">zmemory.c</a>
+, <a class="el" href="dmemory_8c.html#1ef4d4db4d5e1fe0719416163e0e51ae">dmemory.c</a>
+<li>StatFree()
+: <a class="el" href="util_8c.html#7d50e009f6f1f4ba8a63cdd912a0d31d">util.c</a>
+, <a class="el" href="slu__util_8h.html#b0fb3345d479a7ac24f75f0e64bdff4b">slu_util.h</a>
+<li>StatInit()
+: <a class="el" href="slu__util_8h.html#3b979ab4f4e75bdc1b89106dde6c8d72">slu_util.h</a>
+, <a class="el" href="util_8c.html#9b8745daf1fd22070364570977fe1ccc">util.c</a>
+<li>StatPrint()
+: <a class="el" href="util_8c.html#ef88fef229bf26ba82b50d99c20ad915">util.c</a>
+, <a class="el" href="slu__util_8h.html#a157fecae472b8ef5ce79bd59876099d">slu_util.h</a>
+<li>Stype_t
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">supermatrix.h</a>
+<li>super_stats()
+: <a class="el" href="util_8c.html#1040b7d1545dbf58b7af05d48621ed0a">util.c</a>
+, <a class="el" href="slu__util_8h.html#c33e407326ae1dc222aee7ff08f322cf">slu_util.h</a>
+<li>superlu_abort_and_exit()
+: <a class="el" href="util_8c.html#060bded38730c2e58fa7f7e19c43ba08">util.c</a>
+, <a class="el" href="slu__util_8h.html#bd38b081866ed2c3e4959c4c0560913c">slu_util.h</a>
+<li>superlu_free()
+: <a class="el" href="memory_8c.html#50cc6d9102542bf48b24f6d21cfa7deb">memory.c</a>
+, <a class="el" href="slu__util_8h.html#1745be2114a7b66ea7632292b03cb3ce">slu_util.h</a>
+<li>SUPERLU_FREE
+: <a class="el" href="slu__util_8h.html#9672c5511c3efd9467e4d375a347c192">slu_util.h</a>
+<li>superlu_malloc()
+: <a class="el" href="memory_8c.html#9ab2cc28807c3b5f5ca8eb9b85ea1f3f">memory.c</a>
+<li>SUPERLU_MALLOC
+: <a class="el" href="slu__util_8h.html#55a5ed83733c30850c14cc7b3f922a54">slu_util.h</a>
+<li>superlu_malloc()
+: <a class="el" href="slu__util_8h.html#7ec97fcbe08a55ad56048a43919d6843">slu_util.h</a>
+<li>SUPERLU_MAX
+: <a class="el" href="slu__util_8h.html#dca8259e9d345c7cbaaa0608a1acdfd4">slu_util.h</a>
+<li>SUPERLU_MIN
+: <a class="el" href="slu__util_8h.html#7147dd5df1048562cd4ab83e9fd808d9">slu_util.h</a>
+<li>SuperLU_timer_()
+: <a class="el" href="slu__util_8h.html#0c6777573bbfe81917cd381e0090d355">slu_util.h</a>
+, <a class="el" href="superlu__timer_8c.html#0c6777573bbfe81917cd381e0090d355">superlu_timer.c</a>
+<li>suser_free()
+: <a class="el" href="smemory_8c.html#29f7485dd32f85e996e16f2a199b002d">smemory.c</a>
+<li>suser_malloc()
+: <a class="el" href="smemory_8c.html#d68adc1b6de3f821f9fb24cdcf24d281">smemory.c</a>
+<li>susolve()
+: <a class="el" href="smyblas2_8c.html#32cc084708387e72f8f7d269226237a0">smyblas2.c</a>
+, <a class="el" href="scolumn__bmod_8c.html#25ea48f4f948c68a423f5bd3929e3c1f">scolumn_bmod.c</a>
+, <a class="el" href="sgstrs_8c.html#25ea48f4f948c68a423f5bd3929e3c1f">sgstrs.c</a>
+, <a class="el" href="ssp__blas2_8c.html#25ea48f4f948c68a423f5bd3929e3c1f">ssp_blas2.c</a>
+<li>symamd()
+: <a class="el" href="colamd_8h.html#e3d0175d1cb36f6cb16dfe96bbf946a3">colamd.h</a>
+, <a class="el" href="colamd_8c.html#e81243e57d577e17400b3f532aa4f1e9">colamd.c</a>
+<li>symamd_report()
+: <a class="el" href="colamd_8h.html#948750692c453eb36edc5b77a670ec54">colamd.h</a>
+, <a class="el" href="colamd_8c.html#df3bb99ff64711d528dafe21fd450512">colamd.c</a>
+<li>SYMBFAC
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e722b4b71567fe3767853886bdfbc9df681">superlu_enum_consts.h</a>
+<li>SYSTEM
+: <a class="el" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f657cc238145ec1361c72c327674c0d754">superlu_enum_consts.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x74.html b/DOC/html/globals_0x74.html
new file mode 100644
index 0000000..0ba808c
--- /dev/null
+++ b/DOC/html/globals_0x74.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li class="current"><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>T2_SUPER
+: <a class="el" href="ccolumn__dfs_8c.html#5fd0635776cafb1d697263a0db693b9e">ccolumn_dfs.c</a>
+, <a class="el" href="dcolumn__dfs_8c.html#5fd0635776cafb1d697263a0db693b9e">dcolumn_dfs.c</a>
+, <a class="el" href="zcolumn__dfs_8c.html#5fd0635776cafb1d697263a0db693b9e">zcolumn_dfs.c</a>
+, <a class="el" href="scolumn__dfs_8c.html#5fd0635776cafb1d697263a0db693b9e">scolumn_dfs.c</a>
+<li>TAIL
+: <a class="el" href="superlu__enum__consts_8h.html#9c99a6c403d30f227aa91cf3b10f6aa44c28487b052a2b05f3db4dc5a722b1d7">superlu_enum_consts.h</a>
+<li>TempSpace
+: <a class="el" href="smemory_8c.html#70ca807c578a0c495f7ce5edb0215e2b">smemory.c</a>
+, <a class="el" href="zmemory_8c.html#70ca807c578a0c495f7ce5edb0215e2b">zmemory.c</a>
+, <a class="el" href="cmemory_8c.html#70ca807c578a0c495f7ce5edb0215e2b">cmemory.c</a>
+, <a class="el" href="dmemory_8c.html#70ca807c578a0c495f7ce5edb0215e2b">dmemory.c</a>
+<li>THRESH
+: <a class="el" href="claqgs_8c.html#0656018abfc9fa2821827415f5d5ea57">claqgs.c</a>
+, <a class="el" href="dlaqgs_8c.html#0656018abfc9fa2821827415f5d5ea57">dlaqgs.c</a>
+, <a class="el" href="slaqgs_8c.html#0656018abfc9fa2821827415f5d5ea57">slaqgs.c</a>
+, <a class="el" href="zlaqgs_8c.html#0656018abfc9fa2821827415f5d5ea57">zlaqgs.c</a>
+<li>TRANS
+: <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d621f61e3015bfe0f0c2c3fda4c5a0cdf58">superlu_enum_consts.h</a>
+<li>trans_t
+: <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">superlu_enum_consts.h</a>
+<li>TreePostorder()
+: <a class="el" href="slu__util_8h.html#44084fde835d2ccaa25e9fd942a72b7a">slu_util.h</a>
+, <a class="el" href="sp__coletree_8c.html#8bf99818533bf5c192e1e4791b4700cc">sp_coletree.c</a>
+<li>TRSV
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72be6640d5e5560662c8a729e54e770ecf">superlu_enum_consts.h</a>
+<li>TRUE
+: <a class="el" href="slu__util_8h.html#a8cecfc5c5c054d2875c03e77b7be15d">slu_util.h</a>
+, <a class="el" href="colamd_8c.html#a8cecfc5c5c054d2875c03e77b7be15d">colamd.c</a>
+<li>TRUE_
+: <a class="el" href="dlamch_8c.html#ca1e6c3771fa0306e1dad2b11d22a8e5">dlamch.c</a>
+, <a class="el" href="slamch_8c.html#ca1e6c3771fa0306e1dad2b11d22a8e5">slamch.c</a>
+<li>TWO_NORM
+: <a class="el" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2f0916434ec408d94e09a3db2f278fec83">superlu_enum_consts.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x75.html b/DOC/html/globals_0x75.html
new file mode 100644
index 0000000..746da26
--- /dev/null
+++ b/DOC/html/globals_0x75.html
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li class="current"><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>U_NZ_START
+: <a class="el" href="slu__util_8h.html#c641190b1a047ebcf224372cb3dfec68">slu_util.h</a>
+<li>U_SUB
+: <a class="el" href="slu__util_8h.html#cbd74ce05240823854ebfcd301f200e8">slu_util.h</a>
+<li>UCOL
+: <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b268eee86a440f07e5aeb1333af7c49968">superlu_enum_consts.h</a>
+<li>ULVL
+: <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2307244b6de1926249c921821989702db">superlu_enum_consts.h</a>
+<li>UPCASE
+: <a class="el" href="slu__Cnames_8h.html#cc3ddbc87aab0c0642d350d040e5bdfc">slu_Cnames.h</a>
+<li>USER
+: <a class="el" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f6e2d30a195cee6b2961cc2c23ea4b520b">superlu_enum_consts.h</a>
+<li>USER_ABORT
+: <a class="el" href="slu__util_8h.html#aba7be0a786a716c200675ac43827e2a">slu_util.h</a>
+<li>user_bcopy()
+: <a class="el" href="cmemory_8c.html#4c226087c09a94ff40b92b14fa46fc53">cmemory.c</a>
+, <a class="el" href="dmemory_8c.html#4c226087c09a94ff40b92b14fa46fc53">dmemory.c</a>
+, <a class="el" href="smemory_8c.html#4c226087c09a94ff40b92b14fa46fc53">smemory.c</a>
+, <a class="el" href="memory_8c.html#9a6637190072609a7dcdec007bd98113">memory.c</a>
+, <a class="el" href="zmemory_8c.html#4c226087c09a94ff40b92b14fa46fc53">zmemory.c</a>
+<li>USER_FREE
+: <a class="el" href="slu__util_8h.html#d7924033040c27afdb4a51ac9f8295b1">slu_util.h</a>
+<li>USER_MALLOC
+: <a class="el" href="slu__util_8h.html#232b101af98715228590ae6e089f4c65">slu_util.h</a>
+<li>USUB
+: <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2ec445297f8e62e119a337ea2b5dd2b66">superlu_enum_consts.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x78.html b/DOC/html/globals_0x78.html
new file mode 100644
index 0000000..922848b
--- /dev/null
+++ b/DOC/html/globals_0x78.html
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li class="current"><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_x">- x -</a></h3><ul>
+<li>xerbla_()
+: <a class="el" href="slu__util_8h.html#8ddc46fddd8c0c53fc9e77fefdf9a456">slu_util.h</a>
+, <a class="el" href="xerbla_8c.html#eba2ad2b99fd4707175a2b9f42597e50">xerbla.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x79.html b/DOC/html/globals_0x79.html
new file mode 100644
index 0000000..12bfa06
--- /dev/null
+++ b/DOC/html/globals_0x79.html
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li class="current"><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_y">- y -</a></h3><ul>
+<li>YES
+: <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f99f136a862ba5c7d16967231c29f09d6">superlu_enum_consts.h</a>
+<li>yes_no_t
+: <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">superlu_enum_consts.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_0x7a.html b/DOC/html/globals_0x7a.html
new file mode 100644
index 0000000..c70a9cb
--- /dev/null
+++ b/DOC/html/globals_0x7a.html
@@ -0,0 +1,322 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+      <li class="current"><a href="globals_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_z">- z -</a></h3><ul>
+<li>z_abs()
+: <a class="el" href="dcomplex_8c.html#f701b1c549ee8dcf6767742a91681b55">dcomplex.c</a>
+, <a class="el" href="slu__dcomplex_8h.html#56231cc660c4a63d58ec6f02754b7d41">slu_dcomplex.h</a>
+<li>z_abs1()
+: <a class="el" href="slu__dcomplex_8h.html#366281128462d1635073d7794fda008a">slu_dcomplex.h</a>
+, <a class="el" href="dcomplex_8c.html#47b00c33108809a1a9a94ffea7ef2097">dcomplex.c</a>
+<li>z_add
+: <a class="el" href="slu__dcomplex_8h.html#35daa816dd5911bdb075aba8856f9cf0">slu_dcomplex.h</a>
+<li>z_div()
+: <a class="el" href="dcomplex_8c.html#4cfde2671a83833a15c5b48517781db0">dcomplex.c</a>
+, <a class="el" href="slu__dcomplex_8h.html#bfe979e43a797b71939e267913abf791">slu_dcomplex.h</a>
+<li>z_eq
+: <a class="el" href="slu__dcomplex_8h.html#fe2eaa3195b69824be150f4163f8d056">slu_dcomplex.h</a>
+<li>z_exp()
+: <a class="el" href="dcomplex_8c.html#b03337c37aa8b70db9a3bac9368fb06c">dcomplex.c</a>
+, <a class="el" href="slu__dcomplex_8h.html#90ddba9274fa6a571dadf228763fee4b">slu_dcomplex.h</a>
+<li>z_sgn()
+: <a class="el" href="dcomplex_8c.html#36451f8af6b7bd3a4d5f655ead8d5ee4">dcomplex.c</a>
+, <a class="el" href="slu__dcomplex_8h.html#b05d15baf3424d677bf6784414882b21">slu_dcomplex.h</a>
+<li>z_sqrt()
+: <a class="el" href="dcomplex_8c.html#29f4b8ea3e1309c47c2b1f783c6efa89">dcomplex.c</a>
+, <a class="el" href="slu__dcomplex_8h.html#c1e4793bdd705299497404ce177c3dcd">slu_dcomplex.h</a>
+<li>z_sub
+: <a class="el" href="slu__dcomplex_8h.html#8d01f55090621b481fcec184a2012ffb">slu_dcomplex.h</a>
+<li>zallocateA()
+: <a class="el" href="slu__zdefs_8h.html#2643ac77912d9f351f7294677bbe05f2">slu_zdefs.h</a>
+, <a class="el" href="zmemory_8c.html#46bbbd9396593820fd01a6d3dea08d31">zmemory.c</a>
+<li>zaxpy_()
+: <a class="el" href="ilu__zdrop__row_8c.html#ceb6d1d72184759746247bd55dcede0f">ilu_zdrop_row.c</a>
+<li>zcheck_tempv()
+: <a class="el" href="zpanel__bmod_8c.html#8673fc0ac301b4cf35788245fe0cdbcd">zpanel_bmod.c</a>
+, <a class="el" href="zutil_8c.html#bbfe87885f0f664d31b4f6fcf2180127">zutil.c</a>
+<li>zcolumn_bmod()
+: <a class="el" href="slu__zdefs_8h.html#49aac39da44afbad110705d4a7f9f862">slu_zdefs.h</a>
+, <a class="el" href="zcolumn__bmod_8c.html#a84a3714b3d55eb721a7a47eb0bcc110">zcolumn_bmod.c</a>
+<li>zcolumn_dfs()
+: <a class="el" href="slu__zdefs_8h.html#b7a8371a03a4cd272a5cb05d1fd7d8ae">slu_zdefs.h</a>
+, <a class="el" href="zcolumn__dfs_8c.html#c677cb46a7e96e45e93c9af1e8297314">zcolumn_dfs.c</a>
+<li>zCompRow_to_CompCol()
+: <a class="el" href="slu__zdefs_8h.html#b2b58eff4de76ae8ea11d3fd1d285f97">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#ee4cad234e4df121da5386a86754dd4d">zutil.c</a>
+<li>zcopy_()
+: <a class="el" href="ilu__zcopy__to__ucol_8c.html#ad105755c4a253c2d6dbce95720abb48">ilu_zcopy_to_ucol.c</a>
+, <a class="el" href="ilu__zdrop__row_8c.html#ad105755c4a253c2d6dbce95720abb48">ilu_zdrop_row.c</a>
+<li>zCopy_CompCol_Matrix()
+: <a class="el" href="slu__zdefs_8h.html#5d43eba6fc1bbf869b2d696b71a6566c">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#6d326511607c3cb8c0b654b675bd3700">zutil.c</a>
+<li>zCopy_Dense_Matrix()
+: <a class="el" href="zutil_8c.html#6632ad6334d30a38c9e8b026a3983b65">zutil.c</a>
+, <a class="el" href="slu__zdefs_8h.html#4a51f1cca404f383d725cf6ca2ab1f5b">slu_zdefs.h</a>
+<li>zcopy_to_ucol()
+: <a class="el" href="slu__zdefs_8h.html#01e6dfda172d9c30fe038497a10d25fa">slu_zdefs.h</a>
+, <a class="el" href="zcopy__to__ucol_8c.html#587a2ae921e7de3276cd0c4fc8a3aadb">zcopy_to_ucol.c</a>
+<li>zCreate_CompCol_Matrix()
+: <a class="el" href="slu__zdefs_8h.html#7281942aff23b914e0cb23478bf8cf39">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#349f23fdb4e958cc6da8e890554b9868">zutil.c</a>
+<li>zCreate_CompRow_Matrix()
+: <a class="el" href="slu__zdefs_8h.html#d88d522f3d109c52379fa9c7274f100f">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#bbb9f38872629121898fe588e5cf9c46">zutil.c</a>
+<li>zCreate_Dense_Matrix()
+: <a class="el" href="slu__zdefs_8h.html#b9280cf311111348a607e78aa2311e73">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#8316b5e4832ca200a14d14f5ed164695">zutil.c</a>
+<li>zCreate_SuperNode_Matrix()
+: <a class="el" href="slu__zdefs_8h.html#c64ee6fda439e62b0e0a855cd5a19441">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#43150b5d7a29eebba2f8de5c2a35d645">zutil.c</a>
+<li>zd_mult
+: <a class="el" href="slu__dcomplex_8h.html#aa361695d091f77d512454ddbee3b2b3">slu_dcomplex.h</a>
+<li>zdominate()
+: <a class="el" href="zdiagonal_8c.html#430ade01a0921d8a35ec42c2bfef03bd">zdiagonal.c</a>
+<li>zdotc_()
+: <a class="el" href="zfgmr_8c.html#c30d3185c0f6f847e371366e55e28fb6">zfgmr.c</a>
+<li>zDumpLine()
+: <a class="el" href="zreadhb_8c.html#4c9a9a1484351dcc1ae1a756a18081e7">zreadhb.c</a>
+, <a class="el" href="zreadrb_8c.html#efd047e091d4564a958a3d6bd0119eec">zreadrb.c</a>
+<li>zexpand()
+: <a class="el" href="zmemory_8c.html#67833ee9526cec0b31d0f26e527b97df">zmemory.c</a>
+<li>zfgmr()
+: <a class="el" href="zfgmr_8c.html#bffb8ceaa53b9b883ea0851a99033759">zfgmr.c</a>
+<li>zfill()
+: <a class="el" href="slu__zdefs_8h.html#ff0de872dc60f87b89ae93a8f93a7a70">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#c1c222f7cb3253d97408d9395d6919d4">zutil.c</a>
+<li>zfill_diag()
+: <a class="el" href="zdiagonal_8c.html#0509095ae31fa257de9d3463926d7d37">zdiagonal.c</a>
+<li>zFillRHS()
+: <a class="el" href="slu__zdefs_8h.html#856d8820ae8cf7ccf6ca662bc680de26">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#cf2b404121b9a70942631f50b85fd8a1">zutil.c</a>
+<li>zGenXtrue()
+: <a class="el" href="slu__zdefs_8h.html#bf8c836a49482c27abdc046ec7c726cb">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#a81fbc4bdd835def817191d94fb8b208">zutil.c</a>
+<li>zgscon()
+: <a class="el" href="slu__zdefs_8h.html#42c7a1b7c813c330cd5a60852a592395">slu_zdefs.h</a>
+, <a class="el" href="zgscon_8c.html#6be8d109849b5406d8256de2419caf2e">zgscon.c</a>
+<li>zgsequ()
+: <a class="el" href="slu__zdefs_8h.html#e112ddfff2798b7e4c090d96d2a8d80a">slu_zdefs.h</a>
+, <a class="el" href="zgsequ_8c.html#55aa9c7e1576dc4bd1e5d3155f35598c">zgsequ.c</a>
+<li>zgsisv()
+: <a class="el" href="slu__zdefs_8h.html#06d5de0123fd4c7a00bcbf0a3944883d">slu_zdefs.h</a>
+<li>zgsisx()
+: <a class="el" href="slu__zdefs_8h.html#34c7b072bc210f8cfb9d88d0ab20775a">slu_zdefs.h</a>
+, <a class="el" href="zgsisx_8c.html#2757feaa11de219577144d87b69e9ca9">zgsisx.c</a>
+<li>zgsitrf()
+: <a class="el" href="slu__zdefs_8h.html#2fee39459dfac17529487ea539648cfb">slu_zdefs.h</a>
+, <a class="el" href="zgsitrf_8c.html#8b8106aaa938c48c4276bece6a82d04c">zgsitrf.c</a>
+<li>zgsrfs()
+: <a class="el" href="slu__zdefs_8h.html#7675aa04369725f7f65c74249388f5a5">slu_zdefs.h</a>
+, <a class="el" href="zgsrfs_8c.html#c21acad54459e74738cbca9f7f20a73b">zgsrfs.c</a>
+<li>zgssv()
+: <a class="el" href="slu__zdefs_8h.html#f381e217f2aa7e57bcdebfc9e1e7b973">slu_zdefs.h</a>
+, <a class="el" href="zgssv_8c.html#b87f9fe7f59ed6d2e53f4d49fa78ad1f">zgssv.c</a>
+<li>zgssvx()
+: <a class="el" href="slu__zdefs_8h.html#75f04171385eb89527fe10f871b2149a">slu_zdefs.h</a>
+, <a class="el" href="zgssvx_8c.html#c2e779425ce37b373b93fc2a7d3fa8e4">zgssvx.c</a>
+<li>zgstrf()
+: <a class="el" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">slu_zdefs.h</a>
+, <a class="el" href="zgstrf_8c.html#a551561ebd43f4b873979c28adb6a41c">zgstrf.c</a>
+<li>zgstrs()
+: <a class="el" href="slu__zdefs_8h.html#1b74304cd437572bbec487bc29422a90">slu_zdefs.h</a>
+, <a class="el" href="zgstrs_8c.html#7ddda3f91ee65762d0589d5d613f2795">zgstrs.c</a>
+<li>zinf_norm_error()
+: <a class="el" href="slu__zdefs_8h.html#7b335e97d77b1adf81e383e5bcb58f3e">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#0c645d9e2d757c5f5fa1ecd67f0c2a07">zutil.c</a>
+<li>zlacon_()
+: <a class="el" href="zlacon_8c.html#529146a8706bcc149050e70f7e56da07">zlacon.c</a>
+<li>zlangs()
+: <a class="el" href="zlangs_8c.html#37d1ec3ddab88e8c46872c5795ea5ada">zlangs.c</a>
+<li>zlaqgs()
+: <a class="el" href="slu__zdefs_8h.html#a7f8e784fe805303d413a3dc684aa8a5">slu_zdefs.h</a>
+, <a class="el" href="zlaqgs_8c.html#46f8eefc33139578d9b4f6d1444a993c">zlaqgs.c</a>
+<li>zldperm()
+: <a class="el" href="slu__zdefs_8h.html#231c25a6f73e928d43ee8f3f4f291844">slu_zdefs.h</a>
+, <a class="el" href="zldperm_8c.html#6eac8c5b79a07db190086129b0a02901">zldperm.c</a>
+<li>zlsolve()
+: <a class="el" href="zpanel__bmod_8c.html#fb6f65890b5348dc1692d01b087be35d">zpanel_bmod.c</a>
+, <a class="el" href="zcolumn__bmod_8c.html#fb6f65890b5348dc1692d01b087be35d">zcolumn_bmod.c</a>
+, <a class="el" href="zgstrs_8c.html#fb6f65890b5348dc1692d01b087be35d">zgstrs.c</a>
+, <a class="el" href="zmyblas2_8c.html#3aa665de6b6103328267f26f160447ae">zmyblas2.c</a>
+, <a class="el" href="zsp__blas2_8c.html#fb6f65890b5348dc1692d01b087be35d">zsp_blas2.c</a>
+<li>zLUMemInit()
+: <a class="el" href="slu__zdefs_8h.html#0c3bf2c88bdda13cede034c6e9a407e5">slu_zdefs.h</a>
+, <a class="el" href="zmemory_8c.html#2401dcedab9db9b72801239bcb0dd85d">zmemory.c</a>
+<li>zLUMemXpand()
+: <a class="el" href="slu__zdefs_8h.html#399a28849bd52ce90c1cbc8e4cd85046">slu_zdefs.h</a>
+, <a class="el" href="zmemory_8c.html#f10c27072006d8936e0b135a0d0e03ee">zmemory.c</a>
+<li>zLUWorkFree()
+: <a class="el" href="slu__zdefs_8h.html#572914748b4f1aa544a61477095e7fe5">slu_zdefs.h</a>
+, <a class="el" href="zmemory_8c.html#077a37f8ac3dd3f11b78b70ead445a4a">zmemory.c</a>
+<li>zLUWorkInit()
+: <a class="el" href="zmemory_8c.html#882c0544ebe2e000b982820ac583c180">zmemory.c</a>
+<li>zmatvec()
+: <a class="el" href="zcolumn__bmod_8c.html#1165292a4e2a6c282638868bd503fb7a">zcolumn_bmod.c</a>
+, <a class="el" href="zgstrs_8c.html#1165292a4e2a6c282638868bd503fb7a">zgstrs.c</a>
+, <a class="el" href="zmyblas2_8c.html#b1eac084fbf4960e20cf730d091699c8">zmyblas2.c</a>
+, <a class="el" href="zpanel__bmod_8c.html#1165292a4e2a6c282638868bd503fb7a">zpanel_bmod.c</a>
+, <a class="el" href="zsp__blas2_8c.html#1165292a4e2a6c282638868bd503fb7a">zsp_blas2.c</a>
+<li>zmatvec_mult()
+: <a class="el" href="zitersol_8c.html#4e1543e740b505ad649e15bddd2c60ca">zitersol.c</a>
+, <a class="el" href="zitersol1_8c.html#4e1543e740b505ad649e15bddd2c60ca">zitersol1.c</a>
+<li>zmemory_usage()
+: <a class="el" href="zmemory_8c.html#17416eb78c42063624b6859d9f88820b">zmemory.c</a>
+, <a class="el" href="slu__zdefs_8h.html#5987692fb793ccc6122ff861261f1ca2">slu_zdefs.h</a>
+<li>ZOLTAN
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89cbddc2b83ab41d07e8d180f52bcfb00ac">superlu_enum_consts.h</a>
+<li>zpanel_bmod()
+: <a class="el" href="slu__zdefs_8h.html#58b397fc5660a6a0638f2aba584abf64">slu_zdefs.h</a>
+, <a class="el" href="zpanel__bmod_8c.html#6c1aae0b0c84fef3b9feb5362bf2e047">zpanel_bmod.c</a>
+<li>zpanel_dfs()
+: <a class="el" href="slu__zdefs_8h.html#ddc01b7cd28e5566177c284480a680f3">slu_zdefs.h</a>
+, <a class="el" href="zpanel__dfs_8c.html#2dfc62f0d77e7b112075276b06542f87">zpanel_dfs.c</a>
+<li>zParseFloatFormat()
+: <a class="el" href="zreadhb_8c.html#fb86c617e31fa765098b83fd74539b9b">zreadhb.c</a>
+, <a class="el" href="zreadrb_8c.html#307d3abcf9f61c651e454e0876736288">zreadrb.c</a>
+<li>zParseIntFormat()
+: <a class="el" href="zreadhb_8c.html#b753ef9c907b1298d163150b6e658247">zreadhb.c</a>
+, <a class="el" href="zreadrb_8c.html#a097366cbacd16b824248c34e8b1efa9">zreadrb.c</a>
+<li>zPivotGrowth()
+: <a class="el" href="zpivotgrowth_8c.html#713bc716e136b32dfad757a3fd7d3005">zpivotgrowth.c</a>
+, <a class="el" href="slu__zdefs_8h.html#87aab883e88a4ee7f6e19b7d9d5f690c">slu_zdefs.h</a>
+<li>zpivotL()
+: <a class="el" href="zpivotL_8c.html#06029dacc576a26c1495317264d00fcc">zpivotL.c</a>
+, <a class="el" href="slu__zdefs_8h.html#dce57d338c03a6432064f295023ba976">slu_zdefs.h</a>
+<li>zPrint_CompCol_Matrix()
+: <a class="el" href="slu__zdefs_8h.html#03a002c56d260744e0c73d90a28ca92e">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#7f3c67eba79f4d63a7ef19781935985d">zutil.c</a>
+<li>zPrint_Dense_Matrix()
+: <a class="el" href="zutil_8c.html#d665640e89334e9f7a57355e030ff63d">zutil.c</a>
+, <a class="el" href="slu__zdefs_8h.html#4cf22ecc8aa6e20245d071b53f1a71c4">slu_zdefs.h</a>
+<li>zprint_lu_col()
+: <a class="el" href="zutil_8c.html#8083f641fd96ede2f54db44d18f984e9">zutil.c</a>
+, <a class="el" href="slu__zdefs_8h.html#3bdc4fd0a2bb9efd731dee5828ad64a9">slu_zdefs.h</a>
+<li>zprint_soln()
+: <a class="el" href="zgstrs_8c.html#afcbead526e1e4f1b7895d3c5abfe4ab">zgstrs.c</a>
+<li>zPrint_SuperNode_Matrix()
+: <a class="el" href="slu__zdefs_8h.html#fa07de3629132fd900f759166eef6f45">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#12d2264eb0e17728142e651de7cc8f9c">zutil.c</a>
+<li>zPrintPerf()
+: <a class="el" href="zutil_8c.html#0807017bff32a20ff59820583a9e038d">zutil.c</a>
+<li>zpruneL()
+: <a class="el" href="zpruneL_8c.html#b91a986738634178968bfab08ed42b06">zpruneL.c</a>
+, <a class="el" href="slu__zdefs_8h.html#8a368adca5d498e86910b5371de3131d">slu_zdefs.h</a>
+<li>zpsolve()
+: <a class="el" href="zitersol1_8c.html#e970280d13c1a6f41e71834f00776082">zitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#e970280d13c1a6f41e71834f00776082">zitersol.c</a>
+<li>zQuerySpace()
+: <a class="el" href="slu__zdefs_8h.html#711303a4bc043eb0b1bff72b32d52397">slu_zdefs.h</a>
+, <a class="el" href="zmemory_8c.html#286bf5eff2472576ba5fafe9d1daf835">zmemory.c</a>
+<li>zreadhb()
+: <a class="el" href="slu__zdefs_8h.html#cc866ab1cbd2abcb56913ad79af5d0ea">slu_zdefs.h</a>
+, <a class="el" href="zreadhb_8c.html#ff0805af5c8155100799532d3a9613fb">zreadhb.c</a>
+<li>zreadmt()
+: <a class="el" href="slu__zdefs_8h.html#cd4ff4683d71e444e948fbcacb23e803">slu_zdefs.h</a>
+<li>zreadrb()
+: <a class="el" href="zreadrb_8c.html#6cc83af309b56ffac83144d77effc249">zreadrb.c</a>
+, <a class="el" href="slu__zdefs_8h.html#e3c9645c921a407e41fdd5f98c4b1a80">slu_zdefs.h</a>
+<li>zreadrhs()
+: <a class="el" href="zreadtriple_8c.html#99021adc7c4e9405035663452ff651dc">zreadtriple.c</a>
+<li>zreadtriple()
+: <a class="el" href="zreadtriple_8c.html#ae3562688014d408faee4f6dc8c9647b">zreadtriple.c</a>
+, <a class="el" href="slu__zdefs_8h.html#952c154abdfc9bda69b118d25c7e599f">slu_zdefs.h</a>
+<li>zReadValues()
+: <a class="el" href="zreadrb_8c.html#eec396507b7780d0b2da753e8bfca5f4">zreadrb.c</a>
+, <a class="el" href="zreadhb_8c.html#321d6efeb00f45e3e4c961dcc3aa0fcc">zreadhb.c</a>
+<li>zSetRWork()
+: <a class="el" href="zmemory_8c.html#2d983454dded23484688350acd60d453">zmemory.c</a>
+, <a class="el" href="slu__zdefs_8h.html#a4e2012fe2ee4c2d1cd2a261bdb0455b">slu_zdefs.h</a>
+<li>zSetupSpace()
+: <a class="el" href="zmemory_8c.html#0edfb761a3a551bce967037b3e1aa9e2">zmemory.c</a>
+<li>zsnode_bmod()
+: <a class="el" href="zsnode__bmod_8c.html#e4edaac25125ac0e6e309858b4b3b4d0">zsnode_bmod.c</a>
+, <a class="el" href="slu__zdefs_8h.html#f416483e20a4ec79bf0d04d6e55c585b">slu_zdefs.h</a>
+<li>zsnode_dfs()
+: <a class="el" href="slu__zdefs_8h.html#f0e16dd7be5f8beaf0e445562995de49">slu_zdefs.h</a>
+, <a class="el" href="zsnode__dfs_8c.html#30b52c07431f048048b8bf3e8c03087a">zsnode_dfs.c</a>
+<li>zStackCompress()
+: <a class="el" href="zmemory_8c.html#607a863b6fcdf1adb1931dd4c8277ee0">zmemory.c</a>
+<li>zswap_()
+: <a class="el" href="ilu__zdrop__row_8c.html#20051222dca15b4b236d9758042171cf">ilu_zdrop_row.c</a>
+<li>zuser_free()
+: <a class="el" href="zmemory_8c.html#9568d77c3e1f50a9b000f50a9941300a">zmemory.c</a>
+<li>zuser_malloc()
+: <a class="el" href="zmemory_8c.html#0546ac846872bb77841c8502590dc3e2">zmemory.c</a>
+<li>zusolve()
+: <a class="el" href="zcolumn__bmod_8c.html#c9798dda11fa387039351d70fa59ce3b">zcolumn_bmod.c</a>
+, <a class="el" href="zmyblas2_8c.html#0b0f90cd6fb38a0827eb67b22c8523cb">zmyblas2.c</a>
+, <a class="el" href="zsp__blas2_8c.html#c9798dda11fa387039351d70fa59ce3b">zsp_blas2.c</a>
+, <a class="el" href="zgstrs_8c.html#c9798dda11fa387039351d70fa59ce3b">zgstrs.c</a>
+<li>zz_conj
+: <a class="el" href="slu__dcomplex_8h.html#8c08104b0130f14f6f40f17bee239e80">slu_dcomplex.h</a>
+<li>zz_mult
+: <a class="el" href="slu__dcomplex_8h.html#008009fa4c5e6733f840478ceb0fb8ae">slu_dcomplex.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_defs.html b/DOC/html/globals_defs.html
new file mode 100644
index 0000000..bfdef6d
--- /dev/null
+++ b/DOC/html/globals_defs.html
@@ -0,0 +1,393 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="#index_a"><span>a</span></a></li>
+      <li><a href="#index_c"><span>c</span></a></li>
+      <li><a href="#index_d"><span>d</span></a></li>
+      <li><a href="#index_e"><span>e</span></a></li>
+      <li><a href="#index_f"><span>f</span></a></li>
+      <li><a href="#index_g"><span>g</span></a></li>
+      <li><a href="#index_i"><span>i</span></a></li>
+      <li><a href="#index_k"><span>k</span></a></li>
+      <li><a href="#index_l"><span>l</span></a></li>
+      <li><a href="#index_m"><span>m</span></a></li>
+      <li><a href="#index_n"><span>n</span></a></li>
+      <li><a href="#index_o"><span>o</span></a></li>
+      <li><a href="#index_p"><span>p</span></a></li>
+      <li><a href="#index_r"><span>r</span></a></li>
+      <li><a href="#index_s"><span>s</span></a></li>
+      <li><a href="#index_t"><span>t</span></a></li>
+      <li><a href="#index_u"><span>u</span></a></li>
+      <li><a href="#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>ABORT
+: <a class="el" href="slu__util_8h.html#a4b133a54309e2c6e4ba69f3ff1141c2">slu_util.h</a>
+<li>abs
+: <a class="el" href="dlamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">dlamch.c</a>
+, <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">slamch.c</a>
+, <a class="el" href="mc64ad_8c.html#6a010865b10e541735fa2da8f3cd062d">mc64ad.c</a>
+<li>ADD_
+: <a class="el" href="slu__Cnames_8h.html#42e4b5fadd9f6757585096fa059eea29">slu_Cnames.h</a>
+<li>ADD__
+: <a class="el" href="slu__Cnames_8h.html#64e86942f56cb415dbbbf31c6f390542">slu_Cnames.h</a>
+<li>ALIVE
+: <a class="el" href="colamd_8c.html#d8beef706da0344be19d59438fcdab6d">colamd.c</a>
+<li>ASSERT
+: <a class="el" href="colamd_8c.html#87e006a00875d2e518652108f6cb5790">colamd.c</a>
+</ul>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>c_add
+: <a class="el" href="slu__scomplex_8h.html#f3df9377099fd2cba886d217734ce884">slu_scomplex.h</a>
+<li>C_CALL
+: <a class="el" href="slu__Cnames_8h.html#26f0902a7057c96ab11966ab8404f4f6">slu_Cnames.h</a>
+<li>c_eq
+: <a class="el" href="slu__scomplex_8h.html#82b7c0f8931b82e92d24a076eab0e82e">slu_scomplex.h</a>
+<li>c_sub
+: <a class="el" href="slu__scomplex_8h.html#0fe6bb9dac5f735dd69a127519a9c841">slu_scomplex.h</a>
+<li>cc_conj
+: <a class="el" href="slu__scomplex_8h.html#c917679ece23ee5f61e994fb56b30e1c">slu_scomplex.h</a>
+<li>cc_mult
+: <a class="el" href="slu__scomplex_8h.html#515037047a218e7f77c4f495b1d6abca">slu_scomplex.h</a>
+<li>CHECK_MALLOC
+: <a class="el" href="slu__util_8h.html#35401f732a50d2a0af33db1ea224b1f6">slu_util.h</a>
+<li>COL_IS_ALIVE
+: <a class="el" href="colamd_8c.html#50f9ca65904b13f345862cb46d08d84b">colamd.c</a>
+<li>COL_IS_DEAD
+: <a class="el" href="colamd_8c.html#a08664bd5b8133f28dbeedc9a030fc86">colamd.c</a>
+<li>COL_IS_DEAD_PRINCIPAL
+: <a class="el" href="colamd_8c.html#003c0e2dae54bcb7c680333304dd4dcb">colamd.c</a>
+<li>COLAMD_C
+: <a class="el" href="colamd_8h.html#339fb9b07ed315667cc4542c15116c83">colamd.h</a>
+<li>COLAMD_DEFRAG_COUNT
+: <a class="el" href="colamd_8h.html#babfabfa19364ec563aa9c15bcc9714e">colamd.h</a>
+<li>COLAMD_DENSE_COL
+: <a class="el" href="colamd_8h.html#f92de54efdec91d7ab64e7bec07eb12c">colamd.h</a>
+<li>COLAMD_DENSE_ROW
+: <a class="el" href="colamd_8h.html#45a417439d08823fa620ca00d834dd61">colamd.h</a>
+<li>COLAMD_ERROR_A_not_present
+: <a class="el" href="colamd_8h.html#2347fb9e509c8bf9b97a50f96dea281c">colamd.h</a>
+<li>COLAMD_ERROR_A_too_small
+: <a class="el" href="colamd_8h.html#323108d44db4186fad5a2066139f70b7">colamd.h</a>
+<li>COLAMD_ERROR_col_length_negative
+: <a class="el" href="colamd_8h.html#3b6df4a489ed0c7de8ad12251cdac5d6">colamd.h</a>
+<li>COLAMD_ERROR_internal_error
+: <a class="el" href="colamd_8h.html#e97b9ba07b455e4ce07c53a4d71c1169">colamd.h</a>
+<li>COLAMD_ERROR_ncol_negative
+: <a class="el" href="colamd_8h.html#2feedddbe535286cbea9eca9fca91f45">colamd.h</a>
+<li>COLAMD_ERROR_nnz_negative
+: <a class="el" href="colamd_8h.html#7147ea7a9d673f17ef856e9914f90c81">colamd.h</a>
+<li>COLAMD_ERROR_nrow_negative
+: <a class="el" href="colamd_8h.html#8e848cfde5cdf42fcb316695305f8002">colamd.h</a>
+<li>COLAMD_ERROR_out_of_memory
+: <a class="el" href="colamd_8h.html#703f11265b521c931cdd44709d141fca">colamd.h</a>
+<li>COLAMD_ERROR_p0_nonzero
+: <a class="el" href="colamd_8h.html#58b5d911cc825b4334ade136bad3afd3">colamd.h</a>
+<li>COLAMD_ERROR_p_not_present
+: <a class="el" href="colamd_8h.html#51d3f9714a4cb80c0f54dea5d0c5f95f">colamd.h</a>
+<li>COLAMD_ERROR_row_index_out_of_bounds
+: <a class="el" href="colamd_8h.html#0559e0ff07deab1841e7aaee8cde51e6">colamd.h</a>
+<li>COLAMD_INFO1
+: <a class="el" href="colamd_8h.html#569d56a773011e0b4e465b3f5830e80b">colamd.h</a>
+<li>COLAMD_INFO2
+: <a class="el" href="colamd_8h.html#2161fd78bbd688f943250d1d7583284b">colamd.h</a>
+<li>COLAMD_INFO3
+: <a class="el" href="colamd_8h.html#15d83814c573d742764ff83e9d1d67fc">colamd.h</a>
+<li>COLAMD_KNOBS
+: <a class="el" href="colamd_8h.html#e92bb10d09f7cd004f07d1baddf90548">colamd.h</a>
+<li>COLAMD_OK
+: <a class="el" href="colamd_8h.html#a754fd30d924c5c8d2d402fa0a482d72">colamd.h</a>
+<li>COLAMD_OK_BUT_JUMBLED
+: <a class="el" href="colamd_8h.html#c0d7f3882e6e9e39527aa2195dd23789">colamd.h</a>
+<li>COLAMD_R
+: <a class="el" href="colamd_8h.html#52e8a8827c11d9c2a1f1b87e09bc8dc0">colamd.h</a>
+<li>COLAMD_RECOMMENDED
+: <a class="el" href="colamd_8h.html#a6980d68bd04f7567d7d0bd40b244c2f">colamd.h</a>
+<li>COLAMD_STATS
+: <a class="el" href="colamd_8h.html#411703fc0a994b83ec0e00df1abfc0f7">colamd.h</a>
+<li>COLAMD_STATUS
+: <a class="el" href="colamd_8h.html#6a4201ce55dfa3a6375b90097e8c747e">colamd.h</a>
+<li>cs_mult
+: <a class="el" href="slu__scomplex_8h.html#a675d825b907fe4d939ddc2533b38bb8">slu_scomplex.h</a>
+<li>CX
+: <a class="el" href="scsum1_8c.html#5a76da95c549c41790389a76e12fdcb5">scsum1.c</a>
+, <a class="el" href="icmax1_8c.html#5a76da95c549c41790389a76e12fdcb5">icmax1.c</a>
+, <a class="el" href="izmax1_8c.html#5a76da95c549c41790389a76e12fdcb5">izmax1.c</a>
+, <a class="el" href="dzsum1_8c.html#5a76da95c549c41790389a76e12fdcb5">dzsum1.c</a>
+</ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>d_sign
+: <a class="el" href="dlacon_8c.html#51b3babab7bbf03500dbc5ede2a682b3">dlacon.c</a>
+, <a class="el" href="slacon_8c.html#51b3babab7bbf03500dbc5ede2a682b3">slacon.c</a>
+<li>dabs
+: <a class="el" href="slamch_8c.html#d1f46d2294c121413c66c8777190a874">slamch.c</a>
+<li>DEAD
+: <a class="el" href="colamd_8c.html#3c8793c7acb4598d2ebcd8288f29ee69">colamd.c</a>
+<li>DEAD_NON_PRINCIPAL
+: <a class="el" href="colamd_8c.html#0f66923672bcc495333995f7d238945f">colamd.c</a>
+<li>DEAD_PRINCIPAL
+: <a class="el" href="colamd_8c.html#c0adce1e7d70351cef4752f3373709af">colamd.c</a>
+<li>DEBUG0
+: <a class="el" href="colamd_8c.html#144524f0a43ebe1a97d576a76f6557a0">colamd.c</a>
+<li>DEBUG1
+: <a class="el" href="colamd_8c.html#5083dbf79682be78336cc6b458c32ab4">colamd.c</a>
+<li>DEBUG2
+: <a class="el" href="colamd_8c.html#65bd10ffc88aa9edca29d4f6ae0da2df">colamd.c</a>
+<li>DEBUG3
+: <a class="el" href="colamd_8c.html#86ce320fe5d3f3088d89fdf451943008">colamd.c</a>
+<li>DEBUG4
+: <a class="el" href="colamd_8c.html#0ff047166d36dd8103bd12a4fbc7f7f9">colamd.c</a>
+<li>DoubleAlign
+: <a class="el" href="zmemory_8c.html#c8204d321846eb4b23d563eac7e5bfa7">zmemory.c</a>
+, <a class="el" href="cmemory_8c.html#c8204d321846eb4b23d563eac7e5bfa7">cmemory.c</a>
+, <a class="el" href="dmemory_8c.html#c8204d321846eb4b23d563eac7e5bfa7">dmemory.c</a>
+, <a class="el" href="smemory_8c.html#c8204d321846eb4b23d563eac7e5bfa7">smemory.c</a>
+<li>DROP_AREA
+: <a class="el" href="slu__util_8h.html#e56780c0f0b5afa706231cbe2b1ee82f">slu_util.h</a>
+<li>DROP_BASIC
+: <a class="el" href="slu__util_8h.html#fb51a22d4d20fb9e39acd95129344997">slu_util.h</a>
+<li>DROP_COLUMN
+: <a class="el" href="slu__util_8h.html#741f1ee3e9529b1384492787d09a0c70">slu_util.h</a>
+<li>DROP_DYNAMIC
+: <a class="el" href="slu__util_8h.html#c6089af2caea8fef6aa343cb16fd1646">slu_util.h</a>
+<li>DROP_INTERP
+: <a class="el" href="slu__util_8h.html#ea78484190db0dd61d91743797bf6bfe">slu_util.h</a>
+<li>DROP_PROWS
+: <a class="el" href="slu__util_8h.html#34a649fce94fb9a61524f3b18161aef8">slu_util.h</a>
+<li>DROP_SECONDARY
+: <a class="el" href="slu__util_8h.html#72349305248ecb540ca43f404884bef5">slu_util.h</a>
+</ul>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>EMPTY
+: <a class="el" href="colamd_8c.html#2b7cf2a3641be7b89138615764d60ba3">colamd.c</a>
+, <a class="el" href="slu__util_8h.html#2b7cf2a3641be7b89138615764d60ba3">slu_util.h</a>
+<li>epsmac
+: <a class="el" href="sfgmr_8c.html#70fac857a29f956523d4c8c05e13f177">sfgmr.c</a>
+, <a class="el" href="fgmr_8c.html#70fac857a29f956523d4c8c05e13f177">fgmr.c</a>
+, <a class="el" href="dfgmr_8c.html#70fac857a29f956523d4c8c05e13f177">dfgmr.c</a>
+, <a class="el" href="cfgmr_8c.html#70fac857a29f956523d4c8c05e13f177">cfgmr.c</a>
+, <a class="el" href="zfgmr_8c.html#70fac857a29f956523d4c8c05e13f177">zfgmr.c</a>
+</ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>F77_CALL_C
+: <a class="el" href="slu__Cnames_8h.html#23a1698b7e10fde5b8d52b8f3a349489">slu_Cnames.h</a>
+<li>FALSE
+: <a class="el" href="colamd_8c.html#a93f0eb578d23995850d61f7d61c55c1">colamd.c</a>
+, <a class="el" href="slu__util_8h.html#a93f0eb578d23995850d61f7d61c55c1">slu_util.h</a>
+<li>FALSE_
+: <a class="el" href="dlamch_8c.html#d4986ecbba005b963f63a85f7c8c281d">dlamch.c</a>
+, <a class="el" href="slamch_8c.html#d4986ecbba005b963f63a85f7c8c281d">slamch.c</a>
+<li>FIRSTCOL_OF_SNODE
+: <a class="el" href="slu__util_8h.html#745e85e3ef4b1267858c9df86608518c">slu_util.h</a>
+</ul>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>GluIntArray
+: <a class="el" href="slu__util_8h.html#d3754689b2ab3abc8b3afe4facdd76f3">slu_util.h</a>
+</ul>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>i_dnnt
+: <a class="el" href="dlacon_8c.html#dccc1e5692ca1dd160d0ca2a17e1b12c">dlacon.c</a>
+, <a class="el" href="slacon_8c.html#dccc1e5692ca1dd160d0ca2a17e1b12c">slacon.c</a>
+<li>INDEX
+: <a class="el" href="colamd_8c.html#a5fad23b2a5eed790e6661e896a506b7">colamd.c</a>
+<li>ITMAX
+: <a class="el" href="dgsrfs_8c.html#3641b6d4c21b7a852dbb32c2b693302e">dgsrfs.c</a>
+, <a class="el" href="cgsrfs_8c.html#3641b6d4c21b7a852dbb32c2b693302e">cgsrfs.c</a>
+, <a class="el" href="sgsrfs_8c.html#3641b6d4c21b7a852dbb32c2b693302e">sgsrfs.c</a>
+, <a class="el" href="zgsrfs_8c.html#3641b6d4c21b7a852dbb32c2b693302e">zgsrfs.c</a>
+</ul>
+<h3><a class="anchor" name="index_k">- k -</a></h3><ul>
+<li>KILL_NON_PRINCIPAL_COL
+: <a class="el" href="colamd_8c.html#0458a358e752473d86e6f21a56b44a26">colamd.c</a>
+<li>KILL_PRINCIPAL_COL
+: <a class="el" href="colamd_8c.html#7882929a7898e09a3de9e7676ae1aa29">colamd.c</a>
+<li>KILL_ROW
+: <a class="el" href="colamd_8c.html#dde21248544152df48ab70b6da1b38b5">colamd.c</a>
+</ul>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>L_FST_SUPC
+: <a class="el" href="slu__util_8h.html#0ea367a3afecd30b570d0a46cc819cdf">slu_util.h</a>
+<li>L_NZ_START
+: <a class="el" href="slu__util_8h.html#79b13489e4cd00b09633e0c5e0be1b7c">slu_util.h</a>
+<li>L_SUB
+: <a class="el" href="slu__util_8h.html#8de2450f2d4cf12794954b63a319c423">slu_util.h</a>
+<li>L_SUB_START
+: <a class="el" href="slu__util_8h.html#445a44f88349753bc17f28fbac4df382">slu_util.h</a>
+</ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>MAX
+: <a class="el" href="colamd_8c.html#fa99ec4acc4ecb2dc3c2d05da15d0e3f">colamd.c</a>
+<li>max
+: <a class="el" href="dlamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">dlamch.c</a>
+, <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">slamch.c</a>
+<li>MILU_ALPHA
+: <a class="el" href="slu__util_8h.html#90dea7f830398b8c30be7488e24089bb">slu_util.h</a>
+<li>min
+: <a class="el" href="dlamch_8c.html#c6afabdc09a49a433ee19d8a9486056d">dlamch.c</a>
+<li>MIN
+: <a class="el" href="colamd_8c.html#3acffbd305ee72dcd4593c0d8af64a4f">colamd.c</a>
+<li>min
+: <a class="el" href="slamch_8c.html#c6afabdc09a49a433ee19d8a9486056d">slamch.c</a>
+, <a class="el" href="mc64ad_8c.html#c6afabdc09a49a433ee19d8a9486056d">mc64ad.c</a>
+</ul>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>NBUCKS
+: <a class="el" href="util_8c.html#70f31d2c4d8d0802751120e07028bd3a">util.c</a>
+<li>NO_MARKER
+: <a class="el" href="slu__util_8h.html#9b7b2a5116ee487722b0967317ab6360">slu_util.h</a>
+<li>NO_MEMTYPE
+: <a class="el" href="slu__util_8h.html#b9ccb8b9963ca083d7f36f5d3acc5744">slu_util.h</a>
+<li>NOCHANGE
+: <a class="el" href="slu__Cnames_8h.html#f42b337af878eff44b9d6792ee59faf7">slu_Cnames.h</a>
+<li>NODROP
+: <a class="el" href="slu__util_8h.html#aa1b4d4ec24548decf1f389060a7d878">slu_util.h</a>
+<li>NotDoubleAlign
+: <a class="el" href="cmemory_8c.html#c11b1c3847a3d397e9675de40782134d">cmemory.c</a>
+, <a class="el" href="dmemory_8c.html#c11b1c3847a3d397e9675de40782134d">dmemory.c</a>
+, <a class="el" href="smemory_8c.html#c11b1c3847a3d397e9675de40782134d">smemory.c</a>
+, <a class="el" href="zmemory_8c.html#c11b1c3847a3d397e9675de40782134d">zmemory.c</a>
+<li>NUM_TEMPV
+: <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">slu_util.h</a>
+</ul>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>OLD_CRAY
+: <a class="el" href="slu__Cnames_8h.html#f29cc13eea735d836498590d413904a4">slu_Cnames.h</a>
+<li>ONES_COMPLEMENT
+: <a class="el" href="colamd_8c.html#f4201cc2809d450d2484680ee1b958ca">colamd.c</a>
+</ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>PRINTF
+: <a class="el" href="colamd_8c.html#e1649fc947ca37a86917a08354f48d1a">colamd.c</a>
+<li>PRIVATE
+: <a class="el" href="colamd_8c.html#5e151c615eda34903514212f05a5ccf8">colamd.c</a>
+<li>PUBLIC
+: <a class="el" href="colamd_8c.html#d17d551e31d1828c68acf40684849b7e">colamd.c</a>
+</ul>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>Reduce
+: <a class="el" href="cmemory_8c.html#7b2a35bfd2e6c9d03e2a6ccdba9fa847">cmemory.c</a>
+, <a class="el" href="dmemory_8c.html#7b2a35bfd2e6c9d03e2a6ccdba9fa847">dmemory.c</a>
+, <a class="el" href="zmemory_8c.html#7b2a35bfd2e6c9d03e2a6ccdba9fa847">zmemory.c</a>
+, <a class="el" href="smemory_8c.html#7b2a35bfd2e6c9d03e2a6ccdba9fa847">smemory.c</a>
+<li>ROW_IS_ALIVE
+: <a class="el" href="colamd_8c.html#bc775359cfa45ffaf6250522c521110d">colamd.c</a>
+<li>ROW_IS_DEAD
+: <a class="el" href="colamd_8c.html#e200d2ac8149305712af7230f9ee24d5">colamd.c</a>
+<li>ROW_IS_MARKED_DEAD
+: <a class="el" href="colamd_8c.html#0d68b03acc587c11fe6dffbfede78c2d">colamd.c</a>
+</ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>SGN
+: <a class="el" href="ilu__cpivotL_8c.html#95ed41486ca0ed53262e4b8934d4afac">ilu_cpivotL.c</a>
+, <a class="el" href="ilu__dpivotL_8c.html#95ed41486ca0ed53262e4b8934d4afac">ilu_dpivotL.c</a>
+, <a class="el" href="ilu__zpivotL_8c.html#95ed41486ca0ed53262e4b8934d4afac">ilu_zpivotL.c</a>
+, <a class="el" href="ilu__spivotL_8c.html#95ed41486ca0ed53262e4b8934d4afac">ilu_spivotL.c</a>
+<li>StackFull
+: <a class="el" href="zmemory_8c.html#1ef4d4db4d5e1fe0719416163e0e51ae">zmemory.c</a>
+, <a class="el" href="cmemory_8c.html#1ef4d4db4d5e1fe0719416163e0e51ae">cmemory.c</a>
+, <a class="el" href="smemory_8c.html#1ef4d4db4d5e1fe0719416163e0e51ae">smemory.c</a>
+, <a class="el" href="dmemory_8c.html#1ef4d4db4d5e1fe0719416163e0e51ae">dmemory.c</a>
+<li>SUPERLU_FREE
+: <a class="el" href="slu__util_8h.html#9672c5511c3efd9467e4d375a347c192">slu_util.h</a>
+<li>SUPERLU_MALLOC
+: <a class="el" href="slu__util_8h.html#55a5ed83733c30850c14cc7b3f922a54">slu_util.h</a>
+<li>SUPERLU_MAX
+: <a class="el" href="slu__util_8h.html#dca8259e9d345c7cbaaa0608a1acdfd4">slu_util.h</a>
+<li>SUPERLU_MIN
+: <a class="el" href="slu__util_8h.html#7147dd5df1048562cd4ab83e9fd808d9">slu_util.h</a>
+</ul>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>T2_SUPER
+: <a class="el" href="ccolumn__dfs_8c.html#5fd0635776cafb1d697263a0db693b9e">ccolumn_dfs.c</a>
+, <a class="el" href="dcolumn__dfs_8c.html#5fd0635776cafb1d697263a0db693b9e">dcolumn_dfs.c</a>
+, <a class="el" href="zcolumn__dfs_8c.html#5fd0635776cafb1d697263a0db693b9e">zcolumn_dfs.c</a>
+, <a class="el" href="scolumn__dfs_8c.html#5fd0635776cafb1d697263a0db693b9e">scolumn_dfs.c</a>
+<li>TempSpace
+: <a class="el" href="zmemory_8c.html#70ca807c578a0c495f7ce5edb0215e2b">zmemory.c</a>
+, <a class="el" href="cmemory_8c.html#70ca807c578a0c495f7ce5edb0215e2b">cmemory.c</a>
+, <a class="el" href="dmemory_8c.html#70ca807c578a0c495f7ce5edb0215e2b">dmemory.c</a>
+, <a class="el" href="smemory_8c.html#70ca807c578a0c495f7ce5edb0215e2b">smemory.c</a>
+<li>THRESH
+: <a class="el" href="claqgs_8c.html#0656018abfc9fa2821827415f5d5ea57">claqgs.c</a>
+, <a class="el" href="dlaqgs_8c.html#0656018abfc9fa2821827415f5d5ea57">dlaqgs.c</a>
+, <a class="el" href="slaqgs_8c.html#0656018abfc9fa2821827415f5d5ea57">slaqgs.c</a>
+, <a class="el" href="zlaqgs_8c.html#0656018abfc9fa2821827415f5d5ea57">zlaqgs.c</a>
+<li>TRUE
+: <a class="el" href="slu__util_8h.html#a8cecfc5c5c054d2875c03e77b7be15d">slu_util.h</a>
+, <a class="el" href="colamd_8c.html#a8cecfc5c5c054d2875c03e77b7be15d">colamd.c</a>
+<li>TRUE_
+: <a class="el" href="slamch_8c.html#ca1e6c3771fa0306e1dad2b11d22a8e5">slamch.c</a>
+, <a class="el" href="dlamch_8c.html#ca1e6c3771fa0306e1dad2b11d22a8e5">dlamch.c</a>
+</ul>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>U_NZ_START
+: <a class="el" href="slu__util_8h.html#c641190b1a047ebcf224372cb3dfec68">slu_util.h</a>
+<li>U_SUB
+: <a class="el" href="slu__util_8h.html#cbd74ce05240823854ebfcd301f200e8">slu_util.h</a>
+<li>UPCASE
+: <a class="el" href="slu__Cnames_8h.html#cc3ddbc87aab0c0642d350d040e5bdfc">slu_Cnames.h</a>
+<li>USER_ABORT
+: <a class="el" href="slu__util_8h.html#aba7be0a786a716c200675ac43827e2a">slu_util.h</a>
+<li>USER_FREE
+: <a class="el" href="slu__util_8h.html#d7924033040c27afdb4a51ac9f8295b1">slu_util.h</a>
+<li>USER_MALLOC
+: <a class="el" href="slu__util_8h.html#232b101af98715228590ae6e089f4c65">slu_util.h</a>
+</ul>
+<h3><a class="anchor" name="index_z">- z -</a></h3><ul>
+<li>z_add
+: <a class="el" href="slu__dcomplex_8h.html#35daa816dd5911bdb075aba8856f9cf0">slu_dcomplex.h</a>
+<li>z_eq
+: <a class="el" href="slu__dcomplex_8h.html#fe2eaa3195b69824be150f4163f8d056">slu_dcomplex.h</a>
+<li>z_sub
+: <a class="el" href="slu__dcomplex_8h.html#8d01f55090621b481fcec184a2012ffb">slu_dcomplex.h</a>
+<li>zd_mult
+: <a class="el" href="slu__dcomplex_8h.html#aa361695d091f77d512454ddbee3b2b3">slu_dcomplex.h</a>
+<li>zz_conj
+: <a class="el" href="slu__dcomplex_8h.html#8c08104b0130f14f6f40f17bee239e80">slu_dcomplex.h</a>
+<li>zz_mult
+: <a class="el" href="slu__dcomplex_8h.html#008009fa4c5e6733f840478ceb0fb8ae">slu_dcomplex.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_enum.html b/DOC/html/globals_enum.html
new file mode 100644
index 0000000..0862469
--- /dev/null
+++ b/DOC/html/globals_enum.html
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li class="current"><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+ 
+<p>
+<ul>
+<li>colperm_t
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c">superlu_enum_consts.h</a>
+<li>DiagScale_t
+: <a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30">superlu_enum_consts.h</a>
+<li>Dtype_t
+: <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">supermatrix.h</a>
+<li>fact_t
+: <a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">superlu_enum_consts.h</a>
+<li>IterRefine_t
+: <a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e37">superlu_enum_consts.h</a>
+<li>LU_space_t
+: <a class="el" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f6">superlu_enum_consts.h</a>
+<li>MemType
+: <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">superlu_enum_consts.h</a>
+<li>milu_t
+: <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">superlu_enum_consts.h</a>
+<li>Mtype_t
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">supermatrix.h</a>
+<li>norm_t
+: <a class="el" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2f">superlu_enum_consts.h</a>
+<li>PhaseType
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72">superlu_enum_consts.h</a>
+<li>rowperm_t
+: <a class="el" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adf">superlu_enum_consts.h</a>
+<li>stack_end_t
+: <a class="el" href="superlu__enum__consts_8h.html#9c99a6c403d30f227aa91cf3b10f6aa4">superlu_enum_consts.h</a>
+<li>Stype_t
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">supermatrix.h</a>
+<li>trans_t
+: <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">superlu_enum_consts.h</a>
+<li>yes_no_t
+: <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">superlu_enum_consts.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_eval.html b/DOC/html/globals_eval.html
new file mode 100644
index 0000000..83412a1
--- /dev/null
+++ b/DOC/html/globals_eval.html
@@ -0,0 +1,273 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li class="current"><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="#index_b"><span>b</span></a></li>
+      <li><a href="#index_c"><span>c</span></a></li>
+      <li><a href="#index_d"><span>d</span></a></li>
+      <li><a href="#index_e"><span>e</span></a></li>
+      <li><a href="#index_f"><span>f</span></a></li>
+      <li><a href="#index_g"><span>g</span></a></li>
+      <li><a href="#index_h"><span>h</span></a></li>
+      <li><a href="#index_i"><span>i</span></a></li>
+      <li><a href="#index_l"><span>l</span></a></li>
+      <li><a href="#index_m"><span>m</span></a></li>
+      <li><a href="#index_n"><span>n</span></a></li>
+      <li><a href="#index_o"><span>o</span></a></li>
+      <li><a href="#index_p"><span>p</span></a></li>
+      <li><a href="#index_r"><span>r</span></a></li>
+      <li><a href="#index_s"><span>s</span></a></li>
+      <li><a href="#index_t"><span>t</span></a></li>
+      <li><a href="#index_u"><span>u</span></a></li>
+      <li><a href="#index_y"><span>y</span></a></li>
+      <li><a href="#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>BOTH
+: <a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30627abe5a430420baf29ebe1940a7f2fb">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>COL
+: <a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e303e66f07732b51f2cb52e13d598f8abda">superlu_enum_consts.h</a>
+<li>COLAMD
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89cfc08a15679354a375b679f7d907867c3">superlu_enum_consts.h</a>
+<li>COLPERM
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72ed701176980ed77fa7e65315bdae5dc5">superlu_enum_consts.h</a>
+<li>COMM
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e726f451ba8ea6ae9cd569eb91e2126376b">superlu_enum_consts.h</a>
+<li>CONJ
+: <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d6226a53d2d0576982e73a770a90087a619">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>DIST
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72c04fbbdf0d80a4ad25e565541deeebd7">superlu_enum_consts.h</a>
+<li>DOFACT
+: <a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0ae0bd0c48044d1267a827ce526249e168">superlu_enum_consts.h</a>
+<li>DOUBLE
+: <a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e3733465d1d419b1074fb259ef444609e92">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>EQUIL
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72a48ad2d4b3120ba615e725d16ec7bf29">superlu_enum_consts.h</a>
+<li>ETREE
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72837b4404052bca5280c1c918540bc003">superlu_enum_consts.h</a>
+<li>EXTRA
+: <a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e37ffb2fb86309c5c698e319b5b6dd8ab3a">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>FACT
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e721b6692b56d378abb85bd49063721d034">superlu_enum_consts.h</a>
+<li>FACTORED
+: <a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a86901392b6879fba18090792fe8db804">superlu_enum_consts.h</a>
+<li>FERR
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e7278fd14d7abebae04095cfbe02928f153">superlu_enum_consts.h</a>
+<li>FLOAT
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e729cf4a0866224b0bb4a7a895da27c9c4c">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>GEMV
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72ad1464db9e9e33f25ab0a3b82c6bd0c4">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>HEAD
+: <a class="el" href="superlu__enum__consts_8h.html#9c99a6c403d30f227aa91cf3b10f6aa40b0955668575b21eb0ab2272aef49f76">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>INF_NORM
+: <a class="el" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2ff60f12ba71e3a0c889595249955d6cf8">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>LargeDiag
+: <a class="el" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adfe03251277f56e77cfc3989ed67adf932">superlu_enum_consts.h</a>
+<li>LLVL
+: <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b28456acdeff4ebe8827f33f18599d3137">superlu_enum_consts.h</a>
+<li>LSUB
+: <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2383f412552e65152b50013e6c5397baa">superlu_enum_consts.h</a>
+<li>LUSUP
+: <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b29f159a8a95b7045670b14e7a521ac71e">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>METIS_AT_PLUS_A
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c5a9874ccc7a94b949bdf71fd65b80061">superlu_enum_consts.h</a>
+<li>MMD_AT_PLUS_A
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89cef4136af63900170017e1edb479e2f14">superlu_enum_consts.h</a>
+<li>MMD_ATA
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c02f70b975e4d4fa6052812c09bdb7349">superlu_enum_consts.h</a>
+<li>MY_PERMC
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c7475651fbfee514ff59d61da9e101682">superlu_enum_consts.h</a>
+<li>MY_PERMR
+: <a class="el" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adf19f710e8ebccae9025757e877b6c87aa">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>NATURAL
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c0425aaf673bebee34014367ea7c3deb1">superlu_enum_consts.h</a>
+<li>NO
+: <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f0d077f5b932ce05e5b9f30c6087a2f31">superlu_enum_consts.h</a>
+<li>NOEQUIL
+: <a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30f1e3ee583cb194a25353b4ba7b4798cf">superlu_enum_consts.h</a>
+<li>NOREFINE
+: <a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e375f3a3710645b9041f06dfe164fb336a3">superlu_enum_consts.h</a>
+<li>NOROWPERM
+: <a class="el" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adf25895a1ae8a45131936a32274bd7cdde">superlu_enum_consts.h</a>
+<li>NOTRANS
+: <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d628ccffb9caebb7b4520a0653005b22f43">superlu_enum_consts.h</a>
+<li>NPHASES
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e722b9cc65b188ff2b2b764a5f8160c4bfc">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>ONE_NORM
+: <a class="el" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2fde388e7d1af6bbb3be22c8e758d43d65">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>PARMETIS
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89ca7108227cd043fe50972a89b34b6d20c">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>RCOND
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e729b5c151728d8512307565994c89919d5">superlu_enum_consts.h</a>
+<li>REFINE
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72bb218bd1ec12fd54eaada97721a82be7">superlu_enum_consts.h</a>
+<li>RELAX
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e728abca54580953356d3e1548ddd04a97b">superlu_enum_consts.h</a>
+<li>ROW
+: <a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30bf470e461303b909bf0dc58084ebafa0">superlu_enum_consts.h</a>
+<li>ROWPERM
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72e860478cf9b6cf3eb0785958149b676e">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>SamePattern
+: <a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0ad57746dff8e73ad308739bc6cbee4c27">superlu_enum_consts.h</a>
+<li>SamePattern_SameRowPerm
+: <a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a8814b686fe49f5ccc165c04845e112e6">superlu_enum_consts.h</a>
+<li>SILU
+: <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0b9ad3d6f1e495ef4761e20b58cc77453">superlu_enum_consts.h</a>
+<li>SINGLE
+: <a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e373388f7110f6f25a54e215eb75d5d7516">superlu_enum_consts.h</a>
+<li>SLU_C
+: <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e291901b589b5f96dbc8619450aacc22d0bf39">supermatrix.h</a>
+<li>SLU_D
+: <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190b5c3b3a455e3b3a64d805d76f19ac6dc">supermatrix.h</a>
+<li>SLU_DN
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796a59ca236b51fe0c7bd7c80c70e345768">supermatrix.h</a>
+<li>SLU_GE
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60ea9ef3cae331a60a4bcc353bb57ad5db">supermatrix.h</a>
+<li>SLU_HEL
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60bba0b28718f648302d6f710d7d66d1fb">supermatrix.h</a>
+<li>SLU_HEU
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60bada9d0add93fd4fbe17b9d6758d38f8">supermatrix.h</a>
+<li>SLU_NC
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b87960993c31a9ba98c523bfab0d759c1a628">supermatrix.h</a>
+<li>SLU_NCP
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b879625e4eb65ac258dadb9abccd65337cfe4">supermatrix.h</a>
+<li>SLU_NR
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796ac74fbf90a105db9be6795b5be9221ca">supermatrix.h</a>
+<li>SLU_NR_loc
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796b96ddd65efd6342d0ac532bb47eb39a0">supermatrix.h</a>
+<li>SLU_S
+: <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e291900da7fdd394e36c76e7aa215d6a79162d">supermatrix.h</a>
+<li>SLU_SC
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b879679d0f76e80f9b57ebdab6a0c76720462">supermatrix.h</a>
+<li>SLU_SCP
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b879635ab293720f39593ceff43e8989f4de6">supermatrix.h</a>
+<li>SLU_SR
+: <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b87969677060bfc0641fb53defdb70caa8cf5">supermatrix.h</a>
+<li>SLU_SYL
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d6091b9ee4e608cb7c7cf7572703fbd3506">supermatrix.h</a>
+<li>SLU_SYU
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d600d509f1e8285653c36f81b10626fb747">supermatrix.h</a>
+<li>SLU_TRL
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d604defa99d9ff8ed4af7a92547b3faf9fb">supermatrix.h</a>
+<li>SLU_TRLU
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60fee10f9836531b012b1b80cf36355b67">supermatrix.h</a>
+<li>SLU_TRU
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60a9aea83e745716e0da54d738feb19cba">supermatrix.h</a>
+<li>SLU_TRUU
+: <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d600c7113548d3d5a292cb2265477436ad7">supermatrix.h</a>
+<li>SLU_Z
+: <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e291901ace1e51c238b13622aaa733ef3b2a47">supermatrix.h</a>
+<li>SMILU_1
+: <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0183527dc1ee50ab34678f314925fdda0">superlu_enum_consts.h</a>
+<li>SMILU_2
+: <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff032a052178fd394b8110900fcb5702c13">superlu_enum_consts.h</a>
+<li>SMILU_3
+: <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff01e723dc87c76c9a21094300fc29e7274">superlu_enum_consts.h</a>
+<li>SOL_COMM
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e7231560b869ae176dae4e9160656d5b9eb">superlu_enum_consts.h</a>
+<li>SOLVE
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72b9fc7975179c642bbac2b6ffd8fa3579">superlu_enum_consts.h</a>
+<li>SYMBFAC
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e722b4b71567fe3767853886bdfbc9df681">superlu_enum_consts.h</a>
+<li>SYSTEM
+: <a class="el" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f657cc238145ec1361c72c327674c0d754">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>TAIL
+: <a class="el" href="superlu__enum__consts_8h.html#9c99a6c403d30f227aa91cf3b10f6aa44c28487b052a2b05f3db4dc5a722b1d7">superlu_enum_consts.h</a>
+<li>TRANS
+: <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d621f61e3015bfe0f0c2c3fda4c5a0cdf58">superlu_enum_consts.h</a>
+<li>TRSV
+: <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72be6640d5e5560662c8a729e54e770ecf">superlu_enum_consts.h</a>
+<li>TWO_NORM
+: <a class="el" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2f0916434ec408d94e09a3db2f278fec83">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>UCOL
+: <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b268eee86a440f07e5aeb1333af7c49968">superlu_enum_consts.h</a>
+<li>ULVL
+: <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2307244b6de1926249c921821989702db">superlu_enum_consts.h</a>
+<li>USER
+: <a class="el" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f6e2d30a195cee6b2961cc2c23ea4b520b">superlu_enum_consts.h</a>
+<li>USUB
+: <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2ec445297f8e62e119a337ea2b5dd2b66">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_y">- y -</a></h3><ul>
+<li>YES
+: <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f99f136a862ba5c7d16967231c29f09d6">superlu_enum_consts.h</a>
+</ul>
+<h3><a class="anchor" name="index_z">- z -</a></h3><ul>
+<li>ZOLTAN
+: <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89cbddc2b83ab41d07e8d180f52bcfb00ac">superlu_enum_consts.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func.html b/DOC/html/globals_func.html
new file mode 100644
index 0000000..dbec1e4
--- /dev/null
+++ b/DOC/html/globals_func.html
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index__">- _ -</a></h3><ul>
+<li>_compare_()
+: <a class="el" href="ilu__cdrop__row_8c.html#8ddf1742e9078a786574bb5aa80aed2a">ilu_cdrop_row.c</a>
+, <a class="el" href="ilu__zdrop__row_8c.html#8ddf1742e9078a786574bb5aa80aed2a">ilu_zdrop_row.c</a>
+, <a class="el" href="ilu__sdrop__row_8c.html#8ddf1742e9078a786574bb5aa80aed2a">ilu_sdrop_row.c</a>
+, <a class="el" href="ilu__ddrop__row_8c.html#8ddf1742e9078a786574bb5aa80aed2a">ilu_ddrop_row.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x61.html b/DOC/html/globals_func_0x61.html
new file mode 100644
index 0000000..4344454
--- /dev/null
+++ b/DOC/html/globals_func_0x61.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li class="current"><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>at_plus_a()
+: <a class="el" href="get__perm__c_8c.html#486ee50799ff66abe91efa46a5950a57">get_perm_c.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x63.html b/DOC/html/globals_func_0x63.html
new file mode 100644
index 0000000..5f55eb3
--- /dev/null
+++ b/DOC/html/globals_func_0x63.html
@@ -0,0 +1,355 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li class="current"><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>c_abs()
+: <a class="el" href="scomplex_8c.html#fc2967f7b71477625eb58de94a6e4c71">scomplex.c</a>
+, <a class="el" href="slu__scomplex_8h.html#f55ee2cd6c55b5ad16136940080c9f67">slu_scomplex.h</a>
+<li>c_abs1()
+: <a class="el" href="slu__scomplex_8h.html#47b65089087d28e542f04907937cb8a9">slu_scomplex.h</a>
+, <a class="el" href="scomplex_8c.html#6a6e9259e2eadc976a783d1b0e8f013b">scomplex.c</a>
+<li>c_div()
+: <a class="el" href="scomplex_8c.html#19814f5030befb85c4bb07e0fac34a7b">scomplex.c</a>
+, <a class="el" href="slu__scomplex_8h.html#6b7d3c87a3029e808bb32eed7dad81f7">slu_scomplex.h</a>
+<li>c_exp()
+: <a class="el" href="slu__scomplex_8h.html#36d8645ac9bf1eb00128329fe5edb982">slu_scomplex.h</a>
+, <a class="el" href="scomplex_8c.html#6111d345ee625a35d42da30db28c6041">scomplex.c</a>
+<li>c_sgn()
+: <a class="el" href="scomplex_8c.html#ee98d3dfc6ee26d36a2e095bd28414e5">scomplex.c</a>
+, <a class="el" href="slu__scomplex_8h.html#8b1147936f5b008b9cba0a9745199519">slu_scomplex.h</a>
+<li>c_sqrt()
+: <a class="el" href="scomplex_8c.html#8e9b533cd4055cb200a5d63152754898">scomplex.c</a>
+, <a class="el" href="slu__scomplex_8h.html#d2e9c9356a42769f53e741e68e1aac9d">slu_scomplex.h</a>
+<li>callocateA()
+: <a class="el" href="cmemory_8c.html#d952b424acd036108ca2f5a0bd9d3739">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#22ec97af17a44cd9aae6aeae3de50e87">slu_cdefs.h</a>
+<li>caxpy_()
+: <a class="el" href="ilu__cdrop__row_8c.html#d2fab81da5258afef212287a41f4e8bc">ilu_cdrop_row.c</a>
+<li>ccheck_tempv()
+: <a class="el" href="cpanel__bmod_8c.html#7d4a7510d7b09e116c70302b138eee42">cpanel_bmod.c</a>
+, <a class="el" href="cutil_8c.html#972fd0ea7e3abcd9f8d3322d425def4e">cutil.c</a>
+<li>ccolumn_bmod()
+: <a class="el" href="ccolumn__bmod_8c.html#16ef1a229e74ac6264d11b35757dccf2">ccolumn_bmod.c</a>
+, <a class="el" href="slu__cdefs_8h.html#19d15802e430420a5512a8e9bbe42d64">slu_cdefs.h</a>
+<li>ccolumn_dfs()
+: <a class="el" href="ccolumn__dfs_8c.html#0ee0b19c54923ca3b1875679fb05aea7">ccolumn_dfs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#6aace79c0009c9a5a32219753f51b695">slu_cdefs.h</a>
+<li>cCompRow_to_CompCol()
+: <a class="el" href="cutil_8c.html#25187d2687836e013bb8a8da5822416c">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#3891d961d41be3af94b755b27d371c1d">slu_cdefs.h</a>
+<li>ccopy_()
+: <a class="el" href="ilu__ccopy__to__ucol_8c.html#db60937f3436da2e6d66dc11af4317e6">ilu_ccopy_to_ucol.c</a>
+, <a class="el" href="ilu__cdrop__row_8c.html#db60937f3436da2e6d66dc11af4317e6">ilu_cdrop_row.c</a>
+<li>cCopy_CompCol_Matrix()
+: <a class="el" href="cutil_8c.html#6954ae5638f7ba23ae15c403313d93b2">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#2b7edfb65023104b0f88f5aaab393248">slu_cdefs.h</a>
+<li>cCopy_Dense_Matrix()
+: <a class="el" href="cutil_8c.html#626267a542de9e81c94f1f6049c68c2f">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#7378a64fc445fa7e0101059d7353f4ac">slu_cdefs.h</a>
+<li>ccopy_to_ucol()
+: <a class="el" href="ccopy__to__ucol_8c.html#918c42aba84eb7e0cce4b143dbcb4ed1">ccopy_to_ucol.c</a>
+, <a class="el" href="slu__cdefs_8h.html#247f30177d193339d293899fe702afe6">slu_cdefs.h</a>
+<li>cCreate_CompCol_Matrix()
+: <a class="el" href="cutil_8c.html#bb6caf8afa858f9adaf0ff8421ac03dd">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#4f54bdbff678075fdf06720bbb299346">slu_cdefs.h</a>
+<li>cCreate_CompRow_Matrix()
+: <a class="el" href="cutil_8c.html#58b408cacf22c559b9b361ae10956f90">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#866240e7f5a35e821bc898d2e5ba26fc">slu_cdefs.h</a>
+<li>cCreate_Dense_Matrix()
+: <a class="el" href="cutil_8c.html#a1e1455807ad7dbf3a5b63842eccd3ae">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#9af123cab0520e5800a1b60668a09de6">slu_cdefs.h</a>
+<li>cCreate_SuperNode_Matrix()
+: <a class="el" href="cutil_8c.html#b70481bde9dc947f9dc1f42580fe6086">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#63d7d14c6a2312b9f95844e5055deae9">slu_cdefs.h</a>
+<li>cdominate()
+: <a class="el" href="cdiagonal_8c.html#c766fce6c33f168e47c3e9a098cb2432">cdiagonal.c</a>
+<li>cdotc_()
+: <a class="el" href="cfgmr_8c.html#118d4bd5ee21ac6a5738f2b9a4b6fd70">cfgmr.c</a>
+<li>cDumpLine()
+: <a class="el" href="creadhb_8c.html#d09b12d41114fe05457517797a07cc18">creadhb.c</a>
+, <a class="el" href="creadrb_8c.html#2d52636395e794c245819afa89a9898d">creadrb.c</a>
+<li>cexpand()
+: <a class="el" href="cmemory_8c.html#3996260179c0a72397776571b4b19164">cmemory.c</a>
+<li>cfgmr()
+: <a class="el" href="cfgmr_8c.html#5be26920e5ae10ff3669ee91f9f15d73">cfgmr.c</a>
+<li>cfill()
+: <a class="el" href="cutil_8c.html#0987feeb2bd380db917660cde3352ec7">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#614eea417aeb37825463637f47c980ba">slu_cdefs.h</a>
+<li>cfill_diag()
+: <a class="el" href="cdiagonal_8c.html#c7bdb6c5924a0097d341cf65e27587d5">cdiagonal.c</a>
+<li>cFillRHS()
+: <a class="el" href="cutil_8c.html#1fd859b01a2660fee78c2ed6336c2c86">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#afc07318b1802f00402e7d8afbeaaeae">slu_cdefs.h</a>
+<li>cGenXtrue()
+: <a class="el" href="cutil_8c.html#ca22454204c3e0c894b1ccb7d31c325c">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#7f454dd3045fdd51e8bf0d29c7561fe5">slu_cdefs.h</a>
+<li>cgscon()
+: <a class="el" href="cgscon_8c.html#e836085920601b3b0717a4f623ab460e">cgscon.c</a>
+, <a class="el" href="slu__cdefs_8h.html#2ca330446884f122ee31f4f2b5243abe">slu_cdefs.h</a>
+<li>cgsequ()
+: <a class="el" href="cgsequ_8c.html#36bb68fea3ee44ff05eb7da2ee059fa5">cgsequ.c</a>
+, <a class="el" href="slu__cdefs_8h.html#d34b27648bc5b43d1ad19dd017f8273f">slu_cdefs.h</a>
+<li>cgsisv()
+: <a class="el" href="slu__cdefs_8h.html#908282efea752470dcd38f794b435dbc">slu_cdefs.h</a>
+<li>cgsisx()
+: <a class="el" href="cgsisx_8c.html#adff8c65cafef191464b3d10bbcbbe7c">cgsisx.c</a>
+, <a class="el" href="slu__cdefs_8h.html#35048de8a07c47ab61c15793f63ad398">slu_cdefs.h</a>
+<li>cgsitrf()
+: <a class="el" href="cgsitrf_8c.html#16b6ae6c8a2812e62ace44629f313bc6">cgsitrf.c</a>
+, <a class="el" href="slu__cdefs_8h.html#82dc99bce4d9b50c3534eb424d03182b">slu_cdefs.h</a>
+<li>cgsrfs()
+: <a class="el" href="cgsrfs_8c.html#45c3a69a2e1025c59b2d96be63f65b71">cgsrfs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#64715c1d0510eaf5f8e37f2465e9e8d6">slu_cdefs.h</a>
+<li>cgssv()
+: <a class="el" href="cgssv_8c.html#b592d134574c9813b7f8959026c94e8f">cgssv.c</a>
+, <a class="el" href="slu__cdefs_8h.html#58aff6521bb64732e981ce5779820a89">slu_cdefs.h</a>
+<li>cgssvx()
+: <a class="el" href="cgssvx_8c.html#f659b3121feb5ebd8810a5868d3bca12">cgssvx.c</a>
+, <a class="el" href="slu__cdefs_8h.html#264b6681cc04244cdd116978acfe4e2a">slu_cdefs.h</a>
+<li>cgstrf()
+: <a class="el" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf.c</a>
+, <a class="el" href="slu__cdefs_8h.html#1743ff4c80f33a0ae166a61a691c348a">slu_cdefs.h</a>
+<li>cgstrs()
+: <a class="el" href="cgstrs_8c.html#19517b9d29e4faf9ae777ca6fb9d415b">cgstrs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#a45033d577ad2afbe488a837d6aba8cf">slu_cdefs.h</a>
+<li>check_perm()
+: <a class="el" href="sp__preorder_8c.html#c79059104ae6abf212c41986820d358c">sp_preorder.c</a>
+<li>check_repfnz()
+: <a class="el" href="slu__util_8h.html#9e29ce75ab694aa7fdb32b7644f9da69">slu_util.h</a>
+, <a class="el" href="util_8c.html#f27aecac055064fa7581c854848f7e7b">util.c</a>
+<li>check_tempv()
+: <a class="el" href="slu__cdefs_8h.html#2cfc97393b65ddc5a40fdc523a50003a">slu_cdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#c1bba297faf9fa0cb8d4e945138b5a21">slu_ddefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#46e1e8ccffc9a076461dbd042ae91654">slu_sdefs.h</a>
+, <a class="el" href="slu__zdefs_8h.html#821f68442e6f5db3ec997699120a2215">slu_zdefs.h</a>
+<li>cinf_norm_error()
+: <a class="el" href="cutil_8c.html#1936a1981a1b766e102aec4be7d98f57">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#293818022b119a511598f4766c54a1ee">slu_cdefs.h</a>
+<li>clacon_()
+: <a class="el" href="clacon_8c.html#f4536a78f0ee7097ef59278c8cf14295">clacon.c</a>
+<li>clangs()
+: <a class="el" href="clangs_8c.html#3e9baabe44cf6d5779cae55b80bc5763">clangs.c</a>
+<li>claqgs()
+: <a class="el" href="claqgs_8c.html#0cf5dcef08d22df154acf807beb43ea1">claqgs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#dbc57dc56d0c962aa148a573895883b0">slu_cdefs.h</a>
+<li>cldperm()
+: <a class="el" href="cldperm_8c.html#0ea12c5d13e30e24ad3e48e4ab521f4f">cldperm.c</a>
+, <a class="el" href="slu__cdefs_8h.html#c7a85f8c55c71b4f4d454c4d62ffbfae">slu_cdefs.h</a>
+<li>clear_mark()
+: <a class="el" href="colamd_8c.html#7eb036c63565d8fc7c05e1074510601a">colamd.c</a>
+<li>clsolve()
+: <a class="el" href="ccolumn__bmod_8c.html#39d81cbea11f613524e674a8c2e18c5f">ccolumn_bmod.c</a>
+, <a class="el" href="cgstrs_8c.html#39d81cbea11f613524e674a8c2e18c5f">cgstrs.c</a>
+, <a class="el" href="cmyblas2_8c.html#2e70ad44c5da4a8f97a62eb718d3e72c">cmyblas2.c</a>
+, <a class="el" href="cpanel__bmod_8c.html#39d81cbea11f613524e674a8c2e18c5f">cpanel_bmod.c</a>
+, <a class="el" href="csp__blas2_8c.html#39d81cbea11f613524e674a8c2e18c5f">csp_blas2.c</a>
+<li>cLUMemInit()
+: <a class="el" href="cmemory_8c.html#6b958c6272421d091bdd9a2e7fdbafcd">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#0f124ea0294cce1fb4c467b1d63ac209">slu_cdefs.h</a>
+<li>cLUMemXpand()
+: <a class="el" href="cmemory_8c.html#8f2864f34ca668aeccb8298052a5c449">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#255ed62863700298939edfda48ae534a">slu_cdefs.h</a>
+<li>cLUWorkFree()
+: <a class="el" href="cmemory_8c.html#d4e33e7a64f75e058e9a8ebd479fa004">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#a759583daf08db801cf6fe8018442d4c">slu_cdefs.h</a>
+<li>cLUWorkInit()
+: <a class="el" href="cmemory_8c.html#4b8e519a51391274f40066ea72e82583">cmemory.c</a>
+<li>cmatvec()
+: <a class="el" href="cpanel__bmod_8c.html#09be65495be35085027bc26454dc3e74">cpanel_bmod.c</a>
+, <a class="el" href="ccolumn__bmod_8c.html#09be65495be35085027bc26454dc3e74">ccolumn_bmod.c</a>
+, <a class="el" href="cgstrs_8c.html#09be65495be35085027bc26454dc3e74">cgstrs.c</a>
+, <a class="el" href="cmyblas2_8c.html#70608abfb6247329a7d69f6ed5231ed9">cmyblas2.c</a>
+, <a class="el" href="csp__blas2_8c.html#09be65495be35085027bc26454dc3e74">csp_blas2.c</a>
+<li>cmatvec_mult()
+: <a class="el" href="citersol_8c.html#d48f5fcdc4961220795817c195e2a411">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#d48f5fcdc4961220795817c195e2a411">citersol1.c</a>
+<li>cmemory_usage()
+: <a class="el" href="cmemory_8c.html#43ff5010762c14ea7591d23cf48403a3">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#cea36c2598bb3f8a27b6985634d2b8e9">slu_cdefs.h</a>
+<li>colamd()
+: <a class="el" href="colamd_8c.html#4ace2482b681af56de48dd3ba8971baf">colamd.c</a>
+, <a class="el" href="colamd_8h.html#f5cec4b6391e4c20abfaa6da39975bca">colamd.h</a>
+<li>colamd_recommended()
+: <a class="el" href="colamd_8c.html#ac7214b99bcf4db1b13547521367817f">colamd.c</a>
+, <a class="el" href="colamd_8h.html#9b48c9b9eb5dce7e9ca42174208b1015">colamd.h</a>
+<li>colamd_report()
+: <a class="el" href="colamd_8c.html#85f2c13be93dea98e624144272d00eed">colamd.c</a>
+, <a class="el" href="colamd_8h.html#7cfa2e07413d0bc9489f10ac881faa51">colamd.h</a>
+<li>colamd_set_defaults()
+: <a class="el" href="colamd_8c.html#cd15277a8a063dd0586e280004a92c89">colamd.c</a>
+, <a class="el" href="colamd_8h.html#e582ce20a46b5ef39434acb9d66fe2ca">colamd.h</a>
+<li>complexCalloc()
+: <a class="el" href="cmemory_8c.html#1e625ecaeb259e2dd79667ffbfb816c0">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#f558e3813415369a8805c473a7eaa5e8">slu_cdefs.h</a>
+<li>complexMalloc()
+: <a class="el" href="cmemory_8c.html#0af029f557e5014a2d6797436b925f53">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#db98fa14a907e0e848a35e896d4040db">slu_cdefs.h</a>
+<li>copy_mem_complex()
+: <a class="el" href="cmemory_8c.html#e8af819e1072d711fd22ce91c1e928fc">cmemory.c</a>
+<li>copy_mem_double()
+: <a class="el" href="dmemory_8c.html#1540850a622674131bd1ea6a4f91cd56">dmemory.c</a>
+<li>copy_mem_doublecomplex()
+: <a class="el" href="zmemory_8c.html#a0ef433984e57ac0dacc29c5e3b53ecf">zmemory.c</a>
+<li>copy_mem_float()
+: <a class="el" href="smemory_8c.html#00d00daa40d07c16e3ae6bfd87c70e3d">smemory.c</a>
+<li>copy_mem_int()
+: <a class="el" href="smemory_8c.html#b59eea34474da95fb3dc125400a1287e">smemory.c</a>
+, <a class="el" href="zmemory_8c.html#b59eea34474da95fb3dc125400a1287e">zmemory.c</a>
+, <a class="el" href="memory_8c.html#3b606bbd7cce73c19bffca851721e9ac">memory.c</a>
+, <a class="el" href="cmemory_8c.html#b59eea34474da95fb3dc125400a1287e">cmemory.c</a>
+, <a class="el" href="dmemory_8c.html#b59eea34474da95fb3dc125400a1287e">dmemory.c</a>
+<li>countnz()
+: <a class="el" href="slu__zdefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc">slu_zdefs.h</a>
+, <a class="el" href="slu__cdefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc">slu_cdefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc">slu_sdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc">slu_ddefs.h</a>
+, <a class="el" href="util_8c.html#cac794ae60517b94cb755975b51b9538">util.c</a>
+<li>cpanel_bmod()
+: <a class="el" href="slu__cdefs_8h.html#c37d9a28b8745daf72ae1d5ad29c140d">slu_cdefs.h</a>
+, <a class="el" href="cpanel__bmod_8c.html#e38539c04b47f4c159e18684e435902b">cpanel_bmod.c</a>
+<li>cpanel_dfs()
+: <a class="el" href="slu__cdefs_8h.html#780968651deed587e187bd7661edbb20">slu_cdefs.h</a>
+, <a class="el" href="cpanel__dfs_8c.html#052edfd06c5aeab7a37b5fa558a06602">cpanel_dfs.c</a>
+<li>cParseFloatFormat()
+: <a class="el" href="creadrb_8c.html#38c28f0c6247583fd686959c0b3d416c">creadrb.c</a>
+, <a class="el" href="creadhb_8c.html#352f5f08cd40d9d5720207c20b3dc9ca">creadhb.c</a>
+<li>cParseIntFormat()
+: <a class="el" href="creadrb_8c.html#9cd499747b7a42c6086b922fc9e37844">creadrb.c</a>
+, <a class="el" href="creadhb_8c.html#5c4a2643da5963b5476e372f988bbd8d">creadhb.c</a>
+<li>cPivotGrowth()
+: <a class="el" href="slu__cdefs_8h.html#9a5b1cc4e96708825cc21108ebbeb061">slu_cdefs.h</a>
+, <a class="el" href="cpivotgrowth_8c.html#cda3921f49d46be7eaa23b58bc2b09c5">cpivotgrowth.c</a>
+<li>cpivotL()
+: <a class="el" href="slu__cdefs_8h.html#4a31e35e95f28f69549ffa45bebd4499">slu_cdefs.h</a>
+, <a class="el" href="cpivotL_8c.html#e6bc95a2710538cc5ce0904f90ef7f05">cpivotL.c</a>
+<li>cPrint_CompCol_Matrix()
+: <a class="el" href="slu__cdefs_8h.html#f091472c1fb3c085c384bf52b3bebd8d">slu_cdefs.h</a>
+, <a class="el" href="cutil_8c.html#dbd15bf3edf77d21b1c4c5096dcacf7f">cutil.c</a>
+<li>cPrint_Dense_Matrix()
+: <a class="el" href="cutil_8c.html#069950e573473aa7fcf3739bcfac5983">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#1cbad8400b16c776b112f20b8645757d">slu_cdefs.h</a>
+<li>cprint_lu_col()
+: <a class="el" href="slu__cdefs_8h.html#4f43048c524cbdac07232ab635e67364">slu_cdefs.h</a>
+, <a class="el" href="cutil_8c.html#4fc78919cd6e7744cec4a8b32031d571">cutil.c</a>
+<li>cprint_soln()
+: <a class="el" href="cgstrs_8c.html#e8df96516a8a07b44c8e82c6ae734ab6">cgstrs.c</a>
+<li>cPrint_SuperNode_Matrix()
+: <a class="el" href="cutil_8c.html#1eeeb7938a9874f086c97b88b82645dd">cutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#8482f76b710a91d26250bca719b9d00c">slu_cdefs.h</a>
+<li>cPrintPerf()
+: <a class="el" href="cutil_8c.html#84a1610e172fb59a0bc19a1dadcb9fbe">cutil.c</a>
+<li>cpruneL()
+: <a class="el" href="cpruneL_8c.html#a230bea3429693147cefbc58ce7b50d1">cpruneL.c</a>
+, <a class="el" href="slu__cdefs_8h.html#65d7df9e58c2415f455dbe6db9a99f2b">slu_cdefs.h</a>
+<li>cpsolve()
+: <a class="el" href="citersol1_8c.html#455d0df27a76044ba598ec4dccd0abfa">citersol1.c</a>
+, <a class="el" href="citersol_8c.html#455d0df27a76044ba598ec4dccd0abfa">citersol.c</a>
+<li>cQuerySpace()
+: <a class="el" href="cmemory_8c.html#34d8cd030775d267947b68a4dacfbabb">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#7ac9ff71eef6bf8c52c41eb9209a0caf">slu_cdefs.h</a>
+<li>creadhb()
+: <a class="el" href="slu__cdefs_8h.html#34243c626347c973358d3d095802783b">slu_cdefs.h</a>
+, <a class="el" href="creadhb_8c.html#75118673183b533e85d3300b9d12e0b8">creadhb.c</a>
+<li>creadmt()
+: <a class="el" href="slu__cdefs_8h.html#88701835280a367a90b9ea2a73f946f0">slu_cdefs.h</a>
+<li>creadrb()
+: <a class="el" href="slu__cdefs_8h.html#0cce050053c795f6b9c52174008bf775">slu_cdefs.h</a>
+, <a class="el" href="creadrb_8c.html#af2ecfdc506c8a67ac3356758edd5502">creadrb.c</a>
+<li>creadrhs()
+: <a class="el" href="creadtriple_8c.html#5daca19d6cd5379145d89f172703fa6b">creadtriple.c</a>
+<li>creadtriple()
+: <a class="el" href="creadtriple_8c.html#784a2e9d5ddef7abd1706abeb73ee498">creadtriple.c</a>
+, <a class="el" href="slu__cdefs_8h.html#7c84a33df79e533f6167e4a1e9ce89cb">slu_cdefs.h</a>
+<li>cReadValues()
+: <a class="el" href="creadrb_8c.html#7737ab09a4d223433775e2566867ce8c">creadrb.c</a>
+, <a class="el" href="creadhb_8c.html#a8fcc9991808e214c9760aafa83ac02c">creadhb.c</a>
+<li>cSetRWork()
+: <a class="el" href="slu__cdefs_8h.html#f3bbcd362fb260a0dba5488a3e4ee926">slu_cdefs.h</a>
+, <a class="el" href="cmemory_8c.html#ff3d90f7f22f882faf8ba0dcf68b0f9c">cmemory.c</a>
+<li>cSetupSpace()
+: <a class="el" href="cmemory_8c.html#c62dd03d1789ef6363db31ad2491ada9">cmemory.c</a>
+<li>csnode_bmod()
+: <a class="el" href="slu__cdefs_8h.html#ab1987caf36c8eedcf605b59e56a9d5d">slu_cdefs.h</a>
+, <a class="el" href="csnode__bmod_8c.html#b5d22385d602a4fe7b7955129fc54ac8">csnode_bmod.c</a>
+<li>csnode_dfs()
+: <a class="el" href="csnode__dfs_8c.html#1c7b34abd214279177619773ad24b759">csnode_dfs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#c98da7d6b5809dadb1cae9bc019619ce">slu_cdefs.h</a>
+<li>cStackCompress()
+: <a class="el" href="cmemory_8c.html#98ec5775d491718006688922903496ae">cmemory.c</a>
+<li>cswap_()
+: <a class="el" href="ilu__cdrop__row_8c.html#99bbeac6877c802badc06579386125b7">ilu_cdrop_row.c</a>
+<li>cuser_free()
+: <a class="el" href="cmemory_8c.html#a4c66bfc4bbf0fed0e2babbf34504bf5">cmemory.c</a>
+<li>cuser_malloc()
+: <a class="el" href="cmemory_8c.html#fdfe5f4689b0aaedf46d034809711754">cmemory.c</a>
+<li>cusolve()
+: <a class="el" href="cgstrs_8c.html#34580dfcbd886fe93845353ac7dbeaa1">cgstrs.c</a>
+, <a class="el" href="cmyblas2_8c.html#7eca4ad25e05a68037a682483f9786f1">cmyblas2.c</a>
+, <a class="el" href="ccolumn__bmod_8c.html#34580dfcbd886fe93845353ac7dbeaa1">ccolumn_bmod.c</a>
+, <a class="el" href="csp__blas2_8c.html#34580dfcbd886fe93845353ac7dbeaa1">csp_blas2.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x64.html b/DOC/html/globals_func_0x64.html
new file mode 100644
index 0000000..f0ab71e
--- /dev/null
+++ b/DOC/html/globals_func_0x64.html
@@ -0,0 +1,366 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li class="current"><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>d_cnjg()
+: <a class="el" href="dcomplex_8c.html#753978ee017e26dbdab16a40cf45b2cb">dcomplex.c</a>
+, <a class="el" href="slu__dcomplex_8h.html#753978ee017e26dbdab16a40cf45b2cb">slu_dcomplex.h</a>
+<li>d_imag()
+: <a class="el" href="slu__dcomplex_8h.html#7a81445c4ec55ec40b6c5f3014887e61">slu_dcomplex.h</a>
+, <a class="el" href="dcomplex_8c.html#58f08c15442d32d787301386ed99ac01">dcomplex.c</a>
+<li>dallocateA()
+: <a class="el" href="dmemory_8c.html#eed250713fbfb3fac567d7a503774ccc">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#3a86154bfb6453d6358ef52ab1ecfe2d">slu_ddefs.h</a>
+<li>dasum_()
+: <a class="el" href="ilu__ddrop__row_8c.html#be00831e789ca38cf884de56ddf70bd7">ilu_ddrop_row.c</a>
+<li>daxpy_()
+: <a class="el" href="ilu__ddrop__row_8c.html#5112358cf2de43341aaff9fba0066afc">ilu_ddrop_row.c</a>
+, <a class="el" href="fgmr_8c.html#5112358cf2de43341aaff9fba0066afc">fgmr.c</a>
+<li>dcheck_tempv()
+: <a class="el" href="dpanel__bmod_8c.html#3ffa3b0456b4e2d587556bd0f717315d">dpanel_bmod.c</a>
+, <a class="el" href="dutil_8c.html#fee83da536b48eda60b21a7e3ac120f7">dutil.c</a>
+<li>dcolumn_bmod()
+: <a class="el" href="dcolumn__bmod_8c.html#5ca322682f98f276feb3c50b31ca56b8">dcolumn_bmod.c</a>
+, <a class="el" href="slu__ddefs_8h.html#351174e818ab7d5149ec9dc116b3a242">slu_ddefs.h</a>
+<li>dcolumn_dfs()
+: <a class="el" href="dcolumn__dfs_8c.html#5e1eb3b6035e0d4e358caa044e58292d">dcolumn_dfs.c</a>
+, <a class="el" href="slu__ddefs_8h.html#1414b492a902b8da3c2e1b620b922644">slu_ddefs.h</a>
+<li>dCompRow_to_CompCol()
+: <a class="el" href="dutil_8c.html#2163cd7a6b59accc8feb7b40ea2732bd">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#fab4013ae32ca6413508cefa1e8143d5">slu_ddefs.h</a>
+<li>dcopy_()
+: <a class="el" href="ilu__dcopy__to__ucol_8c.html#24a0d368c78074384922e9d10b43f820">ilu_dcopy_to_ucol.c</a>
+, <a class="el" href="ilu__ddrop__row_8c.html#24a0d368c78074384922e9d10b43f820">ilu_ddrop_row.c</a>
+, <a class="el" href="fgmr_8c.html#de4ae85292ee27821cebf1655290b25b">fgmr.c</a>
+<li>dCopy_CompCol_Matrix()
+: <a class="el" href="dutil_8c.html#0d19111d89390832cad2fb4b6477a40c">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#21c06d544ecb9028142abd70a583dd68">slu_ddefs.h</a>
+<li>dCopy_Dense_Matrix()
+: <a class="el" href="dutil_8c.html#503dd1eb30f1ca80e04ad2180366c518">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#9bf038cd2c143a48a14a562ca1f67e27">slu_ddefs.h</a>
+<li>dcopy_to_ucol()
+: <a class="el" href="dcopy__to__ucol_8c.html#ce3034cff6ce6be9e0b0f69cda42f196">dcopy_to_ucol.c</a>
+, <a class="el" href="slu__ddefs_8h.html#9dfcee23fab091d05a4301e25b3b4227">slu_ddefs.h</a>
+<li>dCreate_CompCol_Matrix()
+: <a class="el" href="dutil_8c.html#4a177c54dafbe3640c26caa49eeee1de">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#3a3d0af1360639f21edacae8f93eb828">slu_ddefs.h</a>
+<li>dCreate_CompRow_Matrix()
+: <a class="el" href="dutil_8c.html#db108b8f4be1e79a2e469a4406cbff54">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#0807ebe794e4353779d2947e9df0f485">slu_ddefs.h</a>
+<li>dCreate_Dense_Matrix()
+: <a class="el" href="slu__ddefs_8h.html#08d9d6bf3069c89c0c1207967599c4fc">slu_ddefs.h</a>
+, <a class="el" href="dutil_8c.html#12ac523141a258590a76bdad390928fd">dutil.c</a>
+<li>dCreate_SuperNode_Matrix()
+: <a class="el" href="dutil_8c.html#b0cecf427cd82e8b92974a72ecd4d1cb">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#649094ccbc54eaed4ca787fd970049f6">slu_ddefs.h</a>
+<li>ddominate()
+: <a class="el" href="ddiagonal_8c.html#6dcc4428df5c858dc58955919c696a00">ddiagonal.c</a>
+<li>ddot_()
+: <a class="el" href="dfgmr_8c.html#b67e7a07556055c505aae6e65c937e39">dfgmr.c</a>
+, <a class="el" href="fgmr_8c.html#b67e7a07556055c505aae6e65c937e39">fgmr.c</a>
+<li>dDumpLine()
+: <a class="el" href="dreadhb_8c.html#b87732418a8ca2e99d65165ea7f9a2c5">dreadhb.c</a>
+, <a class="el" href="dreadrb_8c.html#f815bcc4cd6c6b297588886829ce6cb2">dreadrb.c</a>
+<li>DenseSize()
+: <a class="el" href="util_8c.html#9daf07581bce8c0f5c879c5899ce419c">util.c</a>
+<li>Destroy_CompCol_Matrix()
+: <a class="el" href="slu__util_8h.html#4257e4d9cca1db286b73154d81ec3880">slu_util.h</a>
+, <a class="el" href="util_8c.html#27491a8171a480d6c98e6d1e535e1973">util.c</a>
+<li>Destroy_CompCol_Permuted()
+: <a class="el" href="slu__util_8h.html#4de38e1c0ef18dd0791cb206c7f5348f">slu_util.h</a>
+, <a class="el" href="util_8c.html#7285ca16a0b84b4333d71efeb65c0126">util.c</a>
+<li>Destroy_CompRow_Matrix()
+: <a class="el" href="slu__util_8h.html#98cbb427c29a6be1760288b63857bc12">slu_util.h</a>
+, <a class="el" href="util_8c.html#6292e6a8f2b75101294f2e99927b5d2a">util.c</a>
+<li>Destroy_Dense_Matrix()
+: <a class="el" href="slu__util_8h.html#9f7e658f2e17e08b2d88fadc11f2b437">slu_util.h</a>
+, <a class="el" href="util_8c.html#301f89dc9483e5bcdc47fc96e8645cf7">util.c</a>
+<li>Destroy_SuperMatrix_Store()
+: <a class="el" href="slu__util_8h.html#2c43be55861c6e4ee5b806ac16cc382c">slu_util.h</a>
+, <a class="el" href="util_8c.html#c16a0aea75cf99b4d38ec4ede6f13eb4">util.c</a>
+<li>Destroy_SuperNode_Matrix()
+: <a class="el" href="slu__util_8h.html#de01201644d38ff78cd1824ff2e5022b">slu_util.h</a>
+, <a class="el" href="util_8c.html#ea724a390aed4ef00a4b8ed783c60014">util.c</a>
+<li>detect_super_cols()
+: <a class="el" href="colamd_8c.html#27211c7dc11832c4675d8d3fcd7167a0">colamd.c</a>
+<li>dexpand()
+: <a class="el" href="dmemory_8c.html#fe3104df9ace895f5332843534ae99b4">dmemory.c</a>
+<li>dfgmr()
+: <a class="el" href="dfgmr_8c.html#70923b9fe57b546dfe14462a6be22de2">dfgmr.c</a>
+<li>dfill()
+: <a class="el" href="dutil_8c.html#5594dfec40e37514e00e85a90e8973b5">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#b20cdc6e4aed319a43b967496932b3e0">slu_ddefs.h</a>
+<li>dfill_diag()
+: <a class="el" href="ddiagonal_8c.html#fb322f8a71fc9c29b8f0860f82be31bb">ddiagonal.c</a>
+<li>dFillRHS()
+: <a class="el" href="dutil_8c.html#83b6ea01e8b7df0cc9c6fe5261647367">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#ac4705e1c2b9892fd11115ef3cd40bb8">slu_ddefs.h</a>
+<li>dGenXtrue()
+: <a class="el" href="dutil_8c.html#cdfe40e3085c29fd483b63a15ed163c7">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#ebd8d273c58591dc435e1afd4e837d9f">slu_ddefs.h</a>
+<li>dgscon()
+: <a class="el" href="slu__ddefs_8h.html#1a5e04478d6d6e4f714fee3080f5a065">slu_ddefs.h</a>
+, <a class="el" href="dgscon_8c.html#2c7a4267d306243d3ceb15531522033e">dgscon.c</a>
+<li>dgsequ()
+: <a class="el" href="dgsequ_8c.html#af22b247cc134fb0ba90285e84ccebb4">dgsequ.c</a>
+, <a class="el" href="slu__ddefs_8h.html#fba0263dae6d5d3a700e9e7a120d6b87">slu_ddefs.h</a>
+<li>dgsisv()
+: <a class="el" href="slu__ddefs_8h.html#044b42d8bf8016b19c9013e9bee6d6e7">slu_ddefs.h</a>
+<li>dgsisx()
+: <a class="el" href="dgsisx_8c.html#bcbb363b5bc23f538d1210f39bb1d672">dgsisx.c</a>
+, <a class="el" href="slu__ddefs_8h.html#1f70849d53a266fbad14f63ea369caf1">slu_ddefs.h</a>
+<li>dgsitrf()
+: <a class="el" href="dgsitrf_8c.html#ffb50badd1ff77dbe19f6df360f98e50">dgsitrf.c</a>
+, <a class="el" href="slu__ddefs_8h.html#374c532584b83169e7ca686ad9fb26fb">slu_ddefs.h</a>
+<li>dgsrfs()
+: <a class="el" href="dgsrfs_8c.html#db43f7a2408ddb763f36fbfcc0482f28">dgsrfs.c</a>
+, <a class="el" href="slu__ddefs_8h.html#424f8b36e210117c4dea0c590e977bb4">slu_ddefs.h</a>
+<li>dgssv()
+: <a class="el" href="dgssv_8c.html#d804a93a6806ee4d4694df5b753d91af">dgssv.c</a>
+, <a class="el" href="slu__ddefs_8h.html#2c8a0856fb555c352ed0f43989d1d71e">slu_ddefs.h</a>
+<li>dgssvx()
+: <a class="el" href="dgssvx_8c.html#a463b60835d9bca4a4bb1386076d1488">dgssvx.c</a>
+, <a class="el" href="slu__ddefs_8h.html#55ccb099a318043965a941a7fd8cb095">slu_ddefs.h</a>
+<li>dgstrf()
+: <a class="el" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf.c</a>
+, <a class="el" href="slu__ddefs_8h.html#bf0a9c8ab051126eafff67d421f7b99c">slu_ddefs.h</a>
+<li>dgstrs()
+: <a class="el" href="dgstrs_8c.html#6e3eace519372b7dfcd053e0d3614fc1">dgstrs.c</a>
+, <a class="el" href="slu__ddefs_8h.html#8d42744f59d84a50b19aa4c28cf7aded">slu_ddefs.h</a>
+<li>dinf_norm_error()
+: <a class="el" href="dutil_8c.html#e6aa0b8725411ba46ac42ee55503ee0f">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#d778c065ce9768d1f971d8a556752f11">slu_ddefs.h</a>
+<li>dlacon_()
+: <a class="el" href="dlacon_8c.html#4187621e84a9554552e3fa8098542801">dlacon.c</a>
+<li>dlamc1_()
+: <a class="el" href="dlamch_8c.html#eaa4a6b78a27d38535ca1a7dc010c92e">dlamch.c</a>
+<li>dlamc2_()
+: <a class="el" href="dlamch_8c.html#a05275111d3110333608138f59f3f8c3">dlamch.c</a>
+<li>dlamc3_()
+: <a class="el" href="dlamch_8c.html#35cd4981c9a7d3c46226a75f68720dad">dlamch.c</a>
+<li>dlamc4_()
+: <a class="el" href="dlamch_8c.html#141c735fa5fb73f28150470ee91da0f9">dlamch.c</a>
+<li>dlamc5_()
+: <a class="el" href="dlamch_8c.html#0309c617fb0124d2d3ca73dfbdda9fa9">dlamch.c</a>
+<li>dlamch_()
+: <a class="el" href="dlamch_8c.html#8f8bef103c45d87276d6508164f5883c">dlamch.c</a>
+, <a class="el" href="slu__ddefs_8h.html#177ab9599e432642729507475d5cea83">slu_ddefs.h</a>
+, <a class="el" href="slu__zdefs_8h.html#177ab9599e432642729507475d5cea83">slu_zdefs.h</a>
+<li>dlangs()
+: <a class="el" href="dlangs_8c.html#75a53f4464b95c63adad9e1f63f44d1c">dlangs.c</a>
+<li>dlaqgs()
+: <a class="el" href="dlaqgs_8c.html#07e1fa4926680eb02069087f0aa26fa1">dlaqgs.c</a>
+, <a class="el" href="slu__ddefs_8h.html#7c3a821ed273808f662ddd41be6c6c97">slu_ddefs.h</a>
+<li>dldperm()
+: <a class="el" href="dldperm_8c.html#5c6a8de5e809f2094735965027adf532">dldperm.c</a>
+, <a class="el" href="slu__ddefs_8h.html#d48bb6b5f8ebecb3263b80aa0588b62e">slu_ddefs.h</a>
+<li>dlsolve()
+: <a class="el" href="dcolumn__bmod_8c.html#56d27043eac0282b0d0e4106acedb083">dcolumn_bmod.c</a>
+, <a class="el" href="dgstrs_8c.html#56d27043eac0282b0d0e4106acedb083">dgstrs.c</a>
+, <a class="el" href="dmyblas2_8c.html#986e55bb6eac4e68b78c98b8276557db">dmyblas2.c</a>
+, <a class="el" href="dpanel__bmod_8c.html#56d27043eac0282b0d0e4106acedb083">dpanel_bmod.c</a>
+, <a class="el" href="dsp__blas2_8c.html#56d27043eac0282b0d0e4106acedb083">dsp_blas2.c</a>
+<li>dLUMemInit()
+: <a class="el" href="dmemory_8c.html#e2ca2ac5e9a763fd3f07487343e4522e">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#a93b6921e772245253231d545072e93c">slu_ddefs.h</a>
+<li>dLUMemXpand()
+: <a class="el" href="dmemory_8c.html#9aff5dfe301496ef7c9234789975c043">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#4cc8cb916b6bf5f2238c374aa7339f4c">slu_ddefs.h</a>
+<li>dLUWorkFree()
+: <a class="el" href="dmemory_8c.html#a7d9129a2b0dc259ccccc8d6d2218cf8">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#e7976837d1936a3150abf5dd62f0c211">slu_ddefs.h</a>
+<li>dLUWorkInit()
+: <a class="el" href="dmemory_8c.html#0ae701a41439ca8af10604920e2f72ba">dmemory.c</a>
+<li>dmatvec()
+: <a class="el" href="dgstrs_8c.html#65523602382b3d96c9852545ae24815d">dgstrs.c</a>
+, <a class="el" href="dcolumn__bmod_8c.html#65523602382b3d96c9852545ae24815d">dcolumn_bmod.c</a>
+, <a class="el" href="dmyblas2_8c.html#703303b4c9cdd6074c55e83970db83b6">dmyblas2.c</a>
+, <a class="el" href="dpanel__bmod_8c.html#65523602382b3d96c9852545ae24815d">dpanel_bmod.c</a>
+, <a class="el" href="dsp__blas2_8c.html#65523602382b3d96c9852545ae24815d">dsp_blas2.c</a>
+<li>dmatvec_mult()
+: <a class="el" href="ditersol_8c.html#367b39a8f8095885ffb10c66c6652aff">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#367b39a8f8095885ffb10c66c6652aff">ditersol1.c</a>
+<li>dmemory_usage()
+: <a class="el" href="dmemory_8c.html#5c9b1e24d07635068c014999d44672aa">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#a7bf96909e8e3579499f46a84b28d9df">slu_ddefs.h</a>
+<li>dnrm2_()
+: <a class="el" href="ilu__cdrop__row_8c.html#61a0022627cc1977966c0067f1f12e26">ilu_cdrop_row.c</a>
+, <a class="el" href="ilu__zdrop__row_8c.html#61a0022627cc1977966c0067f1f12e26">ilu_zdrop_row.c</a>
+, <a class="el" href="ilu__ddrop__row_8c.html#d36414a4f46a1195a7f6c5d3480d3118">ilu_ddrop_row.c</a>
+, <a class="el" href="ilu__sdrop__row_8c.html#61a0022627cc1977966c0067f1f12e26">ilu_sdrop_row.c</a>
+, <a class="el" href="dfgmr_8c.html#61a0022627cc1977966c0067f1f12e26">dfgmr.c</a>
+, <a class="el" href="fgmr_8c.html#61a0022627cc1977966c0067f1f12e26">fgmr.c</a>
+<li>doubleCalloc()
+: <a class="el" href="slu__zdefs_8h.html#2b7be732f4d725dd35799d772473625e">slu_zdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#2b7be732f4d725dd35799d772473625e">slu_ddefs.h</a>
+, <a class="el" href="dmemory_8c.html#c8b6d99155644578a5e5542c32040cfe">dmemory.c</a>
+<li>doublecomplexCalloc()
+: <a class="el" href="slu__zdefs_8h.html#b7683ac1617339478753ab308a7b0fc5">slu_zdefs.h</a>
+, <a class="el" href="zmemory_8c.html#7c839d769dd079aab4bf852533d96933">zmemory.c</a>
+<li>doublecomplexMalloc()
+: <a class="el" href="zmemory_8c.html#d681359ed37ac809cc0e456e05655823">zmemory.c</a>
+, <a class="el" href="slu__zdefs_8h.html#e33b5268048e570c0cdf96498198e821">slu_zdefs.h</a>
+<li>doubleMalloc()
+: <a class="el" href="dmemory_8c.html#8f2b9305cb611c37e7f627da902451a8">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#47c4cf79f8c6305147a70de6da2696ac">slu_ddefs.h</a>
+, <a class="el" href="slu__zdefs_8h.html#47c4cf79f8c6305147a70de6da2696ac">slu_zdefs.h</a>
+<li>dpanel_bmod()
+: <a class="el" href="dpanel__bmod_8c.html#192df249a9fc13ad49bf3f2cd79aba65">dpanel_bmod.c</a>
+, <a class="el" href="slu__ddefs_8h.html#22cfb6f57857cc7cb3d853ee5467656f">slu_ddefs.h</a>
+<li>dpanel_dfs()
+: <a class="el" href="dpanel__dfs_8c.html#2a809488b87d2c1a9b2a574b726e8517">dpanel_dfs.c</a>
+, <a class="el" href="slu__ddefs_8h.html#ca83bf1fa16a64ea2ee575574a8bb969">slu_ddefs.h</a>
+<li>dParseFloatFormat()
+: <a class="el" href="dreadhb_8c.html#341d1f00e157073d681d37e87c417e69">dreadhb.c</a>
+, <a class="el" href="dreadrb_8c.html#940db08f01ba40731b65b3bc88c52ae1">dreadrb.c</a>
+<li>dParseIntFormat()
+: <a class="el" href="dreadhb_8c.html#84a11fcb3558dba9f846610da6fbec2c">dreadhb.c</a>
+, <a class="el" href="dreadrb_8c.html#e766b0ec3051c146313ff37802decbb7">dreadrb.c</a>
+<li>dPivotGrowth()
+: <a class="el" href="dpivotgrowth_8c.html#770618182a3841e8d10a26a4eb97418a">dpivotgrowth.c</a>
+, <a class="el" href="slu__ddefs_8h.html#2c1536c187133a8a8ea5d856a222eec5">slu_ddefs.h</a>
+<li>dpivotL()
+: <a class="el" href="slu__ddefs_8h.html#09624f0c44de80ee2731e44a333ee01c">slu_ddefs.h</a>
+, <a class="el" href="dpivotL_8c.html#c9bc2a5673ddfce2452bf4a88b97a266">dpivotL.c</a>
+<li>dPrint_CompCol_Matrix()
+: <a class="el" href="dutil_8c.html#2c061ebaaabe5e1bd83ba564b439d8c8">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#4908a093c1b9d8d96e3fbba6c29673c1">slu_ddefs.h</a>
+<li>dPrint_Dense_Matrix()
+: <a class="el" href="slu__ddefs_8h.html#d440b7616886349fe2cde5ac490b0f7d">slu_ddefs.h</a>
+, <a class="el" href="dutil_8c.html#5af0eda3e0026a251a06d320df15a372">dutil.c</a>
+<li>dprint_lu_col()
+: <a class="el" href="dutil_8c.html#73eb5fcbf916fc45d05e38767bd7efb3">dutil.c</a>
+, <a class="el" href="slu__ddefs_8h.html#61c31548694df9784dc2612febfedc00">slu_ddefs.h</a>
+<li>dprint_soln()
+: <a class="el" href="dgstrs_8c.html#1532445fd4c7e1e91d5bd11dbf78364f">dgstrs.c</a>
+<li>dPrint_SuperNode_Matrix()
+: <a class="el" href="slu__ddefs_8h.html#d6acd040a093d5858b9b77d347be954c">slu_ddefs.h</a>
+, <a class="el" href="dutil_8c.html#402c1ab7977c2f9f5de62e8c66c451f0">dutil.c</a>
+<li>dPrintPerf()
+: <a class="el" href="dutil_8c.html#4c6e5de0836eb95d08cd15a4da367bcc">dutil.c</a>
+<li>dpruneL()
+: <a class="el" href="slu__ddefs_8h.html#98c8e37fbd3e285de80ae5ebc633c64a">slu_ddefs.h</a>
+, <a class="el" href="dpruneL_8c.html#525e73335e6aeaa1e851a52800bf3965">dpruneL.c</a>
+<li>dpsolve()
+: <a class="el" href="ditersol_8c.html#0361a1766c36ff38205dc63f1b329afd">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#0361a1766c36ff38205dc63f1b329afd">ditersol1.c</a>
+<li>dqselect()
+: <a class="el" href="slu__ddefs_8h.html#293d5d2ac72e4e528ee06d634cb6b59a">slu_ddefs.h</a>
+, <a class="el" href="qselect_8c.html#55283ff1f5ff561072afe7c8ad6ac218">qselect.c</a>
+, <a class="el" href="slu__zdefs_8h.html#293d5d2ac72e4e528ee06d634cb6b59a">slu_zdefs.h</a>
+<li>dQuerySpace()
+: <a class="el" href="dmemory_8c.html#e94c561110fcc75c31cda89105fd0a6c">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#a28191998cfaddc30d4728535a39d996">slu_ddefs.h</a>
+<li>dreadhb()
+: <a class="el" href="slu__ddefs_8h.html#be5e29734eb193fdda83f02fbb72a60a">slu_ddefs.h</a>
+, <a class="el" href="dreadhb_8c.html#2a9cf14ec04bddd25fc04ddebc437317">dreadhb.c</a>
+<li>dreadmt()
+: <a class="el" href="slu__ddefs_8h.html#efc4e420b7fa27a770b4b9db6ba5cfc4">slu_ddefs.h</a>
+<li>dreadrb()
+: <a class="el" href="dreadrb_8c.html#675b0881eef06ac2d7e09e1c3e1c0403">dreadrb.c</a>
+, <a class="el" href="slu__ddefs_8h.html#6f74181ecc009862e39a3d512c9dc1ae">slu_ddefs.h</a>
+<li>dreadrhs()
+: <a class="el" href="dreadtriple_8c.html#d97776a2c12802db12e668f6d2da7901">dreadtriple.c</a>
+<li>dreadtriple()
+: <a class="el" href="slu__ddefs_8h.html#cd7d7ca64b596f459db7e62897c6130a">slu_ddefs.h</a>
+, <a class="el" href="dreadtriple_8c.html#c79bc303193d42d6a40148211796eff0">dreadtriple.c</a>
+<li>dReadValues()
+: <a class="el" href="dreadrb_8c.html#b3ebe1f51db0ee2e5abd6a2248185585">dreadrb.c</a>
+, <a class="el" href="dreadhb_8c.html#cca1e3b19661f732344b530c8cbf25c3">dreadhb.c</a>
+<li>dSetRWork()
+: <a class="el" href="slu__ddefs_8h.html#6248d2471a710335359db300b35c5066">slu_ddefs.h</a>
+, <a class="el" href="dmemory_8c.html#aa5359da217b433b43bf6c8e2d29aa45">dmemory.c</a>
+<li>dSetupSpace()
+: <a class="el" href="dmemory_8c.html#cb29e96116d7b170d6f021a87a4763e6">dmemory.c</a>
+<li>dsnode_bmod()
+: <a class="el" href="dsnode__bmod_8c.html#1466b84198911ff34e828a811e70831e">dsnode_bmod.c</a>
+, <a class="el" href="slu__ddefs_8h.html#289847afa67421491f96367c7f2fe90f">slu_ddefs.h</a>
+<li>dsnode_dfs()
+: <a class="el" href="slu__ddefs_8h.html#b0fe8232652578797bee690fcd8adfd0">slu_ddefs.h</a>
+, <a class="el" href="dsnode__dfs_8c.html#80b831678c233741661d8386d8736da1">dsnode_dfs.c</a>
+<li>dStackCompress()
+: <a class="el" href="dmemory_8c.html#adb43e6ea6725f06d04704a1db3dc0be">dmemory.c</a>
+<li>dswap_()
+: <a class="el" href="ilu__ddrop__row_8c.html#009fa596702c2777985e4fca6477566e">ilu_ddrop_row.c</a>
+<li>duser_free()
+: <a class="el" href="dmemory_8c.html#8412c8f776ad7cfe599a5b601310fb8e">dmemory.c</a>
+<li>duser_malloc()
+: <a class="el" href="dmemory_8c.html#00f228f45bab7594bea821b70eedbf51">dmemory.c</a>
+<li>dusolve()
+: <a class="el" href="dgstrs_8c.html#ca18e78d81448d99eec840b19de76efd">dgstrs.c</a>
+, <a class="el" href="dcolumn__bmod_8c.html#ca18e78d81448d99eec840b19de76efd">dcolumn_bmod.c</a>
+, <a class="el" href="dmyblas2_8c.html#47847fb71c3589e4d725db85052896fd">dmyblas2.c</a>
+, <a class="el" href="dsp__blas2_8c.html#ca18e78d81448d99eec840b19de76efd">dsp_blas2.c</a>
+<li>dzasum_()
+: <a class="el" href="ilu__zdrop__row_8c.html#fafebe5a243783e920465d5985076dae">ilu_zdrop_row.c</a>
+<li>dznrm2_()
+: <a class="el" href="ilu__zdrop__row_8c.html#7e669e96b4c0ad6e2000684a34e798b7">ilu_zdrop_row.c</a>
+, <a class="el" href="zfgmr_8c.html#4b8d5195d541b1c827f61e05b5da13a9">zfgmr.c</a>
+<li>dzsum1_()
+: <a class="el" href="dzsum1_8c.html#3fade9d45be0f00827565d6d0f37fe5d">dzsum1.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x65.html b/DOC/html/globals_func_0x65.html
new file mode 100644
index 0000000..e63c452
--- /dev/null
+++ b/DOC/html/globals_func_0x65.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li class="current"><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>etdfs()
+: <a class="el" href="sp__coletree_8c.html#9da0c72a7b8eaf7a2a69fb6c3340131a">sp_coletree.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x66.html b/DOC/html/globals_func_0x66.html
new file mode 100644
index 0000000..5410fbc
--- /dev/null
+++ b/DOC/html/globals_func_0x66.html
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li class="current"><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>fgmr()
+: <a class="el" href="fgmr_8c.html#0a1472abec17ef62976ff38e54db01d1">fgmr.c</a>
+<li>finalize_disjoint_sets()
+: <a class="el" href="sp__coletree_8c.html#a34f31c4fe6ec2e5ee33f3d04ad9c209">sp_coletree.c</a>
+<li>find()
+: <a class="el" href="sp__coletree_8c.html#7cdfbecc1ca23ee1cc298897bd64a45c">sp_coletree.c</a>
+<li>find_ordering()
+: <a class="el" href="colamd_8c.html#10da36e975e03d3c0fd68dbe14eb27cc">colamd.c</a>
+<li>fixupL()
+: <a class="el" href="slu__zdefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf">slu_zdefs.h</a>
+, <a class="el" href="util_8c.html#4b97838714471334eba3f4de948d6e7a">util.c</a>
+, <a class="el" href="slu__cdefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf">slu_cdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf">slu_ddefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf">slu_sdefs.h</a>
+<li>floatCalloc()
+: <a class="el" href="slu__cdefs_8h.html#3e1230bff11a9e47c35555299bcdcf1b">slu_cdefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#3e1230bff11a9e47c35555299bcdcf1b">slu_sdefs.h</a>
+, <a class="el" href="smemory_8c.html#b6dc7fd90a3d13e0c9a8ca8d62def27f">smemory.c</a>
+<li>floatMalloc()
+: <a class="el" href="slu__sdefs_8h.html#42361c3ce2ba81d149ffba01fbd6f138">slu_sdefs.h</a>
+, <a class="el" href="slu__cdefs_8h.html#42361c3ce2ba81d149ffba01fbd6f138">slu_cdefs.h</a>
+, <a class="el" href="smemory_8c.html#4a866452c5dcba66083ef463662955ee">smemory.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x67.html b/DOC/html/globals_func_0x67.html
new file mode 100644
index 0000000..aad02d7
--- /dev/null
+++ b/DOC/html/globals_func_0x67.html
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li class="current"><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>garbage_collection()
+: <a class="el" href="colamd_8c.html#9a0dc18af9f72ad8e436a98980e55c41">colamd.c</a>
+<li>genmmd_()
+: <a class="el" href="get__perm__c_8c.html#792508355b6bef974fcd9e214de40c8e">get_perm_c.c</a>
+, <a class="el" href="mmd_8c.html#7b73e4f4f1dee202474aee4a3b2e1146">mmd.c</a>
+<li>get_colamd()
+: <a class="el" href="get__perm__c_8c.html#e92c26cd488b7a86b8277cee2773d8ef">get_perm_c.c</a>
+<li>get_perm_c()
+: <a class="el" href="get__perm__c_8c.html#aecb6e6e7a3e97356050bcfdf2573796">get_perm_c.c</a>
+, <a class="el" href="slu__util_8h.html#263122009c4421188a14285798b7bff7">slu_util.h</a>
+<li>getata()
+: <a class="el" href="get__perm__c_8c.html#90f30e2b284864f6a800a98ceaff8fbc">get_perm_c.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x68.html b/DOC/html/globals_func_0x68.html
new file mode 100644
index 0000000..3e45b06
--- /dev/null
+++ b/DOC/html/globals_func_0x68.html
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li class="current"><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>heap_relax_snode()
+: <a class="el" href="heap__relax__snode_8c.html#059d36bb76b7562c9bb2cbd7870e7ffe">heap_relax_snode.c</a>
+, <a class="el" href="slu__util_8h.html#de3f23f612ced035318a59623b6925e5">slu_util.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x69.html b/DOC/html/globals_func_0x69.html
new file mode 100644
index 0000000..aee51f6
--- /dev/null
+++ b/DOC/html/globals_func_0x69.html
@@ -0,0 +1,196 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li class="current"><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>icamax_()
+: <a class="el" href="ilu__cdrop__row_8c.html#22f0fa95a896ad561e0ab57fea1ef330">ilu_cdrop_row.c</a>
+<li>icmax1_()
+: <a class="el" href="icmax1_8c.html#7315ad1456ee66d31a1171729e6c1c4f">icmax1.c</a>
+<li>idamax_()
+: <a class="el" href="ilu__ddrop__row_8c.html#fdb24942915626f5de65c50cb31c267a">ilu_ddrop_row.c</a>
+<li>ifill()
+: <a class="el" href="slu__util_8h.html#b0dfb6551008bcad5e758defdbd13006">slu_util.h</a>
+, <a class="el" href="util_8c.html#e289773c377a566a2f77c88b21d7f4ae">util.c</a>
+<li>ilu_ccolumn_dfs()
+: <a class="el" href="ilu__ccolumn__dfs_8c.html#61b8082fdb8acb13c983c11acaea87ba">ilu_ccolumn_dfs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#94b01af5a7e93ca2cc3cf52717e767a0">slu_cdefs.h</a>
+<li>ilu_ccopy_to_ucol()
+: <a class="el" href="ilu__ccopy__to__ucol_8c.html#069fdcfba5148dfc923017db03d7eab1">ilu_ccopy_to_ucol.c</a>
+, <a class="el" href="slu__cdefs_8h.html#a9bf5072c6b1c6803b1dba973ac4be3e">slu_cdefs.h</a>
+<li>ilu_cdrop_row()
+: <a class="el" href="ilu__cdrop__row_8c.html#b6bca119c9d5eab7210d0009835e399f">ilu_cdrop_row.c</a>
+, <a class="el" href="slu__cdefs_8h.html#cf639d4fcc71c90f3e966b47787ad834">slu_cdefs.h</a>
+<li>ilu_countnz()
+: <a class="el" href="util_8c.html#45274d2d42e1a1305101bbe11e47ed65">util.c</a>
+, <a class="el" href="slu__cdefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85">slu_cdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85">slu_ddefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85">slu_sdefs.h</a>
+, <a class="el" href="slu__zdefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85">slu_zdefs.h</a>
+<li>ilu_cpanel_dfs()
+: <a class="el" href="ilu__cpanel__dfs_8c.html#e528c7a140b699babac3d212a4cfbe4b">ilu_cpanel_dfs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#9f427fadf45d56409840775c99ce8967">slu_cdefs.h</a>
+<li>ilu_cpivotL()
+: <a class="el" href="ilu__cpivotL_8c.html#5eadb2e028608a33e9de84d4d6895796">ilu_cpivotL.c</a>
+, <a class="el" href="slu__cdefs_8h.html#c4edc9f45dad6dd53caca13240690633">slu_cdefs.h</a>
+<li>ilu_cQuerySpace()
+: <a class="el" href="cmemory_8c.html#af50d31c33a4cc3e770b617202ea73e3">cmemory.c</a>
+, <a class="el" href="slu__cdefs_8h.html#97e43257315ae194779ffe9c3dc9c213">slu_cdefs.h</a>
+<li>ilu_csnode_dfs()
+: <a class="el" href="ilu__csnode__dfs_8c.html#a6c4a4029db106e8dd56bc0fe1f0090b">ilu_csnode_dfs.c</a>
+, <a class="el" href="slu__cdefs_8h.html#c4e46d9d75c94503e94b4599960479d7">slu_cdefs.h</a>
+<li>ilu_dcolumn_dfs()
+: <a class="el" href="ilu__dcolumn__dfs_8c.html#f164b7b553eed616e2ed95144698fe7a">ilu_dcolumn_dfs.c</a>
+, <a class="el" href="slu__ddefs_8h.html#4b9639419ceb1d7b476f000292022a24">slu_ddefs.h</a>
+<li>ilu_dcopy_to_ucol()
+: <a class="el" href="ilu__dcopy__to__ucol_8c.html#b1802613180b46ffdb7b058a42c38716">ilu_dcopy_to_ucol.c</a>
+, <a class="el" href="slu__ddefs_8h.html#7448553ebd9bd2f4dd9d19c2a988ae8e">slu_ddefs.h</a>
+<li>ilu_ddrop_row()
+: <a class="el" href="ilu__ddrop__row_8c.html#380317801e05b11930fd1e094db34179">ilu_ddrop_row.c</a>
+, <a class="el" href="slu__ddefs_8h.html#c127b5fda718241500c5a6ee7dae0df5">slu_ddefs.h</a>
+<li>ilu_dpanel_dfs()
+: <a class="el" href="slu__ddefs_8h.html#5ebb5502086dbb04d4dd640de81de410">slu_ddefs.h</a>
+, <a class="el" href="ilu__dpanel__dfs_8c.html#0a3d016444b041668956824248d22439">ilu_dpanel_dfs.c</a>
+<li>ilu_dpivotL()
+: <a class="el" href="ilu__dpivotL_8c.html#058d843996bb36b73784b80aae05f04b">ilu_dpivotL.c</a>
+, <a class="el" href="slu__ddefs_8h.html#19d8e83d74fdc411c1f10d76574e4b31">slu_ddefs.h</a>
+<li>ilu_dQuerySpace()
+: <a class="el" href="dmemory_8c.html#61aaccf587a78d15d79c4cc79f80e8b0">dmemory.c</a>
+, <a class="el" href="slu__ddefs_8h.html#7b3370283f8f5ce4a3fb0207247cc8e2">slu_ddefs.h</a>
+<li>ilu_dsnode_dfs()
+: <a class="el" href="ilu__dsnode__dfs_8c.html#66dbc4626e59d14b4d3458c4eb841829">ilu_dsnode_dfs.c</a>
+, <a class="el" href="slu__ddefs_8h.html#cd3bf891014254c364adbb0d1b2d1f49">slu_ddefs.h</a>
+<li>ilu_heap_relax_snode()
+: <a class="el" href="ilu__heap__relax__snode_8c.html#ac1a978dda622cdb58c3c2eaee4b4030">ilu_heap_relax_snode.c</a>
+, <a class="el" href="slu__util_8h.html#cd37f89f3fd101b2860c26b45bd4c2a1">slu_util.h</a>
+<li>ilu_relax_snode()
+: <a class="el" href="ilu__relax__snode_8c.html#e0e2bbb8507d800766030635a3bd5a7e">ilu_relax_snode.c</a>
+, <a class="el" href="slu__util_8h.html#2212f489d8bb77b74c61e0a7442796a8">slu_util.h</a>
+<li>ilu_scolumn_dfs()
+: <a class="el" href="ilu__scolumn__dfs_8c.html#7cca59251907bd7e1973d394487f74af">ilu_scolumn_dfs.c</a>
+, <a class="el" href="slu__sdefs_8h.html#ab2366ea3e2cdcbf51b976432fc43616">slu_sdefs.h</a>
+<li>ilu_scopy_to_ucol()
+: <a class="el" href="ilu__scopy__to__ucol_8c.html#ac49754df15a9466857a0eca885f9444">ilu_scopy_to_ucol.c</a>
+, <a class="el" href="slu__sdefs_8h.html#35a18be483569110edc1665d13e260e3">slu_sdefs.h</a>
+<li>ilu_sdrop_row()
+: <a class="el" href="ilu__sdrop__row_8c.html#0d9b169f47790d6eed41107efb445867">ilu_sdrop_row.c</a>
+, <a class="el" href="slu__sdefs_8h.html#5f5e67d3b2d715a388ca99bb28387fb9">slu_sdefs.h</a>
+<li>ilu_set_default_options()
+: <a class="el" href="slu__util_8h.html#fce6cba2b855a4b046f6521d5dd1beb4">slu_util.h</a>
+, <a class="el" href="util_8c.html#fce6cba2b855a4b046f6521d5dd1beb4">util.c</a>
+<li>ilu_spanel_dfs()
+: <a class="el" href="ilu__spanel__dfs_8c.html#fffee4e945eab223be6daa1759e98f60">ilu_spanel_dfs.c</a>
+, <a class="el" href="slu__sdefs_8h.html#a91b3297a15ace9ac5abd65c5e708f2d">slu_sdefs.h</a>
+<li>ilu_spivotL()
+: <a class="el" href="ilu__spivotL_8c.html#9da652b68b6ecee45919cf56f256b7e0">ilu_spivotL.c</a>
+, <a class="el" href="slu__sdefs_8h.html#b7f61e0a95c151f53f8a400bc9c6192e">slu_sdefs.h</a>
+<li>ilu_sQuerySpace()
+: <a class="el" href="smemory_8c.html#e057d714a4952330de0572fa2785b068">smemory.c</a>
+, <a class="el" href="slu__sdefs_8h.html#db260ae3f26e2179b1cf33c3e754d6f1">slu_sdefs.h</a>
+<li>ilu_ssnode_dfs()
+: <a class="el" href="slu__sdefs_8h.html#714eccb6cd0fb1fc0920e8a52489f1a5">slu_sdefs.h</a>
+, <a class="el" href="ilu__ssnode__dfs_8c.html#510a9174e442a65aaa83f9ce97390f85">ilu_ssnode_dfs.c</a>
+<li>ilu_zcolumn_dfs()
+: <a class="el" href="ilu__zcolumn__dfs_8c.html#e44a937bcd7d34ad6b18ad859680d8f1">ilu_zcolumn_dfs.c</a>
+, <a class="el" href="slu__zdefs_8h.html#fc18a3d9096f5d951d28cb6933077233">slu_zdefs.h</a>
+<li>ilu_zcopy_to_ucol()
+: <a class="el" href="ilu__zcopy__to__ucol_8c.html#b3c195f1b0db2f8686e3be3dc5107007">ilu_zcopy_to_ucol.c</a>
+, <a class="el" href="slu__zdefs_8h.html#09d54c3f2ea8ecc5e74170c38771ab46">slu_zdefs.h</a>
+<li>ilu_zdrop_row()
+: <a class="el" href="slu__zdefs_8h.html#94d5ac6f75873f62e1bef9c521534d43">slu_zdefs.h</a>
+, <a class="el" href="ilu__zdrop__row_8c.html#f4b8c50d3afed76a8b9809673a7da4f3">ilu_zdrop_row.c</a>
+<li>ilu_zpanel_dfs()
+: <a class="el" href="ilu__zpanel__dfs_8c.html#8bc5f8a774d7fab0ba65cd9bca243435">ilu_zpanel_dfs.c</a>
+, <a class="el" href="slu__zdefs_8h.html#c3883f7039a1c9b1349452d22a972396">slu_zdefs.h</a>
+<li>ilu_zpivotL()
+: <a class="el" href="slu__zdefs_8h.html#b9679d0b020666979ae1686461e26ae2">slu_zdefs.h</a>
+, <a class="el" href="ilu__zpivotL_8c.html#857e99bebbdf102f2b9d2ef4a25d1135">ilu_zpivotL.c</a>
+<li>ilu_zQuerySpace()
+: <a class="el" href="slu__zdefs_8h.html#5bc1efbf682521f7f23c16b8a36b81e9">slu_zdefs.h</a>
+, <a class="el" href="zmemory_8c.html#dcf560b50ada29ab0807eb50f16c434d">zmemory.c</a>
+<li>ilu_zsnode_dfs()
+: <a class="el" href="slu__zdefs_8h.html#973a22230ce47cdca6dc0d509b246f5b">slu_zdefs.h</a>
+, <a class="el" href="ilu__zsnode__dfs_8c.html#6fa78a3059d75e11a66434992dddafab">ilu_zsnode_dfs.c</a>
+<li>init_rows_cols()
+: <a class="el" href="colamd_8c.html#d632adbb6b5d2516805a965b42b601c8">colamd.c</a>
+<li>init_scoring()
+: <a class="el" href="colamd_8c.html#c804543e35e2ab481d9e2c19ed0ebcf6">colamd.c</a>
+<li>initialize_disjoint_sets()
+: <a class="el" href="sp__coletree_8c.html#679285dead1583f96db3c978735de380">sp_coletree.c</a>
+<li>intCalloc()
+: <a class="el" href="memory_8c.html#af51f82a79c361236a2d825a59a63403">memory.c</a>
+, <a class="el" href="slu__util_8h.html#f7f89277b471647ea6b3581ca11becd3">slu_util.h</a>
+<li>intMalloc()
+: <a class="el" href="slu__util_8h.html#c5e3eb5cdc6962ab8238dd3e663bea67">slu_util.h</a>
+, <a class="el" href="memory_8c.html#49bbe20102e5b541c8e8963afa2bd46a">memory.c</a>
+<li>isamax_()
+: <a class="el" href="ilu__sdrop__row_8c.html#18eff2aa758918dee76e31b812c88c9f">ilu_sdrop_row.c</a>
+<li>izamax_()
+: <a class="el" href="ilu__zdrop__row_8c.html#f8bf573faadaf4a6cead386258c1421c">ilu_zdrop_row.c</a>
+<li>izmax1_()
+: <a class="el" href="izmax1_8c.html#99d3cc85eec418b836a4949ead25c297">izmax1.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x6c.html b/DOC/html/globals_func_0x6c.html
new file mode 100644
index 0000000..5c95540
--- /dev/null
+++ b/DOC/html/globals_func_0x6c.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li class="current"><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>link()
+: <a class="el" href="sp__coletree_8c.html#b7bc8447f8976dbb19c60dc2e1a12905">sp_coletree.c</a>
+<li>lsame_()
+: <a class="el" href="lsame_8c.html#6de88349c1fe993f318dd0643af908c3">lsame.c</a>
+, <a class="el" href="slu__util_8h.html#4d9eb0e1ec853020a42e867b4ff3018c">slu_util.h</a>
+<li>LUFactFlops()
+: <a class="el" href="util_8c.html#60256c1cabadcd15f555ed6e9d7eedef">util.c</a>
+<li>LUSolveFlops()
+: <a class="el" href="util_8c.html#fdfc4cfea288d5639fb7321929550b8a">util.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x6d.html b/DOC/html/globals_func_0x6d.html
new file mode 100644
index 0000000..512c92c
--- /dev/null
+++ b/DOC/html/globals_func_0x6d.html
@@ -0,0 +1,145 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li class="current"><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>main()
+: <a class="el" href="citersol_8c.html#0ddf1224851353fc92bfbff6f499fa97">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">citersol1.c</a>
+, <a class="el" href="clinsol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">clinsol1.c</a>
+, <a class="el" href="ditersol_8c.html#0ddf1224851353fc92bfbff6f499fa97">ditersol.c</a>
+, <a class="el" href="sitersol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">sitersol1.c</a>
+, <a class="el" href="slinsol_8c.html#0ddf1224851353fc92bfbff6f499fa97">slinsol.c</a>
+, <a class="el" href="ditersol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">ditersol1.c</a>
+, <a class="el" href="slinsol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">slinsol1.c</a>
+, <a class="el" href="slinsolx_8c.html#0ddf1224851353fc92bfbff6f499fa97">slinsolx.c</a>
+, <a class="el" href="clinsolx_8c.html#0ddf1224851353fc92bfbff6f499fa97">clinsolx.c</a>
+, <a class="el" href="dlinsol_8c.html#0ddf1224851353fc92bfbff6f499fa97">dlinsol.c</a>
+, <a class="el" href="slinsolx1_8c.html#0ddf1224851353fc92bfbff6f499fa97">slinsolx1.c</a>
+, <a class="el" href="slinsolx2_8c.html#0ddf1224851353fc92bfbff6f499fa97">slinsolx2.c</a>
+, <a class="el" href="dlinsol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">dlinsol1.c</a>
+, <a class="el" href="superlu_8c.html#e0665038b72011f5c680c660fcb59459">superlu.c</a>
+, <a class="el" href="zitersol_8c.html#0ddf1224851353fc92bfbff6f499fa97">zitersol.c</a>
+, <a class="el" href="clinsol_8c.html#0ddf1224851353fc92bfbff6f499fa97">clinsol.c</a>
+, <a class="el" href="clinsolx1_8c.html#0ddf1224851353fc92bfbff6f499fa97">clinsolx1.c</a>
+, <a class="el" href="dlinsolx_8c.html#0ddf1224851353fc92bfbff6f499fa97">dlinsolx.c</a>
+, <a class="el" href="zitersol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">zitersol1.c</a>
+, <a class="el" href="zlinsol_8c.html#0ddf1224851353fc92bfbff6f499fa97">zlinsol.c</a>
+, <a class="el" href="dlinsolx1_8c.html#0ddf1224851353fc92bfbff6f499fa97">dlinsolx1.c</a>
+, <a class="el" href="zlinsol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">zlinsol1.c</a>
+, <a class="el" href="zlinsolx_8c.html#0ddf1224851353fc92bfbff6f499fa97">zlinsolx.c</a>
+, <a class="el" href="clinsolx2_8c.html#0ddf1224851353fc92bfbff6f499fa97">clinsolx2.c</a>
+, <a class="el" href="dlinsolx2_8c.html#0ddf1224851353fc92bfbff6f499fa97">dlinsolx2.c</a>
+, <a class="el" href="zlinsolx1_8c.html#0ddf1224851353fc92bfbff6f499fa97">zlinsolx1.c</a>
+, <a class="el" href="zlinsolx2_8c.html#0ddf1224851353fc92bfbff6f499fa97">zlinsolx2.c</a>
+, <a class="el" href="sitersol_8c.html#0ddf1224851353fc92bfbff6f499fa97">sitersol.c</a>
+<li>make_set()
+: <a class="el" href="sp__coletree_8c.html#6ecd760efd6eec938f69c6d692d6ddae">sp_coletree.c</a>
+<li>mark_relax()
+: <a class="el" href="slu__util_8h.html#23057ebe27329fd8fc65970c7c3e2b3f">slu_util.h</a>
+, <a class="el" href="mark__relax_8c.html#5e85b0273eec011f0027d8506a20350e">mark_relax.c</a>
+<li>mc64ad_()
+: <a class="el" href="cldperm_8c.html#1bf33c16a135cdc671242aed1705e1cd">cldperm.c</a>
+, <a class="el" href="dldperm_8c.html#1bf33c16a135cdc671242aed1705e1cd">dldperm.c</a>
+, <a class="el" href="mc64ad_8c.html#122c4a344cc189495e32b7b7f6123e69">mc64ad.c</a>
+, <a class="el" href="sldperm_8c.html#1bf33c16a135cdc671242aed1705e1cd">sldperm.c</a>
+, <a class="el" href="zldperm_8c.html#1bf33c16a135cdc671242aed1705e1cd">zldperm.c</a>
+<li>mc64bd_()
+: <a class="el" href="mc64ad_8c.html#03d088da1e7d8454a0fd4e1d1840b96c">mc64ad.c</a>
+<li>mc64dd_()
+: <a class="el" href="mc64ad_8c.html#23f5c353dc0f33b3171101060a9a555f">mc64ad.c</a>
+<li>mc64ed_()
+: <a class="el" href="mc64ad_8c.html#3926b73b0b519feef70eae9ed9cf282c">mc64ad.c</a>
+<li>mc64fd_()
+: <a class="el" href="mc64ad_8c.html#9b0c810c63b7faf051b21e97a636285c">mc64ad.c</a>
+<li>mc64id_()
+: <a class="el" href="cldperm_8c.html#1e6fb0c8dd36aef071ef165136ece781">cldperm.c</a>
+, <a class="el" href="zldperm_8c.html#1e6fb0c8dd36aef071ef165136ece781">zldperm.c</a>
+, <a class="el" href="dldperm_8c.html#1e6fb0c8dd36aef071ef165136ece781">dldperm.c</a>
+, <a class="el" href="mc64ad_8c.html#49a5219ef8d6345ee5ae5a34aea76ed6">mc64ad.c</a>
+, <a class="el" href="sldperm_8c.html#1e6fb0c8dd36aef071ef165136ece781">sldperm.c</a>
+<li>mc64qd_()
+: <a class="el" href="mc64ad_8c.html#77573ca4776db28859b0ead94b728dc1">mc64ad.c</a>
+<li>mc64rd_()
+: <a class="el" href="mc64ad_8c.html#dbb9a61e53f59a675c30dfd821aad16f">mc64ad.c</a>
+<li>mc64sd_()
+: <a class="el" href="mc64ad_8c.html#ea1b4d8e05692a715e334f472f9a4313">mc64ad.c</a>
+<li>mc64ud_()
+: <a class="el" href="mc64ad_8c.html#52c18d1d9fc3efefba36ba67456b46d1">mc64ad.c</a>
+<li>mc64wd_()
+: <a class="el" href="mc64ad_8c.html#dd3e26b831b8b4bc818b93c4fdce7174">mc64ad.c</a>
+<li>mmdelm_()
+: <a class="el" href="mmd_8c.html#52ddf7a4032e5491d42b2105f505299f">mmd.c</a>
+<li>mmdint_()
+: <a class="el" href="mmd_8c.html#6e497816a7ceb220795914fbddc4afb1">mmd.c</a>
+<li>mmdnum_()
+: <a class="el" href="mmd_8c.html#42b9909fb2c920dfc0fa3dfdc4a4f168">mmd.c</a>
+<li>mmdupd_()
+: <a class="el" href="mmd_8c.html#5c016b89c468a56f69713b264690e98b">mmd.c</a>
+<li>mxCallocInt()
+: <a class="el" href="sp__coletree_8c.html#45fdfbf54106113728e1a036977ccf5b">sp_coletree.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x6e.html b/DOC/html/globals_func_0x6e.html
new file mode 100644
index 0000000..fc3dba5
--- /dev/null
+++ b/DOC/html/globals_func_0x6e.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li class="current"><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>nr_etdfs()
+: <a class="el" href="sp__coletree_8c.html#7fec305add1f9f4c611eacdb2b744bfd">sp_coletree.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x6f.html b/DOC/html/globals_func_0x6f.html
new file mode 100644
index 0000000..e8b686b
--- /dev/null
+++ b/DOC/html/globals_func_0x6f.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li class="current"><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>order_children()
+: <a class="el" href="colamd_8c.html#d9896b63f5b2823065686f63a1096130">colamd.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x70.html b/DOC/html/globals_func_0x70.html
new file mode 100644
index 0000000..7c4d49f
--- /dev/null
+++ b/DOC/html/globals_func_0x70.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li class="current"><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>parse_command_line()
+: <a class="el" href="clinsolx_8c.html#26a449fe0e6f4599404be8f78ed31f20">clinsolx.c</a>
+, <a class="el" href="clinsolx1_8c.html#26a449fe0e6f4599404be8f78ed31f20">clinsolx1.c</a>
+, <a class="el" href="dlinsolx_8c.html#693ba86aac49435e82cf3a57a4412744">dlinsolx.c</a>
+, <a class="el" href="slinsolx1_8c.html#26a449fe0e6f4599404be8f78ed31f20">slinsolx1.c</a>
+, <a class="el" href="slinsolx2_8c.html#693ba86aac49435e82cf3a57a4412744">slinsolx2.c</a>
+, <a class="el" href="dlinsolx1_8c.html#693ba86aac49435e82cf3a57a4412744">dlinsolx1.c</a>
+, <a class="el" href="zlinsolx_8c.html#693ba86aac49435e82cf3a57a4412744">zlinsolx.c</a>
+, <a class="el" href="zlinsolx1_8c.html#693ba86aac49435e82cf3a57a4412744">zlinsolx1.c</a>
+, <a class="el" href="clinsolx2_8c.html#693ba86aac49435e82cf3a57a4412744">clinsolx2.c</a>
+, <a class="el" href="dlinsolx2_8c.html#693ba86aac49435e82cf3a57a4412744">dlinsolx2.c</a>
+, <a class="el" href="zlinsolx2_8c.html#693ba86aac49435e82cf3a57a4412744">zlinsolx2.c</a>
+, <a class="el" href="slinsolx_8c.html#26a449fe0e6f4599404be8f78ed31f20">slinsolx.c</a>
+<li>pow_di()
+: <a class="el" href="dlamch_8c.html#9537f19743fcaaac6231895afa9f9e4d">dlamch.c</a>
+<li>pow_ri()
+: <a class="el" href="slamch_8c.html#ace5d2e6dbf9c872b611447aa01539c8">slamch.c</a>
+<li>print_complex_vec()
+: <a class="el" href="cutil_8c.html#f6a8d174ff8ba298e99b4ac94794d5e1">cutil.c</a>
+<li>print_double_vec()
+: <a class="el" href="dutil_8c.html#457e11c8736d30b7da4ee14feb422ed0">dutil.c</a>
+, <a class="el" href="slu__cdefs_8h.html#ad0c06e9adc1e29a0ab2e78c38119bb4">slu_cdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#ad0c06e9adc1e29a0ab2e78c38119bb4">slu_ddefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#ad0c06e9adc1e29a0ab2e78c38119bb4">slu_sdefs.h</a>
+, <a class="el" href="slu__zdefs_8h.html#ad0c06e9adc1e29a0ab2e78c38119bb4">slu_zdefs.h</a>
+<li>print_doublecomplex_vec()
+: <a class="el" href="zutil_8c.html#d40a765de4b05c0ab07d3299aa93b6da">zutil.c</a>
+<li>print_float_vec()
+: <a class="el" href="sutil_8c.html#75e7f70be5afd936daa4ad0e2ae91300">sutil.c</a>
+<li>print_ilu_options()
+: <a class="el" href="util_8c.html#f68d6594a77880eedb6c7b35aef237ac">util.c</a>
+<li>print_int_vec()
+: <a class="el" href="util_8c.html#ac67c35b47f2aa92a3202769d3eebdeb">util.c</a>
+, <a class="el" href="slu__util_8h.html#8a3ba6cbe163f9c12f6f10ee8ba98fc7">slu_util.h</a>
+<li>print_options()
+: <a class="el" href="util_8c.html#3a041511849362ed44688698c86a9039">util.c</a>
+<li>print_panel_seg()
+: <a class="el" href="util_8c.html#9e2ebe03503cdfc4ab20306d028ca312">util.c</a>
+, <a class="el" href="slu__util_8h.html#48208ca68e95c765c0c55c12b196d79e">slu_util.h</a>
+<li>print_report()
+: <a class="el" href="colamd_8c.html#5ba6567b2e4ac6f69086d2ac7ab5c58a">colamd.c</a>
+<li>PrintPerf()
+: <a class="el" href="slu__sdefs_8h.html#dca8047332d0b0c161945583ecb3435d">slu_sdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#04b5542748fcc2fee77b587e31bb0a02">slu_ddefs.h</a>
+, <a class="el" href="slu__zdefs_8h.html#e8ef28d59bc98423cc4e69465edfd736">slu_zdefs.h</a>
+, <a class="el" href="slu__cdefs_8h.html#7a41152a5800bc02bef17b56e070d0e6">slu_cdefs.h</a>
+<li>PrintSumm()
+: <a class="el" href="slu__util_8h.html#47292875a12f5601efa82a4350656db8">slu_util.h</a>
+, <a class="el" href="util_8c.html#a88c72f09a077ee18043edff386f4a2c">util.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x72.html b/DOC/html/globals_func_0x72.html
new file mode 100644
index 0000000..8341842
--- /dev/null
+++ b/DOC/html/globals_func_0x72.html
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li class="current"><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>r_cnjg()
+: <a class="el" href="scomplex_8c.html#dd0e09f7411e03b7516ddedacd6a59df">scomplex.c</a>
+, <a class="el" href="slu__scomplex_8h.html#0837d7f15d3b03860fdd17de957c788c">slu_scomplex.h</a>
+<li>r_imag()
+: <a class="el" href="slu__scomplex_8h.html#29e2cb7ddb38711cdae8f6dc4481a80f">slu_scomplex.h</a>
+, <a class="el" href="scomplex_8c.html#b6bc19479c8838286f451d5d9a6c86a3">scomplex.c</a>
+<li>ReadVector()
+: <a class="el" href="dreadrb_8c.html#fbec2a501b92e7e7bb13af2e21520522">dreadrb.c</a>
+, <a class="el" href="sreadhb_8c.html#fbec2a501b92e7e7bb13af2e21520522">sreadhb.c</a>
+, <a class="el" href="zreadhb_8c.html#fbec2a501b92e7e7bb13af2e21520522">zreadhb.c</a>
+, <a class="el" href="creadhb_8c.html#fbec2a501b92e7e7bb13af2e21520522">creadhb.c</a>
+, <a class="el" href="sreadrb_8c.html#fbec2a501b92e7e7bb13af2e21520522">sreadrb.c</a>
+, <a class="el" href="creadrb_8c.html#fbec2a501b92e7e7bb13af2e21520522">creadrb.c</a>
+, <a class="el" href="dreadhb_8c.html#fbec2a501b92e7e7bb13af2e21520522">dreadhb.c</a>
+, <a class="el" href="zreadrb_8c.html#fbec2a501b92e7e7bb13af2e21520522">zreadrb.c</a>
+<li>relax_snode()
+: <a class="el" href="slu__util_8h.html#a9dcebe0d2709ff7ab053c3acb8f35af">slu_util.h</a>
+, <a class="el" href="relax__snode_8c.html#d70bc12cb9031ab8aba4a37a18be46e3">relax_snode.c</a>
+<li>resetrep_col()
+: <a class="el" href="util_8c.html#67bce8b2142b3be41583de4fbea02cb0">util.c</a>
+, <a class="el" href="slu__util_8h.html#b71db926d60d7b8fd739df197b766366">slu_util.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x73.html b/DOC/html/globals_func_0x73.html
new file mode 100644
index 0000000..3a7a477
--- /dev/null
+++ b/DOC/html/globals_func_0x73.html
@@ -0,0 +1,410 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li class="current"><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>sallocateA()
+: <a class="el" href="slu__sdefs_8h.html#aef6f98786d0bd76103237385ddbeb9f">slu_sdefs.h</a>
+, <a class="el" href="smemory_8c.html#9754e5504550ae4ab763721ebcb7055b">smemory.c</a>
+<li>sasum_()
+: <a class="el" href="ilu__sdrop__row_8c.html#43ef780d8b669dc0b19d41fa6727124f">ilu_sdrop_row.c</a>
+<li>saxpy_()
+: <a class="el" href="ilu__sdrop__row_8c.html#de8ba65d9c44f41e97cf2c40a772cff7">ilu_sdrop_row.c</a>
+<li>scasum_()
+: <a class="el" href="ilu__cdrop__row_8c.html#44105172934892274bea9807a5b2037f">ilu_cdrop_row.c</a>
+<li>scheck_tempv()
+: <a class="el" href="spanel__bmod_8c.html#e6f7d2939a3b49f7b1022645be6dde4e">spanel_bmod.c</a>
+, <a class="el" href="sutil_8c.html#12365f7c1a88d3c18e0ce06383f0e78d">sutil.c</a>
+<li>scnrm2_()
+: <a class="el" href="ilu__cdrop__row_8c.html#ef10aeea1f2500610ded919305e8e84c">ilu_cdrop_row.c</a>
+, <a class="el" href="cfgmr_8c.html#7528cbbfcac44b8a1425b6ac26419c85">cfgmr.c</a>
+<li>scolumn_bmod()
+: <a class="el" href="scolumn__bmod_8c.html#c89043410fd16fe2b8d3b2c902fec9f7">scolumn_bmod.c</a>
+, <a class="el" href="slu__sdefs_8h.html#e21004feb23626f7ea648b46657a257a">slu_sdefs.h</a>
+<li>scolumn_dfs()
+: <a class="el" href="scolumn__dfs_8c.html#c9a044320fe8bfbb051a344686a4cb7d">scolumn_dfs.c</a>
+, <a class="el" href="slu__sdefs_8h.html#20dc9300377cb7240572ba34a31af3d1">slu_sdefs.h</a>
+<li>sCompRow_to_CompCol()
+: <a class="el" href="slu__sdefs_8h.html#ef4be8ddf6a62ef48ca8dfc3a6992634">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#beab98ddf4ff7a83f39132f00df707a3">sutil.c</a>
+<li>scopy_()
+: <a class="el" href="ilu__scopy__to__ucol_8c.html#f839d60e0d4028df30ea1106ce429210">ilu_scopy_to_ucol.c</a>
+, <a class="el" href="ilu__sdrop__row_8c.html#f839d60e0d4028df30ea1106ce429210">ilu_sdrop_row.c</a>
+<li>sCopy_CompCol_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#7369dba9a8c3e34a27bdc9eba73cbe3e">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#a5ed0ac7636b53f6004de03ac6ee5fa2">sutil.c</a>
+<li>sCopy_Dense_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#5ef26ab4351b4ab39c2ef3d0ff5d6cb5">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#cab5fbd47a16ac4dcdfb20a557e77861">sutil.c</a>
+<li>scopy_to_ucol()
+: <a class="el" href="scopy__to__ucol_8c.html#b44d465713c602e68295999c003daf7d">scopy_to_ucol.c</a>
+, <a class="el" href="slu__sdefs_8h.html#249a312149bcf091fcc8adbd0c536cb2">slu_sdefs.h</a>
+<li>sCreate_CompCol_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#bb3d30eea43abc536793244e7564e70d">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#579e4609791c29f1b5f118e8fad589a1">sutil.c</a>
+<li>sCreate_CompRow_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#77496309d539716f616365a2515aa653">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#24a4f9ba12c52c73a132b0b3b374603e">sutil.c</a>
+<li>sCreate_Dense_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#ca98118f5539f098beff0b70c041c2e6">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#f67168ae9d7920841831576f6298158b">sutil.c</a>
+<li>sCreate_SuperNode_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#f4386b0d87e1c8886b58fcf9d243bc12">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#cd3569a74da2e6a7d634675014fea82f">sutil.c</a>
+<li>scsum1_()
+: <a class="el" href="scsum1_8c.html#5d1c88cf76514de82b3ab994dd6990f4">scsum1.c</a>
+<li>sdominate()
+: <a class="el" href="sdiagonal_8c.html#1c23412db51d68adf32515fa5bdc9c88">sdiagonal.c</a>
+<li>sdot_()
+: <a class="el" href="sfgmr_8c.html#6152533add9e764be3ad22884976d20d">sfgmr.c</a>
+<li>sDumpLine()
+: <a class="el" href="sreadhb_8c.html#752858dee322b95e4175c3f5d42ad6cd">sreadhb.c</a>
+, <a class="el" href="sreadrb_8c.html#d40eef9e3223cc000a38a8fb326f1dd1">sreadrb.c</a>
+<li>set_default_options()
+: <a class="el" href="slu__util_8h.html#4792687285a879f7955029421ba99795">slu_util.h</a>
+, <a class="el" href="util_8c.html#4792687285a879f7955029421ba99795">util.c</a>
+<li>SetIWork()
+: <a class="el" href="memory_8c.html#dbbe5a57b4ed64564c887fb52d798c54">memory.c</a>
+, <a class="el" href="slu__util_8h.html#eaaa4cb43f415698df4f891e1a1afaa4">slu_util.h</a>
+<li>sexpand()
+: <a class="el" href="smemory_8c.html#a2862f14356be7d9f12bfdfc175137a1">smemory.c</a>
+<li>sfgmr()
+: <a class="el" href="sfgmr_8c.html#ce249a05c158a15db1e6526e955f35ee">sfgmr.c</a>
+<li>sfill()
+: <a class="el" href="slu__sdefs_8h.html#2d734e40276e89a3ef04bf79bc21acb6">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#cbd3b859941f0ed660ddb178b9f898f9">sutil.c</a>
+<li>sfill_diag()
+: <a class="el" href="sdiagonal_8c.html#4ca1f3e4bce5bcd3e19bc3932cbb1206">sdiagonal.c</a>
+<li>sFillRHS()
+: <a class="el" href="slu__sdefs_8h.html#c8b784b5551863e8d50047ee280c34cf">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#51d71bcf7e5497c9e64a6dcecc9fe30b">sutil.c</a>
+<li>sGenXtrue()
+: <a class="el" href="slu__sdefs_8h.html#b79adc3c2d496feb17f359aa303211fc">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#ae1faea15add2d01572b7ce6d037ac47">sutil.c</a>
+<li>sgscon()
+: <a class="el" href="sgscon_8c.html#76b21c7561d5bce81821a76c3465601b">sgscon.c</a>
+, <a class="el" href="slu__sdefs_8h.html#1c910cf12639a22a03727ad204575b3b">slu_sdefs.h</a>
+<li>sgsequ()
+: <a class="el" href="sgsequ_8c.html#d8a808e807e38c32c08cfbeadb088f08">sgsequ.c</a>
+, <a class="el" href="slu__sdefs_8h.html#3dbdb406f2fb8b186f0f8d3a4cd2d60d">slu_sdefs.h</a>
+<li>sgsisv()
+: <a class="el" href="slu__sdefs_8h.html#ff6cdbb84f0fbd4cbce7a64ea1f7eb20">slu_sdefs.h</a>
+<li>sgsisx()
+: <a class="el" href="sgsisx_8c.html#7ef921fcca8189c43499e3e89e7e05ce">sgsisx.c</a>
+, <a class="el" href="slu__sdefs_8h.html#b57375a81b174861bcb68ed11861a4f5">slu_sdefs.h</a>
+<li>sgsitrf()
+: <a class="el" href="sgsitrf_8c.html#25788392a605519048cafa995b641fcc">sgsitrf.c</a>
+, <a class="el" href="slu__sdefs_8h.html#22204c4186c4412ee33cd16285ee6bb0">slu_sdefs.h</a>
+<li>sgsrfs()
+: <a class="el" href="sgsrfs_8c.html#a619758588187cd5ad69a10a808d18f6">sgsrfs.c</a>
+, <a class="el" href="slu__sdefs_8h.html#e824bcb507f76ad3053d845352fb6b3d">slu_sdefs.h</a>
+<li>sgssv()
+: <a class="el" href="sgssv_8c.html#6d5d8cc5159f2230fc059d0e382a63b8">sgssv.c</a>
+, <a class="el" href="slu__sdefs_8h.html#44bbae3b1218d951ed229c461a5f14b6">slu_sdefs.h</a>
+<li>sgssvx()
+: <a class="el" href="slu__sdefs_8h.html#4d6a37b565522c7c77a173826588deee">slu_sdefs.h</a>
+, <a class="el" href="sgssvx_8c.html#f372ad744992d76301a23ae20a290b3c">sgssvx.c</a>
+<li>sgstrf()
+: <a class="el" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf.c</a>
+, <a class="el" href="slu__sdefs_8h.html#f006a81b576fffa92a1c848ac3191c70">slu_sdefs.h</a>
+<li>sgstrs()
+: <a class="el" href="sgstrs_8c.html#9b6e1e555af9cf109ef3a584054a91e2">sgstrs.c</a>
+, <a class="el" href="slu__sdefs_8h.html#ea450a9c52512127d6eaaebf0a65f9ce">slu_sdefs.h</a>
+<li>sinf_norm_error()
+: <a class="el" href="slu__sdefs_8h.html#ba0eeda28d139bf88878880edd3cca5a">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#e25fa2d7b1de8cb8bb2297c42b72727a">sutil.c</a>
+<li>slacon_()
+: <a class="el" href="slacon_8c.html#865b6cfd089f47842f95ecfcb1c88355">slacon.c</a>
+<li>slamc1_()
+: <a class="el" href="slamch_8c.html#865afb9b3184a99ab01e8d34b147f227">slamch.c</a>
+<li>slamc2_()
+: <a class="el" href="slamch_8c.html#13ac82b8c5bbb0c2392aefba4177e4fc">slamch.c</a>
+<li>slamc3_()
+: <a class="el" href="slamch_8c.html#a422da346f4ae26603bbc9b657191e5f">slamch.c</a>
+<li>slamc4_()
+: <a class="el" href="slamch_8c.html#0f5092460355cf3d3461688e37cc70a0">slamch.c</a>
+<li>slamc5_()
+: <a class="el" href="slamch_8c.html#ed7eefa5a851c36909eee77beed124b0">slamch.c</a>
+<li>slamch_()
+: <a class="el" href="slamch_8c.html#5458a369e694e54bb5758774f492b6cb">slamch.c</a>
+, <a class="el" href="slu__cdefs_8h.html#47c1dd1b8332f4366d5c5112219fdb3a">slu_cdefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#47c1dd1b8332f4366d5c5112219fdb3a">slu_sdefs.h</a>
+<li>slangs()
+: <a class="el" href="slangs_8c.html#201bfd9f2017cf5904aada9f21f23ab2">slangs.c</a>
+<li>slaqgs()
+: <a class="el" href="slaqgs_8c.html#f44216962efdebc7e1117b273743e84f">slaqgs.c</a>
+, <a class="el" href="slu__sdefs_8h.html#fe4b556cd9d484f53606d114f83649d4">slu_sdefs.h</a>
+<li>sldperm()
+: <a class="el" href="sldperm_8c.html#6c181d905cb61481e86ddfce701e74a0">sldperm.c</a>
+, <a class="el" href="slu__sdefs_8h.html#69557d06b4e300aa6aca944561f3bb32">slu_sdefs.h</a>
+<li>slsolve()
+: <a class="el" href="scolumn__bmod_8c.html#a8bbeb2abbd5a10ac13fa9b48504691c">scolumn_bmod.c</a>
+, <a class="el" href="sgstrs_8c.html#a8bbeb2abbd5a10ac13fa9b48504691c">sgstrs.c</a>
+, <a class="el" href="smyblas2_8c.html#2c2e291d9f0825630425f05925633916">smyblas2.c</a>
+, <a class="el" href="spanel__bmod_8c.html#a8bbeb2abbd5a10ac13fa9b48504691c">spanel_bmod.c</a>
+, <a class="el" href="ssp__blas2_8c.html#a8bbeb2abbd5a10ac13fa9b48504691c">ssp_blas2.c</a>
+<li>slu_PrintInt10()
+: <a class="el" href="slu__util_8h.html#de363dcb4babb66fa0e5f51bd2e6e42c">slu_util.h</a>
+, <a class="el" href="util_8c.html#52adbcf3d0b17d26fa9fc133c911993d">util.c</a>
+<li>sLUMemInit()
+: <a class="el" href="slu__sdefs_8h.html#f68715ec86cde90aa31fec07164d6ea6">slu_sdefs.h</a>
+, <a class="el" href="smemory_8c.html#adb7d9338f2fd9700f84951708cd8064">smemory.c</a>
+<li>sLUMemXpand()
+: <a class="el" href="slu__sdefs_8h.html#9af26d0426eb0bb63755880f2e67e7b7">slu_sdefs.h</a>
+, <a class="el" href="smemory_8c.html#80077f82e6d512e415519daed9dc3345">smemory.c</a>
+<li>sLUWorkFree()
+: <a class="el" href="slu__sdefs_8h.html#9035f0d2a50cf5d8e29287572bd1be83">slu_sdefs.h</a>
+, <a class="el" href="smemory_8c.html#0e837042fa6f4b27eb2cbfc2f80387fa">smemory.c</a>
+<li>sLUWorkInit()
+: <a class="el" href="smemory_8c.html#bc603ef3859778fb5631cf3d3b951de6">smemory.c</a>
+<li>smatvec()
+: <a class="el" href="scolumn__bmod_8c.html#b452e957171a4d0d9cfe6abb3d8a950c">scolumn_bmod.c</a>
+, <a class="el" href="sgstrs_8c.html#b452e957171a4d0d9cfe6abb3d8a950c">sgstrs.c</a>
+, <a class="el" href="smyblas2_8c.html#3ba02ba32ea4e0eae40802c9c5d082e1">smyblas2.c</a>
+, <a class="el" href="spanel__bmod_8c.html#b452e957171a4d0d9cfe6abb3d8a950c">spanel_bmod.c</a>
+, <a class="el" href="ssp__blas2_8c.html#b452e957171a4d0d9cfe6abb3d8a950c">ssp_blas2.c</a>
+<li>smatvec_mult()
+: <a class="el" href="sitersol_8c.html#d45b4dfe6fd3558b4c213cc08128d3a1">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#d45b4dfe6fd3558b4c213cc08128d3a1">sitersol1.c</a>
+<li>smemory_usage()
+: <a class="el" href="slu__sdefs_8h.html#b50ebebf3a620086366b6c310d52d681">slu_sdefs.h</a>
+, <a class="el" href="smemory_8c.html#658f955c5532813bd0490502efae563f">smemory.c</a>
+<li>snode_profile()
+: <a class="el" href="slu__util_8h.html#01ded59744addeefd265dbb22d9f37d0">slu_util.h</a>
+<li>snrm2_()
+: <a class="el" href="ilu__sdrop__row_8c.html#c419c8b8797339212c62cd423e3e652c">ilu_sdrop_row.c</a>
+, <a class="el" href="sfgmr_8c.html#4ed20001c29f50f0a4f3261861086cc8">sfgmr.c</a>
+<li>sp_cgemm()
+: <a class="el" href="csp__blas3_8c.html#23c01569bec7ec0c247eb5df98f67841">csp_blas3.c</a>
+, <a class="el" href="slu__cdefs_8h.html#0473a1696817ed02c501ca8af8ff0285">slu_cdefs.h</a>
+<li>sp_cgemv()
+: <a class="el" href="csp__blas2_8c.html#1adbbd2f478e6a22843d82a07d42fb63">csp_blas2.c</a>
+, <a class="el" href="slu__cdefs_8h.html#59e320a29e9ded59a46e8d64619ffac6">slu_cdefs.h</a>
+<li>sp_coletree()
+: <a class="el" href="slu__util_8h.html#f8198f26bef3c82fbb8601fc5a8e0d9e">slu_util.h</a>
+, <a class="el" href="sp__coletree_8c.html#a0494ba5c3e08e41a10ce8a2d96f8c49">sp_coletree.c</a>
+<li>sp_ctrsv()
+: <a class="el" href="csp__blas2_8c.html#51cbd689a51632885b9b034002631a6e">csp_blas2.c</a>
+, <a class="el" href="slu__cdefs_8h.html#8299a994a223b7178314fe7faff74508">slu_cdefs.h</a>
+<li>sp_dgemm()
+: <a class="el" href="dsp__blas3_8c.html#6c8c4772ca0f241a43c5561b646fb749">dsp_blas3.c</a>
+, <a class="el" href="slu__ddefs_8h.html#b776edfed8eb517dc4d037e76ed2bb24">slu_ddefs.h</a>
+<li>sp_dgemv()
+: <a class="el" href="dsp__blas2_8c.html#221dfb4c5cbc550095a989c61fec4993">dsp_blas2.c</a>
+, <a class="el" href="slu__ddefs_8h.html#505f6c005fe6a0cdcbf00512a1e4823a">slu_ddefs.h</a>
+<li>sp_dtrsv()
+: <a class="el" href="dsp__blas2_8c.html#aa92ff654356fe62f70ebef5815627e4">dsp_blas2.c</a>
+, <a class="el" href="slu__ddefs_8h.html#f7ab3b2b81d10a67b258956bfc468740">slu_ddefs.h</a>
+<li>sp_ienv()
+: <a class="el" href="EXAMPLE_2sp__ienv_8c.html#21109476f1261abd6b256a393f5fd9e7">sp_ienv.c</a>
+, <a class="el" href="slu__util_8h.html#72be96e75e58564c4322ef9ef73ca65f">slu_util.h</a>
+, <a class="el" href="SRC_2sp__ienv_8c.html#21109476f1261abd6b256a393f5fd9e7">sp_ienv.c</a>
+<li>sp_preorder()
+: <a class="el" href="slu__util_8h.html#df9c573cbfb4520a5ea820702d27cfa5">slu_util.h</a>
+, <a class="el" href="sp__preorder_8c.html#d3a9a45f02456022c7eba79e17e215bc">sp_preorder.c</a>
+<li>sp_sgemm()
+: <a class="el" href="slu__sdefs_8h.html#35b4a0e44c32443df609069021d27812">slu_sdefs.h</a>
+, <a class="el" href="ssp__blas3_8c.html#4922193147765a6b36d753e5db65a268">ssp_blas3.c</a>
+<li>sp_sgemv()
+: <a class="el" href="slu__sdefs_8h.html#9e543b2d14781b56ef349114012b4fc9">slu_sdefs.h</a>
+, <a class="el" href="ssp__blas2_8c.html#3a14fab0d3fc42c621199aed6962ab3e">ssp_blas2.c</a>
+<li>sp_strsv()
+: <a class="el" href="slu__sdefs_8h.html#a6d287b6b9bcaf72a692343e614c429c">slu_sdefs.h</a>
+, <a class="el" href="ssp__blas2_8c.html#b9e8302d09840e67df27ddd4defaa621">ssp_blas2.c</a>
+<li>sp_symetree()
+: <a class="el" href="sp__coletree_8c.html#657d6b291654432e815392c2a00d2b84">sp_coletree.c</a>
+<li>sp_zgemm()
+: <a class="el" href="slu__zdefs_8h.html#723eb34b4ba347bbaa753c5d66cca4ab">slu_zdefs.h</a>
+, <a class="el" href="zsp__blas3_8c.html#2648905c9e6009b63d3bf0bb4d673e8e">zsp_blas3.c</a>
+<li>sp_zgemv()
+: <a class="el" href="zsp__blas2_8c.html#9ea39731f07b4c2ab20e44c97ffd773c">zsp_blas2.c</a>
+, <a class="el" href="slu__zdefs_8h.html#295a004dbce1f1b0aa48e7cb319da461">slu_zdefs.h</a>
+<li>sp_ztrsv()
+: <a class="el" href="slu__zdefs_8h.html#4f8e25c2e20af0219ad6719db052f3d7">slu_zdefs.h</a>
+, <a class="el" href="zsp__blas2_8c.html#070a51d222072a18d8d6ac91381b4859">zsp_blas2.c</a>
+<li>spanel_bmod()
+: <a class="el" href="spanel__bmod_8c.html#1d0a6dc46d27416a6d5864dda1dba577">spanel_bmod.c</a>
+, <a class="el" href="slu__sdefs_8h.html#51486936a9ff5079afed80eb5bf8a3e0">slu_sdefs.h</a>
+<li>spanel_dfs()
+: <a class="el" href="slu__sdefs_8h.html#77baf210393e04fa71d4e73b5e60e556">slu_sdefs.h</a>
+, <a class="el" href="spanel__dfs_8c.html#4d512383dafe1497b987e35d74eab9d8">spanel_dfs.c</a>
+<li>sParseFloatFormat()
+: <a class="el" href="sreadrb_8c.html#40bcf62d1e9ac32095b5868b35cef780">sreadrb.c</a>
+, <a class="el" href="sreadhb_8c.html#97275461fb2f2435189f35f5dd7c3fce">sreadhb.c</a>
+<li>sParseIntFormat()
+: <a class="el" href="sreadhb_8c.html#b0bd0cdb6d30a7cb74e401aa6ac3bce1">sreadhb.c</a>
+, <a class="el" href="sreadrb_8c.html#3ff3c5edc1cf7301cff66260418cac52">sreadrb.c</a>
+<li>SpaSize()
+: <a class="el" href="util_8c.html#5789a3d7549a127e955680283ecfe44e">util.c</a>
+<li>spcoletree()
+: <a class="el" href="slu__util_8h.html#0bccee6dda29384503240026c062bfc6">slu_util.h</a>
+<li>sPivotGrowth()
+: <a class="el" href="slu__sdefs_8h.html#cb8787465a6296109b9a306d5a315ff8">slu_sdefs.h</a>
+, <a class="el" href="spivotgrowth_8c.html#9079b4ce43557af65fee107bc8f8d66f">spivotgrowth.c</a>
+<li>spivotL()
+: <a class="el" href="spivotL_8c.html#6adadb830ad13360ce6656212f49fb29">spivotL.c</a>
+, <a class="el" href="slu__sdefs_8h.html#d7ddf03faedae25b4d73e0b6b33bf50c">slu_sdefs.h</a>
+<li>sPrint_CompCol_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#5cd6efad9d9fb7aef8a984f5e3cff66b">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#dc7fea2acb7f41b9818b189720b297a5">sutil.c</a>
+<li>sPrint_Dense_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#25b29c47333295f4aa744e541e277ea0">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#dac44427ccc5c67f7f00744d1fc8501e">sutil.c</a>
+<li>sprint_lu_col()
+: <a class="el" href="sutil_8c.html#3b1baccb0a743b085244b5c9c58616d8">sutil.c</a>
+, <a class="el" href="slu__sdefs_8h.html#297455c494a78c098b2bf418edbc6b16">slu_sdefs.h</a>
+<li>sprint_soln()
+: <a class="el" href="sgstrs_8c.html#d582f185cce067a3f9dd4225248af758">sgstrs.c</a>
+<li>sPrint_SuperNode_Matrix()
+: <a class="el" href="slu__sdefs_8h.html#eb289a84407c9cbbb33cdf3dbb1dacbe">slu_sdefs.h</a>
+, <a class="el" href="sutil_8c.html#2dfd96c3fba192a18a95e89735f8dedf">sutil.c</a>
+<li>sPrintPerf()
+: <a class="el" href="sutil_8c.html#e654ed8c97398a81ad9cf2bac09bbdce">sutil.c</a>
+<li>spruneL()
+: <a class="el" href="spruneL_8c.html#81686daf606ed26d55e3b441ed939f08">spruneL.c</a>
+, <a class="el" href="slu__sdefs_8h.html#cf9da2c45289246ef663fc4a96d1ad78">slu_sdefs.h</a>
+<li>spsolve()
+: <a class="el" href="sitersol1_8c.html#ba0747af8c12b8617ee149febff83471">sitersol1.c</a>
+, <a class="el" href="sitersol_8c.html#ba0747af8c12b8617ee149febff83471">sitersol.c</a>
+<li>sqselect()
+: <a class="el" href="slu__cdefs_8h.html#98d44fe59660f87330b0172151a76141">slu_cdefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#98d44fe59660f87330b0172151a76141">slu_sdefs.h</a>
+, <a class="el" href="qselect_8c.html#5a36bc5d24fe074bc4f3cfb65d7f0ae8">qselect.c</a>
+<li>sQuerySpace()
+: <a class="el" href="smemory_8c.html#ce83037d40e06fba28a0b787df4fbece">smemory.c</a>
+, <a class="el" href="slu__sdefs_8h.html#1357f9a3b2ffb9522883ad84affa63e3">slu_sdefs.h</a>
+<li>sreadhb()
+: <a class="el" href="sreadhb_8c.html#ad3b24bf891015e699d67ed53fb3b21b">sreadhb.c</a>
+, <a class="el" href="slu__sdefs_8h.html#734dbf3f5d66b2a53d88e69daaad729e">slu_sdefs.h</a>
+<li>sreadmt()
+: <a class="el" href="slu__sdefs_8h.html#b345670a95db3f9c4b9c451224db8227">slu_sdefs.h</a>
+<li>sreadrb()
+: <a class="el" href="sreadrb_8c.html#9db4e3af3f6d1037a275ebb516efe51c">sreadrb.c</a>
+, <a class="el" href="slu__sdefs_8h.html#d992a573876b4abfe192ec2bc207f6b0">slu_sdefs.h</a>
+<li>sreadrhs()
+: <a class="el" href="sreadtriple_8c.html#8d3e9341e80abc5aa02486a549621534">sreadtriple.c</a>
+<li>sreadtriple()
+: <a class="el" href="sreadtriple_8c.html#408246d01d1879fa188dd4e28602795d">sreadtriple.c</a>
+, <a class="el" href="slu__sdefs_8h.html#e99cb18465c8992235a7bc003237f692">slu_sdefs.h</a>
+<li>sReadValues()
+: <a class="el" href="sreadrb_8c.html#43a5fc149958a15cd7e3a30b2a1411cf">sreadrb.c</a>
+, <a class="el" href="sreadhb_8c.html#d90abece4b82f3f44fdefa92c28bda09">sreadhb.c</a>
+<li>sSetRWork()
+: <a class="el" href="slu__sdefs_8h.html#b5b2859bf1ef1900506dfa702574c6ad">slu_sdefs.h</a>
+, <a class="el" href="smemory_8c.html#da7e5387084d37939efddbcbf6a6eca1">smemory.c</a>
+<li>sSetupSpace()
+: <a class="el" href="smemory_8c.html#146216d4543e94e7ec4783eada50bf4c">smemory.c</a>
+<li>ssnode_bmod()
+: <a class="el" href="ssnode__bmod_8c.html#60492cc66830945bd7b3521c18312d4a">ssnode_bmod.c</a>
+, <a class="el" href="slu__sdefs_8h.html#60e60255360fae0b1458da070690a3a2">slu_sdefs.h</a>
+<li>ssnode_dfs()
+: <a class="el" href="ssnode__dfs_8c.html#5b66817c89ddf9f74e4773b49dc72872">ssnode_dfs.c</a>
+, <a class="el" href="slu__sdefs_8h.html#d9d54c8dfc11f1e034b4b7175be60ffb">slu_sdefs.h</a>
+<li>sStackCompress()
+: <a class="el" href="smemory_8c.html#abb6ccd3c62fa5284cd5de4fb4c7f533">smemory.c</a>
+<li>sswap_()
+: <a class="el" href="ilu__sdrop__row_8c.html#2ea44e9849dcb189a4e81f09d97e3c95">ilu_sdrop_row.c</a>
+<li>StatFree()
+: <a class="el" href="slu__util_8h.html#b0fb3345d479a7ac24f75f0e64bdff4b">slu_util.h</a>
+, <a class="el" href="util_8c.html#7d50e009f6f1f4ba8a63cdd912a0d31d">util.c</a>
+<li>StatInit()
+: <a class="el" href="slu__util_8h.html#3b979ab4f4e75bdc1b89106dde6c8d72">slu_util.h</a>
+, <a class="el" href="util_8c.html#9b8745daf1fd22070364570977fe1ccc">util.c</a>
+<li>StatPrint()
+: <a class="el" href="slu__util_8h.html#a157fecae472b8ef5ce79bd59876099d">slu_util.h</a>
+, <a class="el" href="util_8c.html#ef88fef229bf26ba82b50d99c20ad915">util.c</a>
+<li>super_stats()
+: <a class="el" href="slu__util_8h.html#c33e407326ae1dc222aee7ff08f322cf">slu_util.h</a>
+, <a class="el" href="util_8c.html#1040b7d1545dbf58b7af05d48621ed0a">util.c</a>
+<li>superlu_abort_and_exit()
+: <a class="el" href="util_8c.html#060bded38730c2e58fa7f7e19c43ba08">util.c</a>
+, <a class="el" href="slu__util_8h.html#bd38b081866ed2c3e4959c4c0560913c">slu_util.h</a>
+<li>superlu_free()
+: <a class="el" href="memory_8c.html#50cc6d9102542bf48b24f6d21cfa7deb">memory.c</a>
+, <a class="el" href="slu__util_8h.html#1745be2114a7b66ea7632292b03cb3ce">slu_util.h</a>
+<li>superlu_malloc()
+: <a class="el" href="memory_8c.html#9ab2cc28807c3b5f5ca8eb9b85ea1f3f">memory.c</a>
+, <a class="el" href="slu__util_8h.html#7ec97fcbe08a55ad56048a43919d6843">slu_util.h</a>
+<li>SuperLU_timer_()
+: <a class="el" href="slu__util_8h.html#0c6777573bbfe81917cd381e0090d355">slu_util.h</a>
+, <a class="el" href="superlu__timer_8c.html#0c6777573bbfe81917cd381e0090d355">superlu_timer.c</a>
+<li>suser_free()
+: <a class="el" href="smemory_8c.html#29f7485dd32f85e996e16f2a199b002d">smemory.c</a>
+<li>suser_malloc()
+: <a class="el" href="smemory_8c.html#d68adc1b6de3f821f9fb24cdcf24d281">smemory.c</a>
+<li>susolve()
+: <a class="el" href="smyblas2_8c.html#32cc084708387e72f8f7d269226237a0">smyblas2.c</a>
+, <a class="el" href="scolumn__bmod_8c.html#25ea48f4f948c68a423f5bd3929e3c1f">scolumn_bmod.c</a>
+, <a class="el" href="ssp__blas2_8c.html#25ea48f4f948c68a423f5bd3929e3c1f">ssp_blas2.c</a>
+, <a class="el" href="sgstrs_8c.html#25ea48f4f948c68a423f5bd3929e3c1f">sgstrs.c</a>
+<li>symamd()
+: <a class="el" href="colamd_8c.html#e81243e57d577e17400b3f532aa4f1e9">colamd.c</a>
+, <a class="el" href="colamd_8h.html#e3d0175d1cb36f6cb16dfe96bbf946a3">colamd.h</a>
+<li>symamd_report()
+: <a class="el" href="colamd_8h.html#948750692c453eb36edc5b77a670ec54">colamd.h</a>
+, <a class="el" href="colamd_8c.html#df3bb99ff64711d528dafe21fd450512">colamd.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x74.html b/DOC/html/globals_func_0x74.html
new file mode 100644
index 0000000..97c8076
--- /dev/null
+++ b/DOC/html/globals_func_0x74.html
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li class="current"><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>TreePostorder()
+: <a class="el" href="slu__util_8h.html#44084fde835d2ccaa25e9fd942a72b7a">slu_util.h</a>
+, <a class="el" href="sp__coletree_8c.html#8bf99818533bf5c192e1e4791b4700cc">sp_coletree.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x75.html b/DOC/html/globals_func_0x75.html
new file mode 100644
index 0000000..3de514b
--- /dev/null
+++ b/DOC/html/globals_func_0x75.html
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li class="current"><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>user_bcopy()
+: <a class="el" href="cmemory_8c.html#4c226087c09a94ff40b92b14fa46fc53">cmemory.c</a>
+, <a class="el" href="zmemory_8c.html#4c226087c09a94ff40b92b14fa46fc53">zmemory.c</a>
+, <a class="el" href="smemory_8c.html#4c226087c09a94ff40b92b14fa46fc53">smemory.c</a>
+, <a class="el" href="memory_8c.html#9a6637190072609a7dcdec007bd98113">memory.c</a>
+, <a class="el" href="dmemory_8c.html#4c226087c09a94ff40b92b14fa46fc53">dmemory.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x78.html b/DOC/html/globals_func_0x78.html
new file mode 100644
index 0000000..028b4fe
--- /dev/null
+++ b/DOC/html/globals_func_0x78.html
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li class="current"><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_x">- x -</a></h3><ul>
+<li>xerbla_()
+: <a class="el" href="slu__util_8h.html#8ddc46fddd8c0c53fc9e77fefdf9a456">slu_util.h</a>
+, <a class="el" href="xerbla_8c.html#eba2ad2b99fd4707175a2b9f42597e50">xerbla.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_func_0x7a.html b/DOC/html/globals_func_0x7a.html
new file mode 100644
index 0000000..206a45e
--- /dev/null
+++ b/DOC/html/globals_func_0x7a.html
@@ -0,0 +1,305 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals_func.html#index__"><span>_</span></a></li>
+      <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_func_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+      <li class="current"><a href="globals_func_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_z">- z -</a></h3><ul>
+<li>z_abs()
+: <a class="el" href="dcomplex_8c.html#f701b1c549ee8dcf6767742a91681b55">dcomplex.c</a>
+, <a class="el" href="slu__dcomplex_8h.html#56231cc660c4a63d58ec6f02754b7d41">slu_dcomplex.h</a>
+<li>z_abs1()
+: <a class="el" href="slu__dcomplex_8h.html#366281128462d1635073d7794fda008a">slu_dcomplex.h</a>
+, <a class="el" href="dcomplex_8c.html#47b00c33108809a1a9a94ffea7ef2097">dcomplex.c</a>
+<li>z_div()
+: <a class="el" href="dcomplex_8c.html#4cfde2671a83833a15c5b48517781db0">dcomplex.c</a>
+, <a class="el" href="slu__dcomplex_8h.html#bfe979e43a797b71939e267913abf791">slu_dcomplex.h</a>
+<li>z_exp()
+: <a class="el" href="slu__dcomplex_8h.html#90ddba9274fa6a571dadf228763fee4b">slu_dcomplex.h</a>
+, <a class="el" href="dcomplex_8c.html#b03337c37aa8b70db9a3bac9368fb06c">dcomplex.c</a>
+<li>z_sgn()
+: <a class="el" href="dcomplex_8c.html#36451f8af6b7bd3a4d5f655ead8d5ee4">dcomplex.c</a>
+, <a class="el" href="slu__dcomplex_8h.html#b05d15baf3424d677bf6784414882b21">slu_dcomplex.h</a>
+<li>z_sqrt()
+: <a class="el" href="dcomplex_8c.html#29f4b8ea3e1309c47c2b1f783c6efa89">dcomplex.c</a>
+, <a class="el" href="slu__dcomplex_8h.html#c1e4793bdd705299497404ce177c3dcd">slu_dcomplex.h</a>
+<li>zallocateA()
+: <a class="el" href="slu__zdefs_8h.html#2643ac77912d9f351f7294677bbe05f2">slu_zdefs.h</a>
+, <a class="el" href="zmemory_8c.html#46bbbd9396593820fd01a6d3dea08d31">zmemory.c</a>
+<li>zaxpy_()
+: <a class="el" href="ilu__zdrop__row_8c.html#ceb6d1d72184759746247bd55dcede0f">ilu_zdrop_row.c</a>
+<li>zcheck_tempv()
+: <a class="el" href="zpanel__bmod_8c.html#8673fc0ac301b4cf35788245fe0cdbcd">zpanel_bmod.c</a>
+, <a class="el" href="zutil_8c.html#bbfe87885f0f664d31b4f6fcf2180127">zutil.c</a>
+<li>zcolumn_bmod()
+: <a class="el" href="slu__zdefs_8h.html#49aac39da44afbad110705d4a7f9f862">slu_zdefs.h</a>
+, <a class="el" href="zcolumn__bmod_8c.html#a84a3714b3d55eb721a7a47eb0bcc110">zcolumn_bmod.c</a>
+<li>zcolumn_dfs()
+: <a class="el" href="slu__zdefs_8h.html#b7a8371a03a4cd272a5cb05d1fd7d8ae">slu_zdefs.h</a>
+, <a class="el" href="zcolumn__dfs_8c.html#c677cb46a7e96e45e93c9af1e8297314">zcolumn_dfs.c</a>
+<li>zCompRow_to_CompCol()
+: <a class="el" href="slu__zdefs_8h.html#b2b58eff4de76ae8ea11d3fd1d285f97">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#ee4cad234e4df121da5386a86754dd4d">zutil.c</a>
+<li>zcopy_()
+: <a class="el" href="ilu__zcopy__to__ucol_8c.html#ad105755c4a253c2d6dbce95720abb48">ilu_zcopy_to_ucol.c</a>
+, <a class="el" href="ilu__zdrop__row_8c.html#ad105755c4a253c2d6dbce95720abb48">ilu_zdrop_row.c</a>
+<li>zCopy_CompCol_Matrix()
+: <a class="el" href="slu__zdefs_8h.html#5d43eba6fc1bbf869b2d696b71a6566c">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#6d326511607c3cb8c0b654b675bd3700">zutil.c</a>
+<li>zCopy_Dense_Matrix()
+: <a class="el" href="slu__zdefs_8h.html#4a51f1cca404f383d725cf6ca2ab1f5b">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#6632ad6334d30a38c9e8b026a3983b65">zutil.c</a>
+<li>zcopy_to_ucol()
+: <a class="el" href="slu__zdefs_8h.html#01e6dfda172d9c30fe038497a10d25fa">slu_zdefs.h</a>
+, <a class="el" href="zcopy__to__ucol_8c.html#587a2ae921e7de3276cd0c4fc8a3aadb">zcopy_to_ucol.c</a>
+<li>zCreate_CompCol_Matrix()
+: <a class="el" href="slu__zdefs_8h.html#7281942aff23b914e0cb23478bf8cf39">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#349f23fdb4e958cc6da8e890554b9868">zutil.c</a>
+<li>zCreate_CompRow_Matrix()
+: <a class="el" href="slu__zdefs_8h.html#d88d522f3d109c52379fa9c7274f100f">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#bbb9f38872629121898fe588e5cf9c46">zutil.c</a>
+<li>zCreate_Dense_Matrix()
+: <a class="el" href="slu__zdefs_8h.html#b9280cf311111348a607e78aa2311e73">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#8316b5e4832ca200a14d14f5ed164695">zutil.c</a>
+<li>zCreate_SuperNode_Matrix()
+: <a class="el" href="slu__zdefs_8h.html#c64ee6fda439e62b0e0a855cd5a19441">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#43150b5d7a29eebba2f8de5c2a35d645">zutil.c</a>
+<li>zdominate()
+: <a class="el" href="zdiagonal_8c.html#430ade01a0921d8a35ec42c2bfef03bd">zdiagonal.c</a>
+<li>zdotc_()
+: <a class="el" href="zfgmr_8c.html#c30d3185c0f6f847e371366e55e28fb6">zfgmr.c</a>
+<li>zDumpLine()
+: <a class="el" href="zreadhb_8c.html#4c9a9a1484351dcc1ae1a756a18081e7">zreadhb.c</a>
+, <a class="el" href="zreadrb_8c.html#efd047e091d4564a958a3d6bd0119eec">zreadrb.c</a>
+<li>zexpand()
+: <a class="el" href="zmemory_8c.html#67833ee9526cec0b31d0f26e527b97df">zmemory.c</a>
+<li>zfgmr()
+: <a class="el" href="zfgmr_8c.html#bffb8ceaa53b9b883ea0851a99033759">zfgmr.c</a>
+<li>zfill()
+: <a class="el" href="slu__zdefs_8h.html#ff0de872dc60f87b89ae93a8f93a7a70">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#c1c222f7cb3253d97408d9395d6919d4">zutil.c</a>
+<li>zfill_diag()
+: <a class="el" href="zdiagonal_8c.html#0509095ae31fa257de9d3463926d7d37">zdiagonal.c</a>
+<li>zFillRHS()
+: <a class="el" href="slu__zdefs_8h.html#856d8820ae8cf7ccf6ca662bc680de26">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#cf2b404121b9a70942631f50b85fd8a1">zutil.c</a>
+<li>zGenXtrue()
+: <a class="el" href="slu__zdefs_8h.html#bf8c836a49482c27abdc046ec7c726cb">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#a81fbc4bdd835def817191d94fb8b208">zutil.c</a>
+<li>zgscon()
+: <a class="el" href="slu__zdefs_8h.html#42c7a1b7c813c330cd5a60852a592395">slu_zdefs.h</a>
+, <a class="el" href="zgscon_8c.html#6be8d109849b5406d8256de2419caf2e">zgscon.c</a>
+<li>zgsequ()
+: <a class="el" href="slu__zdefs_8h.html#e112ddfff2798b7e4c090d96d2a8d80a">slu_zdefs.h</a>
+, <a class="el" href="zgsequ_8c.html#55aa9c7e1576dc4bd1e5d3155f35598c">zgsequ.c</a>
+<li>zgsisv()
+: <a class="el" href="slu__zdefs_8h.html#06d5de0123fd4c7a00bcbf0a3944883d">slu_zdefs.h</a>
+<li>zgsisx()
+: <a class="el" href="slu__zdefs_8h.html#34c7b072bc210f8cfb9d88d0ab20775a">slu_zdefs.h</a>
+, <a class="el" href="zgsisx_8c.html#2757feaa11de219577144d87b69e9ca9">zgsisx.c</a>
+<li>zgsitrf()
+: <a class="el" href="slu__zdefs_8h.html#2fee39459dfac17529487ea539648cfb">slu_zdefs.h</a>
+, <a class="el" href="zgsitrf_8c.html#8b8106aaa938c48c4276bece6a82d04c">zgsitrf.c</a>
+<li>zgsrfs()
+: <a class="el" href="slu__zdefs_8h.html#7675aa04369725f7f65c74249388f5a5">slu_zdefs.h</a>
+, <a class="el" href="zgsrfs_8c.html#c21acad54459e74738cbca9f7f20a73b">zgsrfs.c</a>
+<li>zgssv()
+: <a class="el" href="slu__zdefs_8h.html#f381e217f2aa7e57bcdebfc9e1e7b973">slu_zdefs.h</a>
+, <a class="el" href="zgssv_8c.html#b87f9fe7f59ed6d2e53f4d49fa78ad1f">zgssv.c</a>
+<li>zgssvx()
+: <a class="el" href="slu__zdefs_8h.html#75f04171385eb89527fe10f871b2149a">slu_zdefs.h</a>
+, <a class="el" href="zgssvx_8c.html#c2e779425ce37b373b93fc2a7d3fa8e4">zgssvx.c</a>
+<li>zgstrf()
+: <a class="el" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">slu_zdefs.h</a>
+, <a class="el" href="zgstrf_8c.html#a551561ebd43f4b873979c28adb6a41c">zgstrf.c</a>
+<li>zgstrs()
+: <a class="el" href="slu__zdefs_8h.html#1b74304cd437572bbec487bc29422a90">slu_zdefs.h</a>
+, <a class="el" href="zgstrs_8c.html#7ddda3f91ee65762d0589d5d613f2795">zgstrs.c</a>
+<li>zinf_norm_error()
+: <a class="el" href="slu__zdefs_8h.html#7b335e97d77b1adf81e383e5bcb58f3e">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#0c645d9e2d757c5f5fa1ecd67f0c2a07">zutil.c</a>
+<li>zlacon_()
+: <a class="el" href="zlacon_8c.html#529146a8706bcc149050e70f7e56da07">zlacon.c</a>
+<li>zlangs()
+: <a class="el" href="zlangs_8c.html#37d1ec3ddab88e8c46872c5795ea5ada">zlangs.c</a>
+<li>zlaqgs()
+: <a class="el" href="slu__zdefs_8h.html#a7f8e784fe805303d413a3dc684aa8a5">slu_zdefs.h</a>
+, <a class="el" href="zlaqgs_8c.html#46f8eefc33139578d9b4f6d1444a993c">zlaqgs.c</a>
+<li>zldperm()
+: <a class="el" href="slu__zdefs_8h.html#231c25a6f73e928d43ee8f3f4f291844">slu_zdefs.h</a>
+, <a class="el" href="zldperm_8c.html#6eac8c5b79a07db190086129b0a02901">zldperm.c</a>
+<li>zlsolve()
+: <a class="el" href="zcolumn__bmod_8c.html#fb6f65890b5348dc1692d01b087be35d">zcolumn_bmod.c</a>
+, <a class="el" href="zgstrs_8c.html#fb6f65890b5348dc1692d01b087be35d">zgstrs.c</a>
+, <a class="el" href="zmyblas2_8c.html#3aa665de6b6103328267f26f160447ae">zmyblas2.c</a>
+, <a class="el" href="zpanel__bmod_8c.html#fb6f65890b5348dc1692d01b087be35d">zpanel_bmod.c</a>
+, <a class="el" href="zsp__blas2_8c.html#fb6f65890b5348dc1692d01b087be35d">zsp_blas2.c</a>
+<li>zLUMemInit()
+: <a class="el" href="slu__zdefs_8h.html#0c3bf2c88bdda13cede034c6e9a407e5">slu_zdefs.h</a>
+, <a class="el" href="zmemory_8c.html#2401dcedab9db9b72801239bcb0dd85d">zmemory.c</a>
+<li>zLUMemXpand()
+: <a class="el" href="slu__zdefs_8h.html#399a28849bd52ce90c1cbc8e4cd85046">slu_zdefs.h</a>
+, <a class="el" href="zmemory_8c.html#f10c27072006d8936e0b135a0d0e03ee">zmemory.c</a>
+<li>zLUWorkFree()
+: <a class="el" href="slu__zdefs_8h.html#572914748b4f1aa544a61477095e7fe5">slu_zdefs.h</a>
+, <a class="el" href="zmemory_8c.html#077a37f8ac3dd3f11b78b70ead445a4a">zmemory.c</a>
+<li>zLUWorkInit()
+: <a class="el" href="zmemory_8c.html#882c0544ebe2e000b982820ac583c180">zmemory.c</a>
+<li>zmatvec()
+: <a class="el" href="zcolumn__bmod_8c.html#1165292a4e2a6c282638868bd503fb7a">zcolumn_bmod.c</a>
+, <a class="el" href="zgstrs_8c.html#1165292a4e2a6c282638868bd503fb7a">zgstrs.c</a>
+, <a class="el" href="zmyblas2_8c.html#b1eac084fbf4960e20cf730d091699c8">zmyblas2.c</a>
+, <a class="el" href="zsp__blas2_8c.html#1165292a4e2a6c282638868bd503fb7a">zsp_blas2.c</a>
+, <a class="el" href="zpanel__bmod_8c.html#1165292a4e2a6c282638868bd503fb7a">zpanel_bmod.c</a>
+<li>zmatvec_mult()
+: <a class="el" href="zitersol_8c.html#4e1543e740b505ad649e15bddd2c60ca">zitersol.c</a>
+, <a class="el" href="zitersol1_8c.html#4e1543e740b505ad649e15bddd2c60ca">zitersol1.c</a>
+<li>zmemory_usage()
+: <a class="el" href="slu__zdefs_8h.html#5987692fb793ccc6122ff861261f1ca2">slu_zdefs.h</a>
+, <a class="el" href="zmemory_8c.html#17416eb78c42063624b6859d9f88820b">zmemory.c</a>
+<li>zpanel_bmod()
+: <a class="el" href="slu__zdefs_8h.html#58b397fc5660a6a0638f2aba584abf64">slu_zdefs.h</a>
+, <a class="el" href="zpanel__bmod_8c.html#6c1aae0b0c84fef3b9feb5362bf2e047">zpanel_bmod.c</a>
+<li>zpanel_dfs()
+: <a class="el" href="zpanel__dfs_8c.html#2dfc62f0d77e7b112075276b06542f87">zpanel_dfs.c</a>
+, <a class="el" href="slu__zdefs_8h.html#ddc01b7cd28e5566177c284480a680f3">slu_zdefs.h</a>
+<li>zParseFloatFormat()
+: <a class="el" href="zreadrb_8c.html#307d3abcf9f61c651e454e0876736288">zreadrb.c</a>
+, <a class="el" href="zreadhb_8c.html#fb86c617e31fa765098b83fd74539b9b">zreadhb.c</a>
+<li>zParseIntFormat()
+: <a class="el" href="zreadrb_8c.html#a097366cbacd16b824248c34e8b1efa9">zreadrb.c</a>
+, <a class="el" href="zreadhb_8c.html#b753ef9c907b1298d163150b6e658247">zreadhb.c</a>
+<li>zPivotGrowth()
+: <a class="el" href="slu__zdefs_8h.html#87aab883e88a4ee7f6e19b7d9d5f690c">slu_zdefs.h</a>
+, <a class="el" href="zpivotgrowth_8c.html#713bc716e136b32dfad757a3fd7d3005">zpivotgrowth.c</a>
+<li>zpivotL()
+: <a class="el" href="zpivotL_8c.html#06029dacc576a26c1495317264d00fcc">zpivotL.c</a>
+, <a class="el" href="slu__zdefs_8h.html#dce57d338c03a6432064f295023ba976">slu_zdefs.h</a>
+<li>zPrint_CompCol_Matrix()
+: <a class="el" href="zutil_8c.html#7f3c67eba79f4d63a7ef19781935985d">zutil.c</a>
+, <a class="el" href="slu__zdefs_8h.html#03a002c56d260744e0c73d90a28ca92e">slu_zdefs.h</a>
+<li>zPrint_Dense_Matrix()
+: <a class="el" href="slu__zdefs_8h.html#4cf22ecc8aa6e20245d071b53f1a71c4">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#d665640e89334e9f7a57355e030ff63d">zutil.c</a>
+<li>zprint_lu_col()
+: <a class="el" href="slu__zdefs_8h.html#3bdc4fd0a2bb9efd731dee5828ad64a9">slu_zdefs.h</a>
+, <a class="el" href="zutil_8c.html#8083f641fd96ede2f54db44d18f984e9">zutil.c</a>
+<li>zprint_soln()
+: <a class="el" href="zgstrs_8c.html#afcbead526e1e4f1b7895d3c5abfe4ab">zgstrs.c</a>
+<li>zPrint_SuperNode_Matrix()
+: <a class="el" href="zutil_8c.html#12d2264eb0e17728142e651de7cc8f9c">zutil.c</a>
+, <a class="el" href="slu__zdefs_8h.html#fa07de3629132fd900f759166eef6f45">slu_zdefs.h</a>
+<li>zPrintPerf()
+: <a class="el" href="zutil_8c.html#0807017bff32a20ff59820583a9e038d">zutil.c</a>
+<li>zpruneL()
+: <a class="el" href="slu__zdefs_8h.html#8a368adca5d498e86910b5371de3131d">slu_zdefs.h</a>
+, <a class="el" href="zpruneL_8c.html#b91a986738634178968bfab08ed42b06">zpruneL.c</a>
+<li>zpsolve()
+: <a class="el" href="zitersol1_8c.html#e970280d13c1a6f41e71834f00776082">zitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#e970280d13c1a6f41e71834f00776082">zitersol.c</a>
+<li>zQuerySpace()
+: <a class="el" href="zmemory_8c.html#286bf5eff2472576ba5fafe9d1daf835">zmemory.c</a>
+, <a class="el" href="slu__zdefs_8h.html#711303a4bc043eb0b1bff72b32d52397">slu_zdefs.h</a>
+<li>zreadhb()
+: <a class="el" href="zreadhb_8c.html#ff0805af5c8155100799532d3a9613fb">zreadhb.c</a>
+, <a class="el" href="slu__zdefs_8h.html#cc866ab1cbd2abcb56913ad79af5d0ea">slu_zdefs.h</a>
+<li>zreadmt()
+: <a class="el" href="slu__zdefs_8h.html#cd4ff4683d71e444e948fbcacb23e803">slu_zdefs.h</a>
+<li>zreadrb()
+: <a class="el" href="zreadrb_8c.html#6cc83af309b56ffac83144d77effc249">zreadrb.c</a>
+, <a class="el" href="slu__zdefs_8h.html#e3c9645c921a407e41fdd5f98c4b1a80">slu_zdefs.h</a>
+<li>zreadrhs()
+: <a class="el" href="zreadtriple_8c.html#99021adc7c4e9405035663452ff651dc">zreadtriple.c</a>
+<li>zreadtriple()
+: <a class="el" href="zreadtriple_8c.html#ae3562688014d408faee4f6dc8c9647b">zreadtriple.c</a>
+, <a class="el" href="slu__zdefs_8h.html#952c154abdfc9bda69b118d25c7e599f">slu_zdefs.h</a>
+<li>zReadValues()
+: <a class="el" href="zreadrb_8c.html#eec396507b7780d0b2da753e8bfca5f4">zreadrb.c</a>
+, <a class="el" href="zreadhb_8c.html#321d6efeb00f45e3e4c961dcc3aa0fcc">zreadhb.c</a>
+<li>zSetRWork()
+: <a class="el" href="slu__zdefs_8h.html#a4e2012fe2ee4c2d1cd2a261bdb0455b">slu_zdefs.h</a>
+, <a class="el" href="zmemory_8c.html#2d983454dded23484688350acd60d453">zmemory.c</a>
+<li>zSetupSpace()
+: <a class="el" href="zmemory_8c.html#0edfb761a3a551bce967037b3e1aa9e2">zmemory.c</a>
+<li>zsnode_bmod()
+: <a class="el" href="slu__zdefs_8h.html#f416483e20a4ec79bf0d04d6e55c585b">slu_zdefs.h</a>
+, <a class="el" href="zsnode__bmod_8c.html#e4edaac25125ac0e6e309858b4b3b4d0">zsnode_bmod.c</a>
+<li>zsnode_dfs()
+: <a class="el" href="zsnode__dfs_8c.html#30b52c07431f048048b8bf3e8c03087a">zsnode_dfs.c</a>
+, <a class="el" href="slu__zdefs_8h.html#f0e16dd7be5f8beaf0e445562995de49">slu_zdefs.h</a>
+<li>zStackCompress()
+: <a class="el" href="zmemory_8c.html#607a863b6fcdf1adb1931dd4c8277ee0">zmemory.c</a>
+<li>zswap_()
+: <a class="el" href="ilu__zdrop__row_8c.html#20051222dca15b4b236d9758042171cf">ilu_zdrop_row.c</a>
+<li>zuser_free()
+: <a class="el" href="zmemory_8c.html#9568d77c3e1f50a9b000f50a9941300a">zmemory.c</a>
+<li>zuser_malloc()
+: <a class="el" href="zmemory_8c.html#0546ac846872bb77841c8502590dc3e2">zmemory.c</a>
+<li>zusolve()
+: <a class="el" href="zgstrs_8c.html#c9798dda11fa387039351d70fa59ce3b">zgstrs.c</a>
+, <a class="el" href="zsp__blas2_8c.html#c9798dda11fa387039351d70fa59ce3b">zsp_blas2.c</a>
+, <a class="el" href="zcolumn__bmod_8c.html#c9798dda11fa387039351d70fa59ce3b">zcolumn_bmod.c</a>
+, <a class="el" href="zmyblas2_8c.html#0b0f90cd6fb38a0827eb67b22c8523cb">zmyblas2.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_type.html b/DOC/html/globals_type.html
new file mode 100644
index 0000000..657b6e4
--- /dev/null
+++ b/DOC/html/globals_type.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+ 
+<p>
+<ul>
+<li>Colamd_Col
+: <a class="el" href="colamd_8h.html#059db10cdebbb878b50bfcd2e023315a">colamd.h</a>
+<li>Colamd_Row
+: <a class="el" href="colamd_8h.html#8a1ceeb79ebba705abb1d27469f4a358">colamd.h</a>
+<li>ExpHeader
+: <a class="el" href="slu__util_8h.html#c071de4d8a39e15f13c92a5f60bc16f0">slu_util.h</a>
+<li>flops_t
+: <a class="el" href="slu__util_8h.html#aae6020bb33e780ff6edbd4e45ce08ac">slu_util.h</a>
+<li>int_t
+: <a class="el" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">slu_cdefs.h</a>
+, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">slu_zdefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">slu_sdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">slu_ddefs.h</a>
+<li>Logical
+: <a class="el" href="slu__util_8h.html#30f473cd214dc43270f7a4d54b2887d2">slu_util.h</a>
+<li>shortint
+: <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">mmd.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/globals_vars.html b/DOC/html/globals_vars.html
new file mode 100644
index 0000000..4c37bfb
--- /dev/null
+++ b/DOC/html/globals_vars.html
@@ -0,0 +1,171 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Defines</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="#index_a"><span>a</span></a></li>
+      <li><a href="#index_c"><span>c</span></a></li>
+      <li><a href="#index_g"><span>g</span></a></li>
+      <li><a href="#index_m"><span>m</span></a></li>
+    </ul>
+  </div>
+
+<p>
+</div>
+<div class="contents">
+ 
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>A
+: <a class="el" href="ilu__cdrop__row_8c.html#4f397f6aca9178eb3de2026fc159fa55">ilu_cdrop_row.c</a>
+, <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">ilu_zdrop_row.c</a>
+, <a class="el" href="ilu__sdrop__row_8c.html#4f397f6aca9178eb3de2026fc159fa55">ilu_sdrop_row.c</a>
+, <a class="el" href="ilu__ddrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">ilu_ddrop_row.c</a>
+</ul>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>c__1
+: <a class="el" href="mc64ad_8c.html#6566a5239e1e0fecb5a4488ba16a1425">mc64ad.c</a>
+<li>c__2
+: <a class="el" href="mc64ad_8c.html#9338daec563ba129d8db4bb5b9efcdbc">mc64ad.c</a>
+</ul>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>GLOBAL_A
+: <a class="el" href="citersol_8c.html#d42e5c3013507184841cdfee652a0c18">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#d42e5c3013507184841cdfee652a0c18">citersol1.c</a>
+, <a class="el" href="ditersol1_8c.html#d42e5c3013507184841cdfee652a0c18">ditersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#d42e5c3013507184841cdfee652a0c18">zitersol1.c</a>
+, <a class="el" href="sitersol_8c.html#d42e5c3013507184841cdfee652a0c18">sitersol.c</a>
+, <a class="el" href="ditersol_8c.html#d42e5c3013507184841cdfee652a0c18">ditersol.c</a>
+, <a class="el" href="sitersol1_8c.html#d42e5c3013507184841cdfee652a0c18">sitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#d42e5c3013507184841cdfee652a0c18">zitersol.c</a>
+<li>GLOBAL_A_ORIG
+: <a class="el" href="citersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">citersol1.c</a>
+, <a class="el" href="ditersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">ditersol1.c</a>
+, <a class="el" href="sitersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">sitersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">zitersol1.c</a>
+<li>GLOBAL_C
+: <a class="el" href="ditersol1_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#3e8f028a8a340f260f7ac67973072999">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#3e8f028a8a340f260f7ac67973072999">sitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">zitersol.c</a>
+, <a class="el" href="zitersol1_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">zitersol1.c</a>
+, <a class="el" href="citersol_8c.html#3e8f028a8a340f260f7ac67973072999">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#3e8f028a8a340f260f7ac67973072999">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">ditersol.c</a>
+<li>GLOBAL_EQUED
+: <a class="el" href="citersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">citersol1.c</a>
+, <a class="el" href="ditersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">ditersol1.c</a>
+, <a class="el" href="sitersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">sitersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">zitersol1.c</a>
+<li>GLOBAL_L
+: <a class="el" href="zitersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">zitersol1.c</a>
+, <a class="el" href="citersol_8c.html#0f5cf27b325ef2874c953290f74c9d0a">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#0f5cf27b325ef2874c953290f74c9d0a">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#0f5cf27b325ef2874c953290f74c9d0a">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">sitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#0f5cf27b325ef2874c953290f74c9d0a">zitersol.c</a>
+<li>GLOBAL_MEM_USAGE
+: <a class="el" href="citersol_8c.html#19718c440adb41fbebcb4bafedbf932c">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#19718c440adb41fbebcb4bafedbf932c">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#19718c440adb41fbebcb4bafedbf932c">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">sitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#19718c440adb41fbebcb4bafedbf932c">zitersol.c</a>
+, <a class="el" href="zitersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">zitersol1.c</a>
+<li>GLOBAL_OPTIONS
+: <a class="el" href="citersol_8c.html#64b516645b16ef03c6fd0d692e6eb277">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">citersol1.c</a>
+, <a class="el" href="zitersol_8c.html#64b516645b16ef03c6fd0d692e6eb277">zitersol.c</a>
+, <a class="el" href="ditersol_8c.html#64b516645b16ef03c6fd0d692e6eb277">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#64b516645b16ef03c6fd0d692e6eb277">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">sitersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">zitersol1.c</a>
+<li>GLOBAL_PERM_C
+: <a class="el" href="zitersol_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">zitersol.c</a>
+, <a class="el" href="citersol_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">sitersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">zitersol1.c</a>
+<li>GLOBAL_PERM_R
+: <a class="el" href="citersol_8c.html#5a42ee721355f1c852f770661834be93">citersol.c</a>
+, <a class="el" href="zitersol1_8c.html#5a42ee721355f1c852f770661834be93">zitersol1.c</a>
+, <a class="el" href="sitersol_8c.html#5a42ee721355f1c852f770661834be93">sitersol.c</a>
+, <a class="el" href="zitersol_8c.html#5a42ee721355f1c852f770661834be93">zitersol.c</a>
+, <a class="el" href="ditersol_8c.html#5a42ee721355f1c852f770661834be93">ditersol.c</a>
+, <a class="el" href="sitersol1_8c.html#5a42ee721355f1c852f770661834be93">sitersol1.c</a>
+, <a class="el" href="citersol1_8c.html#5a42ee721355f1c852f770661834be93">citersol1.c</a>
+, <a class="el" href="ditersol1_8c.html#5a42ee721355f1c852f770661834be93">ditersol1.c</a>
+<li>GLOBAL_R
+: <a class="el" href="citersol_8c.html#4ff9f80047e0b810344d85feb96941ef">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#4ff9f80047e0b810344d85feb96941ef">citersol1.c</a>
+, <a class="el" href="ditersol1_8c.html#8cb83de814c7fbf89011ba08bb602ce0">ditersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#8cb83de814c7fbf89011ba08bb602ce0">zitersol1.c</a>
+, <a class="el" href="sitersol1_8c.html#4ff9f80047e0b810344d85feb96941ef">sitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#8cb83de814c7fbf89011ba08bb602ce0">zitersol.c</a>
+, <a class="el" href="sitersol_8c.html#4ff9f80047e0b810344d85feb96941ef">sitersol.c</a>
+, <a class="el" href="ditersol_8c.html#8cb83de814c7fbf89011ba08bb602ce0">ditersol.c</a>
+<li>GLOBAL_STAT
+: <a class="el" href="sitersol_8c.html#96a062252c26544370e8feae987c6d16">sitersol.c</a>
+, <a class="el" href="citersol_8c.html#96a062252c26544370e8feae987c6d16">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#96a062252c26544370e8feae987c6d16">citersol1.c</a>
+, <a class="el" href="ditersol1_8c.html#96a062252c26544370e8feae987c6d16">ditersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#96a062252c26544370e8feae987c6d16">zitersol1.c</a>
+, <a class="el" href="sitersol1_8c.html#96a062252c26544370e8feae987c6d16">sitersol1.c</a>
+, <a class="el" href="ditersol_8c.html#96a062252c26544370e8feae987c6d16">ditersol.c</a>
+, <a class="el" href="zitersol_8c.html#96a062252c26544370e8feae987c6d16">zitersol.c</a>
+<li>GLOBAL_U
+: <a class="el" href="sitersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">sitersol1.c</a>
+, <a class="el" href="citersol_8c.html#000ad5c2198e4309802b4478ed08a98c">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">citersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">zitersol1.c</a>
+, <a class="el" href="sitersol_8c.html#000ad5c2198e4309802b4478ed08a98c">sitersol.c</a>
+, <a class="el" href="zitersol_8c.html#000ad5c2198e4309802b4478ed08a98c">zitersol.c</a>
+, <a class="el" href="ditersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">ditersol1.c</a>
+, <a class="el" href="ditersol_8c.html#000ad5c2198e4309802b4478ed08a98c">ditersol.c</a>
+</ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>max_sup_size
+: <a class="el" href="util_8c.html#17dfd68739139149a72dfcbd88bcdf24">util.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/heap__relax__snode_8c.html b/DOC/html/heap__relax__snode_8c.html
new file mode 100644
index 0000000..ffa65a4
--- /dev/null
+++ b/DOC/html/heap__relax__snode_8c.html
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/heap_relax_snode.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/heap_relax_snode.c File Reference</h1>Identify the initial relaxed supernodes. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="heap__relax__snode_8c.html#059d36bb76b7562c9bb2cbd7870e7ffe">heap_relax_snode</a> (const int n, int *et, const int relax_columns, int *descendants, int *relax_end)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="059d36bb76b7562c9bb2cbd7870e7ffe"></a><!-- doxytag: member="heap_relax_snode.c::heap_relax_snode" ref="059d36bb76b7562c9bb2cbd7870e7ffe" args="(const int n, int *et, const int relax_columns, int *descendants, int *relax_end)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void heap_relax_snode           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>et</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>relax_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>descendants</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_end</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="relax__snode_8c.html#d70bc12cb9031ab8aba4a37a18be46e3">relax_snode()</a> - Identify the initial relaxed supernodes, assuming that 
+    the matrix has been reordered according to the postorder of the etree.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/html__mainpage_8h-source.html b/DOC/html/html__mainpage_8h-source.html
new file mode 100644
index 0000000..0e33806
--- /dev/null
+++ b/DOC/html/html__mainpage_8h-source.html
@@ -0,0 +1,22 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/html_mainpage.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<h1>SRC/html_mainpage.h</h1><a href="html__mainpage_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/html__mainpage_8h.html b/DOC/html/html__mainpage_8h.html
new file mode 100644
index 0000000..75a1a09
--- /dev/null
+++ b/DOC/html/html__mainpage_8h.html
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/html_mainpage.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/html_mainpage.h File Reference</h1>
+<p>
+<a href="html__mainpage_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+</table>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/icmax1_8c.html b/DOC/html/icmax1_8c.html
new file mode 100644
index 0000000..e13ec05
--- /dev/null
+++ b/DOC/html/icmax1_8c.html
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/icmax1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/icmax1.c File Reference</h1>Finds the index of the element whose real part has maximum absolute value. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__scomplex_8h-source.html">slu_scomplex.h</a>"</code><br>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="icmax1_8c.html#5a76da95c549c41790389a76e12fdcb5">CX</a>(I)   cx[(I)-1]</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="icmax1_8c.html#7315ad1456ee66d31a1171729e6c1c4f">icmax1_</a> (int *n, <a class="el" href="structcomplex.html">complex</a> *cx, int *incx)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+     -- LAPACK auxiliary routine (version 2.0) --   
+     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
+     Courant Institute, Argonne National Lab, and Rice University   
+     October 31, 1992   
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="5a76da95c549c41790389a76e12fdcb5"></a><!-- doxytag: member="icmax1.c::CX" ref="5a76da95c549c41790389a76e12fdcb5" args="(I)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define CX          </td>
+          <td>(</td>
+          <td class="paramtype">I </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   cx[(I)-1]</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="7315ad1456ee66d31a1171729e6c1c4f"></a><!-- doxytag: member="icmax1.c::icmax1_" ref="7315ad1456ee66d31a1171729e6c1c4f" args="(int *n, complex *cx, int *incx)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int icmax1_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>cx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>incx</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    ICMAX1 finds the index of the element whose real part has maximum   
+    absolute value.</pre><p>
+<pre>    Based on ICAMAX from Level 1 BLAS.   
+    The change is to use the 'genuine' absolute value.</pre><p>
+<pre>    Contributed by Nick Higham for use with CLACON.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    N       (input) INT   
+            The number of elements in the vector CX.</pre><p>
+<pre>    CX      (input) COMPLEX array, dimension (N)   
+            The vector whose elements will be summed.</pre><p>
+<pre>    INCX    (input) INT   
+            The spacing between successive values of CX.  INCX >= 1.</pre><p>
+<pre>   ===================================================================== 
+  </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__ccolumn__dfs_8c.html b/DOC/html/ilu__ccolumn__dfs_8c.html
new file mode 100644
index 0000000..0f610b7
--- /dev/null
+++ b/DOC/html/ilu__ccolumn__dfs_8c.html
@@ -0,0 +1,147 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_ccolumn_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_ccolumn_dfs.c File Reference</h1>Performs a symbolic factorization. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ccolumn__dfs_8c.html#61b8082fdb8acb13c983c11acaea87ba">ilu_ccolumn_dfs</a> (const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *marker, int *parent, int *xplore, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="61b8082fdb8acb13c983c11acaea87ba"></a><!-- doxytag: member="ilu_ccolumn_dfs.c::ilu_ccolumn_dfs" ref="61b8082fdb8acb13c983c11acaea87ba" args="(const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_ccolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   ILU_CCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__ccopy__to__ucol_8c.html b/DOC/html/ilu__ccopy__to__ucol_8c.html
new file mode 100644
index 0000000..0c171a3
--- /dev/null
+++ b/DOC/html/ilu__ccopy__to__ucol_8c.html
@@ -0,0 +1,188 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_ccopy_to_ucol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_ccopy_to_ucol.c File Reference</h1>Copy a computed column of U to the compressed data structure and drop some small entries. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ccopy__to__ucol_8c.html#db60937f3436da2e6d66dc11af4317e6">ccopy_</a> (int *, <a class="el" href="structcomplex.html">complex</a>[], int *, <a class="el" href="structcomplex.html">complex</a>[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ccopy__to__ucol_8c.html#069fdcfba5148dfc923017db03d7eab1">ilu_ccopy_to_ucol</a> (int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, <a class="el" href="structcomplex.html">complex</a> *dense, int drop_rule, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> milu, double drop_tol, int quota, <a cla [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.1) --
+ Lawrence Berkeley National Laboratory
+ November, 2010
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="db60937f3436da2e6d66dc11af4317e6"></a><!-- doxytag: member="ilu_ccopy_to_ucol.c::ccopy_" ref="db60937f3436da2e6d66dc11af4317e6" args="(int *, complex[], int *, complex[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ccopy_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="069fdcfba5148dfc923017db03d7eab1"></a><!-- doxytag: member="ilu_ccopy_to_ucol.c::ilu_ccopy_to_ucol" ref="069fdcfba5148dfc923017db03d7eab1" args="(int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, complex *dense, int drop_rule, milu_t milu, double drop_tol, int quota, complex *sum, int *nnzUj, GlobalLU_t *Glu, float *work)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_ccopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>drop_rule</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname"> <em>milu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>drop_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>quota</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>sum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nnzUj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>work</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__cdrop__row_8c.html b/DOC/html/ilu__cdrop__row_8c.html
new file mode 100644
index 0000000..e8b4dc9
--- /dev/null
+++ b/DOC/html/ilu__cdrop__row_8c.html
@@ -0,0 +1,479 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_cdrop_row.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_cdrop_row.c File Reference</h1>Drop small rows from L. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#99bbeac6877c802badc06579386125b7">cswap_</a> (int *, <a class="el" href="structcomplex.html">complex</a>[], int *, <a class="el" href="structcomplex.html">complex</a>[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#d2fab81da5258afef212287a41f4e8bc">caxpy_</a> (int *, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a>[], int *, <a class="el" href="structcomplex.html">complex</a>[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#db60937f3436da2e6d66dc11af4317e6">ccopy_</a> (int *, <a class="el" href="structcomplex.html">complex</a>[], int *, <a class="el" href="structcomplex.html">complex</a>[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#44105172934892274bea9807a5b2037f">scasum_</a> (int *, <a class="el" href="structcomplex.html">complex</a> *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#ef10aeea1f2500610ded919305e8e84c">scnrm2_</a> (int *, <a class="el" href="structcomplex.html">complex</a> *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#61a0022627cc1977966c0067f1f12e26">dnrm2_</a> (int *, double[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#22f0fa95a896ad561e0ab57fea1ef330">icamax_</a> (int *, <a class="el" href="structcomplex.html">complex</a>[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#8ddf1742e9078a786574bb5aa80aed2a">_compare_</a> (const void *a, const void *b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#b6bca119c9d5eab7210d0009835e399f">ilu_cdrop_row</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, int first, int last, double drop_tol, int quota, int *nnzLj, double *fill_tol, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, float swork[], float swork2[], int lastc)</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static float * </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#4f397f6aca9178eb3de2026fc159fa55">A</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.1) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="8ddf1742e9078a786574bb5aa80aed2a"></a><!-- doxytag: member="ilu_cdrop_row.c::_compare_" ref="8ddf1742e9078a786574bb5aa80aed2a" args="(const void *a, const void *b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int _compare_           </td>
+          <td>(</td>
+          <td class="paramtype">const void * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void * </td>
+          <td class="paramname"> <em>b</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d2fab81da5258afef212287a41f4e8bc"></a><!-- doxytag: member="ilu_cdrop_row.c::caxpy_" ref="d2fab81da5258afef212287a41f4e8bc" args="(int *, complex *, complex[], int *, complex[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void caxpy_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="db60937f3436da2e6d66dc11af4317e6"></a><!-- doxytag: member="ilu_cdrop_row.c::ccopy_" ref="db60937f3436da2e6d66dc11af4317e6" args="(int *, complex[], int *, complex[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ccopy_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="99bbeac6877c802badc06579386125b7"></a><!-- doxytag: member="ilu_cdrop_row.c::cswap_" ref="99bbeac6877c802badc06579386125b7" args="(int *, complex[], int *, complex[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cswap_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="61a0022627cc1977966c0067f1f12e26"></a><!-- doxytag: member="ilu_cdrop_row.c::dnrm2_" ref="61a0022627cc1977966c0067f1f12e26" args="(int *, double[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dnrm2_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="22f0fa95a896ad561e0ab57fea1ef330"></a><!-- doxytag: member="ilu_cdrop_row.c::icamax_" ref="22f0fa95a896ad561e0ab57fea1ef330" args="(int *, complex[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int icamax_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b6bca119c9d5eab7210d0009835e399f"></a><!-- doxytag: member="ilu_cdrop_row.c::ilu_cdrop_row" ref="b6bca119c9d5eab7210d0009835e399f" args="(superlu_options_t *options, int first, int last, double drop_tol, int quota, int *nnzLj, double *fill_tol, GlobalLU_t *Glu, float swork[], float swork2[], int lastc)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_cdrop_row           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>first</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>last</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>drop_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>quota</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nnzLj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>fill_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>swork</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>swork2</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lastc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__cdrop__row_8c.html#b6bca119c9d5eab7210d0009835e399f">ilu_cdrop_row()</a> - Drop some small rows from the previous 
+    supernode (L-part only).
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="44105172934892274bea9807a5b2037f"></a><!-- doxytag: member="ilu_cdrop_row.c::scasum_" ref="44105172934892274bea9807a5b2037f" args="(int *, complex *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float scasum_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ef10aeea1f2500610ded919305e8e84c"></a><!-- doxytag: member="ilu_cdrop_row.c::scnrm2_" ref="ef10aeea1f2500610ded919305e8e84c" args="(int *, complex *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float scnrm2_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="4f397f6aca9178eb3de2026fc159fa55"></a><!-- doxytag: member="ilu_cdrop_row.c::A" ref="4f397f6aca9178eb3de2026fc159fa55" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float* <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__cpanel__dfs_8c.html b/DOC/html/ilu__cpanel__dfs_8c.html
new file mode 100644
index 0000000..30445f6
--- /dev/null
+++ b/DOC/html/ilu__cpanel__dfs_8c.html
@@ -0,0 +1,166 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_cpanel_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_cpanel_dfs.c File Reference</h1>Peforms a symbolic factorization on a panel of symbols and record the entries with maximum absolute value in each column. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cpanel__dfs_8c.html#e528c7a140b699babac3d212a4cfbe4b">ilu_cpanel_dfs</a> (const int m, const int w, const int jcol, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, <a class="el" href="structcomplex.html">complex</a> *dense, flo [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="e528c7a140b699babac3d212a4cfbe4b"></a><!-- doxytag: member="ilu_cpanel_dfs.c::ilu_cpanel_dfs" ref="e528c7a140b699babac3d212a4cfbe4b" args="(const int m, const int w, const int jcol, SuperMatrix *A, int *perm_r, int *nseg, complex *dense, float *amax, int *panel_lsub, int *segrep, int *repfnz, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_cpanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel.
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__cpivotL_8c.html b/DOC/html/ilu__cpivotL_8c.html
new file mode 100644
index 0000000..4322d4e
--- /dev/null
+++ b/DOC/html/ilu__cpivotL_8c.html
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_cpivotL.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_cpivotL.c File Reference</h1>Performs numerical pivoting. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cpivotL_8c.html#95ed41486ca0ed53262e4b8934d4afac">SGN</a>(x)   ((x)>=0?1:-1)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cpivotL_8c.html#5eadb2e028608a33e9de84d4d6895796">ilu_cpivotL</a> (const int jcol, const double u, int *usepr, int *perm_r, int diagind, int *swap, int *iswap, int *marker, int *pivrow, double fill_tol, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> milu, <a class="el" href="structcomplex.html">comple [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="95ed41486ca0ed53262e4b8934d4afac"></a><!-- doxytag: member="ilu_cpivotL.c::SGN" ref="95ed41486ca0ed53262e4b8934d4afac" args="(x)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SGN          </td>
+          <td>(</td>
+          <td class="paramtype">x </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((x)>=0?1:-1)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="5eadb2e028608a33e9de84d4d6895796"></a><!-- doxytag: member="ilu_cpivotL.c::ilu_cpivotL" ref="5eadb2e028608a33e9de84d4d6895796" args="(const int jcol, const double u, int *usepr, int *perm_r, int diagind, int *swap, int *iswap, int *marker, int *pivrow, double fill_tol, milu_t milu, complex drop_sum, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_cpivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>diagind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>swap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iswap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>fill_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname"> <em>milu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>drop_sum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+	     pivot row = k;
+	 ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+	     pivot row = j;
+	 ELSE
+	     pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0	  success;
+		   i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__csnode__dfs_8c.html b/DOC/html/ilu__csnode__dfs_8c.html
new file mode 100644
index 0000000..70629e6
--- /dev/null
+++ b/DOC/html/ilu__csnode__dfs_8c.html
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_csnode_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_csnode_dfs.c File Reference</h1>Determines the union of row structures of columns within the relaxed node. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__csnode__dfs_8c.html#a6c4a4029db106e8dd56bc0fe1f0090b">ilu_csnode_dfs</a> (const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *marker, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="a6c4a4029db106e8dd56bc0fe1f0090b"></a><!-- doxytag: member="ilu_csnode_dfs.c::ilu_csnode_dfs" ref="a6c4a4029db106e8dd56bc0fe1f0090b" args="(const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *marker, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_csnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__csnode__dfs_8c.html#a6c4a4029db106e8dd56bc0fe1f0090b">ilu_csnode_dfs()</a> - Determine the union of the row structures of those
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore,
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__dcolumn__dfs_8c.html b/DOC/html/ilu__dcolumn__dfs_8c.html
new file mode 100644
index 0000000..f2e52db
--- /dev/null
+++ b/DOC/html/ilu__dcolumn__dfs_8c.html
@@ -0,0 +1,147 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_dcolumn_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_dcolumn_dfs.c File Reference</h1>Performs a symbolic factorization. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__dcolumn__dfs_8c.html#f164b7b553eed616e2ed95144698fe7a">ilu_dcolumn_dfs</a> (const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *marker, int *parent, int *xplore, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="f164b7b553eed616e2ed95144698fe7a"></a><!-- doxytag: member="ilu_dcolumn_dfs.c::ilu_dcolumn_dfs" ref="f164b7b553eed616e2ed95144698fe7a" args="(const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_dcolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   ILU_DCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__dcopy__to__ucol_8c.html b/DOC/html/ilu__dcopy__to__ucol_8c.html
new file mode 100644
index 0000000..78c71a3
--- /dev/null
+++ b/DOC/html/ilu__dcopy__to__ucol_8c.html
@@ -0,0 +1,188 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_dcopy_to_ucol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_dcopy_to_ucol.c File Reference</h1>Copy a computed column of U to the compressed data structure and drop some small entries. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__dcopy__to__ucol_8c.html#24a0d368c78074384922e9d10b43f820">dcopy_</a> (int *, double[], int *, double[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__dcopy__to__ucol_8c.html#b1802613180b46ffdb7b058a42c38716">ilu_dcopy_to_ucol</a> (int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, double *dense, int drop_rule, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> milu, double drop_tol, int quota, double *sum, int *nnzUj, <a class="el" href="struct [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.1) --
+ Lawrence Berkeley National Laboratory
+ November, 2010
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="24a0d368c78074384922e9d10b43f820"></a><!-- doxytag: member="ilu_dcopy_to_ucol.c::dcopy_" ref="24a0d368c78074384922e9d10b43f820" args="(int *, double[], int *, double[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dcopy_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b1802613180b46ffdb7b058a42c38716"></a><!-- doxytag: member="ilu_dcopy_to_ucol.c::ilu_dcopy_to_ucol" ref="b1802613180b46ffdb7b058a42c38716" args="(int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, double *dense, int drop_rule, milu_t milu, double drop_tol, int quota, double *sum, int *nnzUj, GlobalLU_t *Glu, double *work)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_dcopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>drop_rule</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname"> <em>milu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>drop_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>quota</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>sum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nnzUj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>work</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__ddrop__row_8c.html b/DOC/html/ilu__ddrop__row_8c.html
new file mode 100644
index 0000000..99ead5b
--- /dev/null
+++ b/DOC/html/ilu__ddrop__row_8c.html
@@ -0,0 +1,479 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_ddrop_row.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_ddrop_row.c File Reference</h1>Drop small rows from L. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#009fa596702c2777985e4fca6477566e">dswap_</a> (int *, double[], int *, double[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#5112358cf2de43341aaff9fba0066afc">daxpy_</a> (int *, double *, double[], int *, double[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#24a0d368c78074384922e9d10b43f820">dcopy_</a> (int *, double[], int *, double[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#be00831e789ca38cf884de56ddf70bd7">dasum_</a> (int *, double *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#d36414a4f46a1195a7f6c5d3480d3118">dnrm2_</a> (int *, double *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#61a0022627cc1977966c0067f1f12e26">dnrm2_</a> (int *, double[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#fdb24942915626f5de65c50cb31c267a">idamax_</a> (int *, double[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#8ddf1742e9078a786574bb5aa80aed2a">_compare_</a> (const void *a, const void *b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#380317801e05b11930fd1e094db34179">ilu_ddrop_row</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, int first, int last, double drop_tol, int quota, int *nnzLj, double *fill_tol, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, double dwork[], double dwork2[], int lastc)</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static double * </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.1) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="8ddf1742e9078a786574bb5aa80aed2a"></a><!-- doxytag: member="ilu_ddrop_row.c::_compare_" ref="8ddf1742e9078a786574bb5aa80aed2a" args="(const void *a, const void *b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int _compare_           </td>
+          <td>(</td>
+          <td class="paramtype">const void * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void * </td>
+          <td class="paramname"> <em>b</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="be00831e789ca38cf884de56ddf70bd7"></a><!-- doxytag: member="ilu_ddrop_row.c::dasum_" ref="be00831e789ca38cf884de56ddf70bd7" args="(int *, double *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dasum_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5112358cf2de43341aaff9fba0066afc"></a><!-- doxytag: member="ilu_ddrop_row.c::daxpy_" ref="5112358cf2de43341aaff9fba0066afc" args="(int *, double *, double[], int *, double[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void daxpy_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="24a0d368c78074384922e9d10b43f820"></a><!-- doxytag: member="ilu_ddrop_row.c::dcopy_" ref="24a0d368c78074384922e9d10b43f820" args="(int *, double[], int *, double[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dcopy_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="61a0022627cc1977966c0067f1f12e26"></a><!-- doxytag: member="ilu_ddrop_row.c::dnrm2_" ref="61a0022627cc1977966c0067f1f12e26" args="(int *, double[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dnrm2_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d36414a4f46a1195a7f6c5d3480d3118"></a><!-- doxytag: member="ilu_ddrop_row.c::dnrm2_" ref="d36414a4f46a1195a7f6c5d3480d3118" args="(int *, double *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dnrm2_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="009fa596702c2777985e4fca6477566e"></a><!-- doxytag: member="ilu_ddrop_row.c::dswap_" ref="009fa596702c2777985e4fca6477566e" args="(int *, double[], int *, double[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dswap_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fdb24942915626f5de65c50cb31c267a"></a><!-- doxytag: member="ilu_ddrop_row.c::idamax_" ref="fdb24942915626f5de65c50cb31c267a" args="(int *, double[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int idamax_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="380317801e05b11930fd1e094db34179"></a><!-- doxytag: member="ilu_ddrop_row.c::ilu_ddrop_row" ref="380317801e05b11930fd1e094db34179" args="(superlu_options_t *options, int first, int last, double drop_tol, int quota, int *nnzLj, double *fill_tol, GlobalLU_t *Glu, double dwork[], double dwork2[], int lastc)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_ddrop_row           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>first</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>last</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>drop_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>quota</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nnzLj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>fill_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>dwork</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>dwork2</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lastc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__ddrop__row_8c.html#380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a> - Drop some small rows from the previous 
+    supernode (L-part only).
+ </pre> 
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="c900805a486cbb8489e3c176ed6e0d8e"></a><!-- doxytag: member="ilu_ddrop_row.c::A" ref="c900805a486cbb8489e3c176ed6e0d8e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__dpanel__dfs_8c.html b/DOC/html/ilu__dpanel__dfs_8c.html
new file mode 100644
index 0000000..ab61789
--- /dev/null
+++ b/DOC/html/ilu__dpanel__dfs_8c.html
@@ -0,0 +1,166 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_dpanel_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_dpanel_dfs.c File Reference</h1>Peforms a symbolic factorization on a panel of symbols and record the entries with maximum absolute value in each column. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__dpanel__dfs_8c.html#0a3d016444b041668956824248d22439">ilu_dpanel_dfs</a> (const int m, const int w, const int jcol, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, double *dense, double *amax, int *panel_lsub, int *segrep, int  [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="0a3d016444b041668956824248d22439"></a><!-- doxytag: member="ilu_dpanel_dfs.c::ilu_dpanel_dfs" ref="0a3d016444b041668956824248d22439" args="(const int m, const int w, const int jcol, SuperMatrix *A, int *perm_r, int *nseg, double *dense, double *amax, int *panel_lsub, int *segrep, int *repfnz, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_dpanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel.
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__dpivotL_8c.html b/DOC/html/ilu__dpivotL_8c.html
new file mode 100644
index 0000000..eda8279
--- /dev/null
+++ b/DOC/html/ilu__dpivotL_8c.html
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_dpivotL.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_dpivotL.c File Reference</h1>Performs numerical pivoting. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__dpivotL_8c.html#95ed41486ca0ed53262e4b8934d4afac">SGN</a>(x)   ((x)>=0?1:-1)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__dpivotL_8c.html#058d843996bb36b73784b80aae05f04b">ilu_dpivotL</a> (const int jcol, const double u, int *usepr, int *perm_r, int diagind, int *swap, int *iswap, int *marker, int *pivrow, double fill_tol, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> milu, double drop_sum, <a class="el" href="structGlo [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="95ed41486ca0ed53262e4b8934d4afac"></a><!-- doxytag: member="ilu_dpivotL.c::SGN" ref="95ed41486ca0ed53262e4b8934d4afac" args="(x)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SGN          </td>
+          <td>(</td>
+          <td class="paramtype">x </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((x)>=0?1:-1)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="058d843996bb36b73784b80aae05f04b"></a><!-- doxytag: member="ilu_dpivotL.c::ilu_dpivotL" ref="058d843996bb36b73784b80aae05f04b" args="(const int jcol, const double u, int *usepr, int *perm_r, int diagind, int *swap, int *iswap, int *marker, int *pivrow, double fill_tol, milu_t milu, double drop_sum, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_dpivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>diagind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>swap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iswap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>fill_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname"> <em>milu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>drop_sum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+	     pivot row = k;
+	 ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+	     pivot row = j;
+	 ELSE
+	     pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0	  success;
+		   i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__dsnode__dfs_8c.html b/DOC/html/ilu__dsnode__dfs_8c.html
new file mode 100644
index 0000000..374c780
--- /dev/null
+++ b/DOC/html/ilu__dsnode__dfs_8c.html
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_dsnode_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_dsnode_dfs.c File Reference</h1>Determines the union of row structures of columns within the relaxed node. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__dsnode__dfs_8c.html#66dbc4626e59d14b4d3458c4eb841829">ilu_dsnode_dfs</a> (const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *marker, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="66dbc4626e59d14b4d3458c4eb841829"></a><!-- doxytag: member="ilu_dsnode_dfs.c::ilu_dsnode_dfs" ref="66dbc4626e59d14b4d3458c4eb841829" args="(const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *marker, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_dsnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__dsnode__dfs_8c.html#66dbc4626e59d14b4d3458c4eb841829">ilu_dsnode_dfs()</a> - Determine the union of the row structures of those
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore,
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__heap__relax__snode_8c.html b/DOC/html/ilu__heap__relax__snode_8c.html
new file mode 100644
index 0000000..19b2ab9
--- /dev/null
+++ b/DOC/html/ilu__heap__relax__snode_8c.html
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_heap_relax_snode.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_heap_relax_snode.c File Reference</h1>Identify the initial relaxed supernodes. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__heap__relax__snode_8c.html#ac1a978dda622cdb58c3c2eaee4b4030">ilu_heap_relax_snode</a> (const int n, int *et, const int relax_columns, int *descendants, int *relax_end, int *relax_fsupc)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 1, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="ac1a978dda622cdb58c3c2eaee4b4030"></a><!-- doxytag: member="ilu_heap_relax_snode.c::ilu_heap_relax_snode" ref="ac1a978dda622cdb58c3c2eaee4b4030" args="(const int n, int *et, const int relax_columns, int *descendants, int *relax_end, int *relax_fsupc)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_heap_relax_snode           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>et</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>relax_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>descendants</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_fsupc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__heap__relax__snode_8c.html#ac1a978dda622cdb58c3c2eaee4b4030">ilu_heap_relax_snode()</a> - Identify the initial relaxed supernodes,
+    assuming that the matrix has been reordered according to the postorder
+    of the etree.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__relax__snode_8c.html b/DOC/html/ilu__relax__snode_8c.html
new file mode 100644
index 0000000..261fd67
--- /dev/null
+++ b/DOC/html/ilu__relax__snode_8c.html
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_relax_snode.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_relax_snode.c File Reference</h1>Identify initial relaxed supernodes. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__relax__snode_8c.html#e0e2bbb8507d800766030635a3bd5a7e">ilu_relax_snode</a> (const int n, int *et, const int relax_columns, int *descendants, int *relax_end, int *relax_fsupc)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 1, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="e0e2bbb8507d800766030635a3bd5a7e"></a><!-- doxytag: member="ilu_relax_snode.c::ilu_relax_snode" ref="e0e2bbb8507d800766030635a3bd5a7e" args="(const int n, int *et, const int relax_columns, int *descendants, int *relax_end, int *relax_fsupc)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_relax_snode           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>et</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>relax_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>descendants</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_fsupc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__relax__snode_8c.html#e0e2bbb8507d800766030635a3bd5a7e">ilu_relax_snode()</a> - Identify the initial relaxed supernodes, assuming
+    that the matrix has been reordered according to the postorder of the
+    etree.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__scolumn__dfs_8c.html b/DOC/html/ilu__scolumn__dfs_8c.html
new file mode 100644
index 0000000..6134edc
--- /dev/null
+++ b/DOC/html/ilu__scolumn__dfs_8c.html
@@ -0,0 +1,147 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_scolumn_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_scolumn_dfs.c File Reference</h1>Performs a symbolic factorization. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__scolumn__dfs_8c.html#7cca59251907bd7e1973d394487f74af">ilu_scolumn_dfs</a> (const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *marker, int *parent, int *xplore, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="7cca59251907bd7e1973d394487f74af"></a><!-- doxytag: member="ilu_scolumn_dfs.c::ilu_scolumn_dfs" ref="7cca59251907bd7e1973d394487f74af" args="(const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_scolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   ILU_SCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__scopy__to__ucol_8c.html b/DOC/html/ilu__scopy__to__ucol_8c.html
new file mode 100644
index 0000000..d5d3f91
--- /dev/null
+++ b/DOC/html/ilu__scopy__to__ucol_8c.html
@@ -0,0 +1,188 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_scopy_to_ucol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_scopy_to_ucol.c File Reference</h1>Copy a computed column of U to the compressed data structure and drop some small entries. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__scopy__to__ucol_8c.html#f839d60e0d4028df30ea1106ce429210">scopy_</a> (int *, float[], int *, float[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__scopy__to__ucol_8c.html#ac49754df15a9466857a0eca885f9444">ilu_scopy_to_ucol</a> (int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, float *dense, int drop_rule, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> milu, double drop_tol, int quota, float *sum, int *nnzUj, <a class="el" href="structGl [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.1) --
+ Lawrence Berkeley National Laboratory
+ November, 2010
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="ac49754df15a9466857a0eca885f9444"></a><!-- doxytag: member="ilu_scopy_to_ucol.c::ilu_scopy_to_ucol" ref="ac49754df15a9466857a0eca885f9444" args="(int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, float *dense, int drop_rule, milu_t milu, double drop_tol, int quota, float *sum, int *nnzUj, GlobalLU_t *Glu, float *work)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_scopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>drop_rule</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname"> <em>milu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>drop_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>quota</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>sum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nnzUj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>work</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f839d60e0d4028df30ea1106ce429210"></a><!-- doxytag: member="ilu_scopy_to_ucol.c::scopy_" ref="f839d60e0d4028df30ea1106ce429210" args="(int *, float[], int *, float[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void scopy_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__sdrop__row_8c.html b/DOC/html/ilu__sdrop__row_8c.html
new file mode 100644
index 0000000..ab1e7f7
--- /dev/null
+++ b/DOC/html/ilu__sdrop__row_8c.html
@@ -0,0 +1,479 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_sdrop_row.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_sdrop_row.c File Reference</h1>Drop small rows from L. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#2ea44e9849dcb189a4e81f09d97e3c95">sswap_</a> (int *, float[], int *, float[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#de8ba65d9c44f41e97cf2c40a772cff7">saxpy_</a> (int *, float *, float[], int *, float[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#f839d60e0d4028df30ea1106ce429210">scopy_</a> (int *, float[], int *, float[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#43ef780d8b669dc0b19d41fa6727124f">sasum_</a> (int *, float *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#c419c8b8797339212c62cd423e3e652c">snrm2_</a> (int *, float *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#61a0022627cc1977966c0067f1f12e26">dnrm2_</a> (int *, double[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#18eff2aa758918dee76e31b812c88c9f">isamax_</a> (int *, float[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#8ddf1742e9078a786574bb5aa80aed2a">_compare_</a> (const void *a, const void *b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#0d9b169f47790d6eed41107efb445867">ilu_sdrop_row</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, int first, int last, double drop_tol, int quota, int *nnzLj, double *fill_tol, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, float swork[], float swork2[], int lastc)</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static float * </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#4f397f6aca9178eb3de2026fc159fa55">A</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.1) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="8ddf1742e9078a786574bb5aa80aed2a"></a><!-- doxytag: member="ilu_sdrop_row.c::_compare_" ref="8ddf1742e9078a786574bb5aa80aed2a" args="(const void *a, const void *b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int _compare_           </td>
+          <td>(</td>
+          <td class="paramtype">const void * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void * </td>
+          <td class="paramname"> <em>b</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="61a0022627cc1977966c0067f1f12e26"></a><!-- doxytag: member="ilu_sdrop_row.c::dnrm2_" ref="61a0022627cc1977966c0067f1f12e26" args="(int *, double[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dnrm2_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0d9b169f47790d6eed41107efb445867"></a><!-- doxytag: member="ilu_sdrop_row.c::ilu_sdrop_row" ref="0d9b169f47790d6eed41107efb445867" args="(superlu_options_t *options, int first, int last, double drop_tol, int quota, int *nnzLj, double *fill_tol, GlobalLU_t *Glu, float swork[], float swork2[], int lastc)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_sdrop_row           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>first</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>last</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>drop_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>quota</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nnzLj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>fill_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>swork</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>swork2</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lastc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__sdrop__row_8c.html#0d9b169f47790d6eed41107efb445867">ilu_sdrop_row()</a> - Drop some small rows from the previous 
+    supernode (L-part only).
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="18eff2aa758918dee76e31b812c88c9f"></a><!-- doxytag: member="ilu_sdrop_row.c::isamax_" ref="18eff2aa758918dee76e31b812c88c9f" args="(int *, float[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int isamax_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="43ef780d8b669dc0b19d41fa6727124f"></a><!-- doxytag: member="ilu_sdrop_row.c::sasum_" ref="43ef780d8b669dc0b19d41fa6727124f" args="(int *, float *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float sasum_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="de8ba65d9c44f41e97cf2c40a772cff7"></a><!-- doxytag: member="ilu_sdrop_row.c::saxpy_" ref="de8ba65d9c44f41e97cf2c40a772cff7" args="(int *, float *, float[], int *, float[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void saxpy_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f839d60e0d4028df30ea1106ce429210"></a><!-- doxytag: member="ilu_sdrop_row.c::scopy_" ref="f839d60e0d4028df30ea1106ce429210" args="(int *, float[], int *, float[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void scopy_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c419c8b8797339212c62cd423e3e652c"></a><!-- doxytag: member="ilu_sdrop_row.c::snrm2_" ref="c419c8b8797339212c62cd423e3e652c" args="(int *, float *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float snrm2_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2ea44e9849dcb189a4e81f09d97e3c95"></a><!-- doxytag: member="ilu_sdrop_row.c::sswap_" ref="2ea44e9849dcb189a4e81f09d97e3c95" args="(int *, float[], int *, float[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sswap_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="4f397f6aca9178eb3de2026fc159fa55"></a><!-- doxytag: member="ilu_sdrop_row.c::A" ref="4f397f6aca9178eb3de2026fc159fa55" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float* <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__spanel__dfs_8c.html b/DOC/html/ilu__spanel__dfs_8c.html
new file mode 100644
index 0000000..742c37d
--- /dev/null
+++ b/DOC/html/ilu__spanel__dfs_8c.html
@@ -0,0 +1,166 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_spanel_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_spanel_dfs.c File Reference</h1>Peforms a symbolic factorization on a panel of symbols and record the entries with maximum absolute value in each column. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__spanel__dfs_8c.html#fffee4e945eab223be6daa1759e98f60">ilu_spanel_dfs</a> (const int m, const int w, const int jcol, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, float *dense, float *amax, int *panel_lsub, int *segrep, int *r [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="fffee4e945eab223be6daa1759e98f60"></a><!-- doxytag: member="ilu_spanel_dfs.c::ilu_spanel_dfs" ref="fffee4e945eab223be6daa1759e98f60" args="(const int m, const int w, const int jcol, SuperMatrix *A, int *perm_r, int *nseg, float *dense, float *amax, int *panel_lsub, int *segrep, int *repfnz, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_spanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel.
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__spivotL_8c.html b/DOC/html/ilu__spivotL_8c.html
new file mode 100644
index 0000000..852c319
--- /dev/null
+++ b/DOC/html/ilu__spivotL_8c.html
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_spivotL.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_spivotL.c File Reference</h1>Performs numerical pivoting. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__spivotL_8c.html#95ed41486ca0ed53262e4b8934d4afac">SGN</a>(x)   ((x)>=0?1:-1)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__spivotL_8c.html#9da652b68b6ecee45919cf56f256b7e0">ilu_spivotL</a> (const int jcol, const double u, int *usepr, int *perm_r, int diagind, int *swap, int *iswap, int *marker, int *pivrow, double fill_tol, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> milu, float drop_sum, <a class="el" href="structGlob [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="95ed41486ca0ed53262e4b8934d4afac"></a><!-- doxytag: member="ilu_spivotL.c::SGN" ref="95ed41486ca0ed53262e4b8934d4afac" args="(x)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SGN          </td>
+          <td>(</td>
+          <td class="paramtype">x </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((x)>=0?1:-1)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="9da652b68b6ecee45919cf56f256b7e0"></a><!-- doxytag: member="ilu_spivotL.c::ilu_spivotL" ref="9da652b68b6ecee45919cf56f256b7e0" args="(const int jcol, const double u, int *usepr, int *perm_r, int diagind, int *swap, int *iswap, int *marker, int *pivrow, double fill_tol, milu_t milu, float drop_sum, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_spivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>diagind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>swap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iswap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>fill_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname"> <em>milu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>drop_sum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+	     pivot row = k;
+	 ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+	     pivot row = j;
+	 ELSE
+	     pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0	  success;
+		   i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__ssnode__dfs_8c.html b/DOC/html/ilu__ssnode__dfs_8c.html
new file mode 100644
index 0000000..8b4b280
--- /dev/null
+++ b/DOC/html/ilu__ssnode__dfs_8c.html
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_ssnode_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_ssnode_dfs.c File Reference</h1>Determines the union of row structures of columns within the relaxed node. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ssnode__dfs_8c.html#510a9174e442a65aaa83f9ce97390f85">ilu_ssnode_dfs</a> (const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *marker, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="510a9174e442a65aaa83f9ce97390f85"></a><!-- doxytag: member="ilu_ssnode_dfs.c::ilu_ssnode_dfs" ref="510a9174e442a65aaa83f9ce97390f85" args="(const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *marker, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_ssnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__ssnode__dfs_8c.html#510a9174e442a65aaa83f9ce97390f85">ilu_ssnode_dfs()</a> - Determine the union of the row structures of those
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore,
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__zcolumn__dfs_8c.html b/DOC/html/ilu__zcolumn__dfs_8c.html
new file mode 100644
index 0000000..35f0578
--- /dev/null
+++ b/DOC/html/ilu__zcolumn__dfs_8c.html
@@ -0,0 +1,147 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_zcolumn_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_zcolumn_dfs.c File Reference</h1>Performs a symbolic factorization. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zcolumn__dfs_8c.html#e44a937bcd7d34ad6b18ad859680d8f1">ilu_zcolumn_dfs</a> (const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *marker, int *parent, int *xplore, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="e44a937bcd7d34ad6b18ad859680d8f1"></a><!-- doxytag: member="ilu_zcolumn_dfs.c::ilu_zcolumn_dfs" ref="e44a937bcd7d34ad6b18ad859680d8f1" args="(const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_zcolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   ILU_ZCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__zcopy__to__ucol_8c.html b/DOC/html/ilu__zcopy__to__ucol_8c.html
new file mode 100644
index 0000000..a97c744
--- /dev/null
+++ b/DOC/html/ilu__zcopy__to__ucol_8c.html
@@ -0,0 +1,188 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_zcopy_to_ucol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_zcopy_to_ucol.c File Reference</h1>Copy a computed column of U to the compressed data structure and drop some small entries. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zcopy__to__ucol_8c.html#ad105755c4a253c2d6dbce95720abb48">zcopy_</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zcopy__to__ucol_8c.html#b3c195f1b0db2f8686e3be3dc5107007">ilu_zcopy_to_ucol</a> (int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *dense, int drop_rule, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> milu, double drop_tol, int q [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.1) --
+ Lawrence Berkeley National Laboratory
+ November, 2010
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="b3c195f1b0db2f8686e3be3dc5107007"></a><!-- doxytag: member="ilu_zcopy_to_ucol.c::ilu_zcopy_to_ucol" ref="b3c195f1b0db2f8686e3be3dc5107007" args="(int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, doublecomplex *dense, int drop_rule, milu_t milu, double drop_tol, int quota, doublecomplex *sum, int *nnzUj, GlobalLU_t *Glu, double *work)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_zcopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>drop_rule</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname"> <em>milu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>drop_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>quota</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>sum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nnzUj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>work</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ad105755c4a253c2d6dbce95720abb48"></a><!-- doxytag: member="ilu_zcopy_to_ucol.c::zcopy_" ref="ad105755c4a253c2d6dbce95720abb48" args="(int *, doublecomplex[], int *, doublecomplex[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zcopy_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__zdrop__row_8c.html b/DOC/html/ilu__zdrop__row_8c.html
new file mode 100644
index 0000000..782669e
--- /dev/null
+++ b/DOC/html/ilu__zdrop__row_8c.html
@@ -0,0 +1,479 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_zdrop_row.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_zdrop_row.c File Reference</h1>Drop small rows from L. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#20051222dca15b4b236d9758042171cf">zswap_</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#ceb6d1d72184759746247bd55dcede0f">zaxpy_</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#ad105755c4a253c2d6dbce95720abb48">zcopy_</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#fafebe5a243783e920465d5985076dae">dzasum_</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#7e669e96b4c0ad6e2000684a34e798b7">dznrm2_</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#61a0022627cc1977966c0067f1f12e26">dnrm2_</a> (int *, double[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#f8bf573faadaf4a6cead386258c1421c">izamax_</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#8ddf1742e9078a786574bb5aa80aed2a">_compare_</a> (const void *a, const void *b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#f4b8c50d3afed76a8b9809673a7da4f3">ilu_zdrop_row</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, int first, int last, double drop_tol, int quota, int *nnzLj, double *fill_tol, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, double dwork[], double dwork2[], int lastc)</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static double * </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.1) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="8ddf1742e9078a786574bb5aa80aed2a"></a><!-- doxytag: member="ilu_zdrop_row.c::_compare_" ref="8ddf1742e9078a786574bb5aa80aed2a" args="(const void *a, const void *b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int _compare_           </td>
+          <td>(</td>
+          <td class="paramtype">const void * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void * </td>
+          <td class="paramname"> <em>b</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="61a0022627cc1977966c0067f1f12e26"></a><!-- doxytag: member="ilu_zdrop_row.c::dnrm2_" ref="61a0022627cc1977966c0067f1f12e26" args="(int *, double[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dnrm2_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fafebe5a243783e920465d5985076dae"></a><!-- doxytag: member="ilu_zdrop_row.c::dzasum_" ref="fafebe5a243783e920465d5985076dae" args="(int *, doublecomplex *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dzasum_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7e669e96b4c0ad6e2000684a34e798b7"></a><!-- doxytag: member="ilu_zdrop_row.c::dznrm2_" ref="7e669e96b4c0ad6e2000684a34e798b7" args="(int *, doublecomplex *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dznrm2_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f4b8c50d3afed76a8b9809673a7da4f3"></a><!-- doxytag: member="ilu_zdrop_row.c::ilu_zdrop_row" ref="f4b8c50d3afed76a8b9809673a7da4f3" args="(superlu_options_t *options, int first, int last, double drop_tol, int quota, int *nnzLj, double *fill_tol, GlobalLU_t *Glu, double dwork[], double dwork2[], int lastc)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_zdrop_row           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>first</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>last</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>drop_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>quota</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nnzLj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>fill_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>dwork</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>dwork2</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lastc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__zdrop__row_8c.html#f4b8c50d3afed76a8b9809673a7da4f3">ilu_zdrop_row()</a> - Drop some small rows from the previous 
+    supernode (L-part only).
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="f8bf573faadaf4a6cead386258c1421c"></a><!-- doxytag: member="ilu_zdrop_row.c::izamax_" ref="f8bf573faadaf4a6cead386258c1421c" args="(int *, doublecomplex[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int izamax_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ceb6d1d72184759746247bd55dcede0f"></a><!-- doxytag: member="ilu_zdrop_row.c::zaxpy_" ref="ceb6d1d72184759746247bd55dcede0f" args="(int *, doublecomplex *, doublecomplex[], int *, doublecomplex[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zaxpy_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ad105755c4a253c2d6dbce95720abb48"></a><!-- doxytag: member="ilu_zdrop_row.c::zcopy_" ref="ad105755c4a253c2d6dbce95720abb48" args="(int *, doublecomplex[], int *, doublecomplex[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zcopy_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="20051222dca15b4b236d9758042171cf"></a><!-- doxytag: member="ilu_zdrop_row.c::zswap_" ref="20051222dca15b4b236d9758042171cf" args="(int *, doublecomplex[], int *, doublecomplex[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zswap_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="c900805a486cbb8489e3c176ed6e0d8e"></a><!-- doxytag: member="ilu_zdrop_row.c::A" ref="c900805a486cbb8489e3c176ed6e0d8e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__zpanel__dfs_8c.html b/DOC/html/ilu__zpanel__dfs_8c.html
new file mode 100644
index 0000000..468ae85
--- /dev/null
+++ b/DOC/html/ilu__zpanel__dfs_8c.html
@@ -0,0 +1,166 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_zpanel_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_zpanel_dfs.c File Reference</h1>Peforms a symbolic factorization on a panel of symbols and record the entries with maximum absolute value in each column. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zpanel__dfs_8c.html#8bc5f8a774d7fab0ba65cd9bca243435">ilu_zpanel_dfs</a> (const int m, const int w, const int jcol, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, <a class="el" href="structdoublecomplex.html">doublecomplex</a> [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="8bc5f8a774d7fab0ba65cd9bca243435"></a><!-- doxytag: member="ilu_zpanel_dfs.c::ilu_zpanel_dfs" ref="8bc5f8a774d7fab0ba65cd9bca243435" args="(const int m, const int w, const int jcol, SuperMatrix *A, int *perm_r, int *nseg, doublecomplex *dense, double *amax, int *panel_lsub, int *segrep, int *repfnz, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_zpanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel.
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__zpivotL_8c.html b/DOC/html/ilu__zpivotL_8c.html
new file mode 100644
index 0000000..6860565
--- /dev/null
+++ b/DOC/html/ilu__zpivotL_8c.html
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_zpivotL.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_zpivotL.c File Reference</h1>Performs numerical pivoting. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zpivotL_8c.html#95ed41486ca0ed53262e4b8934d4afac">SGN</a>(x)   ((x)>=0?1:-1)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zpivotL_8c.html#857e99bebbdf102f2b9d2ef4a25d1135">ilu_zpivotL</a> (const int jcol, const double u, int *usepr, int *perm_r, int diagind, int *swap, int *iswap, int *marker, int *pivrow, double fill_tol, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> milu, <a class="el" href="structdoublecomplex.html"> [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="95ed41486ca0ed53262e4b8934d4afac"></a><!-- doxytag: member="ilu_zpivotL.c::SGN" ref="95ed41486ca0ed53262e4b8934d4afac" args="(x)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SGN          </td>
+          <td>(</td>
+          <td class="paramtype">x </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((x)>=0?1:-1)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="857e99bebbdf102f2b9d2ef4a25d1135"></a><!-- doxytag: member="ilu_zpivotL.c::ilu_zpivotL" ref="857e99bebbdf102f2b9d2ef4a25d1135" args="(const int jcol, const double u, int *usepr, int *perm_r, int diagind, int *swap, int *iswap, int *marker, int *pivrow, double fill_tol, milu_t milu, doublecomplex drop_sum, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_zpivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>diagind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>swap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iswap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>fill_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname"> <em>milu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>drop_sum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+	     pivot row = k;
+	 ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+	     pivot row = j;
+	 ELSE
+	     pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0	  success;
+		   i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ilu__zsnode__dfs_8c.html b/DOC/html/ilu__zsnode__dfs_8c.html
new file mode 100644
index 0000000..458890e
--- /dev/null
+++ b/DOC/html/ilu__zsnode__dfs_8c.html
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ilu_zsnode_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ilu_zsnode_dfs.c File Reference</h1>Determines the union of row structures of columns within the relaxed node. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zsnode__dfs_8c.html#6fa78a3059d75e11a66434992dddafab">ilu_zsnode_dfs</a> (const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *marker, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="6fa78a3059d75e11a66434992dddafab"></a><!-- doxytag: member="ilu_zsnode_dfs.c::ilu_zsnode_dfs" ref="6fa78a3059d75e11a66434992dddafab" args="(const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *marker, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_zsnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__zsnode__dfs_8c.html#6fa78a3059d75e11a66434992dddafab">ilu_zsnode_dfs()</a> - Determine the union of the row structures of those
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore,
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/index.html b/DOC/html/index.html
new file mode 100644
index 0000000..d53b4fe
--- /dev/null
+++ b/DOC/html/index.html
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SuperLU Documentation</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SuperLU Documentation</h1>
+<p>
+<h3 align="center">4.2 </h3>SuperLU is a general purpose library for the direct solution of large, sparse, nonsymmetric systems of linear equations on high performance machines. The library is written in C and is callable from either C or Fortran. The library routines perform an LU decomposition with partial pivoting and triangular system solves through forward and back substitution. The library also provides threshold-based ILU factorization preconditioners.<p>
+The factorization routines can handle non-square matrices but the triangular solves are performed only for square matrices. The matrix columns may be preordered (before factorization) either through library or user supplied routines. This preordering for sparsity is completely separate from the factorization. Working precision iterative refinement subroutines are provided for improved backward stability. Routines are also provided to equilibrate the system, estimate the condition number, [...]
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/izmax1_8c.html b/DOC/html/izmax1_8c.html
new file mode 100644
index 0000000..1620e2e
--- /dev/null
+++ b/DOC/html/izmax1_8c.html
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/izmax1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/izmax1.c File Reference</h1>Finds the index of the element whose real part has maximum absolute value. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__dcomplex_8h-source.html">slu_dcomplex.h</a>"</code><br>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="izmax1_8c.html#5a76da95c549c41790389a76e12fdcb5">CX</a>(I)   cx[(I)-1]</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="izmax1_8c.html#99d3cc85eec418b836a4949ead25c297">izmax1_</a> (int *n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *cx, int *incx)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+     -- LAPACK auxiliary routine (version 2.0) --   
+     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
+     Courant Institute, Argonne National Lab, and Rice University   
+     October 31, 1992   
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="5a76da95c549c41790389a76e12fdcb5"></a><!-- doxytag: member="izmax1.c::CX" ref="5a76da95c549c41790389a76e12fdcb5" args="(I)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define CX          </td>
+          <td>(</td>
+          <td class="paramtype">I </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   cx[(I)-1]</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="99d3cc85eec418b836a4949ead25c297"></a><!-- doxytag: member="izmax1.c::izmax1_" ref="99d3cc85eec418b836a4949ead25c297" args="(int *n, doublecomplex *cx, int *incx)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int izmax1_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>cx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>incx</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    IZMAX1 finds the index of the element whose real part has maximum   
+    absolute value.</pre><p>
+<pre>    Based on IZAMAX from Level 1 BLAS.   
+    The change is to use the 'genuine' absolute value.</pre><p>
+<pre>    Contributed by Nick Higham for use with ZLACON.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    N       (input) INT   
+            The number of elements in the vector CX.</pre><p>
+<pre>    CX      (input) COMPLEX*16 array, dimension (N)   
+            The vector whose elements will be summed.</pre><p>
+<pre>    INCX    (input) INT   
+            The spacing between successive values of CX.  INCX >= 1.</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/lsame_8c.html b/DOC/html/lsame_8c.html
new file mode 100644
index 0000000..2737622
--- /dev/null
+++ b/DOC/html/lsame_8c.html
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/lsame.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/lsame.c File Reference</h1>Check if CA is the same letter as CB regardless of case. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lsame_8c.html#6de88349c1fe993f318dd0643af908c3">lsame_</a> (char *ca, char *cb)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- LAPACK auxiliary routine (version 2.0) --   
+      Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
+      Courant Institute, Argonne National Lab, and Rice University   
+      September 30, 1994   
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="6de88349c1fe993f318dd0643af908c3"></a><!-- doxytag: member="lsame.c::lsame_" ref="6de88349c1fe993f318dd0643af908c3" args="(char *ca, char *cb)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int lsame_           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>ca</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>cb</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    LSAME returns .TRUE. if CA is the same letter as CB regardless of case.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    CA      (input) CHARACTER*1   
+    CB      (input) CHARACTER*1   
+            CA and CB specify the single characters to be compared.</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/mark__relax_8c.html b/DOC/html/mark__relax_8c.html
new file mode 100644
index 0000000..89acd7a
--- /dev/null
+++ b/DOC/html/mark__relax_8c.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/mark_relax.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/mark_relax.c File Reference</h1>Record the rows pivoted by the relaxed supernodes. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mark__relax_8c.html#5e85b0273eec011f0027d8506a20350e">mark_relax</a> (int n, int *relax_end, int *relax_fsupc, int *xa_begin, int *xa_end, int *asub, int *marker)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 1, 2009
+ <<dl class="pre" compact><dt><b>Precondition:</b></dt><dd>>
+</dd></dl>
+</pre><hr><h2>Function Documentation</h2>
+<a class="anchor" name="5e85b0273eec011f0027d8506a20350e"></a><!-- doxytag: member="mark_relax.c::mark_relax" ref="5e85b0273eec011f0027d8506a20350e" args="(int n, int *relax_end, int *relax_fsupc, int *xa_begin, int *xa_end, int *asub, int *marker)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int mark_relax           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_fsupc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="mark__relax_8c.html#5e85b0273eec011f0027d8506a20350e">mark_relax()</a> - record the rows used by the relaxed supernodes.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/mc64ad_8c.html b/DOC/html/mc64ad_8c.html
new file mode 100644
index 0000000..6498d41
--- /dev/null
+++ b/DOC/html/mc64ad_8c.html
@@ -0,0 +1,932 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/mc64ad.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/mc64ad.c File Reference</h1><code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#6a010865b10e541735fa2da8f3cd062d">abs</a>(a)   ((a) >= 0) ? (a) : -(a)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#c6afabdc09a49a433ee19d8a9486056d">min</a>(a, b)   ((a) < (b)) ? (a) : (b)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#49a5219ef8d6345ee5ae5a34aea76ed6">mc64id_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *icntl)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#122c4a344cc189495e32b7b7f6123e69">mc64ad_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *job, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *n, <a class="el" href="slu__zdefs_8h.html [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#03d088da1e7d8454a0fd4e1d1840b96c">mc64bd_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *n, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *ne, <a class="el" href="slu__zdefs_8h.html# [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#23f5c353dc0f33b3171101060a9a555f">mc64dd_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *i__, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *n, <a class="el" href="slu__zdefs_8h.html [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#3926b73b0b519feef70eae9ed9cf282c">mc64ed_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *qlen, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *n, <a class="el" href="slu__zdefs_8h.htm [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#9b0c810c63b7faf051b21e97a636285c">mc64fd_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *pos0, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *qlen, <a class="el" href="slu__zdefs_8h. [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#dbb9a61e53f59a675c30dfd821aad16f">mc64rd_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *n, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *ne, <a class="el" href="slu__zdefs_8h.html# [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#ea1b4d8e05692a715e334f472f9a4313">mc64sd_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *n, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *ne, <a class="el" href="slu__zdefs_8h.html# [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#77573ca4776db28859b0ead94b728dc1">mc64qd_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *ip, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *lenl, <a class="el" href="slu__zdefs_8h.ht [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#52c18d1d9fc3efefba36ba67456b46d1">mc64ud_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *id, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *mod, <a class="el" href="slu__zdefs_8h.htm [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#dd3e26b831b8b4bc818b93c4fdce7174">mc64wd_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *n, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *ne, <a class="el" href="slu__zdefs_8h.html# [...]
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#6566a5239e1e0fecb5a4488ba16a1425">c__1</a> = 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#9338daec563ba129d8db4bb5b9efcdbc">c__2</a> = 2</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="6a010865b10e541735fa2da8f3cd062d"></a><!-- doxytag: member="mc64ad.c::abs" ref="6a010865b10e541735fa2da8f3cd062d" args="(a)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define abs          </td>
+          <td>(</td>
+          <td class="paramtype">a </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((a) >= 0) ? (a) : -(a)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c6afabdc09a49a433ee19d8a9486056d"></a><!-- doxytag: member="mc64ad.c::min" ref="c6afabdc09a49a433ee19d8a9486056d" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define min          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((a) < (b)) ? (a) : (b)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="122c4a344cc189495e32b7b7f6123e69"></a><!-- doxytag: member="mc64ad.c::mc64ad_" ref="122c4a344cc189495e32b7b7f6123e69" args="(int_t *job, int_t *n, int_t *ne, int_t *ip, int_t *irn, double *a, int_t *num, int_t *cperm, int_t *liw, int_t *iw, int_t *ldw, double *dw, int_t *icntl, int_t *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64ad_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>job</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>ne</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>ip</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>irn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>cperm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>liw</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>iw</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>ldw</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>dw</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>icntl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="03d088da1e7d8454a0fd4e1d1840b96c"></a><!-- doxytag: member="mc64ad.c::mc64bd_" ref="03d088da1e7d8454a0fd4e1d1840b96c" args="(int_t *n, int_t *ne, int_t *ip, int_t *irn, double *a, int_t *iperm, int_t *num, int_t *jperm, int_t *pr, int_t *q, int_t *l, double *d__)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64bd_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>ne</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>ip</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>irn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>iperm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>jperm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>pr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>q</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>l</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>d__</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="23f5c353dc0f33b3171101060a9a555f"></a><!-- doxytag: member="mc64ad.c::mc64dd_" ref="23f5c353dc0f33b3171101060a9a555f" args="(int_t *i__, int_t *n, int_t *q, double *d__, int_t *l, int_t *iway)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64dd_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>i__</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>q</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>d__</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>l</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>iway</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3926b73b0b519feef70eae9ed9cf282c"></a><!-- doxytag: member="mc64ad.c::mc64ed_" ref="3926b73b0b519feef70eae9ed9cf282c" args="(int_t *qlen, int_t *n, int_t *q, double *d__, int_t *l, int_t *iway)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64ed_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>qlen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>q</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>d__</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>l</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>iway</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9b0c810c63b7faf051b21e97a636285c"></a><!-- doxytag: member="mc64ad.c::mc64fd_" ref="9b0c810c63b7faf051b21e97a636285c" args="(int_t *pos0, int_t *qlen, int_t *n, int_t *q, double *d__, int_t *l, int_t *iway)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64fd_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>pos0</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>qlen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>q</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>d__</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>l</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>iway</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="49a5219ef8d6345ee5ae5a34aea76ed6"></a><!-- doxytag: member="mc64ad.c::mc64id_" ref="49a5219ef8d6345ee5ae5a34aea76ed6" args="(int_t *icntl)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64id_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>icntl</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="77573ca4776db28859b0ead94b728dc1"></a><!-- doxytag: member="mc64ad.c::mc64qd_" ref="77573ca4776db28859b0ead94b728dc1" args="(int_t *ip, int_t *lenl, int_t *lenh, int_t *w, int_t *wlen, double *a, int_t *nval, double *val)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64qd_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>ip</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>lenl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>lenh</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>wlen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>nval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>val</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="dbb9a61e53f59a675c30dfd821aad16f"></a><!-- doxytag: member="mc64ad.c::mc64rd_" ref="dbb9a61e53f59a675c30dfd821aad16f" args="(int_t *n, int_t *ne, int_t *ip, int_t *irn, double *a)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64rd_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>ne</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>ip</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>irn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>a</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ea1b4d8e05692a715e334f472f9a4313"></a><!-- doxytag: member="mc64ad.c::mc64sd_" ref="ea1b4d8e05692a715e334f472f9a4313" args="(int_t *n, int_t *ne, int_t *ip, int_t *irn, double *a, int_t *iperm, int_t *numx, int_t *w, int_t *len, int_t *lenl, int_t *lenh, int_t *fc, int_t *iw, int_t *iw4)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64sd_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>ne</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>ip</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>irn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>iperm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>numx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>len</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>lenl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>lenh</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>fc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>iw</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>iw4</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="52c18d1d9fc3efefba36ba67456b46d1"></a><!-- doxytag: member="mc64ad.c::mc64ud_" ref="52c18d1d9fc3efefba36ba67456b46d1" args="(int_t *id, int_t *mod, int_t *n, int_t *irn, int_t *lirn, int_t *ip, int_t *lenc, int_t *fc, int_t *iperm, int_t *num, int_t *numx, int_t *pr, int_t *arp, int_t *cv, int_t *out)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64ud_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>mod</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>irn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>lirn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>ip</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>lenc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>fc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>iperm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>numx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>pr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>arp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>cv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>out</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="dd3e26b831b8b4bc818b93c4fdce7174"></a><!-- doxytag: member="mc64ad.c::mc64wd_" ref="dd3e26b831b8b4bc818b93c4fdce7174" args="(int_t *n, int_t *ne, int_t *ip, int_t *irn, double *a, int_t *iperm, int_t *num, int_t *jperm, int_t *out, int_t *pr, int_t *q, int_t *l, double *u, double *d__)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64wd_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>ne</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>ip</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>irn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>iperm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>jperm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>pr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>q</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>l</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>d__</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="6566a5239e1e0fecb5a4488ba16a1425"></a><!-- doxytag: member="mc64ad.c::c__1" ref="6566a5239e1e0fecb5a4488ba16a1425" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> <a class="el" href="mc64ad_8c.html#6566a5239e1e0fecb5a4488ba16a1425">c__1</a> = 1<code> [static]</code>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9338daec563ba129d8db4bb5b9efcdbc"></a><!-- doxytag: member="mc64ad.c::c__2" ref="9338daec563ba129d8db4bb5b9efcdbc" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> <a class="el" href="mc64ad_8c.html#9338daec563ba129d8db4bb5b9efcdbc">c__2</a> = 2<code> [static]</code>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/memory_8c.html b/DOC/html/memory_8c.html
new file mode 100644
index 0000000..77529fd
--- /dev/null
+++ b/DOC/html/memory_8c.html
@@ -0,0 +1,285 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/memory.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/memory.c File Reference</h1>Precision-independent memory-related routines. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#9ab2cc28807c3b5f5ca8eb9b85ea1f3f">superlu_malloc</a> (size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#50cc6d9102542bf48b24f6d21cfa7deb">superlu_free</a> (void *addr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#dbbe5a57b4ed64564c887fb52d798c54">SetIWork</a> (int m, int n, int panel_size, int *iworkptr, int **segrep, int **parent, int **xplore, int **repfnz, int **panel_lsub, int **xprune, int **marker)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for integer working arrays.  <a href="#dbbe5a57b4ed64564c887fb52d798c54"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#3b606bbd7cce73c19bffca851721e9ac">copy_mem_int</a> (int howmany, void *old, void *new)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#9a6637190072609a7dcdec007bd98113">user_bcopy</a> (char *src, char *dest, int bytes)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#49bbe20102e5b541c8e8963afa2bd46a">intMalloc</a> (int n)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#af51f82a79c361236a2d825a59a63403">intCalloc</a> (int n)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="3b606bbd7cce73c19bffca851721e9ac"></a><!-- doxytag: member="memory.c::copy_mem_int" ref="3b606bbd7cce73c19bffca851721e9ac" args="(int howmany, void *old, void *new)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void copy_mem_int           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>howmany</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>old</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>new</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="af51f82a79c361236a2d825a59a63403"></a><!-- doxytag: member="memory.c::intCalloc" ref="af51f82a79c361236a2d825a59a63403" args="(int n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* intCalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="49bbe20102e5b541c8e8963afa2bd46a"></a><!-- doxytag: member="memory.c::intMalloc" ref="49bbe20102e5b541c8e8963afa2bd46a" args="(int n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* intMalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="dbbe5a57b4ed64564c887fb52d798c54"></a><!-- doxytag: member="memory.c::SetIWork" ref="dbbe5a57b4ed64564c887fb52d798c54" args="(int m, int n, int panel_size, int *iworkptr, int **segrep, int **parent, int **xplore, int **repfnz, int **panel_lsub, int **xprune, int **marker)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SetIWork           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iworkptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>marker</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="50cc6d9102542bf48b24f6d21cfa7deb"></a><!-- doxytag: member="memory.c::superlu_free" ref="50cc6d9102542bf48b24f6d21cfa7deb" args="(void *addr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void superlu_free           </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>addr</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9ab2cc28807c3b5f5ca8eb9b85ea1f3f"></a><!-- doxytag: member="memory.c::superlu_malloc" ref="9ab2cc28807c3b5f5ca8eb9b85ea1f3f" args="(size_t size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* superlu_malloc           </td>
+          <td>(</td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"> <em>size</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Precision-independent memory-related routines. (Shared by [sdcz]<a class="el" href="memory_8c.html" title="Precision-independent memory-related routines.">memory.c</a>) 
+</div>
+</div><p>
+<a class="anchor" name="9a6637190072609a7dcdec007bd98113"></a><!-- doxytag: member="memory.c::user_bcopy" ref="9a6637190072609a7dcdec007bd98113" args="(char *src, char *dest, int bytes)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void user_bcopy           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>src</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>bytes</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/mmd_8c.html b/DOC/html/mmd_8c.html
new file mode 100644
index 0000000..84d5ca2
--- /dev/null
+++ b/DOC/html/mmd_8c.html
@@ -0,0 +1,442 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/mmd.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/mmd.c File Reference</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mmd_8c.html#7b73e4f4f1dee202474aee4a3b2e1146">genmmd_</a> (int *neqns, int *xadj, <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> *adjncy, <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> *invp, <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> *perm, int *delta, < [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mmd_8c.html#6e497816a7ceb220795914fbddc4afb1">mmdint_</a> (int *neqns, int *xadj, <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> *adjncy, <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> *dhead, <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> *dforw, <a class="e [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mmd_8c.html#52ddf7a4032e5491d42b2105f505299f">mmdelm_</a> (int *mdnode, int *xadj, <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> *adjncy, <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> *dhead, <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> *dforw, <a class=" [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mmd_8c.html#5c016b89c468a56f69713b264690e98b">mmdupd_</a> (int *ehead, int *neqns, int *xadj, <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> *adjncy, int *delta, int *mdeg, <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> *dhead, <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mmd_8c.html#42b9909fb2c920dfc0fa3dfdc4a4f168">mmdnum_</a> (int *neqns, <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> *perm, <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> *invp, <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> *qsize)</td></tr>
+
+</table>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="499793cc10102eec3d98eda5229216f9"></a><!-- doxytag: member="mmd.c::shortint" ref="499793cc10102eec3d98eda5229216f9" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef int <a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="7b73e4f4f1dee202474aee4a3b2e1146"></a><!-- doxytag: member="mmd.c::genmmd_" ref="7b73e4f4f1dee202474aee4a3b2e1146" args="(int *neqns, int *xadj, shortint *adjncy, shortint *invp, shortint *perm, int *delta, shortint *dhead, shortint *qsize, shortint *llist, shortint *marker, int *maxint, int *nofsub)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int genmmd_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>neqns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xadj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>adjncy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>invp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>perm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>delta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>dhead</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>qsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>llist</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>maxint</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nofsub</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="52ddf7a4032e5491d42b2105f505299f"></a><!-- doxytag: member="mmd.c::mmdelm_" ref="52ddf7a4032e5491d42b2105f505299f" args="(int *mdnode, int *xadj, shortint *adjncy, shortint *dhead, shortint *dforw, shortint *dbakw, shortint *qsize, shortint *llist, shortint *marker, int *maxint, int *tag)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int mmdelm_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>mdnode</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xadj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>adjncy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>dhead</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>dforw</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>dbakw</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>qsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>llist</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>maxint</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>tag</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6e497816a7ceb220795914fbddc4afb1"></a><!-- doxytag: member="mmd.c::mmdint_" ref="6e497816a7ceb220795914fbddc4afb1" args="(int *neqns, int *xadj, shortint *adjncy, shortint *dhead, shortint *dforw, shortint *dbakw, shortint *qsize, shortint *llist, shortint *marker)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int mmdint_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>neqns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xadj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>adjncy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>dhead</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>dforw</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>dbakw</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>qsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>llist</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>marker</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="42b9909fb2c920dfc0fa3dfdc4a4f168"></a><!-- doxytag: member="mmd.c::mmdnum_" ref="42b9909fb2c920dfc0fa3dfdc4a4f168" args="(int *neqns, shortint *perm, shortint *invp, shortint *qsize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int mmdnum_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>neqns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>perm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>invp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>qsize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5c016b89c468a56f69713b264690e98b"></a><!-- doxytag: member="mmd.c::mmdupd_" ref="5c016b89c468a56f69713b264690e98b" args="(int *ehead, int *neqns, int *xadj, shortint *adjncy, int *delta, int *mdeg, shortint *dhead, shortint *dforw, shortint *dbakw, shortint *qsize, shortint *llist, shortint *marker, int *maxint, int *tag)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int mmdupd_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>ehead</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>neqns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xadj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>adjncy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>delta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>mdeg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>dhead</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>dforw</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>dbakw</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>qsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>llist</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mmd_8c.html#499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>maxint</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>tag</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/qselect_8c.html b/DOC/html/qselect_8c.html
new file mode 100644
index 0000000..d879f5d
--- /dev/null
+++ b/DOC/html/qselect_8c.html
@@ -0,0 +1,110 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/qselect.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/qselect.c File Reference</h1>Quickselect: returns the k-th (zero-based) largest value in A[]. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="qselect_8c.html#55283ff1f5ff561072afe7c8ad6ac218">dqselect</a> (int n, double <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>[], int k)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="qselect_8c.html#5a36bc5d24fe074bc4f3cfb65d7f0ae8">sqselect</a> (int n, float <a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>[], int k)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.1) --
+ Lawrence Berkeley National Laboratory.
+ November, 2010
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="55283ff1f5ff561072afe7c8ad6ac218"></a><!-- doxytag: member="qselect.c::dqselect" ref="55283ff1f5ff561072afe7c8ad6ac218" args="(int n, double A[], int k)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dqselect           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>A</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>k</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5a36bc5d24fe074bc4f3cfb65d7f0ae8"></a><!-- doxytag: member="qselect.c::sqselect" ref="5a36bc5d24fe074bc4f3cfb65d7f0ae8" args="(int n, float A[], int k)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float sqselect           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>A</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>k</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/relax__snode_8c.html b/DOC/html/relax__snode_8c.html
new file mode 100644
index 0000000..fffed11
--- /dev/null
+++ b/DOC/html/relax__snode_8c.html
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/relax_snode.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/relax_snode.c File Reference</h1>Identify initial relaxed supernodes. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="relax__snode_8c.html#d70bc12cb9031ab8aba4a37a18be46e3">relax_snode</a> (const int n, int *et, const int relax_columns, int *descendants, int *relax_end)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="d70bc12cb9031ab8aba4a37a18be46e3"></a><!-- doxytag: member="relax_snode.c::relax_snode" ref="d70bc12cb9031ab8aba4a37a18be46e3" args="(const int n, int *et, const int relax_columns, int *descendants, int *relax_end)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void relax_snode           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>et</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>relax_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>descendants</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_end</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="relax__snode_8c.html#d70bc12cb9031ab8aba4a37a18be46e3">relax_snode()</a> - Identify the initial relaxed supernodes, assuming that 
+    the matrix has been reordered according to the postorder of the etree.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/scolumn__bmod_8c.html b/DOC/html/scolumn__bmod_8c.html
new file mode 100644
index 0000000..c47230e
--- /dev/null
+++ b/DOC/html/scolumn__bmod_8c.html
@@ -0,0 +1,272 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/scolumn_bmod.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/scolumn_bmod.c File Reference</h1>performs numeric block updates <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="scolumn__bmod_8c.html#25ea48f4f948c68a423f5bd3929e3c1f">susolve</a> (int, int, float *, float *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#25ea48f4f948c68a423f5bd3929e3c1f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="scolumn__bmod_8c.html#a8bbeb2abbd5a10ac13fa9b48504691c">slsolve</a> (int, int, float *, float *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#a8bbeb2abbd5a10ac13fa9b48504691c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="scolumn__bmod_8c.html#b452e957171a4d0d9cfe6abb3d8a950c">smatvec</a> (int, int, int, float *, float *, float *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#b452e957171a4d0d9cfe6abb3d8a950c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="scolumn__bmod_8c.html#c89043410fd16fe2b8d3b2c902fec9f7">scolumn_bmod</a> (const int jcol, const int nseg, float *dense, float *tempv, int *segrep, int *repfnz, int fpanelc, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre>  Permission is hereby granted to use or copy this program for any
+  purpose, provided the above notices are retained on all copies.
+  Permission to modify the code and to distribute modified code is
+  granted, provided the above notices are retained, and a notice that
+  the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="c89043410fd16fe2b8d3b2c902fec9f7"></a><!-- doxytag: member="scolumn_bmod.c::scolumn_bmod" ref="c89043410fd16fe2b8d3b2c902fec9f7" args="(const int jcol, const int nseg, float *dense, float *tempv, int *segrep, int *repfnz, int fpanelc, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int scolumn_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>fpanelc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose:
+ ========
+ Performs numeric block updates (sup-col) in topological order.
+ It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ Special processing on the supernodal portion of L[*,j]
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="a8bbeb2abbd5a10ac13fa9b48504691c"></a><!-- doxytag: member="scolumn_bmod.c::slsolve" ref="a8bbeb2abbd5a10ac13fa9b48504691c" args="(int, int, float *, float *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void slsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="b452e957171a4d0d9cfe6abb3d8a950c"></a><!-- doxytag: member="scolumn_bmod.c::smatvec" ref="b452e957171a4d0d9cfe6abb3d8a950c" args="(int, int, int, float *, float *, float *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void smatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="25ea48f4f948c68a423f5bd3929e3c1f"></a><!-- doxytag: member="scolumn_bmod.c::susolve" ref="25ea48f4f948c68a423f5bd3929e3c1f" args="(int, int, float *, float *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void susolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/scolumn__dfs_8c.html b/DOC/html/scolumn__dfs_8c.html
new file mode 100644
index 0000000..5357c73
--- /dev/null
+++ b/DOC/html/scolumn__dfs_8c.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/scolumn_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/scolumn_dfs.c File Reference</h1>Performs a symbolic factorization. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="scolumn__dfs_8c.html#5fd0635776cafb1d697263a0db693b9e">T2_SUPER</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">What type of supernodes we want.  <a href="#5fd0635776cafb1d697263a0db693b9e"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="scolumn__dfs_8c.html#c9a044320fe8bfbb051a344686a4cb7d">scolumn_dfs</a> (const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *xprune, int *marker, int *parent, int *xplore, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="5fd0635776cafb1d697263a0db693b9e"></a><!-- doxytag: member="scolumn_dfs.c::T2_SUPER" ref="5fd0635776cafb1d697263a0db693b9e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define T2_SUPER          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="c9a044320fe8bfbb051a344686a4cb7d"></a><!-- doxytag: member="scolumn_dfs.c::scolumn_dfs" ref="c9a044320fe8bfbb051a344686a4cb7d" args="(const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *xprune, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int scolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   SCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS 
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal 
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/scomplex_8c.html b/DOC/html/scomplex_8c.html
new file mode 100644
index 0000000..50e7d23
--- /dev/null
+++ b/DOC/html/scomplex_8c.html
@@ -0,0 +1,258 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/scomplex.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/scomplex.c File Reference</h1>Common arithmetic for <a class="el" href="structcomplex.html">complex</a> type. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include <stdio.h></code><br>
+<code>#include "<a class="el" href="slu__scomplex_8h-source.html">slu_scomplex.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="scomplex_8c.html#19814f5030befb85c4bb07e0fac34a7b">c_div</a> (<a class="el" href="structcomplex.html">complex</a> *c, <a class="el" href="structcomplex.html">complex</a> *a, <a class="el" href="structcomplex.html">complex</a> *b)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Complex Division c = a/b.  <a href="#19814f5030befb85c4bb07e0fac34a7b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="scomplex_8c.html#fc2967f7b71477625eb58de94a6e4c71">c_abs</a> (<a class="el" href="structcomplex.html">complex</a> *z)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns sqrt(z.r^2 + z.i^2).  <a href="#fc2967f7b71477625eb58de94a6e4c71"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="scomplex_8c.html#6a6e9259e2eadc976a783d1b0e8f013b">c_abs1</a> (<a class="el" href="structcomplex.html">complex</a> *z)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Approximates the abs. Returns abs(z.r) + abs(z.i).  <a href="#6a6e9259e2eadc976a783d1b0e8f013b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="scomplex_8c.html#6111d345ee625a35d42da30db28c6041">c_exp</a> (<a class="el" href="structcomplex.html">complex</a> *r, <a class="el" href="structcomplex.html">complex</a> *z)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the exponentiation.  <a href="#6111d345ee625a35d42da30db28c6041"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="scomplex_8c.html#dd0e09f7411e03b7516ddedacd6a59df">r_cnjg</a> (<a class="el" href="structcomplex.html">complex</a> *r, <a class="el" href="structcomplex.html">complex</a> *z)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the <a class="el" href="structcomplex.html">complex</a> conjugate.  <a href="#dd0e09f7411e03b7516ddedacd6a59df"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="scomplex_8c.html#b6bc19479c8838286f451d5d9a6c86a3">r_imag</a> (<a class="el" href="structcomplex.html">complex</a> *z)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the imaginary part.  <a href="#b6bc19479c8838286f451d5d9a6c86a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structcomplex.html">complex</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="scomplex_8c.html#ee98d3dfc6ee26d36a2e095bd28414e5">c_sgn</a> (<a class="el" href="structcomplex.html">complex</a> *z)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">SIGN functions for <a class="el" href="structcomplex.html">complex</a> number. Returns z/abs(z).  <a href="#ee98d3dfc6ee26d36a2e095bd28414e5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structcomplex.html">complex</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="scomplex_8c.html#8e9b533cd4055cb200a5d63152754898">c_sqrt</a> (<a class="el" href="structcomplex.html">complex</a> *z)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Square-root of a <a class="el" href="structcomplex.html">complex</a> number.  <a href="#8e9b533cd4055cb200a5d63152754898"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> This file defines common arithmetic operations for <a class="el" href="structcomplex.html">complex</a> type.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="fc2967f7b71477625eb58de94a6e4c71"></a><!-- doxytag: member="scomplex.c::c_abs" ref="fc2967f7b71477625eb58de94a6e4c71" args="(complex *z)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double c_abs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>z</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6a6e9259e2eadc976a783d1b0e8f013b"></a><!-- doxytag: member="scomplex.c::c_abs1" ref="6a6e9259e2eadc976a783d1b0e8f013b" args="(complex *z)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double c_abs1           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>z</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="19814f5030befb85c4bb07e0fac34a7b"></a><!-- doxytag: member="scomplex.c::c_div" ref="19814f5030befb85c4bb07e0fac34a7b" args="(complex *c, complex *a, complex *b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void c_div           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>b</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6111d345ee625a35d42da30db28c6041"></a><!-- doxytag: member="scomplex.c::c_exp" ref="6111d345ee625a35d42da30db28c6041" args="(complex *r, complex *z)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void c_exp           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>z</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ee98d3dfc6ee26d36a2e095bd28414e5"></a><!-- doxytag: member="scomplex.c::c_sgn" ref="ee98d3dfc6ee26d36a2e095bd28414e5" args="(complex *z)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcomplex.html">complex</a> c_sgn           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>z</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8e9b533cd4055cb200a5d63152754898"></a><!-- doxytag: member="scomplex.c::c_sqrt" ref="8e9b533cd4055cb200a5d63152754898" args="(complex *z)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcomplex.html">complex</a> c_sqrt           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>z</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="dd0e09f7411e03b7516ddedacd6a59df"></a><!-- doxytag: member="scomplex.c::r_cnjg" ref="dd0e09f7411e03b7516ddedacd6a59df" args="(complex *r, complex *z)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void r_cnjg           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>z</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b6bc19479c8838286f451d5d9a6c86a3"></a><!-- doxytag: member="scomplex.c::r_imag" ref="b6bc19479c8838286f451d5d9a6c86a3" args="(complex *z)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double r_imag           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>z</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/scopy__to__ucol_8c.html b/DOC/html/scopy__to__ucol_8c.html
new file mode 100644
index 0000000..381ffe8
--- /dev/null
+++ b/DOC/html/scopy__to__ucol_8c.html
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/scopy_to_ucol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/scopy_to_ucol.c File Reference</h1>Copy a computed column of U to the compressed data structure. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="scopy__to__ucol_8c.html#b44d465713c602e68295999c003daf7d">scopy_to_ucol</a> (int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, float *dense, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="b44d465713c602e68295999c003daf7d"></a><!-- doxytag: member="scopy_to_ucol.c::scopy_to_ucol" ref="b44d465713c602e68295999c003daf7d" args="(int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, float *dense, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int scopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/scsum1_8c.html b/DOC/html/scsum1_8c.html
new file mode 100644
index 0000000..8e0fdbd
--- /dev/null
+++ b/DOC/html/scsum1_8c.html
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/scsum1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/scsum1.c File Reference</h1>Takes sum of the absolute values of a <a class="el" href="structcomplex.html">complex</a> vector and returns a single precision result. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__scomplex_8h-source.html">slu_scomplex.h</a>"</code><br>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="scsum1_8c.html#5a76da95c549c41790389a76e12fdcb5">CX</a>(I)   cx[(I)-1]</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="scsum1_8c.html#5d1c88cf76514de82b3ab994dd6990f4">scsum1_</a> (int *n, <a class="el" href="structcomplex.html">complex</a> *cx, int *incx)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+     -- LAPACK auxiliary routine (version 2.0) --   
+     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
+     Courant Institute, Argonne National Lab, and Rice University   
+     October 31, 1992   
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="5a76da95c549c41790389a76e12fdcb5"></a><!-- doxytag: member="scsum1.c::CX" ref="5a76da95c549c41790389a76e12fdcb5" args="(I)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define CX          </td>
+          <td>(</td>
+          <td class="paramtype">I </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   cx[(I)-1]</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="5d1c88cf76514de82b3ab994dd6990f4"></a><!-- doxytag: member="scsum1.c::scsum1_" ref="5d1c88cf76514de82b3ab994dd6990f4" args="(int *n, complex *cx, int *incx)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double scsum1_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>cx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>incx</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    SCSUM1 takes the sum of the absolute values of a <a class="el" href="structcomplex.html">complex</a>   
+    vector and returns a single precision result.</pre><p>
+<pre>    Based on SCASUM from the Level 1 BLAS.   
+    The change is to use the 'genuine' absolute value.</pre><p>
+<pre>    Contributed by Nick Higham for use with CLACON.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    N       (input) INT
+            The number of elements in the vector CX.</pre><p>
+<pre>    CX      (input) COMPLEX array, dimension (N)   
+            The vector whose elements will be summed.</pre><p>
+<pre>    INCX    (input) INT
+            The spacing between successive values of CX.  INCX > 0.</pre><p>
+<pre>    ===================================================================== 
+</pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sdiagonal_8c.html b/DOC/html/sdiagonal_8c.html
new file mode 100644
index 0000000..7faf78c
--- /dev/null
+++ b/DOC/html/sdiagonal_8c.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sdiagonal.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sdiagonal.c File Reference</h1>Auxiliary routines to work with diagonal elements. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sdiagonal_8c.html#4ca1f3e4bce5bcd3e19bc3932cbb1206">sfill_diag</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sdiagonal_8c.html#1c23412db51d68adf32515fa5bdc9c88">sdominate</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="1c23412db51d68adf32515fa5bdc9c88"></a><!-- doxytag: member="sdiagonal.c::sdominate" ref="1c23412db51d68adf32515fa5bdc9c88" args="(int n, NCformat *Astore)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sdominate           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structNCformat.html">NCformat</a> * </td>
+          <td class="paramname"> <em>Astore</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4ca1f3e4bce5bcd3e19bc3932cbb1206"></a><!-- doxytag: member="sdiagonal.c::sfill_diag" ref="4ca1f3e4bce5bcd3e19bc3932cbb1206" args="(int n, NCformat *Astore)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sfill_diag           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structNCformat.html">NCformat</a> * </td>
+          <td class="paramname"> <em>Astore</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sfgmr_8c.html b/DOC/html/sfgmr_8c.html
new file mode 100644
index 0000000..3e25310
--- /dev/null
+++ b/DOC/html/sfgmr_8c.html
@@ -0,0 +1,210 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/sfgmr.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/sfgmr.c File Reference</h1>flexible GMRES from ITSOL developed by Yousef Saad. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="sfgmr_8c.html#70fac857a29f956523d4c8c05e13f177">epsmac</a>   1.0e-16</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="sfgmr_8c.html#6152533add9e764be3ad22884976d20d">sdot_</a> (int *, float[], int *, float[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="sfgmr_8c.html#4ed20001c29f50f0a4f3261861086cc8">snrm2_</a> (int *, float[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sfgmr_8c.html#ce249a05c158a15db1e6526e955f35ee">sfgmr</a> (int n, void(*smatvec)(float, float[], float, float[]), void(*spsolve)(int, float[], float[]), float *rhs, float *sol, double tol, int im, int *itmax, FILE *fits)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="70fac857a29f956523d4c8c05e13f177"></a><!-- doxytag: member="sfgmr.c::epsmac" ref="70fac857a29f956523d4c8c05e13f177" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define epsmac   1.0e-16          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="6152533add9e764be3ad22884976d20d"></a><!-- doxytag: member="sfgmr.c::sdot_" ref="6152533add9e764be3ad22884976d20d" args="(int *, float[], int *, float[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float sdot_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ce249a05c158a15db1e6526e955f35ee"></a><!-- doxytag: member="sfgmr.c::sfgmr" ref="ce249a05c158a15db1e6526e955f35ee" args="(int n, void(*smatvec)(float, float[], float, float[]), void(*spsolve)(int, float[], float[]), float *rhs, float *sol, double tol, int im, int *itmax, FILE *fits)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sfgmr           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(float, float[], float, float[]) </td>
+          <td class="paramname"> <em>smatvec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(int, float[], float[]) </td>
+          <td class="paramname"> <em>spsolve</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>sol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>im</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>itmax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fits</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4ed20001c29f50f0a4f3261861086cc8"></a><!-- doxytag: member="sfgmr.c::snrm2_" ref="4ed20001c29f50f0a4f3261861086cc8" args="(int *, float[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float snrm2_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sgscon_8c.html b/DOC/html/sgscon_8c.html
new file mode 100644
index 0000000..5f235a3
--- /dev/null
+++ b/DOC/html/sgscon_8c.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sgscon.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sgscon.c File Reference</h1>Estimates reciprocal of the condition number of a general matrix. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgscon_8c.html#76b21c7561d5bce81821a76c3465601b">sgscon</a> (char *norm, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, float anorm, float *rcond, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat, int *info)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Modified from lapack routines SGECON.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="76b21c7561d5bce81821a76c3465601b"></a><!-- doxytag: member="sgscon.c::sgscon" ref="76b21c7561d5bce81821a76c3465601b" args="(char *norm, SuperMatrix *L, SuperMatrix *U, float anorm, float *rcond, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgscon           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>norm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>anorm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   SGSCON estimates the reciprocal of the condition number of a general 
+   real matrix A, in either the 1-norm or the infinity-norm, using   
+   the LU factorization computed by SGETRF.   *</pre><p>
+<pre>   An estimate is obtained for norm(inv(A)), and the reciprocal of the   
+   condition number is computed as   
+      RCOND = 1 / ( norm(A) * norm(inv(A)) ).</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>    NORM    (input) char*
+            Specifies whether the 1-norm condition number or the   
+            infinity-norm condition number is required:   
+            = '1' or 'O':  1-norm;   
+            = 'I':         Infinity-norm.</pre><p>
+<pre>    L       (input) SuperMatrix*
+            The factor L from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf()</a>. Use compressed row subscripts storage for supernodes,
+            i.e., L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre>    U       (input) SuperMatrix*
+            The factor U from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+            Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre>    ANORM   (input) float
+            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
+            If NORM = 'I', the infinity-norm of the original matrix A.</pre><p>
+<pre>    RCOND   (output) float*
+           The reciprocal of the condition number of the matrix A,   
+           computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><p>
+<pre>    INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sgsequ_8c.html b/DOC/html/sgsequ_8c.html
new file mode 100644
index 0000000..1cf7707
--- /dev/null
+++ b/DOC/html/sgsequ_8c.html
@@ -0,0 +1,145 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sgsequ.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sgsequ.c File Reference</h1>Computes row and column scalings. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgsequ_8c.html#d8a808e807e38c32c08cfbeadb088f08">sgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, float *r, float *c, float *rowcnd, float *colcnd, float *amax, int *info)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver related.  <a href="#d8a808e807e38c32c08cfbeadb088f08"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Modified from LAPACK routine SGEEQU
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="d8a808e807e38c32c08cfbeadb088f08"></a><!-- doxytag: member="sgsequ.c::sgsequ" ref="d8a808e807e38c32c08cfbeadb088f08" args="(SuperMatrix *A, float *r, float *c, float *rowcnd, float *colcnd, float *amax, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgsequ           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   SGSEQU computes row and column scalings intended to equilibrate an   
+   M-by-N sparse matrix A and reduce its condition number. R returns the row
+   scale factors and C the column scale factors, chosen to try to make   
+   the largest element in each row and column of the matrix B with   
+   elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.</pre><p>
+<pre>   R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
+   number and BIGNUM = largest safe number.  Use of these scaling   
+   factors is not guaranteed to reduce the condition number of A but   
+   works well in practice.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The matrix of dimension (A->nrow, A->ncol) whose equilibration
+           factors are to be computed. The type of A can be:
+           Stype = SLU_NC; Dtype = SLU_S; Mtype = SLU_GE.</pre><p>
+<pre>   R       (output) float*, size A->nrow
+           If INFO = 0 or INFO > M, R contains the row scale factors   
+           for A.</pre><p>
+<pre>   C       (output) float*, size A->ncol
+           If INFO = 0,  C contains the column scale factors for A.</pre><p>
+<pre>   ROWCND  (output) float*
+           If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
+           smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
+           AMAX is neither too large nor too small, it is not worth   
+           scaling by R.</pre><p>
+<pre>   COLCND  (output) float*
+           If INFO = 0, COLCND contains the ratio of the smallest   
+           C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
+           worth scaling by C.</pre><p>
+<pre>   AMAX    (output) float*
+           Absolute value of largest matrix element.  If AMAX is very   
+           close to overflow or very close to underflow, the matrix   
+           should be scaled.</pre><p>
+<pre>   INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value   
+           > 0:  if INFO = i,  and i is   
+                 <= A->nrow:  the i-th row of A is exactly zero   
+                 >  A->ncol:  the (i-M)-th column of A is exactly zero</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sgsisx_8c.html b/DOC/html/sgsisx_8c.html
new file mode 100644
index 0000000..eb5e2a7
--- /dev/null
+++ b/DOC/html/sgsisx_8c.html
@@ -0,0 +1,495 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sgsisx.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sgsisx.c File Reference</h1>Computes an approximate solutions of linear equations A*X=B or A'*X=B. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgsisx_8c.html#7ef921fcca8189c43499e3e89e7e05ce">sgsisx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *perm_r, int *etree, char *equed, float *R, fl [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.2) --
+ Lawrence Berkeley National Laboratory.
+ November, 2010
+ August, 2011
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="7ef921fcca8189c43499e3e89e7e05ce"></a><!-- doxytag: member="sgsisx.c::sgsisx" ref="7ef921fcca8189c43499e3e89e7e05ce" args="(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r, int *etree, char *equed, float *R, float *C, SuperMatrix *L, SuperMatrix *U, void *work, int lwork, SuperMatrix *B, SuperMatrix *X, float *recip_pivot_growth, float *rcond, mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgsisx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> SGSISX computes an approximate solutions of linear equations
+ A*X=B or A'*X=B, using the ILU factorization from <a class="el" href="sgsitrf_8c.html#25788392a605519048cafa995b641fcc">sgsitrf()</a>.
+ An estimation of the condition number is provided. 
+ The routine performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A is
+	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+	     = TRANS or CONJ).</pre><p>
+<pre>	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+	     matrix that usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the matrix A (after equilibration if options->Equil = YES)
+	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>	1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+	     and info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	1.6. The system of equations is solved for X using the factored form
+	     of A.</pre><p>
+<pre>	1.7. options->IterRefine is not used</pre><p>
+<pre>	1.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>	1.9. options for ILU only
+	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+		entries of modulus 1 on the diagonal and off-diagonal entries
+		of modulus at most 1. If MC64 fails, <a class="el" href="dgsequ_8c.html#af22b247cc134fb0ba90285e84ccebb4" title="Driver related.">dgsequ()</a> is used to
+		equilibrate the system.
+              ( Default: LargeDiag )
+	     2) options->ILU_DropTol = tau is the threshold for dropping.
+		For L, it is used directly (for the whole row in a supernode);
+		For U, ||A(:,i)||_oo * tau is used as the threshold
+	        for the	i-th column.
+		If a secondary dropping rule is required, tau will
+	        also be used to compute the second threshold.
+              ( Default: 1e-4 )
+	     3) options->ILU_FillFactor = gamma, used as the initial guess
+		of memory growth.
+		If a secondary dropping rule is required, it will also
+              be used as an upper bound of the memory.
+              ( Default: 10 )
+	     4) options->ILU_DropRule specifies the dropping rule.
+		Option	      Meaning
+		======	      ===========
+		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+			      p = gamma * nnz(A(:,j)).
+		DROP_AREA:    Variation of ILUTP, for j-th column, use
+			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+			      Otherwise
+				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+			      tau_U(j) uses the similar rule.
+			      NOTE: the thresholds used by L and U are separate.
+		DROP_INTERP:  Compute the second dropping threshold by
+			      interpolation instead of sorting (default).
+			      In this case, the actual fill ratio is not
+			      guaranteed smaller than gamma.
+		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+		( Default: DROP_BASIC | DROP_AREA )
+	     5) options->ILU_Norm is the criterion of measuring the magnitude
+		of a row in a supernode of L. ( Default is INF_NORM )
+		options->ILU_Norm	RowSize(x[1:n])
+		=================	===============
+		ONE_NORM		||x||_1 / n
+		TWO_NORM		||x||_2 / sqrt(n)
+		INF_NORM		max{|x[i]|}
+	     6) options->ILU_MILU specifies the type of MILU's variation.
+		= SILU: do not perform Modified ILU;
+		= SMILU_1 (not recommended):
+		    U(i,i) := U(i,i) + sum(dropped entries);
+		= SMILU_2:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+		= SMILU_3:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+		NOTE: Even SMILU_1 does not preserve the column sum because of
+		late dropping.
+              ( Default: SILU )
+	     7) options->ILU_FillTol is used as the perturbation when
+		encountering zero pivots. If some U(i,i) = 0, so that U is
+		exactly singular, then
+		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+              ( Default: 1e-2 )</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+	to the transpose of A:</pre><p>
+<pre>	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A' is
+	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>	2.2. Permute columns of transpose(A) (rows of A),
+	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+	     usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the transpose(A) (after equilibration if
+	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+	     permutation Pr determined by partial pivoting.</pre><p>
+<pre>	2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+	     And info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	2.6. The system of equations is solved for X using the factored form
+	     of transpose(A).</pre><p>
+<pre>	2.7. If options->IterRefine is not used.</pre><p>
+<pre>	2.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the LU decomposition will be performed and how the
+	   system will be solved.</pre><p>
+<pre> A	   (input/output) SuperMatrix*
+	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+	   of the linear equations is A->nrow. Currently, the type of A can be:
+	   Stype = SLU_NC or SLU_NR, Dtype = SLU_S, Mtype = SLU_GE.
+	   In the future, more general A may be handled.</pre><p>
+<pre>	   On entry, If options->Fact = FACTORED and equed is not 'N',
+	   then A must have been equilibrated by the scaling factors in
+	   R and/or C.
+	   On exit, A is not modified
+         if options->Equil = NO, or
+         if options->Equil = YES but equed = 'N' on exit, or
+         if options->RowPerm = NO.</pre><p>
+<pre>	   Otherwise, if options->Equil = YES and equed is not 'N',
+	   A is scaled as follows:
+	   If A->Stype = SLU_NC:
+	     equed = 'R':  A := diag(R) * A
+	     equed = 'C':  A := A * diag(C)
+	     equed = 'B':  A := diag(R) * A * diag(C).
+	   If A->Stype = SLU_NR:
+	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre>         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+            the matrix to an I-matrix, that is A is modified as follows:
+            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+            off-diagonal entries of modulus at most 1. P is a permutation
+            obtained from MC64.
+            If MC64 fails, <a class="el" href="sgsequ_8c.html#d8a808e807e38c32c08cfbeadb088f08" title="Driver related.">sgsequ()</a> is used to equilibrate the system,
+            and A is scaled as above, but no permutation is involved.
+            On exit, A is restored to the orginal row numbering, so
+            Dr*A*Dc is returned.</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+	   which defines the permutation matrix Pc; perm_c[i] = j means
+	   column i of A is in position j in A*Pc.
+	   On exit, perm_c may be overwritten by the product of the input
+	   perm_c and a permutation that postorders the elimination tree
+	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+	   is already in postorder.</pre><p>
+<pre>	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+	   which describes permutation of columns of transpose(A) 
+	   (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+	   which defines the permutation matrix Pr, and is determined
+	   by MC64 first then followed by partial pivoting.
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+	   determines permutation of rows of transpose(A)
+	   (columns of A) as described above.</pre><p>
+<pre>	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	   will try to use the input perm_r, unless a certain threshold
+	   criterion is violated. In that case, perm_r is overwritten by a
+	   new permutation determined by partial pivoting or diagonal
+	   threshold pivoting.
+	   Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+	   Elimination tree of Pc'*A'*A*Pc.
+	   If options->Fact != FACTORED and options->Fact != DOFACT,
+	   etree is an input argument, otherwise it is an output argument.
+	   Note: etree is a vector of parent pointers for a forest whose
+	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+	   Specifies the form of equilibration that was done.
+	   = 'N': No equilibration.
+	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+	   = 'B': Both row and column equilibration, i.e., A was replaced 
+		  by diag(R)*A*diag(C).
+	   If options->Fact = FACTORED, equed is an input argument,
+	   otherwise it is an output argument.</pre><p>
+<pre> R	   (input/output) float*, dimension (A->nrow)
+	   The row scale factors for A or transpose(A).
+	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+	   If equed = 'N' or 'C', R is not accessed.
+	   If options->Fact = FACTORED, R is an input argument,
+	       otherwise, R is output.
+	   If options->Fact = FACTORED and equed = 'R' or 'B', each element
+	       of R must be positive.</pre><p>
+<pre> C	   (input/output) float*, dimension (A->ncol)
+	   The column scale factors for A or transpose(A).
+	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+	   If equed = 'N' or 'R', C is not accessed.
+	   If options->Fact = FACTORED, C is an input argument,
+	       otherwise, C is output.
+	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+	       of C must be positive.</pre><p>
+<pre> L	   (output) SuperMatrix*
+	   The factor L from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses compressed row subscripts storage for supernodes, i.e.,
+	   L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre> U	   (output) SuperMatrix*
+	   The factor U from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses column-wise storage scheme, i.e., U has types:
+	   Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+	   User supplied workspace, should be large enough
+	   to hold data structures for factors L and U.
+	   On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 mem_usage->total_needed; no other side effects.</pre><p>
+<pre>	   See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B	   (input/output) SuperMatrix*
+	   B has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+	   On entry, the right hand side matrix.
+	   If B->ncol = 0, only LU decomposition is performed, the triangular
+			   solve is skipped.
+	   On exit,
+	      if equed = 'N', B is not modified; otherwise
+	      if A->Stype = SLU_NC:
+		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+		    B is overwritten by diag(R)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+		    B is overwritten by diag(C)*B;
+	      if A->Stype = SLU_NR:
+		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+		    B is overwritten by diag(C)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+		    B is overwritten by diag(R)*B.</pre><p>
+<pre> X	   (output) SuperMatrix*
+	   X has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+	   to the original system of equations. Note that A and B are modified
+	   on exit if equed is not 'N', and the solution to the equilibrated
+	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+	   and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) float*
+	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+	   The infinity norm is used. If recip_pivot_growth is much less
+	   than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) float*
+	   The estimate of the reciprocal condition number of the matrix A
+	   after equilibration (if done). If rcond is less than the machine
+	   precision (in particular, if rcond = 0), the matrix is singular
+	   to working precision. This condition is indicated by a return
+	   code of info > 0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+	   Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+	     The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+	     The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+	     The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+	  Record the statistics on runtime and floating-point operation count.
+	  See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+	   > 0: if info = i, and i is
+		<= A->ncol: number of zero pivots. They are replaced by small
+		      entries due to options->ILU_FillTol.
+		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+		      precision, meaning that the matrix is singular to
+		      working precision. Nevertheless, the solution and
+		      error bounds are computed because there are a number
+		      of situations where the computed solution can be more
+		      accurate than the value of RCOND would suggest.
+		> A->ncol+1: number of bytes allocated when memory allocation
+		      failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sgsitrf_8c.html b/DOC/html/sgsitrf_8c.html
new file mode 100644
index 0000000..7917188
--- /dev/null
+++ b/DOC/html/sgsitrf_8c.html
@@ -0,0 +1,248 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sgsitrf.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sgsitrf.c File Reference</h1>Computes an ILU factorization of a general sparse matrix. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgsitrf_8c.html#25788392a605519048cafa995b641fcc">sgsitrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int panel_size, int *etree, void *work, int lwork, [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.1) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="25788392a605519048cafa995b641fcc"></a><!-- doxytag: member="sgsitrf.c::sgsitrf" ref="25788392a605519048cafa995b641fcc" args="(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size, int *etree, void *work, int lwork, int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgsitrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> SGSITRF computes an ILU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the ILU decomposition will be performed.</pre><p>
+<pre> A	    (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+	    (A->nrow, A->ncol). The type of A can be:
+	    Stype = SLU_NCP; Dtype = SLU_S; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+	    To control degree of relaxing supernodes. If the number
+	    of nodes (columns) in a subtree of the elimination tree is less
+	    than relax, this subtree is considered as one supernode,
+	    regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+	    A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+	    Elimination tree of A'*A.
+	    Note: etree is a vector of parent pointers for a forest whose
+	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+	    On input, the columns of A should be permuted so that the
+	    etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+	    User-supplied work space and space for the output data structures.
+	    Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the
+	    permutation matrix Pc; perm_c[i] = j means column i of A is
+	    in position j in A*Pc.
+	    When searching for diagonal, perm_c[*] is applied to the
+	    row subscripts of A, so that diagonal threshold pivoting
+	    can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+	    Row permutation vector which defines the permutation matrix Pr,
+	    perm_r[i] = j means row i of A is in position j in Pr*A.
+	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	       will try to use the input perm_r, unless a certain threshold
+	       criterion is violated. In that case, perm_r is overwritten by
+	       a new permutation determined by partial pivoting or diagonal
+	       threshold pivoting.
+	    Otherwise, perm_r is output argument;</pre><p>
+<pre> L	    (output) SuperMatrix*
+	    The factor L from the factorization Pr*A=L*U; use compressed row
+	    subscripts storage for supernodes, i.e., L has type:
+	    Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre> U	    (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+	    storage scheme, i.e., U has types: Stype = SLU_NC,
+	    Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+	    Record the statistics on runtime and floating-point operation count.
+	    See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+	    = 0: successful exit
+	    < 0: if info = -i, the i-th argument had an illegal value
+	    > 0: if info = i, and i is
+	       <= A->ncol: number of zero pivots. They are replaced by small
+		  entries according to options->ILU_FillTol.
+	       > A->ncol: number of bytes allocated when memory allocation
+		  failure occurred, plus A->ncol. If lwork = -1, it is
+		  the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays:
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 4 of them:
+	      marker/marker1 are used for panel dfs, see (ilu_)<a class="el" href="dpanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">dpanel_dfs.c</a>;
+	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+	      marker_relax(has its own space) is used for relaxed supernodes.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+	Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the
+	last column of a supernode.
+	The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+	supernodal representative r, repfnz[r] is the location of the first
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+	the panel diagonal. These are filled in during <a class="el" href="dpanel__dfs_8c.html#2a809488b87d2c1a9b2a574b726e8517">dpanel_dfs()</a>, and are
+	used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+		   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a>.
+	It is also used by the dropping routine <a class="el" href="ilu__ddrop__row_8c.html#380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sgsrfs_8c.html b/DOC/html/sgsrfs_8c.html
new file mode 100644
index 0000000..98f9f38
--- /dev/null
+++ b/DOC/html/sgsrfs_8c.html
@@ -0,0 +1,249 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sgsrfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sgsrfs.c File Reference</h1>Improves computed solution to a system of inear equations. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="sgsrfs_8c.html#3641b6d4c21b7a852dbb32c2b693302e">ITMAX</a>   5</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgsrfs_8c.html#a619758588187cd5ad69a10a808d18f6">sgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="structSuperMatrix.html"> [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Modified from lapack routine SGERFS
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="3641b6d4c21b7a852dbb32c2b693302e"></a><!-- doxytag: member="sgsrfs.c::ITMAX" ref="3641b6d4c21b7a852dbb32c2b693302e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ITMAX   5          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="a619758588187cd5ad69a10a808d18f6"></a><!-- doxytag: member="sgsrfs.c::sgsrfs" ref="a619758588187cd5ad69a10a808d18f6" args="(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U, int *perm_c, int *perm_r, char *equed, float *R, float *C, SuperMatrix *B, SuperMatrix *X, float *ferr, float *berr, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgsrfs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   SGSRFS improves the computed solution to a system of linear   
+   equations and provides error bounds and backward error estimates for 
+   the solution.</pre><p>
+<pre>   If equilibration was performed, the system becomes:
+           (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The original matrix A in the system, or the scaled A if
+           equilibration was done. The type of A can be:
+           Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_GE.</pre><p>
+<pre>   L       (input) SuperMatrix*
+	     The factor L from the factorization Pr*A*Pc=L*U. Use
+           compressed row subscripts storage for supernodes, 
+           i.e., L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre>   U       (input) SuperMatrix*
+           The factor U from the factorization Pr*A*Pc=L*U as computed by
+           <a class="el" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf()</a>. Use column-wise storage scheme, 
+           i.e., U has types: Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre>   perm_c  (input) int*, dimension (A->ncol)
+	     Column permutation vector, which defines the 
+           permutation matrix Pc; perm_c[i] = j means column i of A is 
+           in position j in A*Pc.</pre><p>
+<pre>   perm_r  (input) int*, dimension (A->nrow)
+           Row permutation vector, which defines the permutation matrix Pr;
+           perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>   equed   (input) Specifies the form of equilibration that was done.
+           = 'N': No equilibration.
+           = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+           = 'C': Column equilibration, i.e., A was postmultiplied by
+                  diag(C).
+           = 'B': Both row and column equilibration, i.e., A was replaced 
+                  by diag(R)*A*diag(C).</pre><p>
+<pre>   R       (input) float*, dimension (A->nrow)
+           The row scale factors for A.
+           If equed = 'R' or 'B', A is premultiplied by diag(R).
+           If equed = 'N' or 'C', R is not accessed.</pre><p>
+<pre>   C       (input) float*, dimension (A->ncol)
+           The column scale factors for A.
+           If equed = 'C' or 'B', A is postmultiplied by diag(C).
+           If equed = 'N' or 'R', C is not accessed.</pre><p>
+<pre>   B       (input) SuperMatrix*
+           B has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+           The right hand side matrix B.
+           if equed = 'R' or 'B', B is premultiplied by diag(R).</pre><p>
+<pre>   X       (input/output) SuperMatrix*
+           X has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+           On entry, the solution matrix X, as computed by <a class="el" href="sgstrs_8c.html#9b6e1e555af9cf109ef3a584054a91e2">sgstrs()</a>.
+           On exit, the improved solution matrix X.
+           if *equed = 'C' or 'B', X should be premultiplied by diag(C)
+               in order to obtain the solution to the original system.</pre><p>
+<pre>   FERR    (output) float*, dimension (B->ncol)   
+           The estimated forward error bound for each solution vector   
+           X(j) (the j-th column of the solution matrix X).   
+           If XTRUE is the true solution corresponding to X(j), FERR(j) 
+           is an estimated upper bound for the magnitude of the largest 
+           element in (X(j) - XTRUE) divided by the magnitude of the   
+           largest element in X(j).  The estimate is as reliable as   
+           the estimate for RCOND, and is almost always a slight   
+           overestimate of the true error.</pre><p>
+<pre>   BERR    (output) float*, dimension (B->ncol)   
+           The componentwise relative backward error of each solution   
+           vector X(j) (i.e., the smallest relative change in   
+           any element of A or B that makes X(j) an exact solution).</pre><p>
+<pre>   stat     (output) SuperLUStat_t*
+            Record the statistics on runtime and floating-point operation count.
+            See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre>   info    (output) int*   
+           = 0:  successful exit   
+            < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    Internal Parameters   
+    ===================</pre><p>
+<pre>    ITMAX is the maximum number of steps of iterative refinement.</pre><p>
+<pre> </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sgssv_8c.html b/DOC/html/sgssv_8c.html
new file mode 100644
index 0000000..31e9f3b
--- /dev/null
+++ b/DOC/html/sgssv_8c.html
@@ -0,0 +1,202 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sgssv.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sgssv.c File Reference</h1>Solves the system of linear equations A*X=B. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgssv_8c.html#6d5d8cc5159f2230fc059d0e382a63b8">sgssv</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *perm_r, <a class="el" href="structSuperMatrix.h [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver routines.  <a href="#6d5d8cc5159f2230fc059d0e382a63b8"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="6d5d8cc5159f2230fc059d0e382a63b8"></a><!-- doxytag: member="sgssv.c::sgssv" ref="6d5d8cc5159f2230fc059d0e382a63b8" args="(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U, SuperMatrix *B, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgssv           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> SGSSV solves the system of linear equations A*X=B, using the
+ LU factorization from SGSTRF. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. Permute the columns of A, forming A*Pc, where Pc
+           is a permutation matrix. For more details of this step, 
+           see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.2. Factor A as Pr*A*Pc=L*U with the permutation Pr determined
+           by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      1.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+      above algorithm to the transpose of A:</pre><p>
+<pre>      2.1. Permute columns of transpose(A) (rows of A),
+           forming transpose(A)*Pc, where Pc is a permutation matrix. 
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.2. Factor A as Pr*transpose(A)*Pc=L*U with the permutation Pr
+           determined by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      2.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR; Dtype = SLU_S; Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre> perm_c  (input/output) int*
+         If A->Stype = SLU_NC, column permutation vector of size A->ncol
+         which defines the permutation matrix Pc; perm_c[i] = j means 
+         column i of A is in position j in A*Pc.
+         If A->Stype = SLU_NR, column permutation vector of size A->nrow
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre>         If options->ColPerm = MY_PERMC or options->Fact = SamePattern or
+            options->Fact = SamePattern_SameRowPerm, it is an input argument.
+            On exit, perm_c may be overwritten by the product of the input
+            perm_c and a permutation that postorders the elimination tree
+            of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+            is already in postorder.
+         Otherwise, it is an output argument.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined 
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.
+         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->RowPerm = MY_PERMR or
+            options->Fact = SamePattern_SameRowPerm, perm_r is an
+            input argument.
+         otherwise it is an output argument.</pre><p>
+<pre> L       (output) SuperMatrix*
+         The factor L from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+         > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                so the solution could not be computed.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sgssvx_8c.html b/DOC/html/sgssvx_8c.html
new file mode 100644
index 0000000..7353ab1
--- /dev/null
+++ b/DOC/html/sgssvx_8c.html
@@ -0,0 +1,450 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sgssvx.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sgssvx.c File Reference</h1>Solves the system of linear equations A*X=B or A'*X=B. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgssvx_8c.html#f372ad744992d76301a23ae20a290b3c">sgssvx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *perm_r, int *etree, char *equed, float *R, fl [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="f372ad744992d76301a23ae20a290b3c"></a><!-- doxytag: member="sgssvx.c::sgssvx" ref="f372ad744992d76301a23ae20a290b3c" args="(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r, int *etree, char *equed, float *R, float *C, SuperMatrix *L, SuperMatrix *U, void *work, int lwork, SuperMatrix *B, SuperMatrix *X, float *recip_pivot_growth, float *rcond, float *ferr, float *berr, mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgssvx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> SGSSVX solves the system of linear equations A*X=B or A'*X=B, using
+ the LU factorization from <a class="el" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf()</a>. Error bounds on the solution and
+ a condition estimate are also provided. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A is
+           overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+           (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+           = TRANS or CONJ).</pre><p>
+<pre>      1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+           matrix that usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the matrix A (after equilibration if options->Equil = YES)
+           as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>      1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form of 
+           A is used to estimate the condition number of the matrix A. If
+           the reciprocal of the condition number is less than machine
+           precision, info = A->ncol+1 is returned as a warning, but the
+           routine still goes on to solve for X and computes error bounds
+           as described below.</pre><p>
+<pre>      1.6. The system of equations is solved for X using the factored form
+           of A.</pre><p>
+<pre>      1.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      1.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R)
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+      to the transpose of A:</pre><p>
+<pre>      2.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A' is
+           overwritten by diag(R)*A'*diag(C) and B by diag(R)*B 
+           (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>      2.2. Permute columns of transpose(A) (rows of A), 
+           forming transpose(A)*Pc, where Pc is a permutation matrix that 
+           usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the transpose(A) (after equilibration if 
+           options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+           permutation Pr determined by partial pivoting.</pre><p>
+<pre>      2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form 
+           of transpose(A) is used to estimate the condition number of the
+           matrix A. If the reciprocal of the condition number
+           is less than machine precision, info = A->nrow+1 is returned as
+           a warning, but the routine still goes on to solve for X and
+           computes error bounds as described below.</pre><p>
+<pre>      2.6. The system of equations is solved for X using the factored form
+           of transpose(A).</pre><p>
+<pre>      2.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      2.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R) 
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input/output) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of the linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR, Dtype = SLU_D, Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre>         On entry, If options->Fact = FACTORED and equed is not 'N', 
+         then A must have been equilibrated by the scaling factors in
+         R and/or C.  
+         On exit, A is not modified if options->Equil = NO, or if 
+         options->Equil = YES but equed = 'N' on exit.
+         Otherwise, if options->Equil = YES and equed is not 'N',
+         A is scaled as follows:
+         If A->Stype = SLU_NC:
+           equed = 'R':  A := diag(R) * A
+           equed = 'C':  A := A * diag(C)
+           equed = 'B':  A := diag(R) * A * diag(C).
+         If A->Stype = SLU_NR:
+           equed = 'R':  transpose(A) := diag(R) * transpose(A)
+           equed = 'C':  transpose(A) := transpose(A) * diag(C)
+           equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+         which defines the permutation matrix Pc; perm_c[i] = j means
+         column i of A is in position j in A*Pc.
+         On exit, perm_c may be overwritten by the product of the input
+         perm_c and a permutation that postorders the elimination tree
+         of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+         is already in postorder.</pre><p>
+<pre>         If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.</pre><p>
+<pre>         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+         will try to use the input perm_r, unless a certain threshold
+         criterion is violated. In that case, perm_r is overwritten by a
+         new permutation determined by partial pivoting or diagonal
+         threshold pivoting.
+         Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+         Elimination tree of Pc'*A'*A*Pc.
+         If options->Fact != FACTORED and options->Fact != DOFACT,
+         etree is an input argument, otherwise it is an output argument.
+         Note: etree is a vector of parent pointers for a forest whose
+         vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+         Specifies the form of equilibration that was done.
+         = 'N': No equilibration.
+         = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+         = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+         = 'B': Both row and column equilibration, i.e., A was replaced 
+                by diag(R)*A*diag(C).
+         If options->Fact = FACTORED, equed is an input argument,
+         otherwise it is an output argument.</pre><p>
+<pre> R       (input/output) float*, dimension (A->nrow)
+         The row scale factors for A or transpose(A).
+         If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+         If equed = 'N' or 'C', R is not accessed.
+         If options->Fact = FACTORED, R is an input argument,
+             otherwise, R is output.
+         If options->zFact = FACTORED and equed = 'R' or 'B', each element
+             of R must be positive.</pre><p>
+<pre> C       (input/output) float*, dimension (A->ncol)
+         The column scale factors for A or transpose(A).
+         If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+         If equed = 'N' or 'R', C is not accessed.
+         If options->Fact = FACTORED, C is an input argument,
+             otherwise, C is output.
+         If options->Fact = FACTORED and equed = 'C' or 'B', each element
+             of C must be positive.</pre><p>
+<pre> L       (output) SuperMatrix*
+	   The factor L from the factorization
+             Pr*A*Pc=L*U              (if A->Stype SLU_= NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+         User supplied workspace, should be large enough
+         to hold data structures for factors L and U.
+         On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               mem_usage->total_needed; no other side effects.</pre><p>
+<pre>         See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         If B->ncol = 0, only LU decomposition is performed, the triangular
+                         solve is skipped.
+         On exit,
+            if equed = 'N', B is not modified; otherwise
+            if A->Stype = SLU_NC:
+               if options->Trans = NOTRANS and equed = 'R' or 'B',
+                  B is overwritten by diag(R)*B;
+               if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+                  B is overwritten by diag(C)*B;
+            if A->Stype = SLU_NR:
+               if options->Trans = NOTRANS and equed = 'C' or 'B',
+                  B is overwritten by diag(C)*B;
+               if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+                  B is overwritten by diag(R)*B.</pre><p>
+<pre> X       (output) SuperMatrix*
+         X has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE. 
+         If info = 0 or info = A->ncol+1, X contains the solution matrix
+         to the original system of equations. Note that A and B are modified
+         on exit if equed is not 'N', and the solution to the equilibrated
+         system is inv(diag(C))*X if options->Trans = NOTRANS and
+         equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+         and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) float*
+         The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+         The infinity norm is used. If recip_pivot_growth is much less
+         than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) float*
+         The estimate of the reciprocal condition number of the matrix A
+         after equilibration (if done). If rcond is less than the machine
+         precision (in particular, if rcond = 0), the matrix is singular
+         to working precision. This condition is indicated by a return
+         code of info > 0.</pre><p>
+<pre> FERR    (output) float*, dimension (B->ncol)   
+         The estimated forward error bound for each solution vector   
+         X(j) (the j-th column of the solution matrix X).   
+         If XTRUE is the true solution corresponding to X(j), FERR(j) 
+         is an estimated upper bound for the magnitude of the largest 
+         element in (X(j) - XTRUE) divided by the magnitude of the   
+         largest element in X(j).  The estimate is as reliable as   
+         the estimate for RCOND, and is almost always a slight   
+         overestimate of the true error.
+         If options->IterRefine = NOREFINE, ferr = 1.0.</pre><p>
+<pre> BERR    (output) float*, dimension (B->ncol)
+         The componentwise relative backward error of each solution   
+         vector X(j) (i.e., the smallest relative change in   
+         any element of A or B that makes X(j) an exact solution).
+         If options->IterRefine = NOREFINE, berr = 1.0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+         Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+           The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+           The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+           The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+         = 0: successful exit   
+         < 0: if info = -i, the i-th argument had an illegal value   
+         > 0: if info = i, and i is   
+              <= A->ncol: U(i,i) is exactly zero. The factorization has   
+                    been completed, but the factor U is exactly   
+                    singular, so the solution and error bounds   
+                    could not be computed.   
+              = A->ncol+1: U is nonsingular, but RCOND is less than machine
+                    precision, meaning that the matrix is singular to
+                    working precision. Nevertheless, the solution and
+                    error bounds are computed because there are a number
+                    of situations where the computed solution can be more
+                    accurate than the value of RCOND would suggest.   
+              > A->ncol+1: number of bytes allocated when memory allocation
+                    failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sgstrf_8c.html b/DOC/html/sgstrf_8c.html
new file mode 100644
index 0000000..c9c19d8
--- /dev/null
+++ b/DOC/html/sgstrf_8c.html
@@ -0,0 +1,261 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sgstrf.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sgstrf.c File Reference</h1>Computes an LU factorization of a general sparse matrix. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int panel_size, int *etree, void *work, int lwork, i [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="2428d5d7ef46cf9a08069d9f55901284"></a><!-- doxytag: member="sgstrf.c::sgstrf" ref="2428d5d7ef46cf9a08069d9f55901284" args="(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size, int *etree, void *work, int lwork, int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgstrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> SGSTRF computes an LU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper 
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = SLU_NCP; Dtype = SLU_S; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+          To control degree of relaxing supernodes. If the number
+          of nodes (columns) in a subtree of the elimination tree is less
+          than relax, this subtree is considered as one supernode,
+          regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+          A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+          Elimination tree of A'*A.
+          Note: etree is a vector of parent pointers for a forest whose
+          vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+          On input, the columns of A should be permuted so that the
+          etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+          User-supplied work space and space for the output data structures.
+          Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the 
+          permutation matrix Pc; perm_c[i] = j means column i of A is 
+          in position j in A*Pc.
+          When searching for diagonal, perm_c[*] is applied to the
+          row subscripts of A, so that diagonal threshold pivoting
+          can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+          Row permutation vector which defines the permutation matrix Pr,
+          perm_r[i] = j means row i of A is in position j in Pr*A.
+          If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+             will try to use the input perm_r, unless a certain threshold
+             criterion is violated. In that case, perm_r is overwritten by
+             a new permutation determined by partial pivoting or diagonal
+             threshold pivoting.
+          Otherwise, perm_r is output argument;</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = SLU_NC, 
+          Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+          = 0: successful exit
+          < 0: if info = -i, the i-th argument had an illegal value
+          > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                and division by zero will occur if it is used to solve a
+                system of equations.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol. If lwork = -1, it is
+                the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays: 
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   xprune[0:n-1]: xprune[*] points to locations in subscript 
+	vector lsub[*]. For column i, xprune[i] denotes the point where 
+	structural pruning begins. I.e. only xlsub[i],..,xprune[i]-1 need 
+	to be traversed for symbolic factorization.</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been 
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 3 of them: marker/marker1 are used for panel dfs, 
+	      see <a class="el" href="spanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">spanel_dfs.c</a>; marker2 is used for inner-factorization,
+            see <a class="el" href="scolumn__dfs_8c.html" title="Performs a symbolic factorization.">scolumn_dfs.c</a>.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+      Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs) 
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the 
+	last column of a supernode.
+      The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a 
+	supernodal representative r, repfnz[r] is the location of the first 
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below 
+      the panel diagonal. These are filled in during <a class="el" href="slu__sdefs_8h.html#77baf210393e04fa71d4e73b5e60e556">spanel_dfs()</a>, and are
+      used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+	    	   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__sdefs_8h.html" title="Header file for real operations.">slu_sdefs.h</a>.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sgstrs_8c.html b/DOC/html/sgstrs_8c.html
new file mode 100644
index 0000000..723de05
--- /dev/null
+++ b/DOC/html/sgstrs_8c.html
@@ -0,0 +1,332 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sgstrs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sgstrs.c File Reference</h1>Solves a system using LU factorization. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgstrs_8c.html#25ea48f4f948c68a423f5bd3929e3c1f">susolve</a> (int, int, float *, float *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#25ea48f4f948c68a423f5bd3929e3c1f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgstrs_8c.html#a8bbeb2abbd5a10ac13fa9b48504691c">slsolve</a> (int, int, float *, float *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#a8bbeb2abbd5a10ac13fa9b48504691c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgstrs_8c.html#b452e957171a4d0d9cfe6abb3d8a950c">smatvec</a> (int, int, int, float *, float *, float *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#b452e957171a4d0d9cfe6abb3d8a950c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgstrs_8c.html#9b6e1e555af9cf109ef3a584054a91e2">sgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, int *perm_c, int *perm_r, <a class="el" href="structSuperMatri [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgstrs_8c.html#d582f185cce067a3f9dd4225248af758">sprint_soln</a> (int n, int nrhs, float *soln)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="9b6e1e555af9cf109ef3a584054a91e2"></a><!-- doxytag: member="sgstrs.c::sgstrs" ref="9b6e1e555af9cf109ef3a584054a91e2" args="(trans_t trans, SuperMatrix *L, SuperMatrix *U, int *perm_c, int *perm_r, SuperMatrix *B, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgstrs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> SGSTRS solves a system of linear equations A*X=B or A'*X=B
+ with A sparse and B dense, using the LU factorization computed by
+ SGSTRF.</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre> L       (input) SuperMatrix*
+         The factor L from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf()</a>. Use compressed row subscripts storage for supernodes,
+         i.e., L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (input) SuperMatrix*
+         The factor U from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre> perm_c  (input) int*, dimension (L->ncol)
+	   Column permutation vector, which defines the 
+         permutation matrix Pc; perm_c[i] = j means column i of A is 
+         in position j in A*Pc.</pre><p>
+<pre> perm_r  (input) int*, dimension (L->nrow)
+         Row permutation vector, which defines the permutation matrix Pr; 
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+ 	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="a8bbeb2abbd5a10ac13fa9b48504691c"></a><!-- doxytag: member="sgstrs.c::slsolve" ref="a8bbeb2abbd5a10ac13fa9b48504691c" args="(int, int, float *, float *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void slsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="b452e957171a4d0d9cfe6abb3d8a950c"></a><!-- doxytag: member="sgstrs.c::smatvec" ref="b452e957171a4d0d9cfe6abb3d8a950c" args="(int, int, int, float *, float *, float *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void smatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="d582f185cce067a3f9dd4225248af758"></a><!-- doxytag: member="sgstrs.c::sprint_soln" ref="d582f185cce067a3f9dd4225248af758" args="(int n, int nrhs, float *soln)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sprint_soln           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>soln</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="25ea48f4f948c68a423f5bd3929e3c1f"></a><!-- doxytag: member="sgstrs.c::susolve" ref="25ea48f4f948c68a423f5bd3929e3c1f" args="(int, int, float *, float *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void susolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sitersol1_8c.html b/DOC/html/sitersol1_8c.html
new file mode 100644
index 0000000..8c36d8c
--- /dev/null
+++ b/DOC/html/sitersol1_8c.html
@@ -0,0 +1,367 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/sitersol1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/sitersol1.c File Reference</h1>Example #2 showing how to use ILU to precondition GMRES. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#ba0747af8c12b8617ee149febff83471">spsolve</a> (int n, float x[], float y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#d45b4dfe6fd3558b4c213cc08128d3a1">smatvec_mult</a> (float alpha, float x[], float beta, float y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">GLOBAL_EQUED</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#4ff9f80047e0b810344d85feb96941ef">GLOBAL_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#3e8f028a8a340f260f7ac67973072999">GLOBAL_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">GLOBAL_A_ORIG</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.2) --
+ Lawrence Berkeley National Laboratory
+ November, 2010
+ August, 2011</pre><p>
+<pre> This example shows that ILU is computed from the equilibrated matrix,
+ but the preconditioned GMRES is applied to the original system.
+ The driver routine SGSISX is called twice to perform factorization
+ and apply preconditioner separately.</pre><p>
+<pre> Note that SGSISX performs the following factorization:
+     Pr*Dr*A*Dc*Pc^T ~= LU
+ with Pr being obtained from MC64 statically then partial pivoting
+ dybamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><p>
+<pre> We need to save a copy of the original matrix A, then solve
+ the original system, A*x = B, using FGMRES.
+ Each GMRES step requires requires 2 procedures:
+   1) Apply preconditioner M^{-1} = Dc*Pc^T*U^{-1}*L^{-1}*Pr*Dr
+   2) Matrix-vector multiplication: w = A*v</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="sitersol1.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d45b4dfe6fd3558b4c213cc08128d3a1"></a><!-- doxytag: member="sitersol1.c::smatvec_mult" ref="d45b4dfe6fd3558b4c213cc08128d3a1" args="(float alpha, float x[], float beta, float y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void smatvec_mult           </td>
+          <td>(</td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ba0747af8c12b8617ee149febff83471"></a><!-- doxytag: member="sitersol1.c::spsolve" ref="ba0747af8c12b8617ee149febff83471" args="(int n, float x[], float y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void spsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="d42e5c3013507184841cdfee652a0c18"></a><!-- doxytag: member="sitersol1.c::GLOBAL_A" ref="d42e5c3013507184841cdfee652a0c18" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* <a class="el" href="zitersol1_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f1beb2a8fb47df4eb505addfef02814c"></a><!-- doxytag: member="sitersol1.c::GLOBAL_A_ORIG" ref="f1beb2a8fb47df4eb505addfef02814c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">GLOBAL_A_ORIG</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3e8f028a8a340f260f7ac67973072999"></a><!-- doxytag: member="sitersol1.c::GLOBAL_C" ref="3e8f028a8a340f260f7ac67973072999" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float * <a class="el" href="zitersol1_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="869338b25a186a486edd0cf1850a7fbb"></a><!-- doxytag: member="sitersol1.c::GLOBAL_EQUED" ref="869338b25a186a486edd0cf1850a7fbb" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* <a class="el" href="zitersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">GLOBAL_EQUED</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0f5cf27b325ef2874c953290f74c9d0a"></a><!-- doxytag: member="sitersol1.c::GLOBAL_L" ref="0f5cf27b325ef2874c953290f74c9d0a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="19718c440adb41fbebcb4bafedbf932c"></a><!-- doxytag: member="sitersol1.c::GLOBAL_MEM_USAGE" ref="19718c440adb41fbebcb4bafedbf932c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structmem__usage__t.html">mem_usage_t</a>* <a class="el" href="zitersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="64b516645b16ef03c6fd0d692e6eb277"></a><!-- doxytag: member="sitersol1.c::GLOBAL_OPTIONS" ref="64b516645b16ef03c6fd0d692e6eb277" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a>* <a class="el" href="zitersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fbcb1904a71d92b04c1aef1cede6c4b1"></a><!-- doxytag: member="sitersol1.c::GLOBAL_PERM_C" ref="fbcb1904a71d92b04c1aef1cede6c4b1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="zitersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5a42ee721355f1c852f770661834be93"></a><!-- doxytag: member="sitersol1.c::GLOBAL_PERM_R" ref="5a42ee721355f1c852f770661834be93" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int * <a class="el" href="zitersol1_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4ff9f80047e0b810344d85feb96941ef"></a><!-- doxytag: member="sitersol1.c::GLOBAL_R" ref="4ff9f80047e0b810344d85feb96941ef" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float* <a class="el" href="zitersol1_8c.html#8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="96a062252c26544370e8feae987c6d16"></a><!-- doxytag: member="sitersol1.c::GLOBAL_STAT" ref="96a062252c26544370e8feae987c6d16" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* <a class="el" href="zitersol1_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="000ad5c2198e4309802b4478ed08a98c"></a><!-- doxytag: member="sitersol1.c::GLOBAL_U" ref="000ad5c2198e4309802b4478ed08a98c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sitersol_8c.html b/DOC/html/sitersol_8c.html
new file mode 100644
index 0000000..296f697
--- /dev/null
+++ b/DOC/html/sitersol_8c.html
@@ -0,0 +1,333 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/sitersol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/sitersol.c File Reference</h1>Example #1 showing how to use ILU to precondition GMRES. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#ba0747af8c12b8617ee149febff83471">spsolve</a> (int n, float x[], float y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#d45b4dfe6fd3558b4c213cc08128d3a1">smatvec_mult</a> (float alpha, float x[], float beta, float y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#4ff9f80047e0b810344d85feb96941ef">GLOBAL_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#3e8f028a8a340f260f7ac67973072999">GLOBAL_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.2) --
+ Lawrence Berkeley National Laboratory
+ November, 2010
+ August, 2011</pre><p>
+<pre> This example shows that ILU is computed from the equilibrated matrix,
+ and the preconditioned GMRES is applied to the equilibrated system.
+ The driver routine SGSISX is called twice to perform factorization
+ and apply preconditioner separately.</pre><p>
+<pre> Note that SGSISX performs the following factorization:
+     Pr*Dr*A*Dc*Pc^T ~= LU
+ with Pr being obtained from MC64 statically then partial pivoting
+ dybamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><p>
+<pre> We can solve the transformed system, A1*y = Dr*B, using FGMRES.
+ B is first overwritten as Dr*B.
+ Then GMRES step requires requires 2 procedures:
+   1) Apply preconditioner M^{-1} = Pc^T*U^{-1}*L^{-1}*Pr
+   2) Matrix-vector multiplication: w = A1*v</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="sitersol.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d45b4dfe6fd3558b4c213cc08128d3a1"></a><!-- doxytag: member="sitersol.c::smatvec_mult" ref="d45b4dfe6fd3558b4c213cc08128d3a1" args="(float alpha, float x[], float beta, float y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void smatvec_mult           </td>
+          <td>(</td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ba0747af8c12b8617ee149febff83471"></a><!-- doxytag: member="sitersol.c::spsolve" ref="ba0747af8c12b8617ee149febff83471" args="(int n, float x[], float y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void spsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="d42e5c3013507184841cdfee652a0c18"></a><!-- doxytag: member="sitersol.c::GLOBAL_A" ref="d42e5c3013507184841cdfee652a0c18" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* <a class="el" href="zitersol1_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3e8f028a8a340f260f7ac67973072999"></a><!-- doxytag: member="sitersol.c::GLOBAL_C" ref="3e8f028a8a340f260f7ac67973072999" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float * <a class="el" href="zitersol1_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0f5cf27b325ef2874c953290f74c9d0a"></a><!-- doxytag: member="sitersol.c::GLOBAL_L" ref="0f5cf27b325ef2874c953290f74c9d0a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="19718c440adb41fbebcb4bafedbf932c"></a><!-- doxytag: member="sitersol.c::GLOBAL_MEM_USAGE" ref="19718c440adb41fbebcb4bafedbf932c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structmem__usage__t.html">mem_usage_t</a>* <a class="el" href="zitersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="64b516645b16ef03c6fd0d692e6eb277"></a><!-- doxytag: member="sitersol.c::GLOBAL_OPTIONS" ref="64b516645b16ef03c6fd0d692e6eb277" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a>* <a class="el" href="zitersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fbcb1904a71d92b04c1aef1cede6c4b1"></a><!-- doxytag: member="sitersol.c::GLOBAL_PERM_C" ref="fbcb1904a71d92b04c1aef1cede6c4b1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="zitersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5a42ee721355f1c852f770661834be93"></a><!-- doxytag: member="sitersol.c::GLOBAL_PERM_R" ref="5a42ee721355f1c852f770661834be93" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int * <a class="el" href="zitersol1_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4ff9f80047e0b810344d85feb96941ef"></a><!-- doxytag: member="sitersol.c::GLOBAL_R" ref="4ff9f80047e0b810344d85feb96941ef" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float* <a class="el" href="zitersol1_8c.html#8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="96a062252c26544370e8feae987c6d16"></a><!-- doxytag: member="sitersol.c::GLOBAL_STAT" ref="96a062252c26544370e8feae987c6d16" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* <a class="el" href="zitersol1_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="000ad5c2198e4309802b4478ed08a98c"></a><!-- doxytag: member="sitersol.c::GLOBAL_U" ref="000ad5c2198e4309802b4478ed08a98c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slacon_8c.html b/DOC/html/slacon_8c.html
new file mode 100644
index 0000000..96daaca
--- /dev/null
+++ b/DOC/html/slacon_8c.html
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slacon.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/slacon.c File Reference</h1>Estimates the 1-norm. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slacon_8c.html#51b3babab7bbf03500dbc5ede2a682b3">d_sign</a>(a, b)   (b >= 0 ? fabs(a) : -fabs(a))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slacon_8c.html#dccc1e5692ca1dd160d0ca2a17e1b12c">i_dnnt</a>(a)   ( a>=0 ? floor(a+.5) : -floor(.5-a) )</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slacon_8c.html#865b6cfd089f47842f95ecfcb1c88355">slacon_</a> (int *n, float *v, float *x, int *isgn, float *est, int *kase)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="51b3babab7bbf03500dbc5ede2a682b3"></a><!-- doxytag: member="slacon.c::d_sign" ref="51b3babab7bbf03500dbc5ede2a682b3" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define d_sign          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   (b >= 0 ? fabs(a) : -fabs(a))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="dccc1e5692ca1dd160d0ca2a17e1b12c"></a><!-- doxytag: member="slacon.c::i_dnnt" ref="dccc1e5692ca1dd160d0ca2a17e1b12c" args="(a)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define i_dnnt          </td>
+          <td>(</td>
+          <td class="paramtype">a </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( a>=0 ? floor(a+.5) : -floor(.5-a) )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="865b6cfd089f47842f95ecfcb1c88355"></a><!-- doxytag: member="slacon.c::slacon_" ref="865b6cfd089f47842f95ecfcb1c88355" args="(int *n, float *v, float *x, int *isgn, float *est, int *kase)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int slacon_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>v</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>isgn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>est</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>kase</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   SLACON estimates the 1-norm of a square matrix A.   
+   Reverse communication is used for evaluating matrix-vector products.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   N      (input) INT
+          The order of the matrix.  N >= 1.</pre><p>
+<pre>   V      (workspace) FLOAT PRECISION array, dimension (N)   
+          On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
+          (W is not returned).</pre><p>
+<pre>   X      (input/output) FLOAT PRECISION array, dimension (N)   
+          On an intermediate return, X should be overwritten by   
+                A * X,   if KASE=1,   
+                A' * X,  if KASE=2,
+         and SLACON must be re-called with all the other parameters   
+          unchanged.</pre><p>
+<pre>   ISGN   (workspace) INT array, dimension (N)</pre><p>
+<pre>   EST    (output) FLOAT PRECISION   
+          An estimate (a lower bound) for norm(A).</pre><p>
+<pre>   KASE   (input/output) INT
+          On the initial call to SLACON, KASE should be 0.   
+          On an intermediate return, KASE will be 1 or 2, indicating   
+          whether X should be overwritten by A * X  or A' * X.   
+          On the final return from SLACON, KASE will again be 0.</pre><p>
+<pre>   Further Details   
+   ======= =======</pre><p>
+<pre>   Contributed by Nick Higham, University of Manchester.   
+   Originally named CONEST, dated March 16, 1988.</pre><p>
+<pre>   Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
+   a real or <a class="el" href="structcomplex.html">complex</a> matrix, with applications to condition estimation", 
+   ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
+   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slamch_8c.html b/DOC/html/slamch_8c.html
new file mode 100644
index 0000000..764b8bd
--- /dev/null
+++ b/DOC/html/slamch_8c.html
@@ -0,0 +1,606 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slamch.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/slamch.c File Reference</h1>Determines single precision machine parameters and other service routines. <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slamch_8c.html#ca1e6c3771fa0306e1dad2b11d22a8e5">TRUE_</a>   (1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slamch_8c.html#d4986ecbba005b963f63a85f7c8c281d">FALSE_</a>   (0)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slamch_8c.html#c6afabdc09a49a433ee19d8a9486056d">min</a>(a, b)   ((a) <= (b) ? (a) : (b))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max</a>(a, b)   ((a) >= (b) ? (a) : (b))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs</a>(x)   ((x) >= 0 ? (x) : -(x))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slamch_8c.html#d1f46d2294c121413c66c8777190a874">dabs</a>(x)   (double)abs(x)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="slamch_8c.html#5458a369e694e54bb5758774f492b6cb">slamch_</a> (char *cmach)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slamch_8c.html#865afb9b3184a99ab01e8d34b147f227">slamc1_</a> (int *beta, int *t, int *rnd, int *ieee1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slamch_8c.html#13ac82b8c5bbb0c2392aefba4177e4fc">slamc2_</a> (int *beta, int *t, int *rnd, float *eps, int *emin, float *rmin, int *emax, float *rmax)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slamch_8c.html#a422da346f4ae26603bbc9b657191e5f">slamc3_</a> (float *a, float *b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slamch_8c.html#0f5092460355cf3d3461688e37cc70a0">slamc4_</a> (int *emin, float *start, int *base)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slamch_8c.html#ed7eefa5a851c36909eee77beed124b0">slamc5_</a> (int *beta, int *p, int *emin, int *ieee, int *emax, float *rmax)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slamch_8c.html#ace5d2e6dbf9c872b611447aa01539c8">pow_ri</a> (float *ap, int *bp)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+   -- LAPACK auxiliary routine (version 2.0) --   
+      Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
+      Courant Institute, Argonne National Lab, and Rice University   
+      October 31, 1992   
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="3aa069ac3980707dae1e0530f50d59e4"></a><!-- doxytag: member="slamch.c::abs" ref="3aa069ac3980707dae1e0530f50d59e4" args="(x)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define abs          </td>
+          <td>(</td>
+          <td class="paramtype">x </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((x) >= 0 ? (x) : -(x))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d1f46d2294c121413c66c8777190a874"></a><!-- doxytag: member="slamch.c::dabs" ref="d1f46d2294c121413c66c8777190a874" args="(x)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define dabs          </td>
+          <td>(</td>
+          <td class="paramtype">x </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   (double)abs(x)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d4986ecbba005b963f63a85f7c8c281d"></a><!-- doxytag: member="slamch.c::FALSE_" ref="d4986ecbba005b963f63a85f7c8c281d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FALSE_   (0)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ffe776513b24d84b39af8ab0930fef7f"></a><!-- doxytag: member="slamch.c::max" ref="ffe776513b24d84b39af8ab0930fef7f" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define max          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((a) >= (b) ? (a) : (b))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c6afabdc09a49a433ee19d8a9486056d"></a><!-- doxytag: member="slamch.c::min" ref="c6afabdc09a49a433ee19d8a9486056d" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define min          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((a) <= (b) ? (a) : (b))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ca1e6c3771fa0306e1dad2b11d22a8e5"></a><!-- doxytag: member="slamch.c::TRUE_" ref="ca1e6c3771fa0306e1dad2b11d22a8e5" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TRUE_   (1)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="ace5d2e6dbf9c872b611447aa01539c8"></a><!-- doxytag: member="slamch.c::pow_ri" ref="ace5d2e6dbf9c872b611447aa01539c8" args="(float *ap, int *bp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double pow_ri           </td>
+          <td>(</td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>ap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>bp</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="865afb9b3184a99ab01e8d34b147f227"></a><!-- doxytag: member="slamch.c::slamc1_" ref="865afb9b3184a99ab01e8d34b147f227" args="(int *beta, int *t, int *rnd, int *ieee1)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int slamc1_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>t</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>ieee1</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+    =======</pre><p>
+<pre>    SLAMC1 determines the machine parameters given by BETA, T, RND, and   
+    IEEE1.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    BETA    (output) INT   
+            The base of the machine.</pre><p>
+<pre>    T       (output) INT   
+            The number of ( BETA ) digits in the mantissa.</pre><p>
+<pre>    RND     (output) INT   
+            Specifies whether proper rounding  ( RND = .TRUE. )  or   
+            chopping  ( RND = .FALSE. )  occurs in addition. This may not</pre><p>
+<pre>            be a reliable guide to the way in which the machine performs</pre><p>
+<pre>            its arithmetic.</pre><p>
+<pre>    IEEE1   (output) INT   
+            Specifies whether rounding appears to be done in the IEEE   
+            'round to nearest' style.</pre><p>
+<pre>    Further Details   
+    ===============</pre><p>
+<pre>    The routine is based on the routine  ENVRON  by Malcolm and   
+    incorporates suggestions by Gentleman and Marovich. See</pre><p>
+<pre>       Malcolm M. A. (1972) Algorithms to reveal properties of   
+          floating-point arithmetic. Comms. of the ACM, 15, 949-951.</pre><p>
+<pre>       Gentleman W. M. and Marovich S. B. (1974) More on algorithms   
+          that reveal properties of floating point arithmetic units.   
+          Comms. of the ACM, 17, 276-277.</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="13ac82b8c5bbb0c2392aefba4177e4fc"></a><!-- doxytag: member="slamch.c::slamc2_" ref="13ac82b8c5bbb0c2392aefba4177e4fc" args="(int *beta, int *t, int *rnd, float *eps, int *emin, float *rmin, int *emax, float *rmax)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int slamc2_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>t</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>eps</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>emin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rmin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>emax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rmax</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    SLAMC2 determines the machine parameters specified in its argument   
+    list.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    BETA    (output) INT   
+            The base of the machine.</pre><p>
+<pre>    T       (output) INT   
+            The number of ( BETA ) digits in the mantissa.</pre><p>
+<pre>    RND     (output) INT   
+            Specifies whether proper rounding  ( RND = .TRUE. )  or   
+            chopping  ( RND = .FALSE. )  occurs in addition. This may not</pre><p>
+<pre>            be a reliable guide to the way in which the machine performs</pre><p>
+<pre>            its arithmetic.</pre><p>
+<pre>    EPS     (output) FLOAT   
+            The smallest positive number such that</pre><p>
+<pre>               fl( 1.0 - EPS ) .LT. 1.0,</pre><p>
+<pre>            where fl denotes the computed value.</pre><p>
+<pre>    EMIN    (output) INT   
+            The minimum exponent before (gradual) underflow occurs.</pre><p>
+<pre>    RMIN    (output) FLOAT   
+            The smallest normalized number for the machine, given by   
+            BASE**( EMIN - 1 ), where  BASE  is the floating point value</pre><p>
+<pre>            of BETA.</pre><p>
+<pre>    EMAX    (output) INT   
+            The maximum exponent before overflow occurs.</pre><p>
+<pre>    RMAX    (output) FLOAT   
+            The largest positive number for the machine, given by   
+            BASE**EMAX * ( 1 - EPS ), where  BASE  is the floating point</pre><p>
+<pre>            value of BETA.</pre><p>
+<pre>    Further Details   
+    ===============</pre><p>
+<pre>    The computation of  EPS  is based on a routine PARANOIA by   
+    W. Kahan of the University of California at Berkeley.</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="a422da346f4ae26603bbc9b657191e5f"></a><!-- doxytag: member="slamch.c::slamc3_" ref="a422da346f4ae26603bbc9b657191e5f" args="(float *a, float *b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double slamc3_           </td>
+          <td>(</td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>b</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    SLAMC3  is intended to force  A  and  B  to be stored prior to doing</pre><p>
+<pre>    the addition of  A  and  B ,  for use in situations where optimizers</pre><p>
+<pre>    might hold one of these in a register.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    A, B    (input) FLOAT   
+            The values A and B.</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="0f5092460355cf3d3461688e37cc70a0"></a><!-- doxytag: member="slamch.c::slamc4_" ref="0f5092460355cf3d3461688e37cc70a0" args="(int *emin, float *start, int *base)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int slamc4_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>emin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>start</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>base</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    SLAMC4 is a service routine for SLAMC2.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    EMIN    (output) EMIN   
+            The minimum exponent before (gradual) underflow, computed by</pre><p>
+<pre>            setting A = START and dividing by BASE until the previous A   
+            can not be recovered.</pre><p>
+<pre>    START   (input) FLOAT   
+            The starting point for determining EMIN.</pre><p>
+<pre>    BASE    (input) INT   
+            The base of the machine.</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="ed7eefa5a851c36909eee77beed124b0"></a><!-- doxytag: member="slamch.c::slamc5_" ref="ed7eefa5a851c36909eee77beed124b0" args="(int *beta, int *p, int *emin, int *ieee, int *emax, float *rmax)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int slamc5_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>emin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>ieee</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>emax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rmax</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    SLAMC5 attempts to compute RMAX, the largest machine floating-point   
+    number, without overflow.  It assumes that EMAX + <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(EMIN)</a> sum   
+    approximately to a power of 2.  It will fail on machines where this   
+    assumption does not hold, for example, the Cyber 205 (EMIN = -28625,</pre><p>
+<pre>    EMAX = 28718).  It will also fail if the value supplied for EMIN is   
+    too large (i.e. too close to zero), probably with overflow.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    BETA    (input) INT   
+            The base of floating-point arithmetic.</pre><p>
+<pre>    P       (input) INT   
+            The number of base BETA digits in the mantissa of a   
+            floating-point value.</pre><p>
+<pre>    EMIN    (input) INT   
+            The minimum exponent before (gradual) underflow.</pre><p>
+<pre>    IEEE    (input) INT   
+            A logical flag specifying whether or not the arithmetic   
+            system is thought to comply with the IEEE standard.</pre><p>
+<pre>    EMAX    (output) INT   
+            The largest exponent before overflow</pre><p>
+<pre>    RMAX    (output) FLOAT   
+            The largest machine floating-point number.</pre><p>
+<pre>   =====================================================================</pre><p>
+<pre>       First compute LEXP and UEXP, two powers of 2 that bound   
+       <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(EMIN)</a>. We then assume that EMAX + <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(EMIN)</a> will sum   
+       approximately to the bound that is closest to <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(EMIN)</a>.   
+       (EMAX is the exponent of the required number RMAX). 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="5458a369e694e54bb5758774f492b6cb"></a><!-- doxytag: member="slamch.c::slamch_" ref="5458a369e694e54bb5758774f492b6cb" args="(char *cmach)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float slamch_           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>cmach</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+    =======</pre><p>
+<pre>    SLAMCH determines single precision machine parameters.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    CMACH   (input) CHARACTER*1   
+            Specifies the value to be returned by SLAMCH:   
+            = 'E' or 'e',   SLAMCH := eps   
+            = 'S' or 's ,   SLAMCH := sfmin   
+            = 'B' or 'b',   SLAMCH := base   
+            = 'P' or 'p',   SLAMCH := eps*base   
+            = 'N' or 'n',   SLAMCH := t   
+            = 'R' or 'r',   SLAMCH := rnd   
+            = 'M' or 'm',   SLAMCH := emin   
+            = 'U' or 'u',   SLAMCH := rmin   
+            = 'L' or 'l',   SLAMCH := emax   
+            = 'O' or 'o',   SLAMCH := rmax</pre><p>
+<pre>            where</pre><p>
+<pre>            eps   = relative machine precision   
+            sfmin = safe minimum, such that 1/sfmin does not overflow   
+            base  = base of the machine   
+            prec  = eps*base   
+            t     = number of (base) digits in the mantissa   
+            rnd   = 1.0 when rounding occurs in addition, 0.0 otherwise   
+            emin  = minimum exponent before (gradual) underflow   
+            rmin  = underflow threshold - base**(emin-1)   
+            emax  = largest exponent before overflow   
+            rmax  = overflow threshold  - (base**emax)*(1-eps)</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slangs_8c.html b/DOC/html/slangs_8c.html
new file mode 100644
index 0000000..17ff75c
--- /dev/null
+++ b/DOC/html/slangs_8c.html
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slangs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/slangs.c File Reference</h1>Returns the value of the one norm. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="slangs_8c.html#201bfd9f2017cf5904aada9f21f23ab2">slangs</a> (char *norm, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Modified from lapack routine SLANGE 
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="201bfd9f2017cf5904aada9f21f23ab2"></a><!-- doxytag: member="slangs.c::slangs" ref="201bfd9f2017cf5904aada9f21f23ab2" args="(char *norm, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float slangs           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>norm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   SLANGS returns the value of the one norm, or the Frobenius norm, or 
+   the infinity norm, or the element of largest absolute value of a 
+   real matrix A.</pre><p>
+<pre>   Description   
+   ===========</pre><p>
+<pre>   SLANGE returns the value</pre><p>
+<pre>      SLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm'   
+               (   
+               ( norm1(A),         NORM = '1', 'O' or 'o'   
+               (   
+               ( normI(A),         NORM = 'I' or 'i'   
+               (   
+               ( normF(A),         NORM = 'F', 'f', 'E' or 'e'</pre><p>
+<pre>   where  norm1  denotes the  one norm of a matrix (maximum column sum), 
+   normI  denotes the  infinity norm  of a matrix  (maximum row sum) and 
+   normF  denotes the  Frobenius norm of a matrix (square root of sum of 
+   squares).  Note that  max(abs(A(i,j)))  is not a  matrix norm.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   NORM    (input) CHARACTER*1   
+           Specifies the value to be returned in SLANGE as described above.   
+   A       (input) SuperMatrix*
+           The M by N sparse matrix A.</pre><p>
+<pre>  =====================================================================
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slaqgs_8c.html b/DOC/html/slaqgs_8c.html
new file mode 100644
index 0000000..ead2a17
--- /dev/null
+++ b/DOC/html/slaqgs_8c.html
@@ -0,0 +1,160 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slaqgs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/slaqgs.c File Reference</h1>Equlibrates a general sprase matrix. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slaqgs_8c.html#0656018abfc9fa2821827415f5d5ea57">THRESH</a>   (0.1)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slaqgs_8c.html#f44216962efdebc7e1117b273743e84f">slaqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, float *r, float *c, float rowcnd, float colcnd, float amax, char *equed)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Modified from LAPACK routine SLAQGE
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="0656018abfc9fa2821827415f5d5ea57"></a><!-- doxytag: member="slaqgs.c::THRESH" ref="0656018abfc9fa2821827415f5d5ea57" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define THRESH   (0.1)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="f44216962efdebc7e1117b273743e84f"></a><!-- doxytag: member="slaqgs.c::slaqgs" ref="f44216962efdebc7e1117b273743e84f" args="(SuperMatrix *A, float *r, float *c, float rowcnd, float colcnd, float amax, char *equed)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void slaqgs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   SLAQGS equilibrates a general sparse M by N matrix A using the row and   
+   scaling factors in the vectors R and C.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input/output) SuperMatrix*
+           On exit, the equilibrated matrix.  See EQUED for the form of 
+           the equilibrated matrix. The type of A can be:
+	    Stype = NC; Dtype = SLU_S; Mtype = GE.</pre><p>
+<pre>   R       (input) float*, dimension (A->nrow)
+           The row scale factors for A.</pre><p>
+<pre>   C       (input) float*, dimension (A->ncol)
+           The column scale factors for A.</pre><p>
+<pre>   ROWCND  (input) float
+           Ratio of the smallest R(i) to the largest R(i).</pre><p>
+<pre>   COLCND  (input) float
+           Ratio of the smallest C(i) to the largest C(i).</pre><p>
+<pre>   AMAX    (input) float
+           Absolute value of largest matrix entry.</pre><p>
+<pre>   EQUED   (output) char*
+           Specifies the form of equilibration that was done.   
+           = 'N':  No equilibration   
+           = 'R':  Row equilibration, i.e., A has been premultiplied by  
+                   diag(R).   
+           = 'C':  Column equilibration, i.e., A has been postmultiplied  
+                   by diag(C).   
+           = 'B':  Both row and column equilibration, i.e., A has been
+                   replaced by diag(R) * A * diag(C).</pre><p>
+<pre>   Internal Parameters   
+   ===================</pre><p>
+<pre>   THRESH is a threshold value used to decide if row or column scaling   
+   should be done based on the ratio of the row or column scaling   
+   factors.  If ROWCND < THRESH, row scaling is done, and if   
+   COLCND < THRESH, column scaling is done.</pre><p>
+<pre>   LARGE and SMALL are threshold values used to decide if row scaling   
+   should be done based on the absolute size of the largest matrix   
+   element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sldperm_8c.html b/DOC/html/sldperm_8c.html
new file mode 100644
index 0000000..490cdb6
--- /dev/null
+++ b/DOC/html/sldperm_8c.html
@@ -0,0 +1,283 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sldperm.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sldperm.c File Reference</h1>Finds a row permutation so that the matrix has large entries on the diagonal. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="sldperm_8c.html#1e6fb0c8dd36aef071ef165136ece781">mc64id_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="sldperm_8c.html#1bf33c16a135cdc671242aed1705e1cd">mc64ad_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *, <a class="el" href="slu__zdefs_8h.html#b6 [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sldperm_8c.html#6c181d905cb61481e86ddfce701e74a0">sldperm</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> job, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> n, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> nnz, <a class="el" href="slu__zdefs [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="1bf33c16a135cdc671242aed1705e1cd"></a><!-- doxytag: member="sldperm.c::mc64ad_" ref="1bf33c16a135cdc671242aed1705e1cd" args="(int_t *, int_t *, int_t *, int_t[], int_t[], double[], int_t *, int_t[], int_t *, int_t[], int_t *, double[], int_t[], int_t[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64ad_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1e6fb0c8dd36aef071ef165136ece781"></a><!-- doxytag: member="sldperm.c::mc64id_" ref="1e6fb0c8dd36aef071ef165136ece781" args="(int_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64id_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6c181d905cb61481e86ddfce701e74a0"></a><!-- doxytag: member="sldperm.c::sldperm" ref="6c181d905cb61481e86ddfce701e74a0" args="(int_t job, int_t n, int_t nnz, int_t colptr[], int_t adjncy[], float nzval[], int_t *perm, float u[], float v[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sldperm           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>job</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>colptr</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>adjncy</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>nzval</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>perm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>u</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>v</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   SLDPERM finds a row permutation so that the matrix has large
+   entries on the diagonal.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> job    (input) int
+        Control the action. Possible values for JOB are:
+        = 1 : Compute a row permutation of the matrix so that the
+              permuted matrix has as many entries on its diagonal as
+              possible. The values on the diagonal are of arbitrary size.
+              HSL subroutine MC21A/AD is used for this.
+        = 2 : Compute a row permutation of the matrix so that the smallest 
+              value on the diagonal of the permuted matrix is maximized.
+        = 3 : Compute a row permutation of the matrix so that the smallest
+              value on the diagonal of the permuted matrix is maximized.
+              The algorithm differs from the one used for JOB = 2 and may
+              have quite a different performance.
+        = 4 : Compute a row permutation of the matrix so that the sum
+              of the diagonal entries of the permuted matrix is maximized.
+        = 5 : Compute a row permutation of the matrix so that the product
+              of the diagonal entries of the permuted matrix is maximized
+              and vectors to scale the matrix so that the nonzero diagonal 
+              entries of the permuted matrix are one in absolute value and 
+              all the off-diagonal entries are less than or equal to one in 
+              absolute value.
+        Restriction: 1 <= JOB <= 5.</pre><p>
+<pre> n      (input) int
+        The order of the matrix.</pre><p>
+<pre> nnz    (input) int
+        The number of nonzeros in the matrix.</pre><p>
+<pre> adjncy (input) int*, of size nnz
+        The adjacency structure of the matrix, which contains the row
+        indices of the nonzeros.</pre><p>
+<pre> colptr (input) int*, of size n+1
+        The pointers to the beginning of each column in ADJNCY.</pre><p>
+<pre> nzval  (input) float*, of size nnz
+        The nonzero values of the matrix. nzval[k] is the value of
+        the entry corresponding to adjncy[k].
+        It is not used if job = 1.</pre><p>
+<pre> perm   (output) int*, of size n
+        The permutation vector. perm[i] = j means row i in the
+        original matrix is in row j of the permuted matrix.</pre><p>
+<pre> u      (output) double*, of size n
+        If job = 5, the natural logarithms of the row scaling factors.</pre><p>
+<pre> v      (output) double*, of size n
+        If job = 5, the natural logarithms of the column scaling factors. 
+        The scaled matrix B has entries b_ij = a_ij * exp(u_i + v_j).
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slinsol1_8c.html b/DOC/html/slinsol1_8c.html
new file mode 100644
index 0000000..fef024f
--- /dev/null
+++ b/DOC/html/slinsol1_8c.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/slinsol1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/slinsol1.c File Reference</h1><code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="slinsol1.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slinsol_8c.html b/DOC/html/slinsol_8c.html
new file mode 100644
index 0000000..f0c28d1
--- /dev/null
+++ b/DOC/html/slinsol_8c.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/slinsol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/slinsol.c File Reference</h1><code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsol_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="slinsol.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slinsolx1_8c.html b/DOC/html/slinsolx1_8c.html
new file mode 100644
index 0000000..f5eb63b
--- /dev/null
+++ b/DOC/html/slinsolx1_8c.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/slinsolx1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/slinsolx1.c File Reference</h1><code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsolx1_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsolx1_8c.html#26a449fe0e6f4599404be8f78ed31f20">parse_command_line</a> (int argc, char *argv[], int *lwork, float *u, <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> *trans)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="slinsolx1.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="26a449fe0e6f4599404be8f78ed31f20"></a><!-- doxytag: member="slinsolx1.c::parse_command_line" ref="26a449fe0e6f4599404be8f78ed31f20" args="(int argc, char *argv[], int *lwork, float *u, yes_no_t *equil, trans_t *trans)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void parse_command_line           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> * </td>
+          <td class="paramname"> <em>equil</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+          <td class="paramname"> <em>trans</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slinsolx2_8c.html b/DOC/html/slinsolx2_8c.html
new file mode 100644
index 0000000..d753429
--- /dev/null
+++ b/DOC/html/slinsolx2_8c.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/slinsolx2.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/slinsolx2.c File Reference</h1><code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsolx2_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsolx2_8c.html#693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> *trans)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="slinsolx2.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="693ba86aac49435e82cf3a57a4412744"></a><!-- doxytag: member="slinsolx2.c::parse_command_line" ref="693ba86aac49435e82cf3a57a4412744" args="(int argc, char *argv[], int *lwork, double *u, yes_no_t *equil, trans_t *trans)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void parse_command_line           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> * </td>
+          <td class="paramname"> <em>equil</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+          <td class="paramname"> <em>trans</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slinsolx_8c.html b/DOC/html/slinsolx_8c.html
new file mode 100644
index 0000000..e8edc38
--- /dev/null
+++ b/DOC/html/slinsolx_8c.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/slinsolx.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/slinsolx.c File Reference</h1><code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsolx_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsolx_8c.html#26a449fe0e6f4599404be8f78ed31f20">parse_command_line</a> (int argc, char *argv[], int *lwork, float *u, <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> *trans)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="slinsolx.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="26a449fe0e6f4599404be8f78ed31f20"></a><!-- doxytag: member="slinsolx.c::parse_command_line" ref="26a449fe0e6f4599404be8f78ed31f20" args="(int argc, char *argv[], int *lwork, float *u, yes_no_t *equil, trans_t *trans)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void parse_command_line           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> * </td>
+          <td class="paramname"> <em>equil</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+          <td class="paramname"> <em>trans</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__Cnames_8h-source.html b/DOC/html/slu__Cnames_8h-source.html
new file mode 100644
index 0000000..7ae996e
--- /dev/null
+++ b/DOC/html/slu__Cnames_8h-source.html
@@ -0,0 +1,462 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_Cnames.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<h1>SRC/slu_Cnames.h</h1><a href="slu__Cnames_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00019"></a>00019 <span class="preprocessor">#ifndef __SUPERLU_CNAMES </span><span class="comment">/* allow multiple inclusions */</span>
+<a name="l00020"></a>00020 <span class="preprocessor">#define __SUPERLU_CNAMES</span>
+<a name="l00021"></a>00021 <span class="preprocessor"></span>
+<a name="l00022"></a>00022 
+<a name="l00023"></a><a class="code" href="slu__Cnames_8h.html#42e4b5fadd9f6757585096fa059eea29">00023</a> <span class="preprocessor">#define ADD_       0</span>
+<a name="l00024"></a><a class="code" href="slu__Cnames_8h.html#64e86942f56cb415dbbbf31c6f390542">00024</a> <span class="preprocessor"></span><span class="preprocessor">#define ADD__      1</span>
+<a name="l00025"></a><a class="code" href="slu__Cnames_8h.html#f42b337af878eff44b9d6792ee59faf7">00025</a> <span class="preprocessor"></span><span class="preprocessor">#define NOCHANGE   2</span>
+<a name="l00026"></a><a class="code" href="slu__Cnames_8h.html#cc3ddbc87aab0c0642d350d040e5bdfc">00026</a> <span class="preprocessor"></span><span class="preprocessor">#define UPCASE     3</span>
+<a name="l00027"></a><a class="code" href="slu__Cnames_8h.html#f29cc13eea735d836498590d413904a4">00027</a> <span class="preprocessor"></span><span class="preprocessor">#define OLD_CRAY   4</span>
+<a name="l00028"></a><a class="code" href="slu__Cnames_8h.html#26f0902a7057c96ab11966ab8404f4f6">00028</a> <span class="preprocessor"></span><span class="preprocessor">#define C_CALL     5</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<a name="l00030"></a>00030 <span class="preprocessor">#ifdef UpCase</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define F77_CALL_C  UPCASE</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00034"></a>00034 <span class="preprocessor">#ifdef NoChange</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define F77_CALL_C  NOCHANGE</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00038"></a>00038 <span class="preprocessor">#ifdef Add_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define F77_CALL_C  ADD_</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span>
+<a name="l00042"></a>00042 <span class="preprocessor">#ifdef Add__</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define F77_CALL_C  ADD__</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span>
+<a name="l00046"></a>00046 <span class="preprocessor">#ifdef _CRAY</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define F77_CALL_C  OLD_CRAY</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span>
+<a name="l00050"></a>00050 <span class="comment">/* Default */</span>
+<a name="l00051"></a>00051 <span class="preprocessor">#ifndef F77_CALL_C</span>
+<a name="l00052"></a><a class="code" href="slu__Cnames_8h.html#23a1698b7e10fde5b8d52b8f3a349489">00052</a> <span class="preprocessor"></span><span class="preprocessor">#define F77_CALL_C  ADD_</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span>
+<a name="l00055"></a>00055 
+<a name="l00056"></a>00056 <span class="preprocessor">#if (F77_CALL_C == ADD_)</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="comment">/*</span>
+<a name="l00058"></a>00058 <span class="comment"> * These defines set up the naming scheme required to have a fortran 77</span>
+<a name="l00059"></a>00059 <span class="comment"> * routine call a C routine</span>
+<a name="l00060"></a>00060 <span class="comment"> * No redefinition necessary to have following Fortran to C interface:</span>
+<a name="l00061"></a>00061 <span class="comment"> *           FORTRAN CALL               C DECLARATION</span>
+<a name="l00062"></a>00062 <span class="comment"> *           call dgemm(...)           void dgemm_(...)</span>
+<a name="l00063"></a>00063 <span class="comment"> *</span>
+<a name="l00064"></a>00064 <span class="comment"> * This is the default.</span>
+<a name="l00065"></a>00065 <span class="comment"> */</span>
+<a name="l00066"></a>00066 
+<a name="l00067"></a>00067 <span class="preprocessor">#endif</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span>
+<a name="l00069"></a>00069 <span class="preprocessor">#if (F77_CALL_C == ADD__)</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="comment">/*</span>
+<a name="l00071"></a>00071 <span class="comment"> * These defines set up the naming scheme required to have a fortran 77</span>
+<a name="l00072"></a>00072 <span class="comment"> * routine call a C routine </span>
+<a name="l00073"></a>00073 <span class="comment"> * for following Fortran to C interface:</span>
+<a name="l00074"></a>00074 <span class="comment"> *           FORTRAN CALL               C DECLARATION</span>
+<a name="l00075"></a>00075 <span class="comment"> *           call dgemm(...)           void dgemm__(...)</span>
+<a name="l00076"></a>00076 <span class="comment"> */</span>
+<a name="l00077"></a>00077 <span class="comment">/* BLAS */</span>
+<a name="l00078"></a>00078 <span class="preprocessor">#define sswap_    sswap__</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define saxpy_    saxpy__</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define sasum_    sasum__</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#define isamax_   isamax__</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#define scopy_    scopy__</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define sscal_    sscal__</span>
+<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#define sger_     sger__</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span><span class="preprocessor">#define snrm2_    snrm2__</span>
+<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="preprocessor">#define ssymv_    ssymv__</span>
+<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#define sdot_     sdot__</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#define saxpy_    saxpy__</span>
+<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#define ssyr2_    ssyr2__</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#define srot_     srot__</span>
+<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">#define sgemv_    sgemv__</span>
+<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">#define strsv_    strsv__</span>
+<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">#define sgemm_    sgemm__</span>
+<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="preprocessor">#define strsm_    strsm__</span>
+<a name="l00095"></a>00095 <span class="preprocessor"></span>
+<a name="l00096"></a>00096 <span class="preprocessor">#define dswap_    dswap__</span>
+<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">#define daxpy_    daxpy__</span>
+<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#define dasum_    dasum__</span>
+<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#define idamax_   idamax__</span>
+<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#define dcopy_    dcopy__</span>
+<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">#define dscal_    dscal__</span>
+<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#define dger_     dger__</span>
+<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">#define dnrm2_    dnrm2__</span>
+<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor">#define dsymv_    dsymv__</span>
+<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#define ddot_     ddot__</span>
+<a name="l00106"></a>00106 <span class="preprocessor"></span><span class="preprocessor">#define dsyr2_    dsyr2__</span>
+<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">#define drot_     drot__</span>
+<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#define dgemv_    dgemv__</span>
+<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="preprocessor">#define dtrsv_    dtrsv__</span>
+<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="preprocessor">#define dgemm_    dgemm__</span>
+<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">#define dtrsm_    dtrsm__</span>
+<a name="l00112"></a>00112 <span class="preprocessor"></span>
+<a name="l00113"></a>00113 <span class="preprocessor">#define cswap_    cswap__</span>
+<a name="l00114"></a>00114 <span class="preprocessor"></span><span class="preprocessor">#define caxpy_    caxpy__</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#define scasum_   scasum__</span>
+<a name="l00116"></a>00116 <span class="preprocessor"></span><span class="preprocessor">#define icamax_   icamax__</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span><span class="preprocessor">#define ccopy_    ccopy__</span>
+<a name="l00118"></a>00118 <span class="preprocessor"></span><span class="preprocessor">#define cscal_    cscal__</span>
+<a name="l00119"></a>00119 <span class="preprocessor"></span><span class="preprocessor">#define scnrm2_   scnrm2__</span>
+<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="preprocessor">#define caxpy_    caxpy__</span>
+<a name="l00121"></a>00121 <span class="preprocessor"></span><span class="preprocessor">#define cgemv_    cgemv__</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="preprocessor">#define ctrsv_    ctrsv__</span>
+<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">#define cgemm_    cgemm__</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor">#define ctrsm_    ctrsm__</span>
+<a name="l00125"></a>00125 <span class="preprocessor"></span><span class="preprocessor">#define cgerc_    cgerc__</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor">#define chemv_    chemv__</span>
+<a name="l00127"></a>00127 <span class="preprocessor"></span><span class="preprocessor">#define cher2_    cher2__</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span>
+<a name="l00129"></a>00129 <span class="preprocessor">#define zswap_    zswap__</span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span><span class="preprocessor">#define zaxpy_    zaxpy__</span>
+<a name="l00131"></a>00131 <span class="preprocessor"></span><span class="preprocessor">#define dzasum_   dzasum__</span>
+<a name="l00132"></a>00132 <span class="preprocessor"></span><span class="preprocessor">#define izamax_   izamax__</span>
+<a name="l00133"></a>00133 <span class="preprocessor"></span><span class="preprocessor">#define zcopy_    zcopy__</span>
+<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="preprocessor">#define zscal_    zscal__</span>
+<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor">#define dznrm2_   dznrm2__</span>
+<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="preprocessor">#define zaxpy_    zaxpy__</span>
+<a name="l00137"></a>00137 <span class="preprocessor"></span><span class="preprocessor">#define zgemv_    zgemv__</span>
+<a name="l00138"></a>00138 <span class="preprocessor"></span><span class="preprocessor">#define ztrsv_    ztrsv__</span>
+<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="preprocessor">#define zgemm_    zgemm__</span>
+<a name="l00140"></a>00140 <span class="preprocessor"></span><span class="preprocessor">#define ztrsm_    ztrsm__</span>
+<a name="l00141"></a>00141 <span class="preprocessor"></span><span class="preprocessor">#define zgerc_    zgerc__</span>
+<a name="l00142"></a>00142 <span class="preprocessor"></span><span class="preprocessor">#define zhemv_    zhemv__</span>
+<a name="l00143"></a>00143 <span class="preprocessor"></span><span class="preprocessor">#define zher2_    zher2__</span>
+<a name="l00144"></a>00144 <span class="preprocessor"></span>
+<a name="l00145"></a>00145 <span class="comment">/* LAPACK */</span>
+<a name="l00146"></a>00146 <span class="preprocessor">#define dlamch_   dlamch__</span>
+<a name="l00147"></a>00147 <span class="preprocessor"></span><span class="preprocessor">#define slamch_   slamch__</span>
+<a name="l00148"></a>00148 <span class="preprocessor"></span><span class="preprocessor">#define xerbla_   xerbla__</span>
+<a name="l00149"></a>00149 <span class="preprocessor"></span><span class="preprocessor">#define lsame_    lsame__</span>
+<a name="l00150"></a>00150 <span class="preprocessor"></span><span class="preprocessor">#define dlacon_   dlacon__</span>
+<a name="l00151"></a>00151 <span class="preprocessor"></span><span class="preprocessor">#define slacon_   slacon__</span>
+<a name="l00152"></a>00152 <span class="preprocessor"></span><span class="preprocessor">#define icmax1_   icmax1__</span>
+<a name="l00153"></a>00153 <span class="preprocessor"></span><span class="preprocessor">#define scsum1_   scsum1__</span>
+<a name="l00154"></a>00154 <span class="preprocessor"></span><span class="preprocessor">#define clacon_   clacon__</span>
+<a name="l00155"></a>00155 <span class="preprocessor"></span><span class="preprocessor">#define dzsum1_   dzsum1__</span>
+<a name="l00156"></a>00156 <span class="preprocessor"></span><span class="preprocessor">#define izmax1_   izmax1__</span>
+<a name="l00157"></a>00157 <span class="preprocessor"></span><span class="preprocessor">#define zlacon_   zlacon__</span>
+<a name="l00158"></a>00158 <span class="preprocessor"></span>
+<a name="l00159"></a>00159 <span class="comment">/* Fortran interface */</span>
+<a name="l00160"></a>00160 <span class="preprocessor">#define c_bridge_dgssv_ c_bridge_dgssv__</span>
+<a name="l00161"></a>00161 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_sgssv_ c_fortran_sgssv__</span>
+<a name="l00162"></a>00162 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_dgssv_ c_fortran_dgssv__</span>
+<a name="l00163"></a>00163 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_cgssv_ c_fortran_cgssv__</span>
+<a name="l00164"></a>00164 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_zgssv_ c_fortran_zgssv__</span>
+<a name="l00165"></a>00165 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00166"></a>00166 <span class="preprocessor"></span>
+<a name="l00167"></a>00167 <span class="preprocessor">#if (F77_CALL_C == UPCASE)</span>
+<a name="l00168"></a>00168 <span class="preprocessor"></span><span class="comment">/*</span>
+<a name="l00169"></a>00169 <span class="comment"> * These defines set up the naming scheme required to have a fortran 77</span>
+<a name="l00170"></a>00170 <span class="comment"> * routine call a C routine </span>
+<a name="l00171"></a>00171 <span class="comment"> * following Fortran to C interface:</span>
+<a name="l00172"></a>00172 <span class="comment"> *           FORTRAN CALL               C DECLARATION</span>
+<a name="l00173"></a>00173 <span class="comment"> *           call dgemm(...)           void DGEMM(...)</span>
+<a name="l00174"></a>00174 <span class="comment"> */</span>
+<a name="l00175"></a>00175 <span class="comment">/* BLAS */</span>
+<a name="l00176"></a>00176 <span class="preprocessor">#define sswap_    SSWAP</span>
+<a name="l00177"></a>00177 <span class="preprocessor"></span><span class="preprocessor">#define saxpy_    SAXPY</span>
+<a name="l00178"></a>00178 <span class="preprocessor"></span><span class="preprocessor">#define sasum_    SASUM</span>
+<a name="l00179"></a>00179 <span class="preprocessor"></span><span class="preprocessor">#define isamax_   ISAMAX</span>
+<a name="l00180"></a>00180 <span class="preprocessor"></span><span class="preprocessor">#define scopy_    SCOPY</span>
+<a name="l00181"></a>00181 <span class="preprocessor"></span><span class="preprocessor">#define sscal_    SSCAL</span>
+<a name="l00182"></a>00182 <span class="preprocessor"></span><span class="preprocessor">#define sger_     SGER</span>
+<a name="l00183"></a>00183 <span class="preprocessor"></span><span class="preprocessor">#define snrm2_    SNRM2</span>
+<a name="l00184"></a>00184 <span class="preprocessor"></span><span class="preprocessor">#define ssymv_    SSYMV</span>
+<a name="l00185"></a>00185 <span class="preprocessor"></span><span class="preprocessor">#define sdot_     SDOT</span>
+<a name="l00186"></a>00186 <span class="preprocessor"></span><span class="preprocessor">#define saxpy_    SAXPY</span>
+<a name="l00187"></a>00187 <span class="preprocessor"></span><span class="preprocessor">#define ssyr2_    SSYR2</span>
+<a name="l00188"></a>00188 <span class="preprocessor"></span><span class="preprocessor">#define srot_     SROT</span>
+<a name="l00189"></a>00189 <span class="preprocessor"></span><span class="preprocessor">#define sgemv_    SGEMV</span>
+<a name="l00190"></a>00190 <span class="preprocessor"></span><span class="preprocessor">#define strsv_    STRSV</span>
+<a name="l00191"></a>00191 <span class="preprocessor"></span><span class="preprocessor">#define sgemm_    SGEMM</span>
+<a name="l00192"></a>00192 <span class="preprocessor"></span><span class="preprocessor">#define strsm_    STRSM</span>
+<a name="l00193"></a>00193 <span class="preprocessor"></span>
+<a name="l00194"></a>00194 <span class="preprocessor">#define dswap_    DSWAP</span>
+<a name="l00195"></a>00195 <span class="preprocessor"></span><span class="preprocessor">#define daxpy_    DAXPY</span>
+<a name="l00196"></a>00196 <span class="preprocessor"></span><span class="preprocessor">#define dasum_    DASUM</span>
+<a name="l00197"></a>00197 <span class="preprocessor"></span><span class="preprocessor">#define idamax_   IDAMAX</span>
+<a name="l00198"></a>00198 <span class="preprocessor"></span><span class="preprocessor">#define dcopy_    DCOPY</span>
+<a name="l00199"></a>00199 <span class="preprocessor"></span><span class="preprocessor">#define dscal_    DSCAL</span>
+<a name="l00200"></a>00200 <span class="preprocessor"></span><span class="preprocessor">#define dger_     DGER</span>
+<a name="l00201"></a>00201 <span class="preprocessor"></span><span class="preprocessor">#define dnrm2_    DNRM2</span>
+<a name="l00202"></a>00202 <span class="preprocessor"></span><span class="preprocessor">#define dsymv_    DSYMV</span>
+<a name="l00203"></a>00203 <span class="preprocessor"></span><span class="preprocessor">#define ddot_     DDOT</span>
+<a name="l00204"></a>00204 <span class="preprocessor"></span><span class="preprocessor">#define dsyr2_    DSYR2</span>
+<a name="l00205"></a>00205 <span class="preprocessor"></span><span class="preprocessor">#define drot_     DROT</span>
+<a name="l00206"></a>00206 <span class="preprocessor"></span><span class="preprocessor">#define dgemv_    DGEMV</span>
+<a name="l00207"></a>00207 <span class="preprocessor"></span><span class="preprocessor">#define dtrsv_    DTRSV</span>
+<a name="l00208"></a>00208 <span class="preprocessor"></span><span class="preprocessor">#define dgemm_    DGEMM</span>
+<a name="l00209"></a>00209 <span class="preprocessor"></span><span class="preprocessor">#define dtrsm_    DTRSM</span>
+<a name="l00210"></a>00210 <span class="preprocessor"></span>
+<a name="l00211"></a>00211 <span class="preprocessor">#define cswap_    CSWAP</span>
+<a name="l00212"></a>00212 <span class="preprocessor"></span><span class="preprocessor">#define caxpy_    CAXPY</span>
+<a name="l00213"></a>00213 <span class="preprocessor"></span><span class="preprocessor">#define scasum_   SCASUM</span>
+<a name="l00214"></a>00214 <span class="preprocessor"></span><span class="preprocessor">#define icamax_   ICAMAX</span>
+<a name="l00215"></a>00215 <span class="preprocessor"></span><span class="preprocessor">#define ccopy_    CCOPY</span>
+<a name="l00216"></a>00216 <span class="preprocessor"></span><span class="preprocessor">#define cscal_    CSCAL</span>
+<a name="l00217"></a>00217 <span class="preprocessor"></span><span class="preprocessor">#define scnrm2_   SCNRM2</span>
+<a name="l00218"></a>00218 <span class="preprocessor"></span><span class="preprocessor">#define cgemv_    CGEMV</span>
+<a name="l00219"></a>00219 <span class="preprocessor"></span><span class="preprocessor">#define ctrsv_    CTRSV</span>
+<a name="l00220"></a>00220 <span class="preprocessor"></span><span class="preprocessor">#define cgemm_    CGEMM</span>
+<a name="l00221"></a>00221 <span class="preprocessor"></span><span class="preprocessor">#define ctrsm_    CTRSM</span>
+<a name="l00222"></a>00222 <span class="preprocessor"></span><span class="preprocessor">#define cgerc_    CGERC</span>
+<a name="l00223"></a>00223 <span class="preprocessor"></span><span class="preprocessor">#define chemv_    CHEMV</span>
+<a name="l00224"></a>00224 <span class="preprocessor"></span><span class="preprocessor">#define cher2_    CHER2</span>
+<a name="l00225"></a>00225 <span class="preprocessor"></span>
+<a name="l00226"></a>00226 <span class="preprocessor">#define zswap_    ZSWAP</span>
+<a name="l00227"></a>00227 <span class="preprocessor"></span><span class="preprocessor">#define zaxpy_    ZAXPY</span>
+<a name="l00228"></a>00228 <span class="preprocessor"></span><span class="preprocessor">#define dzasum_   DZASUM</span>
+<a name="l00229"></a>00229 <span class="preprocessor"></span><span class="preprocessor">#define izamax_   IZAMAX</span>
+<a name="l00230"></a>00230 <span class="preprocessor"></span><span class="preprocessor">#define zcopy_    ZCOPY</span>
+<a name="l00231"></a>00231 <span class="preprocessor"></span><span class="preprocessor">#define zscal_    ZSCAL</span>
+<a name="l00232"></a>00232 <span class="preprocessor"></span><span class="preprocessor">#define dznrm2_   DZNRM2</span>
+<a name="l00233"></a>00233 <span class="preprocessor"></span><span class="preprocessor">#define zgemv_    ZGEMV</span>
+<a name="l00234"></a>00234 <span class="preprocessor"></span><span class="preprocessor">#define ztrsv_    ZTRSV</span>
+<a name="l00235"></a>00235 <span class="preprocessor"></span><span class="preprocessor">#define zgemm_    ZGEMM</span>
+<a name="l00236"></a>00236 <span class="preprocessor"></span><span class="preprocessor">#define ztrsm_    ZTRSM</span>
+<a name="l00237"></a>00237 <span class="preprocessor"></span><span class="preprocessor">#define zgerc_    ZGERC</span>
+<a name="l00238"></a>00238 <span class="preprocessor"></span><span class="preprocessor">#define zhemv_    ZHEMV</span>
+<a name="l00239"></a>00239 <span class="preprocessor"></span><span class="preprocessor">#define zher2_    ZHER2</span>
+<a name="l00240"></a>00240 <span class="preprocessor"></span>
+<a name="l00241"></a>00241 <span class="comment">/* LAPACK */</span>
+<a name="l00242"></a>00242 <span class="preprocessor">#define dlamch_   DLAMCH</span>
+<a name="l00243"></a>00243 <span class="preprocessor"></span><span class="preprocessor">#define slamch_   SLAMCH</span>
+<a name="l00244"></a>00244 <span class="preprocessor"></span><span class="preprocessor">#define xerbla_   XERBLA</span>
+<a name="l00245"></a>00245 <span class="preprocessor"></span><span class="preprocessor">#define lsame_    LSAME</span>
+<a name="l00246"></a>00246 <span class="preprocessor"></span><span class="preprocessor">#define dlacon_   DLACON</span>
+<a name="l00247"></a>00247 <span class="preprocessor"></span><span class="preprocessor">#define slacon_   SLACON</span>
+<a name="l00248"></a>00248 <span class="preprocessor"></span><span class="preprocessor">#define icmax1_   ICMAX1</span>
+<a name="l00249"></a>00249 <span class="preprocessor"></span><span class="preprocessor">#define scsum1_   SCSUM1</span>
+<a name="l00250"></a>00250 <span class="preprocessor"></span><span class="preprocessor">#define clacon_   CLACON</span>
+<a name="l00251"></a>00251 <span class="preprocessor"></span><span class="preprocessor">#define dzsum1_   DZSUM1</span>
+<a name="l00252"></a>00252 <span class="preprocessor"></span><span class="preprocessor">#define izmax1_   IZMAX1</span>
+<a name="l00253"></a>00253 <span class="preprocessor"></span><span class="preprocessor">#define zlacon_   ZLACON</span>
+<a name="l00254"></a>00254 <span class="preprocessor"></span>
+<a name="l00255"></a>00255 <span class="comment">/* Fortran interface */</span>
+<a name="l00256"></a>00256 <span class="preprocessor">#define c_bridge_dgssv_ C_BRIDGE_DGSSV</span>
+<a name="l00257"></a>00257 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_sgssv_ C_FORTRAN_SGSSV</span>
+<a name="l00258"></a>00258 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_dgssv_ C_FORTRAN_DGSSV</span>
+<a name="l00259"></a>00259 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_cgssv_ C_FORTRAN_CGSSV</span>
+<a name="l00260"></a>00260 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_zgssv_ C_FORTRAN_ZGSSV</span>
+<a name="l00261"></a>00261 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00262"></a>00262 <span class="preprocessor"></span>
+<a name="l00263"></a>00263 
+<a name="l00264"></a>00264 <span class="preprocessor">#if (F77_CALL_C == OLD_CRAY)</span>
+<a name="l00265"></a>00265 <span class="preprocessor"></span><span class="comment">/*</span>
+<a name="l00266"></a>00266 <span class="comment"> * These defines set up the naming scheme required to have a fortran 77</span>
+<a name="l00267"></a>00267 <span class="comment"> * routine call a C routine </span>
+<a name="l00268"></a>00268 <span class="comment"> * following Fortran to C interface:</span>
+<a name="l00269"></a>00269 <span class="comment"> *           FORTRAN CALL               C DECLARATION</span>
+<a name="l00270"></a>00270 <span class="comment"> *           call dgemm(...)           void SGEMM(...)</span>
+<a name="l00271"></a>00271 <span class="comment"> */</span>
+<a name="l00272"></a>00272 <span class="comment">/* BLAS */</span>
+<a name="l00273"></a>00273 <span class="preprocessor">#define sswap_    SSWAP</span>
+<a name="l00274"></a>00274 <span class="preprocessor"></span><span class="preprocessor">#define saxpy_    SAXPY</span>
+<a name="l00275"></a>00275 <span class="preprocessor"></span><span class="preprocessor">#define sasum_    SASUM</span>
+<a name="l00276"></a>00276 <span class="preprocessor"></span><span class="preprocessor">#define isamax_   ISAMAX</span>
+<a name="l00277"></a>00277 <span class="preprocessor"></span><span class="preprocessor">#define scopy_    SCOPY</span>
+<a name="l00278"></a>00278 <span class="preprocessor"></span><span class="preprocessor">#define sscal_    SSCAL</span>
+<a name="l00279"></a>00279 <span class="preprocessor"></span><span class="preprocessor">#define sger_     SGER</span>
+<a name="l00280"></a>00280 <span class="preprocessor"></span><span class="preprocessor">#define snrm2_    SNRM2</span>
+<a name="l00281"></a>00281 <span class="preprocessor"></span><span class="preprocessor">#define ssymv_    SSYMV</span>
+<a name="l00282"></a>00282 <span class="preprocessor"></span><span class="preprocessor">#define sdot_     SDOT</span>
+<a name="l00283"></a>00283 <span class="preprocessor"></span><span class="preprocessor">#define ssyr2_    SSYR2</span>
+<a name="l00284"></a>00284 <span class="preprocessor"></span><span class="preprocessor">#define srot_     SROT</span>
+<a name="l00285"></a>00285 <span class="preprocessor"></span><span class="preprocessor">#define sgemv_    SGEMV</span>
+<a name="l00286"></a>00286 <span class="preprocessor"></span><span class="preprocessor">#define strsv_    STRSV</span>
+<a name="l00287"></a>00287 <span class="preprocessor"></span><span class="preprocessor">#define sgemm_    SGEMM</span>
+<a name="l00288"></a>00288 <span class="preprocessor"></span><span class="preprocessor">#define strsm_    STRSM</span>
+<a name="l00289"></a>00289 <span class="preprocessor"></span>
+<a name="l00290"></a>00290 <span class="preprocessor">#define dswap_    SSWAP</span>
+<a name="l00291"></a>00291 <span class="preprocessor"></span><span class="preprocessor">#define daxpy_    SAXPY</span>
+<a name="l00292"></a>00292 <span class="preprocessor"></span><span class="preprocessor">#define dasum_    SASUM</span>
+<a name="l00293"></a>00293 <span class="preprocessor"></span><span class="preprocessor">#define idamax_   ISAMAX</span>
+<a name="l00294"></a>00294 <span class="preprocessor"></span><span class="preprocessor">#define dcopy_    SCOPY</span>
+<a name="l00295"></a>00295 <span class="preprocessor"></span><span class="preprocessor">#define dscal_    SSCAL</span>
+<a name="l00296"></a>00296 <span class="preprocessor"></span><span class="preprocessor">#define dger_     SGER</span>
+<a name="l00297"></a>00297 <span class="preprocessor"></span><span class="preprocessor">#define dnrm2_    SNRM2</span>
+<a name="l00298"></a>00298 <span class="preprocessor"></span><span class="preprocessor">#define dsymv_    SSYMV</span>
+<a name="l00299"></a>00299 <span class="preprocessor"></span><span class="preprocessor">#define ddot_     SDOT</span>
+<a name="l00300"></a>00300 <span class="preprocessor"></span><span class="preprocessor">#define dsyr2_    SSYR2</span>
+<a name="l00301"></a>00301 <span class="preprocessor"></span><span class="preprocessor">#define drot_     SROT</span>
+<a name="l00302"></a>00302 <span class="preprocessor"></span><span class="preprocessor">#define dgemv_    SGEMV</span>
+<a name="l00303"></a>00303 <span class="preprocessor"></span><span class="preprocessor">#define dtrsv_    STRSV</span>
+<a name="l00304"></a>00304 <span class="preprocessor"></span><span class="preprocessor">#define dgemm_    SGEMM</span>
+<a name="l00305"></a>00305 <span class="preprocessor"></span><span class="preprocessor">#define dtrsm_    STRSM</span>
+<a name="l00306"></a>00306 <span class="preprocessor"></span>
+<a name="l00307"></a>00307 <span class="preprocessor">#define cswap_    CSWAP</span>
+<a name="l00308"></a>00308 <span class="preprocessor"></span><span class="preprocessor">#define caxpy_    CAXPY</span>
+<a name="l00309"></a>00309 <span class="preprocessor"></span><span class="preprocessor">#define scasum_   SCASUM</span>
+<a name="l00310"></a>00310 <span class="preprocessor"></span><span class="preprocessor">#define icamax_   ICAMAX</span>
+<a name="l00311"></a>00311 <span class="preprocessor"></span><span class="preprocessor">#define ccopy_    CCOPY</span>
+<a name="l00312"></a>00312 <span class="preprocessor"></span><span class="preprocessor">#define cscal_    CSCAL</span>
+<a name="l00313"></a>00313 <span class="preprocessor"></span><span class="preprocessor">#define scnrm2_   SCNRM2</span>
+<a name="l00314"></a>00314 <span class="preprocessor"></span><span class="preprocessor">#define caxpy_    CAXPY</span>
+<a name="l00315"></a>00315 <span class="preprocessor"></span><span class="preprocessor">#define cgemv_    CGEMV</span>
+<a name="l00316"></a>00316 <span class="preprocessor"></span><span class="preprocessor">#define ctrsv_    CTRSV</span>
+<a name="l00317"></a>00317 <span class="preprocessor"></span><span class="preprocessor">#define cgemm_    CGEMM</span>
+<a name="l00318"></a>00318 <span class="preprocessor"></span><span class="preprocessor">#define ctrsm_    CTRSM</span>
+<a name="l00319"></a>00319 <span class="preprocessor"></span><span class="preprocessor">#define cgerc_    CGERC</span>
+<a name="l00320"></a>00320 <span class="preprocessor"></span><span class="preprocessor">#define chemv_    CHEMV</span>
+<a name="l00321"></a>00321 <span class="preprocessor"></span><span class="preprocessor">#define cher2_    CHER2</span>
+<a name="l00322"></a>00322 <span class="preprocessor"></span>
+<a name="l00323"></a>00323 <span class="preprocessor">#define zswap_    ZSWAP</span>
+<a name="l00324"></a>00324 <span class="preprocessor"></span><span class="preprocessor">#define zaxpy_    ZAXPY</span>
+<a name="l00325"></a>00325 <span class="preprocessor"></span><span class="preprocessor">#define dzasum_   DZASUM</span>
+<a name="l00326"></a>00326 <span class="preprocessor"></span><span class="preprocessor">#define izamax_   IZAMAX</span>
+<a name="l00327"></a>00327 <span class="preprocessor"></span><span class="preprocessor">#define zcopy_    ZCOPY</span>
+<a name="l00328"></a>00328 <span class="preprocessor"></span><span class="preprocessor">#define zscal_    ZSCAL</span>
+<a name="l00329"></a>00329 <span class="preprocessor"></span><span class="preprocessor">#define dznrm2_   DZNRM2</span>
+<a name="l00330"></a>00330 <span class="preprocessor"></span><span class="preprocessor">#define zgemv_    ZGEMV</span>
+<a name="l00331"></a>00331 <span class="preprocessor"></span><span class="preprocessor">#define ztrsv_    ZTRSV</span>
+<a name="l00332"></a>00332 <span class="preprocessor"></span><span class="preprocessor">#define zgemm_    ZGEMM</span>
+<a name="l00333"></a>00333 <span class="preprocessor"></span><span class="preprocessor">#define ztrsm_    ZTRSM</span>
+<a name="l00334"></a>00334 <span class="preprocessor"></span><span class="preprocessor">#define zgerc_    ZGERC</span>
+<a name="l00335"></a>00335 <span class="preprocessor"></span><span class="preprocessor">#define zhemv_    ZHEMV</span>
+<a name="l00336"></a>00336 <span class="preprocessor"></span><span class="preprocessor">#define zher2_    ZHER2</span>
+<a name="l00337"></a>00337 <span class="preprocessor"></span>
+<a name="l00338"></a>00338 <span class="comment">/* LAPACK */</span>
+<a name="l00339"></a>00339 <span class="preprocessor">#define dlamch_   DLAMCH</span>
+<a name="l00340"></a>00340 <span class="preprocessor"></span><span class="preprocessor">#define slamch_   SLAMCH</span>
+<a name="l00341"></a>00341 <span class="preprocessor"></span><span class="preprocessor">#define xerbla_   XERBLA</span>
+<a name="l00342"></a>00342 <span class="preprocessor"></span><span class="preprocessor">#define lsame_    LSAME</span>
+<a name="l00343"></a>00343 <span class="preprocessor"></span><span class="preprocessor">#define dlacon_   DLACON</span>
+<a name="l00344"></a>00344 <span class="preprocessor"></span><span class="preprocessor">#define slacon_   SLACON</span>
+<a name="l00345"></a>00345 <span class="preprocessor"></span><span class="preprocessor">#define icmax1_   ICMAX1</span>
+<a name="l00346"></a>00346 <span class="preprocessor"></span><span class="preprocessor">#define scsum1_   SCSUM1</span>
+<a name="l00347"></a>00347 <span class="preprocessor"></span><span class="preprocessor">#define clacon_   CLACON</span>
+<a name="l00348"></a>00348 <span class="preprocessor"></span><span class="preprocessor">#define dzsum1_   DZSUM1</span>
+<a name="l00349"></a>00349 <span class="preprocessor"></span><span class="preprocessor">#define izmax1_   IZMAX1</span>
+<a name="l00350"></a>00350 <span class="preprocessor"></span><span class="preprocessor">#define zlacon_   ZLACON</span>
+<a name="l00351"></a>00351 <span class="preprocessor"></span>
+<a name="l00352"></a>00352 <span class="comment">/* Fortran interface */</span>
+<a name="l00353"></a>00353 <span class="preprocessor">#define c_bridge_dgssv_ C_BRIDGE_DGSSV</span>
+<a name="l00354"></a>00354 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_sgssv_ C_FORTRAN_SGSSV</span>
+<a name="l00355"></a>00355 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_dgssv_ C_FORTRAN_DGSSV</span>
+<a name="l00356"></a>00356 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_cgssv_ C_FORTRAN_CGSSV</span>
+<a name="l00357"></a>00357 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_zgssv_ C_FORTRAN_ZGSSV</span>
+<a name="l00358"></a>00358 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00359"></a>00359 <span class="preprocessor"></span>
+<a name="l00360"></a>00360 
+<a name="l00361"></a>00361 <span class="preprocessor">#if (F77_CALL_C == NOCHANGE)</span>
+<a name="l00362"></a>00362 <span class="preprocessor"></span><span class="comment">/*</span>
+<a name="l00363"></a>00363 <span class="comment"> * These defines set up the naming scheme required to have a fortran 77</span>
+<a name="l00364"></a>00364 <span class="comment"> * routine call a C routine </span>
+<a name="l00365"></a>00365 <span class="comment"> * for following Fortran to C interface:</span>
+<a name="l00366"></a>00366 <span class="comment"> *           FORTRAN CALL               C DECLARATION</span>
+<a name="l00367"></a>00367 <span class="comment"> *           call dgemm(...)           void dgemm(...)</span>
+<a name="l00368"></a>00368 <span class="comment"> */</span>
+<a name="l00369"></a>00369 <span class="comment">/* BLAS */</span>
+<a name="l00370"></a>00370 <span class="preprocessor">#define sswap_    sswap</span>
+<a name="l00371"></a>00371 <span class="preprocessor"></span><span class="preprocessor">#define saxpy_    saxpy</span>
+<a name="l00372"></a>00372 <span class="preprocessor"></span><span class="preprocessor">#define sasum_    sasum</span>
+<a name="l00373"></a>00373 <span class="preprocessor"></span><span class="preprocessor">#define isamax_   isamax</span>
+<a name="l00374"></a>00374 <span class="preprocessor"></span><span class="preprocessor">#define scopy_    scopy</span>
+<a name="l00375"></a>00375 <span class="preprocessor"></span><span class="preprocessor">#define sscal_    sscal</span>
+<a name="l00376"></a>00376 <span class="preprocessor"></span><span class="preprocessor">#define sger_     sger</span>
+<a name="l00377"></a>00377 <span class="preprocessor"></span><span class="preprocessor">#define snrm2_    snrm2</span>
+<a name="l00378"></a>00378 <span class="preprocessor"></span><span class="preprocessor">#define ssymv_    ssymv</span>
+<a name="l00379"></a>00379 <span class="preprocessor"></span><span class="preprocessor">#define sdot_     sdot</span>
+<a name="l00380"></a>00380 <span class="preprocessor"></span><span class="preprocessor">#define saxpy_    saxpy</span>
+<a name="l00381"></a>00381 <span class="preprocessor"></span><span class="preprocessor">#define ssyr2_    ssyr2</span>
+<a name="l00382"></a>00382 <span class="preprocessor"></span><span class="preprocessor">#define srot_     srot</span>
+<a name="l00383"></a>00383 <span class="preprocessor"></span><span class="preprocessor">#define sgemv_    sgemv</span>
+<a name="l00384"></a>00384 <span class="preprocessor"></span><span class="preprocessor">#define strsv_    strsv</span>
+<a name="l00385"></a>00385 <span class="preprocessor"></span><span class="preprocessor">#define sgemm_    sgemm</span>
+<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">#define strsm_    strsm</span>
+<a name="l00387"></a>00387 <span class="preprocessor"></span>
+<a name="l00388"></a>00388 <span class="preprocessor">#define dswap_    dswap</span>
+<a name="l00389"></a>00389 <span class="preprocessor"></span><span class="preprocessor">#define daxpy_    daxpy</span>
+<a name="l00390"></a>00390 <span class="preprocessor"></span><span class="preprocessor">#define dasum_    dasum</span>
+<a name="l00391"></a>00391 <span class="preprocessor"></span><span class="preprocessor">#define idamax_   idamax</span>
+<a name="l00392"></a>00392 <span class="preprocessor"></span><span class="preprocessor">#define dcopy_    dcopy</span>
+<a name="l00393"></a>00393 <span class="preprocessor"></span><span class="preprocessor">#define dscal_    dscal</span>
+<a name="l00394"></a>00394 <span class="preprocessor"></span><span class="preprocessor">#define dger_     dger</span>
+<a name="l00395"></a>00395 <span class="preprocessor"></span><span class="preprocessor">#define dnrm2_    dnrm2</span>
+<a name="l00396"></a>00396 <span class="preprocessor"></span><span class="preprocessor">#define dsymv_    dsymv</span>
+<a name="l00397"></a>00397 <span class="preprocessor"></span><span class="preprocessor">#define ddot_     ddot</span>
+<a name="l00398"></a>00398 <span class="preprocessor"></span><span class="preprocessor">#define dsyr2_    dsyr2</span>
+<a name="l00399"></a>00399 <span class="preprocessor"></span><span class="preprocessor">#define drot_     drot</span>
+<a name="l00400"></a>00400 <span class="preprocessor"></span><span class="preprocessor">#define dgemv_    dgemv</span>
+<a name="l00401"></a>00401 <span class="preprocessor"></span><span class="preprocessor">#define dtrsv_    dtrsv</span>
+<a name="l00402"></a>00402 <span class="preprocessor"></span><span class="preprocessor">#define dgemm_    dgemm</span>
+<a name="l00403"></a>00403 <span class="preprocessor"></span><span class="preprocessor">#define dtrsm_    dtrsm</span>
+<a name="l00404"></a>00404 <span class="preprocessor"></span>
+<a name="l00405"></a>00405 <span class="preprocessor">#define cswap_    cswap</span>
+<a name="l00406"></a>00406 <span class="preprocessor"></span><span class="preprocessor">#define caxpy_    caxpy</span>
+<a name="l00407"></a>00407 <span class="preprocessor"></span><span class="preprocessor">#define scasum_   scasum</span>
+<a name="l00408"></a>00408 <span class="preprocessor"></span><span class="preprocessor">#define icamax_   icamax</span>
+<a name="l00409"></a>00409 <span class="preprocessor"></span><span class="preprocessor">#define ccopy_    ccopy</span>
+<a name="l00410"></a>00410 <span class="preprocessor"></span><span class="preprocessor">#define cscal_    cscal</span>
+<a name="l00411"></a>00411 <span class="preprocessor"></span><span class="preprocessor">#define scnrm2_   scnrm2</span>
+<a name="l00412"></a>00412 <span class="preprocessor"></span><span class="preprocessor">#define cgemv_    cgemv</span>
+<a name="l00413"></a>00413 <span class="preprocessor"></span><span class="preprocessor">#define ctrsv_    ctrsv</span>
+<a name="l00414"></a>00414 <span class="preprocessor"></span><span class="preprocessor">#define cgemm_    cgemm</span>
+<a name="l00415"></a>00415 <span class="preprocessor"></span><span class="preprocessor">#define ctrsm_    ctrsm</span>
+<a name="l00416"></a>00416 <span class="preprocessor"></span><span class="preprocessor">#define cgerc_    cgerc</span>
+<a name="l00417"></a>00417 <span class="preprocessor"></span><span class="preprocessor">#define chemv_    chemv</span>
+<a name="l00418"></a>00418 <span class="preprocessor"></span><span class="preprocessor">#define cher2_    cher2</span>
+<a name="l00419"></a>00419 <span class="preprocessor"></span>
+<a name="l00420"></a>00420 <span class="preprocessor">#define zswap_    zswap</span>
+<a name="l00421"></a>00421 <span class="preprocessor"></span><span class="preprocessor">#define zaxpy_    zaxpy</span>
+<a name="l00422"></a>00422 <span class="preprocessor"></span><span class="preprocessor">#define dzasum_   dzasum</span>
+<a name="l00423"></a>00423 <span class="preprocessor"></span><span class="preprocessor">#define izamax_   izamax</span>
+<a name="l00424"></a>00424 <span class="preprocessor"></span><span class="preprocessor">#define zcopy_    zcopy</span>
+<a name="l00425"></a>00425 <span class="preprocessor"></span><span class="preprocessor">#define zscal_    zscal</span>
+<a name="l00426"></a>00426 <span class="preprocessor"></span><span class="preprocessor">#define dznrm2_   dznrm2</span>
+<a name="l00427"></a>00427 <span class="preprocessor"></span><span class="preprocessor">#define zgemv_    zgemv</span>
+<a name="l00428"></a>00428 <span class="preprocessor"></span><span class="preprocessor">#define ztrsv_    ztrsv</span>
+<a name="l00429"></a>00429 <span class="preprocessor"></span><span class="preprocessor">#define zgemm_    zgemm</span>
+<a name="l00430"></a>00430 <span class="preprocessor"></span><span class="preprocessor">#define ztrsm_    ztrsm</span>
+<a name="l00431"></a>00431 <span class="preprocessor"></span><span class="preprocessor">#define zgerc_    zgerc</span>
+<a name="l00432"></a>00432 <span class="preprocessor"></span><span class="preprocessor">#define zhemv_    zhemv</span>
+<a name="l00433"></a>00433 <span class="preprocessor"></span><span class="preprocessor">#define zher2_    zher2</span>
+<a name="l00434"></a>00434 <span class="preprocessor"></span>
+<a name="l00435"></a>00435 <span class="comment">/* LAPACK */</span>
+<a name="l00436"></a>00436 <span class="preprocessor">#define dlamch_   dlamch</span>
+<a name="l00437"></a>00437 <span class="preprocessor"></span><span class="preprocessor">#define slamch_   slamch</span>
+<a name="l00438"></a>00438 <span class="preprocessor"></span><span class="preprocessor">#define xerbla_   xerbla</span>
+<a name="l00439"></a>00439 <span class="preprocessor"></span><span class="preprocessor">#define lsame_    lsame</span>
+<a name="l00440"></a>00440 <span class="preprocessor"></span><span class="preprocessor">#define dlacon_   dlacon</span>
+<a name="l00441"></a>00441 <span class="preprocessor"></span><span class="preprocessor">#define slacon_   slacon</span>
+<a name="l00442"></a>00442 <span class="preprocessor"></span><span class="preprocessor">#define icmax1_   icmax1</span>
+<a name="l00443"></a>00443 <span class="preprocessor"></span><span class="preprocessor">#define scsum1_   scsum1</span>
+<a name="l00444"></a>00444 <span class="preprocessor"></span><span class="preprocessor">#define clacon_   clacon</span>
+<a name="l00445"></a>00445 <span class="preprocessor"></span><span class="preprocessor">#define dzsum1_   dzsum1</span>
+<a name="l00446"></a>00446 <span class="preprocessor"></span><span class="preprocessor">#define izmax1_   izmax1</span>
+<a name="l00447"></a>00447 <span class="preprocessor"></span><span class="preprocessor">#define zlacon_   zlacon</span>
+<a name="l00448"></a>00448 <span class="preprocessor"></span>
+<a name="l00449"></a>00449 <span class="comment">/* Fortran interface */</span>
+<a name="l00450"></a>00450 <span class="preprocessor">#define c_bridge_dgssv_ c_bridge_dgssv</span>
+<a name="l00451"></a>00451 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_sgssv_ c_fortran_sgssv</span>
+<a name="l00452"></a>00452 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_dgssv_ c_fortran_dgssv</span>
+<a name="l00453"></a>00453 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_cgssv_ c_fortran_cgssv</span>
+<a name="l00454"></a>00454 <span class="preprocessor"></span><span class="preprocessor">#define c_fortran_zgssv_ c_fortran_zgssv</span>
+<a name="l00455"></a>00455 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00456"></a>00456 <span class="preprocessor"></span>
+<a name="l00457"></a>00457 
+<a name="l00458"></a>00458 <span class="preprocessor">#endif </span><span class="comment">/* __SUPERLU_CNAMES */</span>
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__Cnames_8h.html b/DOC/html/slu__Cnames_8h.html
new file mode 100644
index 0000000..0baf415
--- /dev/null
+++ b/DOC/html/slu__Cnames_8h.html
@@ -0,0 +1,164 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_Cnames.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/slu_Cnames.h File Reference</h1>Macros defining how C routines will be called. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="slu__Cnames_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__Cnames_8h.html#42e4b5fadd9f6757585096fa059eea29">ADD_</a>   0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__Cnames_8h.html#64e86942f56cb415dbbbf31c6f390542">ADD__</a>   1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__Cnames_8h.html#f42b337af878eff44b9d6792ee59faf7">NOCHANGE</a>   2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__Cnames_8h.html#cc3ddbc87aab0c0642d350d040e5bdfc">UPCASE</a>   3</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__Cnames_8h.html#f29cc13eea735d836498590d413904a4">OLD_CRAY</a>   4</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__Cnames_8h.html#26f0902a7057c96ab11966ab8404f4f6">C_CALL</a>   5</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__Cnames_8h.html#23a1698b7e10fde5b8d52b8f3a349489">F77_CALL_C</a>   ADD_</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 1, 1997</pre><p>
+<pre> These macros define how C routines will be called.  ADD_ assumes that
+ they will be called by fortran, which expects C routines to have an
+ underscore postfixed to the name (Suns, and the Intel expect this).
+ NOCHANGE indicates that fortran will be calling, and that it expects
+ the name called by fortran to be identical to that compiled by the C
+ (RS6K's do this).  UPCASE says it expects C routines called by fortran
+ to be in all upcase (CRAY wants this). 
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="42e4b5fadd9f6757585096fa059eea29"></a><!-- doxytag: member="slu_Cnames.h::ADD_" ref="42e4b5fadd9f6757585096fa059eea29" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ADD_   0          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="64e86942f56cb415dbbbf31c6f390542"></a><!-- doxytag: member="slu_Cnames.h::ADD__" ref="64e86942f56cb415dbbbf31c6f390542" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ADD__   1          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="26f0902a7057c96ab11966ab8404f4f6"></a><!-- doxytag: member="slu_Cnames.h::C_CALL" ref="26f0902a7057c96ab11966ab8404f4f6" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define C_CALL   5          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="23a1698b7e10fde5b8d52b8f3a349489"></a><!-- doxytag: member="slu_Cnames.h::F77_CALL_C" ref="23a1698b7e10fde5b8d52b8f3a349489" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define F77_CALL_C   ADD_          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f42b337af878eff44b9d6792ee59faf7"></a><!-- doxytag: member="slu_Cnames.h::NOCHANGE" ref="f42b337af878eff44b9d6792ee59faf7" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NOCHANGE   2          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f29cc13eea735d836498590d413904a4"></a><!-- doxytag: member="slu_Cnames.h::OLD_CRAY" ref="f29cc13eea735d836498590d413904a4" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define OLD_CRAY   4          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cc3ddbc87aab0c0642d350d040e5bdfc"></a><!-- doxytag: member="slu_Cnames.h::UPCASE" ref="cc3ddbc87aab0c0642d350d040e5bdfc" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define UPCASE   3          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__cdefs_8h-source.html b/DOC/html/slu__cdefs_8h-source.html
new file mode 100644
index 0000000..68d09dc
--- /dev/null
+++ b/DOC/html/slu__cdefs_8h-source.html
@@ -0,0 +1,237 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_cdefs.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<h1>SRC/slu_cdefs.h</h1><a href="slu__cdefs_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00063"></a>00063 <span class="preprocessor">#ifndef __SUPERLU_cSP_DEFS </span><span class="comment">/* allow multiple inclusions */</span>
+<a name="l00064"></a>00064 <span class="preprocessor">#define __SUPERLU_cSP_DEFS</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>
+<a name="l00066"></a>00066 <span class="comment">/*</span>
+<a name="l00067"></a>00067 <span class="comment"> * File name:           csp_defs.h</span>
+<a name="l00068"></a>00068 <span class="comment"> * Purpose:             Sparse matrix types and function prototypes</span>
+<a name="l00069"></a>00069 <span class="comment"> * History:</span>
+<a name="l00070"></a>00070 <span class="comment"> */</span>
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072 <span class="preprocessor">#ifdef _CRAY</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#include <fortran.h></span>
+<a name="l00074"></a>00074 <span class="preprocessor">#include <string.h></span>
+<a name="l00075"></a>00075 <span class="preprocessor">#endif</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span>
+<a name="l00077"></a>00077 <span class="comment">/* Define my integer type int_t */</span>
+<a name="l00078"></a><a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">00078</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>; <span class="comment">/* default */</span>
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080 <span class="preprocessor">#include <math.h></span>
+<a name="l00081"></a>00081 <span class="preprocessor">#include <limits.h></span>
+<a name="l00082"></a>00082 <span class="preprocessor">#include "<a class="code" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called.">slu_Cnames.h</a>"</span>
+<a name="l00083"></a>00083 <span class="preprocessor">#include "<a class="code" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a>"</span>
+<a name="l00084"></a>00084 <span class="preprocessor">#include "<a class="code" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a>"</span>
+<a name="l00085"></a>00085 <span class="preprocessor">#include "<a class="code" href="slu__scomplex_8h.html" title="Header file for complex operations.">slu_scomplex.h</a>"</span>
+<a name="l00086"></a>00086 
+<a name="l00087"></a>00087 
+<a name="l00088"></a>00088 
+<a name="l00089"></a><a class="code" href="structGlobalLU__t.html">00089</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00090"></a><a class="code" href="structGlobalLU__t.html#94902a11c68912c2d456a58edd29f31d">00090</a>     <span class="keywordtype">int</span>     *xsup;    <span class="comment">/* supernode and column mapping */</span>
+<a name="l00091"></a><a class="code" href="structGlobalLU__t.html#fe003e9f68a924d5ba66c6f655bea55c">00091</a>     <span class="keywordtype">int</span>     *supno;   
+<a name="l00092"></a><a class="code" href="structGlobalLU__t.html#4e7e8cd3ba09e252a04eaf0b8af5fccd">00092</a>     <span class="keywordtype">int</span>     *lsub;    <span class="comment">/* compressed L subscripts */</span>
+<a name="l00093"></a><a class="code" href="structGlobalLU__t.html#c6f1655e303e2947524c29182d0f6a1e">00093</a>     <span class="keywordtype">int</span>     *xlsub;
+<a name="l00094"></a><a class="code" href="structGlobalLU__t.html#cc7533550bb4c3479635a704ebfa9eb1">00094</a>     <a class="code" href="structcomplex.html">complex</a>  *lusup;   <span class="comment">/* L supernodes */</span>
+<a name="l00095"></a><a class="code" href="structGlobalLU__t.html#aa63b1382a358278bd2775c921a84246">00095</a>     <span class="keywordtype">int</span>     *xlusup;
+<a name="l00096"></a><a class="code" href="structGlobalLU__t.html#f9e46ab287726ab6be2c22cca773856d">00096</a>     <a class="code" href="structcomplex.html">complex</a>  *ucol;    <span class="comment">/* U columns */</span>
+<a name="l00097"></a><a class="code" href="structGlobalLU__t.html#96b0443ea47703100b9ecad92137dda9">00097</a>     <span class="keywordtype">int</span>     *usub;
+<a name="l00098"></a><a class="code" href="structGlobalLU__t.html#4cbf4786dd6fc6541d5e097b27ab6835">00098</a>     <span class="keywordtype">int</span>     *xusub;
+<a name="l00099"></a><a class="code" href="structGlobalLU__t.html#1f77873222d31cd15eb781fdbf18df18">00099</a>     <span class="keywordtype">int</span>     nzlmax;   <span class="comment">/* current max size of lsub */</span>
+<a name="l00100"></a><a class="code" href="structGlobalLU__t.html#5238cd65bea5ca45046238d908073982">00100</a>     <span class="keywordtype">int</span>     nzumax;   <span class="comment">/*    "    "    "      ucol */</span>
+<a name="l00101"></a><a class="code" href="structGlobalLU__t.html#e67b1da1b096e92b7ddadf6e4a159481">00101</a>     <span class="keywordtype">int</span>     nzlumax;  <span class="comment">/*    "    "    "     lusup */</span>
+<a name="l00102"></a><a class="code" href="structGlobalLU__t.html#48fcf5a7ff751514d92feeb40370fe5e">00102</a>     <span class="keywordtype">int</span>     n;        <span class="comment">/* number of columns in the matrix */</span>
+<a name="l00103"></a><a class="code" href="structGlobalLU__t.html#9089591bf01db5135a9d52cb732b0f3c">00103</a>     <a class="code" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f6">LU_space_t</a> MemModel; <span class="comment">/* 0 - system malloc'd; 1 - user provided */</span>
+<a name="l00104"></a><a class="code" href="structGlobalLU__t.html#1923c63f76eab75f5022f025c25a82a7">00104</a>     <span class="keywordtype">int</span>     num_expansions;
+<a name="l00105"></a><a class="code" href="structGlobalLU__t.html#edd2ee950bd57f92d4aa9028738b9bdc">00105</a>     <a class="code" href="structe__node.html" title="Headers for 4 types of dynamatically managed memory.">ExpHeader</a> *expanders; <span class="comment">/* Array of pointers to 4 types of memory */</span>
+<a name="l00106"></a><a class="code" href="structGlobalLU__t.html#9c8f24b1d7ed85996df0ab869b472b0e">00106</a>     <a class="code" href="structLU__stack__t.html">LU_stack_t</a> stack;     <span class="comment">/* use user supplied memory */</span>
+<a name="l00107"></a>00107 } <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a>;
+<a name="l00108"></a>00108 
+<a name="l00109"></a>00109 
+<a name="l00110"></a>00110 <span class="comment">/* -------- Prototypes -------- */</span>
+<a name="l00111"></a>00111 
+<a name="l00112"></a>00112 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00113"></a>00113 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00114"></a>00114 <span class="preprocessor">#endif</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span>
+<a name="l00117"></a>00117 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00118"></a>00118 <a class="code" href="cgssv_8c.html#b592d134574c9813b7f8959026c94e8f" title="Driver routines.">cgssv</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00119"></a>00119       <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00120"></a>00120 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00121"></a>00121 <a class="code" href="cgssvx_8c.html#f659b3121feb5ebd8810a5868d3bca12">cgssvx</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00122"></a>00122        <span class="keywordtype">char</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00123"></a>00123        <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00124"></a>00124        <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *,
+<a name="l00125"></a>00125        <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00126"></a>00126     <span class="comment">/* ILU */</span>
+<a name="l00127"></a>00127 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00128"></a>00128 <a class="code" href="slu__cdefs_8h.html#908282efea752470dcd38f794b435dbc">cgsisv</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00129"></a>00129       <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00130"></a>00130 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00131"></a>00131 <a class="code" href="cgsisx_8c.html#adff8c65cafef191464b3d10bbcbbe7c">cgsisx</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00132"></a>00132        <span class="keywordtype">char</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00133"></a>00133        <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *,
+<a name="l00134"></a>00134        <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00135"></a>00135 
+<a name="l00136"></a>00136 
+<a name="l00138"></a>00138 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00139"></a>00139 <a class="code" href="cutil_8c.html#bb6caf8afa858f9adaf0ff8421ac03dd" title="Supernodal LU factor related.">cCreate_CompCol_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a> *,
+<a name="l00140"></a>00140                        <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00141"></a>00141 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00142"></a>00142 <a class="code" href="cutil_8c.html#58b408cacf22c559b9b361ae10956f90">cCreate_CompRow_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a> *,
+<a name="l00143"></a>00143                        <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00144"></a>00144 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00145"></a>00145 <a class="code" href="cutil_8c.html#6954ae5638f7ba23ae15c403313d93b2" title="Copy matrix A into matrix B.">cCopy_CompCol_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00146"></a>00146 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00147"></a>00147 <a class="code" href="cutil_8c.html#a1e1455807ad7dbf3a5b63842eccd3ae">cCreate_Dense_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype">int</span>,
+<a name="l00148"></a>00148                      <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00149"></a>00149 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00150"></a>00150 <a class="code" href="cutil_8c.html#b70481bde9dc947f9dc1f42580fe6086">cCreate_SuperNode_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a> *, 
+<a name="l00151"></a>00151                          <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00152"></a>00152                          <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00153"></a>00153 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00154"></a>00154 <a class="code" href="cutil_8c.html#626267a542de9e81c94f1f6049c68c2f">cCopy_Dense_Matrix</a>(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype">int</span>);
+<a name="l00155"></a>00155 
+<a name="l00156"></a>00156 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc" title="Count the total number of nonzeros in factors L and U, and in the symmetrically reduced...">countnz</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class [...]
+<a name="l00157"></a>00157 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85" title="Count the total number of nonzeros in factors L and U.">ilu_countnz</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00158"></a>00158 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf" title="Fix up the data storage lsub for L-subscripts. It removes the subscript sets for...">fixupL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00159"></a>00159 
+<a name="l00160"></a>00160 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cmemory_8c.html#d952b424acd036108ca2f5a0bd9d3739" title="Allocate storage for original matrix A.">callocateA</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00161"></a>00161 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf</a> (<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a>*, <a class="code" href="structSuperMatrix.html">SuperMatrix</a>*,
+<a name="l00162"></a>00162                        <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>*, <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, 
+<a name="l00163"></a>00163                        <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00164"></a>00164 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="csnode__dfs_8c.html#1c7b34abd214279177619773ad24b759">csnode_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span> *,
+<a name="l00165"></a>00165                              <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00166"></a>00166 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="csnode__bmod_8c.html#b5d22385d602a4fe7b7955129fc54ac8" title="Performs numeric block updates within the relaxed snode.">csnode_bmod</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <a class=" [...]
+<a name="l00167"></a>00167                               <a class="code" href="structcomplex.html">complex</a> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00168"></a>00168 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cpanel__dfs_8c.html#052edfd06c5aeab7a37b5fa558a06602">cpanel_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00169"></a>00169                            <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00170"></a>00170                            <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00171"></a>00171 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cpanel__bmod_8c.html#e38539c04b47f4c159e18684e435902b">cpanel_bmod</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>,
+<a name="l00172"></a>00172                            <a class="code" href="structcomplex.html">complex</a> *, <a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00173"></a>00173                            <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00174"></a>00174 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ccolumn__dfs_8c.html#0ee0b19c54923ca3b1875679fb05aea7">ccolumn_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">in [...]
+<a name="l00175"></a>00175                            <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00176"></a>00176 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ccolumn__bmod_8c.html#16ef1a229e74ac6264d11b35757dccf2">ccolumn_bmod</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a> *,
+<a name="l00177"></a>00177                            <a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span>,
+<a name="l00178"></a>00178                            <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00179"></a>00179 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ccopy__to__ucol_8c.html#918c42aba84eb7e0cce4b143dbcb4ed1">ccopy_to_ucol</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00180"></a>00180                               <a class="code" href="structcomplex.html">complex</a> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);         
+<a name="l00181"></a>00181 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="cpivotL_8c.html#e6bc95a2710538cc5ce0904f90ef7f05">cpivotL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">double</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, 
+<a name="l00182"></a>00182                          <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00183"></a>00183 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cpruneL_8c.html#a230bea3429693147cefbc58ce7b50d1">cpruneL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>,
+<a name="l00184"></a>00184                           <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00185"></a>00185 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#88701835280a367a90b9ea2a73f946f0">creadmt</a> (<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structcomplex.html">complex</a> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00186"></a>00186 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cutil_8c.html#ca22454204c3e0c894b1ccb7d31c325c">cGenXtrue</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype">int</span>);
+<a name="l00187"></a>00187 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cutil_8c.html#1fd859b01a2660fee78c2ed6336c2c86" title="Let rhs[i] = sum of i-th row of A, so the solution vector is all 1&#39;s.">cFillRHS</a> (<a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype [...]
+<a name="l00188"></a>00188                           <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00189"></a>00189 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cgstrs_8c.html#19517b9d29e4faf9ae777ca6fb9d415b">cgstrs</a> (<a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00190"></a>00190                         <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00191"></a>00191 <span class="comment">/* ILU */</span>
+<a name="l00192"></a>00192 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cgsitrf_8c.html#16b6ae6c8a2812e62ace44629f313bc6">cgsitrf</a> (<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a>*, <a class="code" href="structSuperMatrix.html">SuperMatrix</a>*, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>*,
+<a name="l00193"></a>00193                         <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00194"></a>00194                         <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00195"></a>00195 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="cldperm_8c.html#0ea12c5d13e30e24ad3e48e4ab521f4f">cldperm</a>(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> [], <span class="keywordtype">int</span> [], <a class="code" href="structcomplex.html">complex</a> [],
+<a name="l00196"></a>00196                         <span class="keywordtype">int</span> [], <span class="keywordtype">float</span> [], <span class="keywordtype">float</span> []);
+<a name="l00197"></a>00197 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__csnode__dfs_8c.html#a6c4a4029db106e8dd56bc0fe1f0090b">ilu_csnode_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</ [...]
+<a name="l00198"></a>00198                                <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00199"></a>00199 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="ilu__cpanel__dfs_8c.html#e528c7a140b699babac3d212a4cfbe4b">ilu_cpanel_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00200"></a>00200                                <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00201"></a>00201                                <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00202"></a>00202 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__ccolumn__dfs_8c.html#61b8082fdb8acb13c983c11acaea87ba">ilu_ccolumn_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00203"></a>00203                                 <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00204"></a>00204                                 <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00205"></a>00205 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__ccopy__to__ucol_8c.html#069fdcfba5148dfc923017db03d7eab1">ilu_ccopy_to_ucol</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00206"></a>00206                                   <a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype">int</span>, <a class="code" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>,
+<a name="l00207"></a>00207                                   <a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <span class="keywordtype">float</span> *);
+<a name="l00208"></a>00208 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__cpivotL_8c.html#5eadb2e028608a33e9de84d4d6895796">ilu_cpivotL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">double</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">i [...]
+<a name="l00209"></a>00209                             <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">double</span>, <a class="code" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>,
+<a name="l00210"></a>00210                             <a class="code" href="structcomplex.html">complex</a>, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00211"></a>00211 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__cdrop__row_8c.html#b6bca119c9d5eab7210d0009835e399f">ilu_cdrop_row</a> (<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>,
+<a name="l00212"></a>00212                               <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">double</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, 
+<a name="l00213"></a>00213                               <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span>);
+<a name="l00214"></a>00214 
+<a name="l00215"></a>00215 
+<a name="l00218"></a>00218 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cgsequ_8c.html#36bb68fea3ee44ff05eb7da2ee059fa5" title="Driver related.">cgsequ</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *,
+<a name="l00219"></a>00219                         <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span> *);
+<a name="l00220"></a>00220 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="claqgs_8c.html#0cf5dcef08d22df154acf807beb43ea1">claqgs</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span>,
+<a name="l00221"></a>00221                         <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">char</span> *);
+<a name="l00222"></a>00222 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cgscon_8c.html#e836085920601b3b0717a4f623ab460e">cgscon</a> (<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, 
+<a name="l00223"></a>00223                          <span class="keywordtype">float</span>, <span class="keywordtype">float</span> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00224"></a>00224 <span class="keyword">extern</span> <span class="keywordtype">float</span>   <a class="code" href="cpivotgrowth_8c.html#cda3921f49d46be7eaa23b58bc2b09c5">cPivotGrowth</a>(<span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, 
+<a name="l00225"></a>00225                             <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00226"></a>00226 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cgsrfs_8c.html#45c3a69a2e1025c59b2d96be63f65b71">cgsrfs</a> (<a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00227"></a>00227                        <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">char</span> *, <span class="keywordtype">float</span> *, 
+<a name="l00228"></a>00228                        <span class="keywordtype">float</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00229"></a>00229                        <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00230"></a>00230 
+<a name="l00231"></a>00231 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="csp__blas2_8c.html#51cbd689a51632885b9b034002631a6e" title="Solves one of the systems of equations A*x = b, or A&#39;*x = b.">sp_ctrsv</a> (<span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00232"></a>00232                         <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structcomplex.html">complex</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00233"></a>00233 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="csp__blas2_8c.html#1adbbd2f478e6a22843d82a07d42fb63" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A&#39;*x...">sp_cgemv</a> (<span class="keywordtype">char</span> *, <a class="code" href="structcomplex.html">complex</a>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structco [...]
+<a name="l00234"></a>00234                         <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a>, <a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype">int</span>);
+<a name="l00235"></a>00235 
+<a name="l00236"></a>00236 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="csp__blas3_8c.html#23c01569bec7ec0c247eb5df98f67841">sp_cgemm</a> (<span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a>,
+<a name="l00237"></a>00237                         <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a>, 
+<a name="l00238"></a>00238                         <a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype">int</span>);
+<a name="l00239"></a>00239 <span class="keyword">extern</span>         <span class="keywordtype">float</span> <a class="code" href="slamch_8c.html#5458a369e694e54bb5758774f492b6cb">slamch_</a>(<span class="keywordtype">char</span> *);
+<a name="l00240"></a>00240 
+<a name="l00241"></a>00241 
+<a name="l00243"></a>00243 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="cmemory_8c.html#6b958c6272421d091bdd9a2e7fdbafcd" title="Allocate storage for the data structures common to all factor routines.">cLUMemInit</a> (<a class="code" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a>, <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span [...]
+<a name="l00244"></a>00244                             <span class="keywordtype">float</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00245"></a>00245                             <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <span class="keywordtype">int</span> **, <a class="code" href="structcomplex.html">complex</a> **);
+<a name="l00246"></a>00246 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cmemory_8c.html#ff3d90f7f22f882faf8ba0dcf68b0f9c" title="Set up pointers for real working arrays.">cSetRWork</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a> *, <a class="code" href="structcomplex.html">complex</a> **, <a class="code" href="structcomplex.html">complex</a> **);
+<a name="l00247"></a>00247 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cmemory_8c.html#d4e33e7a64f75e058e9a8ebd479fa004" title="Free the working storage used by factor routines.">cLUWorkFree</a> (<span class="keywordtype">int</span> *, <a class="code" href="structcomplex.html">complex</a> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00248"></a>00248 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="cmemory_8c.html#8f2864f34ca668aeccb8298052a5c449" title="Expand the data structures for L and U during the factorization.">cLUMemXpand</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a>, <span class="keywordtype">int</span> *, <a class="c [...]
+<a name="l00249"></a>00249 
+<a name="l00250"></a>00250 <span class="keyword">extern</span> <a class="code" href="structcomplex.html">complex</a>  *<a class="code" href="cmemory_8c.html#0af029f557e5014a2d6797436b925f53">complexMalloc</a>(<span class="keywordtype">int</span>);
+<a name="l00251"></a>00251 <span class="keyword">extern</span> <a class="code" href="structcomplex.html">complex</a>  *<a class="code" href="cmemory_8c.html#1e625ecaeb259e2dd79667ffbfb816c0">complexCalloc</a>(<span class="keywordtype">int</span>);
+<a name="l00252"></a>00252 <span class="keyword">extern</span> <span class="keywordtype">float</span>  *<a class="code" href="slu__cdefs_8h.html#42361c3ce2ba81d149ffba01fbd6f138">floatMalloc</a>(<span class="keywordtype">int</span>);
+<a name="l00253"></a>00253 <span class="keyword">extern</span> <span class="keywordtype">float</span>  *<a class="code" href="slu__cdefs_8h.html#3e1230bff11a9e47c35555299bcdcf1b">floatCalloc</a>(<span class="keywordtype">int</span>);
+<a name="l00254"></a>00254 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="cmemory_8c.html#43ff5010762c14ea7591d23cf48403a3">cmemory_usage</a>(<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>);
+<a name="l00255"></a>00255 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="cmemory_8c.html#34d8cd030775d267947b68a4dacfbabb">cQuerySpace</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *);
+<a name="l00256"></a>00256 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="cmemory_8c.html#af50d31c33a4cc3e770b617202ea73e3">ilu_cQuerySpace</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *);
+<a name="l00257"></a>00257 
+<a name="l00259"></a>00259 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="creadhb_8c.html#75118673183b533e85d3300b9d12e0b8" title="Auxiliary routines.">creadhb</a>(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structcomplex.html">complex</a> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00260"></a>00260 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="creadrb_8c.html#af2ecfdc506c8a67ac3356758edd5502">creadrb</a>(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structcomplex.html">complex</a> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00261"></a>00261 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="creadtriple_8c.html#784a2e9d5ddef7abd1706abeb73ee498">creadtriple</a>(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structcomplex.html">complex</a> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00262"></a>00262 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cutil_8c.html#25187d2687836e013bb8a8da5822416c" title="Convert a row compressed storage into a column compressed storage.">cCompRow_to_CompCol</a>(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a>*, <span class="keywordtype">int</span>*, <span clas [...]
+<a name="l00263"></a>00263                                    <a class="code" href="structcomplex.html">complex</a> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00264"></a>00264 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cutil_8c.html#0987feeb2bd380db917660cde3352ec7" title="Fills a complex precision array with a given value.">cfill</a> (<a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a>);
+<a name="l00265"></a>00265 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cutil_8c.html#1936a1981a1b766e102aec4be7d98f57" title="Check the inf-norm of the error vector.">cinf_norm_error</a> (<span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structcomplex.html">complex</a> *);
+<a name="l00266"></a>00266 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#7a41152a5800bc02bef17b56e070d0e6">PrintPerf</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *,
+<a name="l00267"></a>00267                          <a class="code" href="structcomplex.html">complex</a>, <a class="code" href="structcomplex.html">complex</a>, <a class="code" href="structcomplex.html">complex</a> *, <a class="code" href="structcomplex.html">complex</a> *, <span class="keywordtype">char</span> *);
+<a name="l00268"></a>00268 <span class="keyword">extern</span> <span class="keywordtype">float</span>  <a class="code" href="qselect_8c.html#5a36bc5d24fe074bc4f3cfb65d7f0ae8">sqselect</a>(<span class="keywordtype">int</span>, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span>);
+<a name="l00269"></a>00269 
+<a name="l00270"></a>00270 
+<a name="l00272"></a>00272 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cutil_8c.html#dbd15bf3edf77d21b1c4c5096dcacf7f" title="Routines for debugging.">cPrint_CompCol_Matrix</a>(<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00273"></a>00273 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cutil_8c.html#1eeeb7938a9874f086c97b88b82645dd">cPrint_SuperNode_Matrix</a>(<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00274"></a>00274 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cutil_8c.html#069950e573473aa7fcf3739bcfac5983">cPrint_Dense_Matrix</a>(<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00275"></a>00275 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="cutil_8c.html#4fc78919cd6e7744cec4a8b32031d571" title="Diagnostic print of column &quot;jcol&quot; in the U/L factor.">cprint_lu_col</a>(<span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00276"></a>00276 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dutil_8c.html#457e11c8736d30b7da4ee14feb422ed0">print_double_vec</a>(<span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *);
+<a name="l00277"></a>00277 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#2cfc97393b65ddc5a40fdc523a50003a">check_tempv</a>(<span class="keywordtype">int</span>, <a class="code" href="structcomplex.html">complex</a> *);
+<a name="l00278"></a>00278 
+<a name="l00279"></a>00279 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00280"></a>00280 <span class="preprocessor"></span>  }
+<a name="l00281"></a>00281 <span class="preprocessor">#endif</span>
+<a name="l00282"></a>00282 <span class="preprocessor"></span>
+<a name="l00283"></a>00283 <span class="preprocessor">#endif </span><span class="comment">/* __SUPERLU_cSP_DEFS */</span>
+<a name="l00284"></a>00284 
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__cdefs_8h.html b/DOC/html/slu__cdefs_8h.html
new file mode 100644
index 0000000..17b62e4
--- /dev/null
+++ b/DOC/html/slu__cdefs_8h.html
@@ -0,0 +1,6070 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_cdefs.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/slu_cdefs.h File Reference</h1>Header file for real operations. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <limits.h></code><br>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<code>#include "<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a>"</code><br>
+<code>#include "<a class="el" href="slu__util_8h-source.html">slu_util.h</a>"</code><br>
+<code>#include "<a class="el" href="slu__scomplex_8h-source.html">slu_scomplex.h</a>"</code><br>
+
+<p>
+<a href="slu__cdefs_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#58aff6521bb64732e981ce5779820a89">cgssv</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class=" [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver routines.  <a href="#58aff6521bb64732e981ce5779820a89"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#264b6681cc04244cdd116978acfe4e2a">cgssvx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, int *, char *, float *, float *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.h [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#908282efea752470dcd38f794b435dbc">cgsisv</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class= [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#35048de8a07c47ab61c15793f63ad398">cgsisx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, int *, char *, float *, float *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.h [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#4f54bdbff678075fdf06720bbb299346">cCreate_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int, <a class="el" href="structcomplex.html">complex</a> *, int *, int *, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related.  <a href="#4f54bdbff678075fdf06720bbb299346"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#866240e7f5a35e821bc898d2e5ba26fc">cCreate_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int, <a class="el" href="structcomplex.html">complex</a> *, int *, int *, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#2b7edfb65023104b0f88f5aaab393248">cCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B.  <a href="#2b7edfb65023104b0f88f5aaab393248"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#9af123cab0520e5800a1b60668a09de6">cCreate_Dense_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, <a class="el" href="structcomplex.html">complex</a> *, int, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html#7987cb2a28ec879 [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#63d7d14c6a2312b9f95844e5055deae9">cCreate_SuperNode_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int, <a class="el" href="structcomplex.html">complex</a> *, int *, int *, int *, int *, int *, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" hr [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#7378a64fc445fa7e0101059d7353f4ac">cCopy_Dense_Matrix</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, int, <a class="el" href="structcomplex.html">complex</a> *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc">countnz</a> (const int, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Count the total number of nonzeros in factors L and U, and in the symmetrically reduced L.  <a href="#8086902aa8be3fc7d04c3c82ec3a79dc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85">ilu_countnz</a> (const int, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Count the total number of nonzeros in factors L and U.  <a href="#ae8eb367a0a2fcdf734738bc9630df85"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf">fixupL</a> (const int, const int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fix up the data storage lsub for L-subscripts. It removes the subscript sets for structural pruning, and applies permuation to the remaining subscripts.  <a href="#7061332d759d7e4d73c1b2e5cb0bf2bf"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#22ec97af17a44cd9aae6aeae3de50e87">callocateA</a> (int, int, <a class="el" href="structcomplex.html">complex</a> **, int **, int **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A.  <a href="#22ec97af17a44cd9aae6aeae3de50e87"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#1743ff4c80f33a0ae166a61a691c348a">cgstrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int *, void *, int, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#c98da7d6b5809dadb1cae9bc019619ce">csnode_dfs</a> (const int, const int, const int *, const int *, const int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#ab1987caf36c8eedcf605b59e56a9d5d">csnode_bmod</a> (const int, const int, const int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode.  <a href="#ab1987caf36c8eedcf605b59e56a9d5d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#780968651deed587e187bd7661edbb20">cpanel_dfs</a> (const int, const int, const int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structcomplex.html">complex</a> *, int *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#c37d9a28b8745daf72ae1d5ad29c140d">cpanel_bmod</a> (const int, const int, const int, const int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLU [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#6aace79c0009c9a5a32219753f51b695">ccolumn_dfs</a> (const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#19d15802e430420a5512a8e9bbe42d64">ccolumn_bmod</a> (const int, const int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *, int *, int *, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#247f30177d193339d293899fe702afe6">ccopy_to_ucol</a> (int, int, int *, int *, int *, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#4a31e35e95f28f69549ffa45bebd4499">cpivotL</a> (const int, const double, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#65d7df9e58c2415f455dbe6db9a99f2b">cpruneL</a> (const int, const int *, const int, const int, const int *, const int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#88701835280a367a90b9ea2a73f946f0">creadmt</a> (int *, int *, int *, <a class="el" href="structcomplex.html">complex</a> **, int **, int **)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#7f454dd3045fdd51e8bf0d29c7561fe5">cGenXtrue</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#afc07318b1802f00402e7d8afbeaaeae">cFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, int, <a class="el" href="structcomplex.html">complex</a> *, int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *) [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's.  <a href="#afc07318b1802f00402e7d8afbeaaeae"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a45033d577ad2afbe488a837d6aba8cf">cgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMat [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#82dc99bce4d9b50c3534eb424d03182b">cgsitrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int *, void *, int, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.htm [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#c7a85f8c55c71b4f4d454c4d62ffbfae">cldperm</a> (int, int, int, int[], int[], <a class="el" href="structcomplex.html">complex</a>[], int[], float[], float[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#c4e46d9d75c94503e94b4599960479d7">ilu_csnode_dfs</a> (const int, const int, const int *, const int *, const int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#9f427fadf45d56409840775c99ce8967">ilu_cpanel_dfs</a> (const int, const int, const int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structcomplex.html">complex</a> *, float *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#94b01af5a7e93ca2cc3cf52717e767a0">ilu_ccolumn_dfs</a> (const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a9bf5072c6b1c6803b1dba973ac4be3e">ilu_ccopy_to_ucol</a> (int, int, int *, int *, int *, <a class="el" href="structcomplex.html">complex</a> *, int, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, double, int, <a class="el" href="structcomplex.html">complex</a> *, int *, <a class="el" hre [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#c4edc9f45dad6dd53caca13240690633">ilu_cpivotL</a> (const int, const double, int *, int *, int, int *, int *, int *, int *, double, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, <a class="el" href="structcomplex.html">complex</a>, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</ [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#cf639d4fcc71c90f3e966b47787ad834">ilu_cdrop_row</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, int, int, double, int, int *, double *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, float *, float *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#d34b27648bc5b43d1ad19dd017f8273f">cgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float *, float *, float *, float *, float *, int *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver related.  <a href="#d34b27648bc5b43d1ad19dd017f8273f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#dbc57dc56d0c962aa148a573895883b0">claqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float *, float *, float, float, float, char *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#2ca330446884f122ee31f4f2b5243abe">cgscon</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float, float *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#9a5b1cc4e96708825cc21108ebbeb061">cPivotGrowth</a> (int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#64715c1d0510eaf5f8e37f2465e9e8d6">cgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#8299a994a223b7178314fe7faff74508">sp_ctrsv</a> (char *, char *, char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, int *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b.  <a href="#8299a994a223b7178314fe7faff74508"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#59e320a29e9ded59a46e8d64619ffac6">sp_cgemv</a> (char *, <a class="el" href="structcomplex.html">complex</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structcomplex.html">complex</a> *, int, <a class="el" href="structcomplex.html">complex</a>, <a class="el" href="structcomplex.html">complex</a> [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y.  <a href="#59e320a29e9ded59a46e8d64619ffac6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#0473a1696817ed02c501ca8af8ff0285">sp_cgemm</a> (char *, char *, int, int, int, <a class="el" href="structcomplex.html">complex</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structcomplex.html">complex</a> *, int, <a class="el" href="structcomplex.html">complex</a>, <a class="el" href="structco [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#47c1dd1b8332f4366d5c5112219fdb3a">slamch_</a> (char *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#0f124ea0294cce1fb4c467b1d63ac209">cLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a>, void *, int, int, int, int, int, float, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="stru [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Memory-related.  <a href="#0f124ea0294cce1fb4c467b1d63ac209"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#f3bbcd362fb260a0dba5488a3e4ee926">cSetRWork</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> **, <a class="el" href="structcomplex.html">complex</a> **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays.  <a href="#f3bbcd362fb260a0dba5488a3e4ee926"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a759583daf08db801cf6fe8018442d4c">cLUWorkFree</a> (int *, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines.  <a href="#a759583daf08db801cf6fe8018442d4c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#255ed62863700298939edfda48ae534a">cLUMemXpand</a> (int, int, <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a>, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization.  <a href="#255ed62863700298939edfda48ae534a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structcomplex.html">complex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#db98fa14a907e0e848a35e896d4040db">complexMalloc</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structcomplex.html">complex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#f558e3813415369a8805c473a7eaa5e8">complexCalloc</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#42361c3ce2ba81d149ffba01fbd6f138">floatMalloc</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#3e1230bff11a9e47c35555299bcdcf1b">floatCalloc</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#cea36c2598bb3f8a27b6985634d2b8e9">cmemory_usage</a> (const int, const int, const int, const int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#7ac9ff71eef6bf8c52c41eb9209a0caf">cQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#97e43257315ae194779ffe9c3dc9c213">ilu_cQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#34243c626347c973358d3d095802783b">creadhb</a> (int *, int *, int *, <a class="el" href="structcomplex.html">complex</a> **, int **, int **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines.  <a href="#34243c626347c973358d3d095802783b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#0cce050053c795f6b9c52174008bf775">creadrb</a> (int *, int *, int *, <a class="el" href="structcomplex.html">complex</a> **, int **, int **)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#7c84a33df79e533f6167e4a1e9ce89cb">creadtriple</a> (int *, int *, int *, <a class="el" href="structcomplex.html">complex</a> **, int **, int **)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#3891d961d41be3af94b755b27d371c1d">cCompRow_to_CompCol</a> (int, int, int, <a class="el" href="structcomplex.html">complex</a> *, int *, int *, <a class="el" href="structcomplex.html">complex</a> **, int **, int **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage.  <a href="#3891d961d41be3af94b755b27d371c1d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#614eea417aeb37825463637f47c980ba">cfill</a> (<a class="el" href="structcomplex.html">complex</a> *, int, <a class="el" href="structcomplex.html">complex</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fills a <a class="el" href="structcomplex.html">complex</a> precision array with a given value.  <a href="#614eea417aeb37825463637f47c980ba"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#293818022b119a511598f4766c54a1ee">cinf_norm_error</a> (int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector.  <a href="#293818022b119a511598f4766c54a1ee"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#7a41152a5800bc02bef17b56e070d0e6">PrintPerf</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *, <a class="el" href="structcomplex.html">complex</a>, <a class="el" href="structcomplex.html">co [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#98d44fe59660f87330b0172151a76141">sqselect</a> (int, float *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#f091472c1fb3c085c384bf52b3bebd8d">cPrint_CompCol_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging.  <a href="#f091472c1fb3c085c384bf52b3bebd8d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#8482f76b710a91d26250bca719b9d00c">cPrint_SuperNode_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#1cbad8400b16c776b112f20b8645757d">cPrint_Dense_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#4f43048c524cbdac07232ab635e67364">cprint_lu_col</a> (char *, int, int, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor.  <a href="#4f43048c524cbdac07232ab635e67364"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#ad0c06e9adc1e29a0ab2e78c38119bb4">print_double_vec</a> (char *, int, double *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#2cfc97393b65ddc5a40fdc523a50003a">check_tempv</a> (int, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre> 
+ -- SuperLU routine (version 4.1) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November, 2010</pre><p>
+<pre> Global data structures used in LU factorization -</pre><p>
+<pre>   nsuper: supernodes = nsuper + 1, numbered [0, nsuper].
+   (xsup,supno): supno[i] is the supernode no to which i belongs;
+	xsup(s) points to the beginning of the s-th supernode.
+	e.g.   supno 0 1 2 2 3 3 3 4 4 4 4 4   (n=12)
+	        xsup 0 1 2 4 7 12
+	Note: dfs will be performed on supernode rep. relative to the new 
+	      row pivoting ordering</pre><p>
+<pre>   (xlsub,lsub): lsub[*] contains the compressed subscript of
+	rectangular supernodes; xlsub[j] points to the starting
+	location of the j-th column in lsub[*]. Note that xlsub 
+	is indexed by column.
+	Storage: original row subscripts</pre><p>
+<pre>      During the course of sparse LU factorization, we also use
+	(xlsub,lsub) for the purpose of symmetric pruning. For each
+	supernode {s,s+1,...,t=s+r} with first column s and last
+	column t, the subscript set
+		lsub[j], j=xlsub[s], .., xlsub[s+1]-1
+	is the structure of column s (i.e. structure of this supernode).
+	It is used for the storage of numerical values.
+	Furthermore,
+		lsub[j], j=xlsub[t], .., xlsub[t+1]-1
+	is the structure of the last column t of this supernode.
+	It is for the purpose of symmetric pruning. Therefore, the
+	structural subscripts can be rearranged without making physical
+	interchanges among the numerical values.</pre><p>
+<pre>	However, if the supernode has only one column, then we
+	only keep one set of subscripts. For any subscript interchange
+	performed, similar interchange must be done on the numerical
+	values.</pre><p>
+<pre>	The last column structures (for pruning) will be removed
+	after the numercial LU factorization phase.</pre><p>
+<pre>   (xlusup,lusup): lusup[*] contains the numerical values of the
+	rectangular supernodes; xlusup[j] points to the starting
+	location of the j-th column in storage vector lusup[*]
+	Note: xlusup is indexed by column.
+	Each rectangular supernode is stored by column-major
+	scheme, consistent with Fortran 2-dim array storage.</pre><p>
+<pre>   (xusub,ucol,usub): ucol[*] stores the numerical values of
+	U-columns outside the rectangular supernodes. The row
+	subscript of nonzero ucol[k] is stored in usub[k].
+	xusub[i] points to the starting location of column i in ucol.
+	Storage: new row subscripts; that is subscripts of PA.
+ </pre> <hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="b6fd6105e64ed14a0c9281326f05e623"></a><!-- doxytag: member="slu_cdefs.h::int_t" ref="b6fd6105e64ed14a0c9281326f05e623" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef int <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="22ec97af17a44cd9aae6aeae3de50e87"></a><!-- doxytag: member="slu_cdefs.h::callocateA" ref="22ec97af17a44cd9aae6aeae3de50e87" args="(int, int, complex **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void callocateA           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="19d15802e430420a5512a8e9bbe42d64"></a><!-- doxytag: member="slu_cdefs.h::ccolumn_bmod" ref="19d15802e430420a5512a8e9bbe42d64" args="(const int, const int, complex *, complex *, int *, int *, int, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ccolumn_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>fpanelc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose:
+ ========
+ Performs numeric block updates (sup-col) in topological order.
+ It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ Special processing on the supernodal portion of L[*,j]
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="6aace79c0009c9a5a32219753f51b695"></a><!-- doxytag: member="slu_cdefs.h::ccolumn_dfs" ref="6aace79c0009c9a5a32219753f51b695" args="(const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ccolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   CCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS 
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal 
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="3891d961d41be3af94b755b27d371c1d"></a><!-- doxytag: member="slu_cdefs.h::cCompRow_to_CompCol" ref="3891d961d41be3af94b755b27d371c1d" args="(int, int, int, complex *, int *, int *, complex **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cCompRow_to_CompCol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2b7edfb65023104b0f88f5aaab393248"></a><!-- doxytag: member="slu_cdefs.h::cCopy_CompCol_Matrix" ref="2b7edfb65023104b0f88f5aaab393248" args="(SuperMatrix *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cCopy_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7378a64fc445fa7e0101059d7353f4ac"></a><!-- doxytag: member="slu_cdefs.h::cCopy_Dense_Matrix" ref="7378a64fc445fa7e0101059d7353f4ac" args="(int, int, complex *, int, complex *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cCopy_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Copies a two-dimensional matrix X to another matrix Y. 
+</div>
+</div><p>
+<a class="anchor" name="247f30177d193339d293899fe702afe6"></a><!-- doxytag: member="slu_cdefs.h::ccopy_to_ucol" ref="247f30177d193339d293899fe702afe6" args="(int, int, int *, int *, int *, complex *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ccopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4f54bdbff678075fdf06720bbb299346"></a><!-- doxytag: member="slu_cdefs.h::cCreate_CompCol_Matrix" ref="4f54bdbff678075fdf06720bbb299346" args="(SuperMatrix *, int, int, int, complex *, int *, int *, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cCreate_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="866240e7f5a35e821bc898d2e5ba26fc"></a><!-- doxytag: member="slu_cdefs.h::cCreate_CompRow_Matrix" ref="866240e7f5a35e821bc898d2e5ba26fc" args="(SuperMatrix *, int, int, int, complex *, int *, int *, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cCreate_CompRow_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9af123cab0520e5800a1b60668a09de6"></a><!-- doxytag: member="slu_cdefs.h::cCreate_Dense_Matrix" ref="9af123cab0520e5800a1b60668a09de6" args="(SuperMatrix *, int, int, complex *, int, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cCreate_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="63d7d14c6a2312b9f95844e5055deae9"></a><!-- doxytag: member="slu_cdefs.h::cCreate_SuperNode_Matrix" ref="63d7d14c6a2312b9f95844e5055deae9" args="(SuperMatrix *, int, int, int, complex *, int *, int *, int *, int *, int *, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cCreate_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="614eea417aeb37825463637f47c980ba"></a><!-- doxytag: member="slu_cdefs.h::cfill" ref="614eea417aeb37825463637f47c980ba" args="(complex *, int, complex)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cfill           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="afc07318b1802f00402e7d8afbeaaeae"></a><!-- doxytag: member="slu_cdefs.h::cFillRHS" ref="afc07318b1802f00402e7d8afbeaaeae" args="(trans_t, int, complex *, int, SuperMatrix *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cFillRHS           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7f454dd3045fdd51e8bf0d29c7561fe5"></a><!-- doxytag: member="slu_cdefs.h::cGenXtrue" ref="7f454dd3045fdd51e8bf0d29c7561fe5" args="(int, int, complex *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cGenXtrue           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2ca330446884f122ee31f4f2b5243abe"></a><!-- doxytag: member="slu_cdefs.h::cgscon" ref="2ca330446884f122ee31f4f2b5243abe" args="(char *, SuperMatrix *, SuperMatrix *, float, float *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgscon           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>norm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>anorm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   CGSCON estimates the reciprocal of the condition number of a general 
+   real matrix A, in either the 1-norm or the infinity-norm, using   
+   the LU factorization computed by CGETRF.   *</pre><p>
+<pre>   An estimate is obtained for norm(inv(A)), and the reciprocal of the   
+   condition number is computed as   
+      RCOND = 1 / ( norm(A) * norm(inv(A)) ).</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>    NORM    (input) char*
+            Specifies whether the 1-norm condition number or the   
+            infinity-norm condition number is required:   
+            = '1' or 'O':  1-norm;   
+            = 'I':         Infinity-norm.</pre><p>
+<pre>    L       (input) SuperMatrix*
+            The factor L from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf()</a>. Use compressed row subscripts storage for supernodes,
+            i.e., L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre>    U       (input) SuperMatrix*
+            The factor U from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+            Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre>    ANORM   (input) float
+            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
+            If NORM = 'I', the infinity-norm of the original matrix A.</pre><p>
+<pre>    RCOND   (output) float*
+           The reciprocal of the condition number of the matrix A,   
+           computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><p>
+<pre>    INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="d34b27648bc5b43d1ad19dd017f8273f"></a><!-- doxytag: member="slu_cdefs.h::cgsequ" ref="d34b27648bc5b43d1ad19dd017f8273f" args="(SuperMatrix *, float *, float *, float *, float *, float *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgsequ           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   CGSEQU computes row and column scalings intended to equilibrate an   
+   M-by-N sparse matrix A and reduce its condition number. R returns the row
+   scale factors and C the column scale factors, chosen to try to make   
+   the largest element in each row and column of the matrix B with   
+   elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.</pre><p>
+<pre>   R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
+   number and BIGNUM = largest safe number.  Use of these scaling   
+   factors is not guaranteed to reduce the condition number of A but   
+   works well in practice.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The matrix of dimension (A->nrow, A->ncol) whose equilibration
+           factors are to be computed. The type of A can be:
+           Stype = SLU_NC; Dtype = SLU_C; Mtype = SLU_GE.</pre><p>
+<pre>   R       (output) float*, size A->nrow
+           If INFO = 0 or INFO > M, R contains the row scale factors   
+           for A.</pre><p>
+<pre>   C       (output) float*, size A->ncol
+           If INFO = 0,  C contains the column scale factors for A.</pre><p>
+<pre>   ROWCND  (output) float*
+           If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
+           smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
+           AMAX is neither too large nor too small, it is not worth   
+           scaling by R.</pre><p>
+<pre>   COLCND  (output) float*
+           If INFO = 0, COLCND contains the ratio of the smallest   
+           C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
+           worth scaling by C.</pre><p>
+<pre>   AMAX    (output) float*
+           Absolute value of largest matrix element.  If AMAX is very   
+           close to overflow or very close to underflow, the matrix   
+           should be scaled.</pre><p>
+<pre>   INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value   
+           > 0:  if INFO = i,  and i is   
+                 <= A->nrow:  the i-th row of A is exactly zero   
+                 >  A->ncol:  the (i-M)-th column of A is exactly zero</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="908282efea752470dcd38f794b435dbc"></a><!-- doxytag: member="slu_cdefs.h::cgsisv" ref="908282efea752470dcd38f794b435dbc" args="(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgsisv           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="35048de8a07c47ab61c15793f63ad398"></a><!-- doxytag: member="slu_cdefs.h::cgsisx" ref="35048de8a07c47ab61c15793f63ad398" args="(superlu_options_t *, SuperMatrix *, int *, int *, int *, char *, float *, float *, SuperMatrix *, SuperMatrix *, void *, int, SuperMatrix *, SuperMatrix *, float *, float *, mem_usage_t *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgsisx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> CGSISX computes an approximate solutions of linear equations
+ A*X=B or A'*X=B, using the ILU factorization from <a class="el" href="cgsitrf_8c.html#16b6ae6c8a2812e62ace44629f313bc6">cgsitrf()</a>.
+ An estimation of the condition number is provided. 
+ The routine performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A is
+	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+	     = TRANS or CONJ).</pre><p>
+<pre>	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+	     matrix that usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the matrix A (after equilibration if options->Equil = YES)
+	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>	1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+	     and info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	1.6. The system of equations is solved for X using the factored form
+	     of A.</pre><p>
+<pre>	1.7. options->IterRefine is not used</pre><p>
+<pre>	1.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>	1.9. options for ILU only
+	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+		entries of modulus 1 on the diagonal and off-diagonal entries
+		of modulus at most 1. If MC64 fails, <a class="el" href="dgsequ_8c.html#af22b247cc134fb0ba90285e84ccebb4" title="Driver related.">dgsequ()</a> is used to
+		equilibrate the system.
+              ( Default: LargeDiag )
+	     2) options->ILU_DropTol = tau is the threshold for dropping.
+		For L, it is used directly (for the whole row in a supernode);
+		For U, ||A(:,i)||_oo * tau is used as the threshold
+	        for the	i-th column.
+		If a secondary dropping rule is required, tau will
+	        also be used to compute the second threshold.
+              ( Default: 1e-4 )
+	     3) options->ILU_FillFactor = gamma, used as the initial guess
+		of memory growth.
+		If a secondary dropping rule is required, it will also
+              be used as an upper bound of the memory.
+              ( Default: 10 )
+	     4) options->ILU_DropRule specifies the dropping rule.
+		Option	      Meaning
+		======	      ===========
+		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+			      p = gamma * nnz(A(:,j)).
+		DROP_AREA:    Variation of ILUTP, for j-th column, use
+			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+			      Otherwise
+				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+			      tau_U(j) uses the similar rule.
+			      NOTE: the thresholds used by L and U are separate.
+		DROP_INTERP:  Compute the second dropping threshold by
+			      interpolation instead of sorting (default).
+			      In this case, the actual fill ratio is not
+			      guaranteed smaller than gamma.
+		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+		( Default: DROP_BASIC | DROP_AREA )
+	     5) options->ILU_Norm is the criterion of measuring the magnitude
+		of a row in a supernode of L. ( Default is INF_NORM )
+		options->ILU_Norm	RowSize(x[1:n])
+		=================	===============
+		ONE_NORM		||x||_1 / n
+		TWO_NORM		||x||_2 / sqrt(n)
+		INF_NORM		max{|x[i]|}
+	     6) options->ILU_MILU specifies the type of MILU's variation.
+		= SILU: do not perform Modified ILU;
+		= SMILU_1 (not recommended):
+		    U(i,i) := U(i,i) + sum(dropped entries);
+		= SMILU_2:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+		= SMILU_3:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+		NOTE: Even SMILU_1 does not preserve the column sum because of
+		late dropping.
+              ( Default: SILU )
+	     7) options->ILU_FillTol is used as the perturbation when
+		encountering zero pivots. If some U(i,i) = 0, so that U is
+		exactly singular, then
+		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+              ( Default: 1e-2 )</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+	to the transpose of A:</pre><p>
+<pre>	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A' is
+	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>	2.2. Permute columns of transpose(A) (rows of A),
+	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+	     usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the transpose(A) (after equilibration if
+	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+	     permutation Pr determined by partial pivoting.</pre><p>
+<pre>	2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+	     And info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	2.6. The system of equations is solved for X using the factored form
+	     of transpose(A).</pre><p>
+<pre>	2.7. If options->IterRefine is not used.</pre><p>
+<pre>	2.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the LU decomposition will be performed and how the
+	   system will be solved.</pre><p>
+<pre> A	   (input/output) SuperMatrix*
+	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+	   of the linear equations is A->nrow. Currently, the type of A can be:
+	   Stype = SLU_NC or SLU_NR, Dtype = SLU_C, Mtype = SLU_GE.
+	   In the future, more general A may be handled.</pre><p>
+<pre>	   On entry, If options->Fact = FACTORED and equed is not 'N',
+	   then A must have been equilibrated by the scaling factors in
+	   R and/or C.
+	   On exit, A is not modified
+         if options->Equil = NO, or
+         if options->Equil = YES but equed = 'N' on exit, or
+         if options->RowPerm = NO.</pre><p>
+<pre>	   Otherwise, if options->Equil = YES and equed is not 'N',
+	   A is scaled as follows:
+	   If A->Stype = SLU_NC:
+	     equed = 'R':  A := diag(R) * A
+	     equed = 'C':  A := A * diag(C)
+	     equed = 'B':  A := diag(R) * A * diag(C).
+	   If A->Stype = SLU_NR:
+	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre>         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+            the matrix to an I-matrix, that is A is modified as follows:
+            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+            off-diagonal entries of modulus at most 1. P is a permutation
+            obtained from MC64.
+            If MC64 fails, <a class="el" href="cgsequ_8c.html#36bb68fea3ee44ff05eb7da2ee059fa5" title="Driver related.">cgsequ()</a> is used to equilibrate the system,
+            and A is scaled as above, but no permutation is involved.
+            On exit, A is restored to the orginal row numbering, so
+            Dr*A*Dc is returned.</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+	   which defines the permutation matrix Pc; perm_c[i] = j means
+	   column i of A is in position j in A*Pc.
+	   On exit, perm_c may be overwritten by the product of the input
+	   perm_c and a permutation that postorders the elimination tree
+	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+	   is already in postorder.</pre><p>
+<pre>	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+	   which describes permutation of columns of transpose(A) 
+	   (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+	   which defines the permutation matrix Pr, and is determined
+	   by MC64 first then followed by partial pivoting.
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+	   determines permutation of rows of transpose(A)
+	   (columns of A) as described above.</pre><p>
+<pre>	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	   will try to use the input perm_r, unless a certain threshold
+	   criterion is violated. In that case, perm_r is overwritten by a
+	   new permutation determined by partial pivoting or diagonal
+	   threshold pivoting.
+	   Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+	   Elimination tree of Pc'*A'*A*Pc.
+	   If options->Fact != FACTORED and options->Fact != DOFACT,
+	   etree is an input argument, otherwise it is an output argument.
+	   Note: etree is a vector of parent pointers for a forest whose
+	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+	   Specifies the form of equilibration that was done.
+	   = 'N': No equilibration.
+	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+	   = 'B': Both row and column equilibration, i.e., A was replaced 
+		  by diag(R)*A*diag(C).
+	   If options->Fact = FACTORED, equed is an input argument,
+	   otherwise it is an output argument.</pre><p>
+<pre> R	   (input/output) float*, dimension (A->nrow)
+	   The row scale factors for A or transpose(A).
+	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+	   If equed = 'N' or 'C', R is not accessed.
+	   If options->Fact = FACTORED, R is an input argument,
+	       otherwise, R is output.
+	   If options->Fact = FACTORED and equed = 'R' or 'B', each element
+	       of R must be positive.</pre><p>
+<pre> C	   (input/output) float*, dimension (A->ncol)
+	   The column scale factors for A or transpose(A).
+	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+	   If equed = 'N' or 'R', C is not accessed.
+	   If options->Fact = FACTORED, C is an input argument,
+	       otherwise, C is output.
+	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+	       of C must be positive.</pre><p>
+<pre> L	   (output) SuperMatrix*
+	   The factor L from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses compressed row subscripts storage for supernodes, i.e.,
+	   L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre> U	   (output) SuperMatrix*
+	   The factor U from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses column-wise storage scheme, i.e., U has types:
+	   Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+	   User supplied workspace, should be large enough
+	   to hold data structures for factors L and U.
+	   On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 mem_usage->total_needed; no other side effects.</pre><p>
+<pre>	   See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B	   (input/output) SuperMatrix*
+	   B has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+	   On entry, the right hand side matrix.
+	   If B->ncol = 0, only LU decomposition is performed, the triangular
+			   solve is skipped.
+	   On exit,
+	      if equed = 'N', B is not modified; otherwise
+	      if A->Stype = SLU_NC:
+		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+		    B is overwritten by diag(R)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+		    B is overwritten by diag(C)*B;
+	      if A->Stype = SLU_NR:
+		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+		    B is overwritten by diag(C)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+		    B is overwritten by diag(R)*B.</pre><p>
+<pre> X	   (output) SuperMatrix*
+	   X has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+	   to the original system of equations. Note that A and B are modified
+	   on exit if equed is not 'N', and the solution to the equilibrated
+	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+	   and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) float*
+	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+	   The infinity norm is used. If recip_pivot_growth is much less
+	   than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) float*
+	   The estimate of the reciprocal condition number of the matrix A
+	   after equilibration (if done). If rcond is less than the machine
+	   precision (in particular, if rcond = 0), the matrix is singular
+	   to working precision. This condition is indicated by a return
+	   code of info > 0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+	   Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+	     The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+	     The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+	     The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+	  Record the statistics on runtime and floating-point operation count.
+	  See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+	   > 0: if info = i, and i is
+		<= A->ncol: number of zero pivots. They are replaced by small
+		      entries due to options->ILU_FillTol.
+		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+		      precision, meaning that the matrix is singular to
+		      working precision. Nevertheless, the solution and
+		      error bounds are computed because there are a number
+		      of situations where the computed solution can be more
+		      accurate than the value of RCOND would suggest.
+		> A->ncol+1: number of bytes allocated when memory allocation
+		      failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="82dc99bce4d9b50c3534eb424d03182b"></a><!-- doxytag: member="slu_cdefs.h::cgsitrf" ref="82dc99bce4d9b50c3534eb424d03182b" args="(superlu_options_t *, SuperMatrix *, int, int, int *, void *, int, int *, int *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgsitrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> CGSITRF computes an ILU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the ILU decomposition will be performed.</pre><p>
+<pre> A	    (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+	    (A->nrow, A->ncol). The type of A can be:
+	    Stype = SLU_NCP; Dtype = SLU_C; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+	    To control degree of relaxing supernodes. If the number
+	    of nodes (columns) in a subtree of the elimination tree is less
+	    than relax, this subtree is considered as one supernode,
+	    regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+	    A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+	    Elimination tree of A'*A.
+	    Note: etree is a vector of parent pointers for a forest whose
+	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+	    On input, the columns of A should be permuted so that the
+	    etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+	    User-supplied work space and space for the output data structures.
+	    Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the
+	    permutation matrix Pc; perm_c[i] = j means column i of A is
+	    in position j in A*Pc.
+	    When searching for diagonal, perm_c[*] is applied to the
+	    row subscripts of A, so that diagonal threshold pivoting
+	    can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+	    Row permutation vector which defines the permutation matrix Pr,
+	    perm_r[i] = j means row i of A is in position j in Pr*A.
+	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	       will try to use the input perm_r, unless a certain threshold
+	       criterion is violated. In that case, perm_r is overwritten by
+	       a new permutation determined by partial pivoting or diagonal
+	       threshold pivoting.
+	    Otherwise, perm_r is output argument;</pre><p>
+<pre> L	    (output) SuperMatrix*
+	    The factor L from the factorization Pr*A=L*U; use compressed row
+	    subscripts storage for supernodes, i.e., L has type:
+	    Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre> U	    (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+	    storage scheme, i.e., U has types: Stype = SLU_NC,
+	    Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+	    Record the statistics on runtime and floating-point operation count.
+	    See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+	    = 0: successful exit
+	    < 0: if info = -i, the i-th argument had an illegal value
+	    > 0: if info = i, and i is
+	       <= A->ncol: number of zero pivots. They are replaced by small
+		  entries according to options->ILU_FillTol.
+	       > A->ncol: number of bytes allocated when memory allocation
+		  failure occurred, plus A->ncol. If lwork = -1, it is
+		  the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays:
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 4 of them:
+	      marker/marker1 are used for panel dfs, see (ilu_)<a class="el" href="dpanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">dpanel_dfs.c</a>;
+	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+	      marker_relax(has its own space) is used for relaxed supernodes.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+	Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the
+	last column of a supernode.
+	The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+	supernodal representative r, repfnz[r] is the location of the first
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+	the panel diagonal. These are filled in during <a class="el" href="dpanel__dfs_8c.html#2a809488b87d2c1a9b2a574b726e8517">dpanel_dfs()</a>, and are
+	used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+		   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a>.
+	It is also used by the dropping routine <a class="el" href="ilu__ddrop__row_8c.html#380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="64715c1d0510eaf5f8e37f2465e9e8d6"></a><!-- doxytag: member="slu_cdefs.h::cgsrfs" ref="64715c1d0510eaf5f8e37f2465e9e8d6" args="(trans_t, SuperMatrix *, SuperMatrix *, SuperMatrix *, int *, int *, char *, float *, float *, SuperMatrix *, SuperMatrix *, float *, float *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgsrfs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   CGSRFS improves the computed solution to a system of linear   
+   equations and provides error bounds and backward error estimates for 
+   the solution.</pre><p>
+<pre>   If equilibration was performed, the system becomes:
+           (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The original matrix A in the system, or the scaled A if
+           equilibration was done. The type of A can be:
+           Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_GE.</pre><p>
+<pre>   L       (input) SuperMatrix*
+	     The factor L from the factorization Pr*A*Pc=L*U. Use
+           compressed row subscripts storage for supernodes, 
+           i.e., L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre>   U       (input) SuperMatrix*
+           The factor U from the factorization Pr*A*Pc=L*U as computed by
+           <a class="el" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf()</a>. Use column-wise storage scheme, 
+           i.e., U has types: Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre>   perm_c  (input) int*, dimension (A->ncol)
+	     Column permutation vector, which defines the 
+           permutation matrix Pc; perm_c[i] = j means column i of A is 
+           in position j in A*Pc.</pre><p>
+<pre>   perm_r  (input) int*, dimension (A->nrow)
+           Row permutation vector, which defines the permutation matrix Pr;
+           perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>   equed   (input) Specifies the form of equilibration that was done.
+           = 'N': No equilibration.
+           = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+           = 'C': Column equilibration, i.e., A was postmultiplied by
+                  diag(C).
+           = 'B': Both row and column equilibration, i.e., A was replaced 
+                  by diag(R)*A*diag(C).</pre><p>
+<pre>   R       (input) float*, dimension (A->nrow)
+           The row scale factors for A.
+           If equed = 'R' or 'B', A is premultiplied by diag(R).
+           If equed = 'N' or 'C', R is not accessed.</pre><p>
+<pre>   C       (input) float*, dimension (A->ncol)
+           The column scale factors for A.
+           If equed = 'C' or 'B', A is postmultiplied by diag(C).
+           If equed = 'N' or 'R', C is not accessed.</pre><p>
+<pre>   B       (input) SuperMatrix*
+           B has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+           The right hand side matrix B.
+           if equed = 'R' or 'B', B is premultiplied by diag(R).</pre><p>
+<pre>   X       (input/output) SuperMatrix*
+           X has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+           On entry, the solution matrix X, as computed by <a class="el" href="cgstrs_8c.html#19517b9d29e4faf9ae777ca6fb9d415b">cgstrs()</a>.
+           On exit, the improved solution matrix X.
+           if *equed = 'C' or 'B', X should be premultiplied by diag(C)
+               in order to obtain the solution to the original system.</pre><p>
+<pre>   FERR    (output) float*, dimension (B->ncol)   
+           The estimated forward error bound for each solution vector   
+           X(j) (the j-th column of the solution matrix X).   
+           If XTRUE is the true solution corresponding to X(j), FERR(j) 
+           is an estimated upper bound for the magnitude of the largest 
+           element in (X(j) - XTRUE) divided by the magnitude of the   
+           largest element in X(j).  The estimate is as reliable as   
+           the estimate for RCOND, and is almost always a slight   
+           overestimate of the true error.</pre><p>
+<pre>   BERR    (output) float*, dimension (B->ncol)   
+           The componentwise relative backward error of each solution   
+           vector X(j) (i.e., the smallest relative change in   
+           any element of A or B that makes X(j) an exact solution).</pre><p>
+<pre>   stat     (output) SuperLUStat_t*
+            Record the statistics on runtime and floating-point operation count.
+            See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre>   info    (output) int*   
+           = 0:  successful exit   
+            < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    Internal Parameters   
+    ===================</pre><p>
+<pre>    ITMAX is the maximum number of steps of iterative refinement.</pre><p>
+<pre> </pre> 
+</div>
+</div><p>
+<a class="anchor" name="58aff6521bb64732e981ce5779820a89"></a><!-- doxytag: member="slu_cdefs.h::cgssv" ref="58aff6521bb64732e981ce5779820a89" args="(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgssv           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> CGSSV solves the system of linear equations A*X=B, using the
+ LU factorization from CGSTRF. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. Permute the columns of A, forming A*Pc, where Pc
+           is a permutation matrix. For more details of this step, 
+           see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.2. Factor A as Pr*A*Pc=L*U with the permutation Pr determined
+           by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      1.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+      above algorithm to the transpose of A:</pre><p>
+<pre>      2.1. Permute columns of transpose(A) (rows of A),
+           forming transpose(A)*Pc, where Pc is a permutation matrix. 
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.2. Factor A as Pr*transpose(A)*Pc=L*U with the permutation Pr
+           determined by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      2.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR; Dtype = SLU_C; Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre> perm_c  (input/output) int*
+         If A->Stype = SLU_NC, column permutation vector of size A->ncol
+         which defines the permutation matrix Pc; perm_c[i] = j means 
+         column i of A is in position j in A*Pc.
+         If A->Stype = SLU_NR, column permutation vector of size A->nrow
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre>         If options->ColPerm = MY_PERMC or options->Fact = SamePattern or
+            options->Fact = SamePattern_SameRowPerm, it is an input argument.
+            On exit, perm_c may be overwritten by the product of the input
+            perm_c and a permutation that postorders the elimination tree
+            of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+            is already in postorder.
+         Otherwise, it is an output argument.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined 
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.
+         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->RowPerm = MY_PERMR or
+            options->Fact = SamePattern_SameRowPerm, perm_r is an
+            input argument.
+         otherwise it is an output argument.</pre><p>
+<pre> L       (output) SuperMatrix*
+         The factor L from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+         > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                so the solution could not be computed.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="264b6681cc04244cdd116978acfe4e2a"></a><!-- doxytag: member="slu_cdefs.h::cgssvx" ref="264b6681cc04244cdd116978acfe4e2a" args="(superlu_options_t *, SuperMatrix *, int *, int *, int *, char *, float *, float *, SuperMatrix *, SuperMatrix *, void *, int, SuperMatrix *, SuperMatrix *, float *, float *, float *, float *, mem_usage_t *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgssvx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> CGSSVX solves the system of linear equations A*X=B or A'*X=B, using
+ the LU factorization from <a class="el" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf()</a>. Error bounds on the solution and
+ a condition estimate are also provided. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A is
+           overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+           (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+           = TRANS or CONJ).</pre><p>
+<pre>      1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+           matrix that usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the matrix A (after equilibration if options->Equil = YES)
+           as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>      1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form of 
+           A is used to estimate the condition number of the matrix A. If
+           the reciprocal of the condition number is less than machine
+           precision, info = A->ncol+1 is returned as a warning, but the
+           routine still goes on to solve for X and computes error bounds
+           as described below.</pre><p>
+<pre>      1.6. The system of equations is solved for X using the factored form
+           of A.</pre><p>
+<pre>      1.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      1.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R)
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+      to the transpose of A:</pre><p>
+<pre>      2.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A' is
+           overwritten by diag(R)*A'*diag(C) and B by diag(R)*B 
+           (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>      2.2. Permute columns of transpose(A) (rows of A), 
+           forming transpose(A)*Pc, where Pc is a permutation matrix that 
+           usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the transpose(A) (after equilibration if 
+           options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+           permutation Pr determined by partial pivoting.</pre><p>
+<pre>      2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form 
+           of transpose(A) is used to estimate the condition number of the
+           matrix A. If the reciprocal of the condition number
+           is less than machine precision, info = A->nrow+1 is returned as
+           a warning, but the routine still goes on to solve for X and
+           computes error bounds as described below.</pre><p>
+<pre>      2.6. The system of equations is solved for X using the factored form
+           of transpose(A).</pre><p>
+<pre>      2.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      2.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R) 
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input/output) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of the linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR, Dtype = SLU_D, Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre>         On entry, If options->Fact = FACTORED and equed is not 'N', 
+         then A must have been equilibrated by the scaling factors in
+         R and/or C.  
+         On exit, A is not modified if options->Equil = NO, or if 
+         options->Equil = YES but equed = 'N' on exit.
+         Otherwise, if options->Equil = YES and equed is not 'N',
+         A is scaled as follows:
+         If A->Stype = SLU_NC:
+           equed = 'R':  A := diag(R) * A
+           equed = 'C':  A := A * diag(C)
+           equed = 'B':  A := diag(R) * A * diag(C).
+         If A->Stype = SLU_NR:
+           equed = 'R':  transpose(A) := diag(R) * transpose(A)
+           equed = 'C':  transpose(A) := transpose(A) * diag(C)
+           equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+         which defines the permutation matrix Pc; perm_c[i] = j means
+         column i of A is in position j in A*Pc.
+         On exit, perm_c may be overwritten by the product of the input
+         perm_c and a permutation that postorders the elimination tree
+         of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+         is already in postorder.</pre><p>
+<pre>         If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.</pre><p>
+<pre>         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+         will try to use the input perm_r, unless a certain threshold
+         criterion is violated. In that case, perm_r is overwritten by a
+         new permutation determined by partial pivoting or diagonal
+         threshold pivoting.
+         Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+         Elimination tree of Pc'*A'*A*Pc.
+         If options->Fact != FACTORED and options->Fact != DOFACT,
+         etree is an input argument, otherwise it is an output argument.
+         Note: etree is a vector of parent pointers for a forest whose
+         vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+         Specifies the form of equilibration that was done.
+         = 'N': No equilibration.
+         = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+         = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+         = 'B': Both row and column equilibration, i.e., A was replaced 
+                by diag(R)*A*diag(C).
+         If options->Fact = FACTORED, equed is an input argument,
+         otherwise it is an output argument.</pre><p>
+<pre> R       (input/output) float*, dimension (A->nrow)
+         The row scale factors for A or transpose(A).
+         If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+         If equed = 'N' or 'C', R is not accessed.
+         If options->Fact = FACTORED, R is an input argument,
+             otherwise, R is output.
+         If options->zFact = FACTORED and equed = 'R' or 'B', each element
+             of R must be positive.</pre><p>
+<pre> C       (input/output) float*, dimension (A->ncol)
+         The column scale factors for A or transpose(A).
+         If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+         If equed = 'N' or 'R', C is not accessed.
+         If options->Fact = FACTORED, C is an input argument,
+             otherwise, C is output.
+         If options->Fact = FACTORED and equed = 'C' or 'B', each element
+             of C must be positive.</pre><p>
+<pre> L       (output) SuperMatrix*
+	   The factor L from the factorization
+             Pr*A*Pc=L*U              (if A->Stype SLU_= NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+         User supplied workspace, should be large enough
+         to hold data structures for factors L and U.
+         On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               mem_usage->total_needed; no other side effects.</pre><p>
+<pre>         See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         If B->ncol = 0, only LU decomposition is performed, the triangular
+                         solve is skipped.
+         On exit,
+            if equed = 'N', B is not modified; otherwise
+            if A->Stype = SLU_NC:
+               if options->Trans = NOTRANS and equed = 'R' or 'B',
+                  B is overwritten by diag(R)*B;
+               if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+                  B is overwritten by diag(C)*B;
+            if A->Stype = SLU_NR:
+               if options->Trans = NOTRANS and equed = 'C' or 'B',
+                  B is overwritten by diag(C)*B;
+               if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+                  B is overwritten by diag(R)*B.</pre><p>
+<pre> X       (output) SuperMatrix*
+         X has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE. 
+         If info = 0 or info = A->ncol+1, X contains the solution matrix
+         to the original system of equations. Note that A and B are modified
+         on exit if equed is not 'N', and the solution to the equilibrated
+         system is inv(diag(C))*X if options->Trans = NOTRANS and
+         equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+         and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) float*
+         The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+         The infinity norm is used. If recip_pivot_growth is much less
+         than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) float*
+         The estimate of the reciprocal condition number of the matrix A
+         after equilibration (if done). If rcond is less than the machine
+         precision (in particular, if rcond = 0), the matrix is singular
+         to working precision. This condition is indicated by a return
+         code of info > 0.</pre><p>
+<pre> FERR    (output) float*, dimension (B->ncol)   
+         The estimated forward error bound for each solution vector   
+         X(j) (the j-th column of the solution matrix X).   
+         If XTRUE is the true solution corresponding to X(j), FERR(j) 
+         is an estimated upper bound for the magnitude of the largest 
+         element in (X(j) - XTRUE) divided by the magnitude of the   
+         largest element in X(j).  The estimate is as reliable as   
+         the estimate for RCOND, and is almost always a slight   
+         overestimate of the true error.
+         If options->IterRefine = NOREFINE, ferr = 1.0.</pre><p>
+<pre> BERR    (output) float*, dimension (B->ncol)
+         The componentwise relative backward error of each solution   
+         vector X(j) (i.e., the smallest relative change in   
+         any element of A or B that makes X(j) an exact solution).
+         If options->IterRefine = NOREFINE, berr = 1.0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+         Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+           The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+           The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+           The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+         = 0: successful exit   
+         < 0: if info = -i, the i-th argument had an illegal value   
+         > 0: if info = i, and i is   
+              <= A->ncol: U(i,i) is exactly zero. The factorization has   
+                    been completed, but the factor U is exactly   
+                    singular, so the solution and error bounds   
+                    could not be computed.   
+              = A->ncol+1: U is nonsingular, but RCOND is less than machine
+                    precision, meaning that the matrix is singular to
+                    working precision. Nevertheless, the solution and
+                    error bounds are computed because there are a number
+                    of situations where the computed solution can be more
+                    accurate than the value of RCOND would suggest.   
+              > A->ncol+1: number of bytes allocated when memory allocation
+                    failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="1743ff4c80f33a0ae166a61a691c348a"></a><!-- doxytag: member="slu_cdefs.h::cgstrf" ref="1743ff4c80f33a0ae166a61a691c348a" args="(superlu_options_t *, SuperMatrix *, int, int, int *, void *, int, int *, int *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgstrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> CGSTRF computes an LU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper 
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = SLU_NCP; Dtype = SLU_C; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+          To control degree of relaxing supernodes. If the number
+          of nodes (columns) in a subtree of the elimination tree is less
+          than relax, this subtree is considered as one supernode,
+          regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+          A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+          Elimination tree of A'*A.
+          Note: etree is a vector of parent pointers for a forest whose
+          vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+          On input, the columns of A should be permuted so that the
+          etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+          User-supplied work space and space for the output data structures.
+          Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the 
+          permutation matrix Pc; perm_c[i] = j means column i of A is 
+          in position j in A*Pc.
+          When searching for diagonal, perm_c[*] is applied to the
+          row subscripts of A, so that diagonal threshold pivoting
+          can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+          Row permutation vector which defines the permutation matrix Pr,
+          perm_r[i] = j means row i of A is in position j in Pr*A.
+          If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+             will try to use the input perm_r, unless a certain threshold
+             criterion is violated. In that case, perm_r is overwritten by
+             a new permutation determined by partial pivoting or diagonal
+             threshold pivoting.
+          Otherwise, perm_r is output argument;</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = SLU_NC, 
+          Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+          = 0: successful exit
+          < 0: if info = -i, the i-th argument had an illegal value
+          > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                and division by zero will occur if it is used to solve a
+                system of equations.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol. If lwork = -1, it is
+                the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays: 
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   xprune[0:n-1]: xprune[*] points to locations in subscript 
+	vector lsub[*]. For column i, xprune[i] denotes the point where 
+	structural pruning begins. I.e. only xlsub[i],..,xprune[i]-1 need 
+	to be traversed for symbolic factorization.</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been 
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 3 of them: marker/marker1 are used for panel dfs, 
+	      see <a class="el" href="cpanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">cpanel_dfs.c</a>; marker2 is used for inner-factorization,
+            see <a class="el" href="ccolumn__dfs_8c.html" title="Performs a symbolic factorization.">ccolumn_dfs.c</a>.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+      Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs) 
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the 
+	last column of a supernode.
+      The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a 
+	supernodal representative r, repfnz[r] is the location of the first 
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below 
+      the panel diagonal. These are filled in during <a class="el" href="cpanel__dfs_8c.html#052edfd06c5aeab7a37b5fa558a06602">cpanel_dfs()</a>, and are
+      used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+	    	   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__cdefs_8h.html" title="Header file for real operations.">slu_cdefs.h</a>.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="a45033d577ad2afbe488a837d6aba8cf"></a><!-- doxytag: member="slu_cdefs.h::cgstrs" ref="a45033d577ad2afbe488a837d6aba8cf" args="(trans_t, SuperMatrix *, SuperMatrix *, int *, int *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cgstrs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> CGSTRS solves a system of linear equations A*X=B or A'*X=B
+ with A sparse and B dense, using the LU factorization computed by
+ CGSTRF.</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre> L       (input) SuperMatrix*
+         The factor L from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf()</a>. Use compressed row subscripts storage for supernodes,
+         i.e., L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (input) SuperMatrix*
+         The factor U from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="cgstrf_8c.html#9c9f2ce12946612c7426a10352ac5984">cgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><p>
+<pre> perm_c  (input) int*, dimension (L->ncol)
+	   Column permutation vector, which defines the 
+         permutation matrix Pc; perm_c[i] = j means column i of A is 
+         in position j in A*Pc.</pre><p>
+<pre> perm_r  (input) int*, dimension (L->nrow)
+         Row permutation vector, which defines the permutation matrix Pr; 
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+ 	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="2cfc97393b65ddc5a40fdc523a50003a"></a><!-- doxytag: member="slu_cdefs.h::check_tempv" ref="2cfc97393b65ddc5a40fdc523a50003a" args="(int, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void check_tempv           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="293818022b119a511598f4766c54a1ee"></a><!-- doxytag: member="slu_cdefs.h::cinf_norm_error" ref="293818022b119a511598f4766c54a1ee" args="(int, SuperMatrix *, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cinf_norm_error           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="dbc57dc56d0c962aa148a573895883b0"></a><!-- doxytag: member="slu_cdefs.h::claqgs" ref="dbc57dc56d0c962aa148a573895883b0" args="(SuperMatrix *, float *, float *, float, float, float, char *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void claqgs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   CLAQGS equilibrates a general sparse M by N matrix A using the row and   
+   scaling factors in the vectors R and C.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input/output) SuperMatrix*
+           On exit, the equilibrated matrix.  See EQUED for the form of 
+           the equilibrated matrix. The type of A can be:
+	    Stype = NC; Dtype = SLU_C; Mtype = GE.</pre><p>
+<pre>   R       (input) float*, dimension (A->nrow)
+           The row scale factors for A.</pre><p>
+<pre>   C       (input) float*, dimension (A->ncol)
+           The column scale factors for A.</pre><p>
+<pre>   ROWCND  (input) float
+           Ratio of the smallest R(i) to the largest R(i).</pre><p>
+<pre>   COLCND  (input) float
+           Ratio of the smallest C(i) to the largest C(i).</pre><p>
+<pre>   AMAX    (input) float
+           Absolute value of largest matrix entry.</pre><p>
+<pre>   EQUED   (output) char*
+           Specifies the form of equilibration that was done.   
+           = 'N':  No equilibration   
+           = 'R':  Row equilibration, i.e., A has been premultiplied by  
+                   diag(R).   
+           = 'C':  Column equilibration, i.e., A has been postmultiplied  
+                   by diag(C).   
+           = 'B':  Both row and column equilibration, i.e., A has been
+                   replaced by diag(R) * A * diag(C).</pre><p>
+<pre>   Internal Parameters   
+   ===================</pre><p>
+<pre>   THRESH is a threshold value used to decide if row or column scaling   
+   should be done based on the ratio of the row or column scaling   
+   factors.  If ROWCND < THRESH, row scaling is done, and if   
+   COLCND < THRESH, column scaling is done.</pre><p>
+<pre>   LARGE and SMALL are threshold values used to decide if row scaling   
+   should be done based on the absolute size of the largest matrix   
+   element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="c7a85f8c55c71b4f4d454c4d62ffbfae"></a><!-- doxytag: member="slu_cdefs.h::cldperm" ref="c7a85f8c55c71b4f4d454c4d62ffbfae" args="(int, int, int, int[], int[], complex[], int[], float[], float[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cldperm           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0f124ea0294cce1fb4c467b1d63ac209"></a><!-- doxytag: member="slu_cdefs.h::cLUMemInit" ref="0f124ea0294cce1fb4c467b1d63ac209" args="(fact_t, void *, int, int, int, int, int, float, SuperMatrix *, SuperMatrix *, GlobalLU_t *, int **, complex **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cLUMemInit           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a> </td>
+          <td class="paramname"> <em>fact</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>annz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>fill_ratio</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>iwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname"> <em>dwork</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Memory-related.<p>
+<pre>
+ For those unpredictable size, estimate as fill_ratio * nnz(A).
+ Return value:
+     If lwork = -1, return the estimated amount of space required, plus n;
+     otherwise, return the amount of space actually allocated when
+     memory allocation failure occurred.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="255ed62863700298939edfda48ae534a"></a><!-- doxytag: member="slu_cdefs.h::cLUMemXpand" ref="255ed62863700298939edfda48ae534a" args="(int, int, MemType, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cLUMemXpand           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>next</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> </td>
+          <td class="paramname"> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>maxlen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="a759583daf08db801cf6fe8018442d4c"></a><!-- doxytag: member="slu_cdefs.h::cLUWorkFree" ref="a759583daf08db801cf6fe8018442d4c" args="(int *, complex *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cLUWorkFree           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cea36c2598bb3f8a27b6985634d2b8e9"></a><!-- doxytag: member="slu_cdefs.h::cmemory_usage" ref="cea36c2598bb3f8a27b6985634d2b8e9" args="(const int, const int, const int, const int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cmemory_usage           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f558e3813415369a8805c473a7eaa5e8"></a><!-- doxytag: member="slu_cdefs.h::complexCalloc" ref="f558e3813415369a8805c473a7eaa5e8" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcomplex.html">complex</a>* complexCalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="db98fa14a907e0e848a35e896d4040db"></a><!-- doxytag: member="slu_cdefs.h::complexMalloc" ref="db98fa14a907e0e848a35e896d4040db" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcomplex.html">complex</a>* complexMalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8086902aa8be3fc7d04c3c82ec3a79dc"></a><!-- doxytag: member="slu_cdefs.h::countnz" ref="8086902aa8be3fc7d04c3c82ec3a79dc" args="(const int, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void countnz           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c37d9a28b8745daf72ae1d5ad29c140d"></a><!-- doxytag: member="slu_cdefs.h::cpanel_bmod" ref="c37d9a28b8745daf72ae1d5ad29c140d" args="(const int, const int, const int, const int, complex *, complex *, int *, int *, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cpanel_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>    Performs numeric block updates (sup-panel) in topological order.
+    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+    Special processing on the supernodal portion of L[*,j]</pre><p>
+<pre>    Before entering this routine, the original nonzeros in the panel 
+    were already copied into the spa[m,w].</pre><p>
+<pre>    Updated/Output parameters-
+    dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
+    collectively in the m-by-w vector dense[*]. 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="780968651deed587e187bd7661edbb20"></a><!-- doxytag: member="slu_cdefs.h::cpanel_dfs" ref="780968651deed587e187bd7661edbb20" args="(const int, const int, const int, SuperMatrix *, int *, int *, complex *, int *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cpanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel. 
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a 
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="9a5b1cc4e96708825cc21108ebbeb061"></a><!-- doxytag: member="slu_cdefs.h::cPivotGrowth" ref="9a5b1cc4e96708825cc21108ebbeb061" args="(int, SuperMatrix *, int *, SuperMatrix *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float cPivotGrowth           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> Compute the reciprocal pivot growth factor of the leading ncols columns
+ of the matrix, using the formula:
+     min_j ( max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>) / max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(U_ij)</a>) )</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> ncols    (input) int
+          The number of columns of matrices A, L and U.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = NC; Dtype = SLU_C; Mtype = GE.</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SC; Dtype = SLU_C; Mtype = TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = NC;
+          Dtype = SLU_C; Mtype = TRU.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="4a31e35e95f28f69549ffa45bebd4499"></a><!-- doxytag: member="slu_cdefs.h::cpivotL" ref="4a31e35e95f28f69549ffa45bebd4499" args="(const int, const double, int *, int *, int *, int *, int *, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cpivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+           pivot row = k;
+       ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+           pivot row = j;
+       ELSE
+           pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0      success;
+                 i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="f091472c1fb3c085c384bf52b3bebd8d"></a><!-- doxytag: member="slu_cdefs.h::cPrint_CompCol_Matrix" ref="f091472c1fb3c085c384bf52b3bebd8d" args="(char *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cPrint_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1cbad8400b16c776b112f20b8645757d"></a><!-- doxytag: member="slu_cdefs.h::cPrint_Dense_Matrix" ref="1cbad8400b16c776b112f20b8645757d" args="(char *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cPrint_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4f43048c524cbdac07232ab635e67364"></a><!-- doxytag: member="slu_cdefs.h::cprint_lu_col" ref="4f43048c524cbdac07232ab635e67364" args="(char *, int, int, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cprint_lu_col           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8482f76b710a91d26250bca719b9d00c"></a><!-- doxytag: member="slu_cdefs.h::cPrint_SuperNode_Matrix" ref="8482f76b710a91d26250bca719b9d00c" args="(char *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cPrint_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="65d7df9e58c2415f455dbe6db9a99f2b"></a><!-- doxytag: member="slu_cdefs.h::cpruneL" ref="65d7df9e58c2415f455dbe6db9a99f2b" args="(const int, const int *, const int, const int, const int *, const int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cpruneL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Prunes the L-structure of supernodes whose L-structure
+   contains the current pivot row "pivrow"
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="7ac9ff71eef6bf8c52c41eb9209a0caf"></a><!-- doxytag: member="slu_cdefs.h::cQuerySpace" ref="7ac9ff71eef6bf8c52c41eb9209a0caf" args="(SuperMatrix *, SuperMatrix *, mem_usage_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int cQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="34243c626347c973358d3d095802783b"></a><!-- doxytag: member="slu_cdefs.h::creadhb" ref="34243c626347c973358d3d095802783b" args="(int *, int *, int *, complex **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void creadhb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="88701835280a367a90b9ea2a73f946f0"></a><!-- doxytag: member="slu_cdefs.h::creadmt" ref="88701835280a367a90b9ea2a73f946f0" args="(int *, int *, int *, complex **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void creadmt           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0cce050053c795f6b9c52174008bf775"></a><!-- doxytag: member="slu_cdefs.h::creadrb" ref="0cce050053c795f6b9c52174008bf775" args="(int *, int *, int *, complex **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void creadrb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7c84a33df79e533f6167e4a1e9ce89cb"></a><!-- doxytag: member="slu_cdefs.h::creadtriple" ref="7c84a33df79e533f6167e4a1e9ce89cb" args="(int *, int *, int *, complex **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void creadtriple           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f3bbcd362fb260a0dba5488a3e4ee926"></a><!-- doxytag: member="slu_cdefs.h::cSetRWork" ref="f3bbcd362fb260a0dba5488a3e4ee926" args="(int, int, complex *, complex **, complex **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cSetRWork           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ab1987caf36c8eedcf605b59e56a9d5d"></a><!-- doxytag: member="slu_cdefs.h::csnode_bmod" ref="ab1987caf36c8eedcf605b59e56a9d5d" args="(const int, const int, const int, complex *, complex *, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int csnode_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c98da7d6b5809dadb1cae9bc019619ce"></a><!-- doxytag: member="slu_cdefs.h::csnode_dfs" ref="c98da7d6b5809dadb1cae9bc019619ce" args="(const int, const int, const int *, const int *, const int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int csnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="csnode__dfs_8c.html#1c7b34abd214279177619773ad24b759">csnode_dfs()</a> - Determine the union of the row structures of those 
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="7061332d759d7e4d73c1b2e5cb0bf2bf"></a><!-- doxytag: member="slu_cdefs.h::fixupL" ref="7061332d759d7e4d73c1b2e5cb0bf2bf" args="(const int, const int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fixupL           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3e1230bff11a9e47c35555299bcdcf1b"></a><!-- doxytag: member="slu_cdefs.h::floatCalloc" ref="3e1230bff11a9e47c35555299bcdcf1b" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float* floatCalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="42361c3ce2ba81d149ffba01fbd6f138"></a><!-- doxytag: member="slu_cdefs.h::floatMalloc" ref="42361c3ce2ba81d149ffba01fbd6f138" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float* floatMalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="94b01af5a7e93ca2cc3cf52717e767a0"></a><!-- doxytag: member="slu_cdefs.h::ilu_ccolumn_dfs" ref="94b01af5a7e93ca2cc3cf52717e767a0" args="(const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_ccolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   ILU_CCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="a9bf5072c6b1c6803b1dba973ac4be3e"></a><!-- doxytag: member="slu_cdefs.h::ilu_ccopy_to_ucol" ref="a9bf5072c6b1c6803b1dba973ac4be3e" args="(int, int, int *, int *, int *, complex *, int, milu_t, double, int, complex *, int *, GlobalLU_t *, float *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_ccopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cf639d4fcc71c90f3e966b47787ad834"></a><!-- doxytag: member="slu_cdefs.h::ilu_cdrop_row" ref="cf639d4fcc71c90f3e966b47787ad834" args="(superlu_options_t *, int, int, double, int, int *, double *, GlobalLU_t *, float *, float *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_cdrop_row           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ae8eb367a0a2fcdf734738bc9630df85"></a><!-- doxytag: member="slu_cdefs.h::ilu_countnz" ref="ae8eb367a0a2fcdf734738bc9630df85" args="(const int, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_countnz           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9f427fadf45d56409840775c99ce8967"></a><!-- doxytag: member="slu_cdefs.h::ilu_cpanel_dfs" ref="9f427fadf45d56409840775c99ce8967" args="(const int, const int, const int, SuperMatrix *, int *, int *, complex *, float *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_cpanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel.
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="c4edc9f45dad6dd53caca13240690633"></a><!-- doxytag: member="slu_cdefs.h::ilu_cpivotL" ref="c4edc9f45dad6dd53caca13240690633" args="(const int, const double, int *, int *, int, int *, int *, int *, int *, double, milu_t, complex, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_cpivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>diagind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>swap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iswap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>fill_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname"> <em>milu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>drop_sum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+	     pivot row = k;
+	 ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+	     pivot row = j;
+	 ELSE
+	     pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0	  success;
+		   i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="97e43257315ae194779ffe9c3dc9c213"></a><!-- doxytag: member="slu_cdefs.h::ilu_cQuerySpace" ref="97e43257315ae194779ffe9c3dc9c213" args="(SuperMatrix *, SuperMatrix *, mem_usage_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_cQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="c4e46d9d75c94503e94b4599960479d7"></a><!-- doxytag: member="slu_cdefs.h::ilu_csnode_dfs" ref="c4e46d9d75c94503e94b4599960479d7" args="(const int, const int, const int *, const int *, const int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_csnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__csnode__dfs_8c.html#a6c4a4029db106e8dd56bc0fe1f0090b">ilu_csnode_dfs()</a> - Determine the union of the row structures of those
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore,
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="ad0c06e9adc1e29a0ab2e78c38119bb4"></a><!-- doxytag: member="slu_cdefs.h::print_double_vec" ref="ad0c06e9adc1e29a0ab2e78c38119bb4" args="(char *, int, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int print_double_vec           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7a41152a5800bc02bef17b56e070d0e6"></a><!-- doxytag: member="slu_cdefs.h::PrintPerf" ref="7a41152a5800bc02bef17b56e070d0e6" args="(SuperMatrix *, SuperMatrix *, mem_usage_t *, complex, complex, complex *, complex *, char *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PrintPerf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="47c1dd1b8332f4366d5c5112219fdb3a"></a><!-- doxytag: member="slu_cdefs.h::slamch_" ref="47c1dd1b8332f4366d5c5112219fdb3a" args="(char *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float slamch_           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>cmach</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+    =======</pre><p>
+<pre>    SLAMCH determines single precision machine parameters.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    CMACH   (input) CHARACTER*1   
+            Specifies the value to be returned by SLAMCH:   
+            = 'E' or 'e',   SLAMCH := eps   
+            = 'S' or 's ,   SLAMCH := sfmin   
+            = 'B' or 'b',   SLAMCH := base   
+            = 'P' or 'p',   SLAMCH := eps*base   
+            = 'N' or 'n',   SLAMCH := t   
+            = 'R' or 'r',   SLAMCH := rnd   
+            = 'M' or 'm',   SLAMCH := emin   
+            = 'U' or 'u',   SLAMCH := rmin   
+            = 'L' or 'l',   SLAMCH := emax   
+            = 'O' or 'o',   SLAMCH := rmax</pre><p>
+<pre>            where</pre><p>
+<pre>            eps   = relative machine precision   
+            sfmin = safe minimum, such that 1/sfmin does not overflow   
+            base  = base of the machine   
+            prec  = eps*base   
+            t     = number of (base) digits in the mantissa   
+            rnd   = 1.0 when rounding occurs in addition, 0.0 otherwise   
+            emin  = minimum exponent before (gradual) underflow   
+            rmin  = underflow threshold - base**(emin-1)   
+            emax  = largest exponent before overflow   
+            rmax  = overflow threshold  - (base**emax)*(1-eps)</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="0473a1696817ed02c501ca8af8ff0285"></a><!-- doxytag: member="slu_cdefs.h::sp_cgemm" ref="0473a1696817ed02c501ca8af8ff0285" args="(char *, char *, int, int, int, complex, SuperMatrix *, complex *, int, complex, complex *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_cgemm           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transa</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   sp_c performs one of the matrix-matrix operations</pre><p>
+<pre>      C := alpha*op( A )*op( B ) + beta*C,</pre><p>
+<pre>   where  op( X ) is one of</pre><p>
+<pre>      op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),</pre><p>
+<pre>   alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
+   an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANSA - (input) char*
+            On entry, TRANSA specifies the form of op( A ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSA = 'N' or 'n',  op( A ) = A.   
+               TRANSA = 'T' or 't',  op( A ) = A'.   
+               TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
+            Unchanged on exit.</pre><p>
+<pre>   TRANSB - (input) char*
+            On entry, TRANSB specifies the form of op( B ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSB = 'N' or 'n',  op( B ) = B.   
+               TRANSB = 'T' or 't',  op( B ) = B'.   
+               TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
+            Unchanged on exit.</pre><p>
+<pre>   M      - (input) int   
+            On entry,  M  specifies  the number of rows of the matrix 
+	     op( A ) and of the matrix C.  M must be at least zero. 
+	     Unchanged on exit.</pre><p>
+<pre>   N      - (input) int
+            On entry,  N specifies the number of columns of the matrix 
+	     op( B ) and the number of columns of the matrix C. N must be 
+	     at least zero.
+	     Unchanged on exit.</pre><p>
+<pre>   K      - (input) int
+            On entry, K specifies the number of columns of the matrix 
+	     op( A ) and the number of rows of the matrix op( B ). K must 
+	     be at least  zero.   
+           Unchanged on exit.</pre><p>
+<pre>   ALPHA  - (input) <a class="el" href="structcomplex.html">complex</a>
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+            Currently, the type of A can be:
+                Stype = NC or NCP; Dtype = SLU_C; Mtype = GE. 
+            In the future, more general A can be handled.</pre><p>
+<pre>   B      - COMPLEX PRECISION array of DIMENSION ( LDB, kb ), where kb is 
+            n when TRANSB = 'N' or 'n',  and is  k otherwise.   
+            Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
+            part of the array B must contain the matrix B, otherwise 
+            the leading n by k part of the array B must contain the 
+            matrix B.   
+            Unchanged on exit.</pre><p>
+<pre>   LDB    - (input) int
+            On entry, LDB specifies the first dimension of B as declared 
+            in the calling (sub) program. LDB must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max( 1, n )</a>.  
+            Unchanged on exit.</pre><p>
+<pre>   BETA   - (input) <a class="el" href="structcomplex.html">complex</a>
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then C need not be set on input.</pre><p>
+<pre>   C      - COMPLEX PRECISION array of DIMENSION ( LDC, n ).   
+            Before entry, the leading m by n part of the array C must 
+            contain the matrix C,  except when beta is zero, in which 
+            case C need not be set on entry.   
+            On exit, the array C is overwritten by the m by n matrix 
+	     ( alpha*op( A )*B + beta*C ).</pre><p>
+<pre>   LDC    - (input) int
+            On entry, LDC specifies the first dimension of C as declared 
+            in the calling (sub)program. LDC must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max(1,m)</a>.   
+            Unchanged on exit.</pre><p>
+<pre>   ==== Sparse Level 3 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="59e320a29e9ded59a46e8d64619ffac6"></a><!-- doxytag: member="slu_cdefs.h::sp_cgemv" ref="59e320a29e9ded59a46e8d64619ffac6" args="(char *, complex, SuperMatrix *, complex *, int, complex, complex *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_cgemv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incy</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>  
+   Purpose   
+   =======</pre><p>
+<pre>   <a class="el" href="csp__blas2_8c.html#1adbbd2f478e6a22843d82a07d42fb63" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x...">sp_cgemv()</a>  performs one of the matrix-vector operations   
+      y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
+   where alpha and beta are scalars, x and y are vectors and A is a
+   sparse A->nrow by A->ncol matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANS  - (input) char*
+            On entry, TRANS specifies the operation to be performed as   
+            follows:   
+               TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
+               TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
+               TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.</pre><p>
+<pre>   ALPHA  - (input) <a class="el" href="structcomplex.html">complex</a>
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Before entry, the leading m by n part of the array A must   
+            contain the matrix of coefficients.</pre><p>
+<pre>   X      - (input) complex*, array of DIMENSION at least   
+            ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
+           and at least   
+            ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
+            Before entry, the incremented array X must contain the   
+            vector x.</pre><p>
+<pre>   INCX   - (input) int
+            On entry, INCX specifies the increment for the elements of   
+            X. INCX must not be zero.</pre><p>
+<pre>   BETA   - (input) <a class="el" href="structcomplex.html">complex</a>
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then Y need not be set on input.</pre><p>
+<pre>   Y      - (output) complex*,  array of DIMENSION at least   
+            ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
+            and at least   
+            ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
+            Before entry with BETA non-zero, the incremented array Y   
+            must contain the vector y. On exit, Y is overwritten by the 
+            updated vector y.</pre><p>
+<pre>   INCY   - (input) int
+            On entry, INCY specifies the increment for the elements of   
+            Y. INCY must not be zero.</pre><p>
+<pre>    ==== Sparse Level 2 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="8299a994a223b7178314fe7faff74508"></a><!-- doxytag: member="slu_cdefs.h::sp_ctrsv" ref="8299a994a223b7178314fe7faff74508" args="(char *, char *, char *, SuperMatrix *, SuperMatrix *, complex *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_ctrsv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>uplo</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>diag</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose
+   =======</pre><p>
+<pre>   <a class="el" href="csp__blas2_8c.html#51cbd689a51632885b9b034002631a6e" title="Solves one of the systems of equations A*x = b, or A'*x = b.">sp_ctrsv()</a> solves one of the systems of equations   
+       A*x = b,   or   A'*x = b,
+   where b and x are n element vectors and A is a sparse unit , or   
+   non-unit, upper or lower triangular matrix.   
+   No test for singularity or near-singularity is included in this   
+   routine. Such tests must be performed before calling this routine.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   uplo   - (input) char*
+            On entry, uplo specifies whether the matrix is an upper or   
+             lower triangular matrix as follows:   
+                uplo = 'U' or 'u'   A is an upper triangular matrix.   
+                uplo = 'L' or 'l'   A is a lower triangular matrix.</pre><p>
+<pre>   trans  - (input) char*
+             On entry, trans specifies the equations to be solved as   
+             follows:   
+                trans = 'N' or 'n'   A*x = b.   
+                trans = 'T' or 't'   A'*x = b.
+                trans = 'C' or 'c'   A^H*x = b.</pre><p>
+<pre>   diag   - (input) char*
+             On entry, diag specifies whether or not A is unit   
+             triangular as follows:   
+                diag = 'U' or 'u'   A is assumed to be unit triangular.   
+                diag = 'N' or 'n'   A is not assumed to be unit   
+                                    triangular.</pre><p>
+<pre>   L       - (input) SuperMatrix*
+	       The factor L from the factorization Pr*A*Pc=L*U. Use
+             compressed row subscripts storage for supernodes,
+             i.e., L has types: Stype = SC, Dtype = SLU_C, Mtype = TRLU.</pre><p>
+<pre>   U       - (input) SuperMatrix*
+	        The factor U from the factorization Pr*A*Pc=L*U.
+	        U has types: Stype = NC, Dtype = SLU_C, Mtype = TRU.</pre><p>
+<pre>   x       - (input/output) complex*
+             Before entry, the incremented array X must contain the n   
+             element right-hand side vector b. On exit, X is overwritten 
+             with the solution vector x.</pre><p>
+<pre>   info    - (output) int*
+             If *info = -i, the i-th argument had an illegal value.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="98d44fe59660f87330b0172151a76141"></a><!-- doxytag: member="slu_cdefs.h::sqselect" ref="98d44fe59660f87330b0172151a76141" args="(int, float *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float sqselect           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__dcomplex_8h-source.html b/DOC/html/slu__dcomplex_8h-source.html
new file mode 100644
index 0000000..e5801c2
--- /dev/null
+++ b/DOC/html/slu__dcomplex_8h-source.html
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_dcomplex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<h1>SRC/slu_dcomplex.h</h1><a href="slu__dcomplex_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00014"></a>00014 <span class="preprocessor">#ifndef __SUPERLU_DCOMPLEX </span><span class="comment">/* allow multiple inclusions */</span>
+<a name="l00015"></a>00015 <span class="preprocessor">#define __SUPERLU_DCOMPLEX</span>
+<a name="l00016"></a>00016 <span class="preprocessor"></span>
+<a name="l00017"></a>00017 
+<a name="l00018"></a>00018 <span class="preprocessor">#ifndef DCOMPLEX_INCLUDE</span>
+<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define DCOMPLEX_INCLUDE</span>
+<a name="l00020"></a>00020 <span class="preprocessor"></span>
+<a name="l00021"></a><a class="code" href="structdoublecomplex.html#7b1a3f489cadc006bfe2fda973267af6">00021</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{ <span class="keywordtype">double</span> r, i; } <a class="code" href="structdoublecomplex.html">doublecomplex</a>;
+<a name="l00022"></a>00022 
+<a name="l00023"></a>00023 
+<a name="l00024"></a>00024 <span class="comment">/* Macro definitions */</span>
+<a name="l00025"></a>00025 
+<a name="l00027"></a><a class="code" href="slu__dcomplex_8h.html#35daa816dd5911bdb075aba8856f9cf0">00027</a> <span class="preprocessor">#define z_add(c, a, b) { (c)->r = (a)->r + (b)->r; \</span>
+<a name="l00028"></a>00028 <span class="preprocessor">                         (c)->i = (a)->i + (b)->i; }</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<a name="l00031"></a><a class="code" href="slu__dcomplex_8h.html#8d01f55090621b481fcec184a2012ffb">00031</a> <span class="preprocessor">#define z_sub(c, a, b) { (c)->r = (a)->r - (b)->r; \</span>
+<a name="l00032"></a>00032 <span class="preprocessor">                         (c)->i = (a)->i - (b)->i; }</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00035"></a><a class="code" href="slu__dcomplex_8h.html#aa361695d091f77d512454ddbee3b2b3">00035</a> <span class="preprocessor">#define zd_mult(c, a, b) { (c)->r = (a)->r * (b); \</span>
+<a name="l00036"></a>00036 <span class="preprocessor">                           (c)->i = (a)->i * (b); }</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00039"></a><a class="code" href="slu__dcomplex_8h.html#008009fa4c5e6733f840478ceb0fb8ae">00039</a> <span class="preprocessor">#define zz_mult(c, a, b) { \</span>
+<a name="l00040"></a>00040 <span class="preprocessor">        double cr, ci; \</span>
+<a name="l00041"></a>00041 <span class="preprocessor">        cr = (a)->r * (b)->r - (a)->i * (b)->i; \</span>
+<a name="l00042"></a>00042 <span class="preprocessor">        ci = (a)->i * (b)->r + (a)->r * (b)->i; \</span>
+<a name="l00043"></a>00043 <span class="preprocessor">        (c)->r = cr; \</span>
+<a name="l00044"></a>00044 <span class="preprocessor">        (c)->i = ci; \</span>
+<a name="l00045"></a>00045 <span class="preprocessor">    }</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span>
+<a name="l00047"></a><a class="code" href="slu__dcomplex_8h.html#8c08104b0130f14f6f40f17bee239e80">00047</a> <span class="preprocessor">#define zz_conj(a, b) { \</span>
+<a name="l00048"></a>00048 <span class="preprocessor">        (a)->r = (b)->r; \</span>
+<a name="l00049"></a>00049 <span class="preprocessor">        (a)->i = -((b)->i); \</span>
+<a name="l00050"></a>00050 <span class="preprocessor">    }</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span>
+<a name="l00053"></a><a class="code" href="slu__dcomplex_8h.html#fe2eaa3195b69824be150f4163f8d056">00053</a> <span class="preprocessor">#define z_eq(a, b)  ( (a)->r == (b)->r && (a)->i == (b)->i )</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span>
+<a name="l00055"></a>00055 
+<a name="l00056"></a>00056 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00058"></a>00058 <span class="preprocessor">#endif</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span>
+<a name="l00060"></a>00060 <span class="comment">/* Prototypes for functions in dcomplex.c */</span>
+<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="dcomplex_8c.html#4cfde2671a83833a15c5b48517781db0" title="Complex Division c = a/b.">z_div</a>(<a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *);
+<a name="l00062"></a>00062 <span class="keywordtype">double</span> <a class="code" href="dcomplex_8c.html#f701b1c549ee8dcf6767742a91681b55" title="Returns sqrt(z.r^2 + z.i^2).">z_abs</a>(<a class="code" href="structdoublecomplex.html">doublecomplex</a> *);     <span class="comment">/* exact */</span>
+<a name="l00063"></a>00063 <span class="keywordtype">double</span> <a class="code" href="dcomplex_8c.html#47b00c33108809a1a9a94ffea7ef2097" title="Approximates the abs. Returns abs(z.r) + abs(z.i).">z_abs1</a>(<a class="code" href="structdoublecomplex.html">doublecomplex</a> *);    <span class="comment">/* approximate */</span>
+<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="dcomplex_8c.html#b03337c37aa8b70db9a3bac9368fb06c" title="Return the exponentiation.">z_exp</a>(<a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *);
+<a name="l00065"></a>00065 <span class="keywordtype">void</span> <a class="code" href="dcomplex_8c.html#753978ee017e26dbdab16a40cf45b2cb" title="Return the complex conjugate.">d_cnjg</a>(<a class="code" href="structdoublecomplex.html">doublecomplex</a> *r, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *z);
+<a name="l00066"></a>00066 <span class="keywordtype">double</span> <a class="code" href="dcomplex_8c.html#58f08c15442d32d787301386ed99ac01" title="Return the imaginary part.">d_imag</a>(<a class="code" href="structdoublecomplex.html">doublecomplex</a> *);
+<a name="l00067"></a>00067 <a class="code" href="structdoublecomplex.html">doublecomplex</a> <a class="code" href="dcomplex_8c.html#36451f8af6b7bd3a4d5f655ead8d5ee4" title="SIGN functions for complex number. Returns z/abs(z).">z_sgn</a>(<a class="code" href="structdoublecomplex.html">doublecomplex</a> *);
+<a name="l00068"></a>00068 <a class="code" href="structdoublecomplex.html">doublecomplex</a> <a class="code" href="dcomplex_8c.html#29f4b8ea3e1309c47c2b1f783c6efa89" title="Square-root of a complex number.">z_sqrt</a>(<a class="code" href="structdoublecomplex.html">doublecomplex</a> *);
+<a name="l00069"></a>00069 
+<a name="l00070"></a>00070 
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span>  }
+<a name="l00074"></a>00074 <span class="preprocessor">#endif</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span>
+<a name="l00076"></a>00076 <span class="preprocessor">#endif</span>
+<a name="l00077"></a>00077 <span class="preprocessor"></span>
+<a name="l00078"></a>00078 <span class="preprocessor">#endif  </span><span class="comment">/* __SUPERLU_DCOMPLEX */</span>
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__dcomplex_8h.html b/DOC/html/slu__dcomplex_8h.html
new file mode 100644
index 0000000..71a37ed
--- /dev/null
+++ b/DOC/html/slu__dcomplex_8h.html
@@ -0,0 +1,446 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_dcomplex.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/slu_dcomplex.h File Reference</h1>Header file for <a class="el" href="structcomplex.html">complex</a> operations. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="slu__dcomplex_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structdoublecomplex.html">doublecomplex</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#35daa816dd5911bdb075aba8856f9cf0">z_add</a>(c, a, b)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Complex Addition c = a + b.  <a href="#35daa816dd5911bdb075aba8856f9cf0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#8d01f55090621b481fcec184a2012ffb">z_sub</a>(c, a, b)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Complex Subtraction c = a - b.  <a href="#8d01f55090621b481fcec184a2012ffb"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#aa361695d091f77d512454ddbee3b2b3">zd_mult</a>(c, a, b)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Complex-Double Multiplication.  <a href="#aa361695d091f77d512454ddbee3b2b3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#008009fa4c5e6733f840478ceb0fb8ae">zz_mult</a>(c, a, b)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Complex-Complex Multiplication.  <a href="#008009fa4c5e6733f840478ceb0fb8ae"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#8c08104b0130f14f6f40f17bee239e80">zz_conj</a>(a, b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#fe2eaa3195b69824be150f4163f8d056">z_eq</a>(a, b)   ( (a)->r == (b)->r && (a)->i == (b)->i )</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Complex equality testing.  <a href="#fe2eaa3195b69824be150f4163f8d056"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#bfe979e43a797b71939e267913abf791">z_div</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Complex Division c = a/b.  <a href="#bfe979e43a797b71939e267913abf791"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#56231cc660c4a63d58ec6f02754b7d41">z_abs</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns sqrt(z.r^2 + z.i^2).  <a href="#56231cc660c4a63d58ec6f02754b7d41"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#366281128462d1635073d7794fda008a">z_abs1</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Approximates the abs. Returns abs(z.r) + abs(z.i).  <a href="#366281128462d1635073d7794fda008a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#90ddba9274fa6a571dadf228763fee4b">z_exp</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the exponentiation.  <a href="#90ddba9274fa6a571dadf228763fee4b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#753978ee017e26dbdab16a40cf45b2cb">d_cnjg</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *r, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the <a class="el" href="structcomplex.html">complex</a> conjugate.  <a href="#753978ee017e26dbdab16a40cf45b2cb"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#7a81445c4ec55ec40b6c5f3014887e61">d_imag</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the imaginary part.  <a href="#7a81445c4ec55ec40b6c5f3014887e61"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#b05d15baf3424d677bf6784414882b21">z_sgn</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">SIGN functions for <a class="el" href="structcomplex.html">complex</a> number. Returns z/abs(z).  <a href="#b05d15baf3424d677bf6784414882b21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#c1e4793bdd705299497404ce177c3dcd">z_sqrt</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Square-root of a <a class="el" href="structcomplex.html">complex</a> number.  <a href="#c1e4793bdd705299497404ce177c3dcd"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre> 
+  -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Contains definitions for various <a class="el" href="structcomplex.html">complex</a> operations.
+ This header file is to be included in source files z*.c
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="35daa816dd5911bdb075aba8856f9cf0"></a><!-- doxytag: member="slu_dcomplex.h::z_add" ref="35daa816dd5911bdb075aba8856f9cf0" args="(c, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define z_add          </td>
+          <td>(</td>
+          <td class="paramtype">c,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">{ (c)->r = (a)->r + (b)->r; \
+                         (c)->i = (a)->i + (b)->i; }
+</pre></div>
+</div>
+</div><p>
+<a class="anchor" name="fe2eaa3195b69824be150f4163f8d056"></a><!-- doxytag: member="slu_dcomplex.h::z_eq" ref="fe2eaa3195b69824be150f4163f8d056" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define z_eq          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( (a)->r == (b)->r && (a)->i == (b)->i )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8d01f55090621b481fcec184a2012ffb"></a><!-- doxytag: member="slu_dcomplex.h::z_sub" ref="8d01f55090621b481fcec184a2012ffb" args="(c, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define z_sub          </td>
+          <td>(</td>
+          <td class="paramtype">c,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">{ (c)->r = (a)->r - (b)->r; \
+                         (c)->i = (a)->i - (b)->i; }
+</pre></div>
+</div>
+</div><p>
+<a class="anchor" name="aa361695d091f77d512454ddbee3b2b3"></a><!-- doxytag: member="slu_dcomplex.h::zd_mult" ref="aa361695d091f77d512454ddbee3b2b3" args="(c, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define zd_mult          </td>
+          <td>(</td>
+          <td class="paramtype">c,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">{ (c)->r = (a)->r * (b); \
+                           (c)->i = (a)->i * (b); }
+</pre></div>
+</div>
+</div><p>
+<a class="anchor" name="8c08104b0130f14f6f40f17bee239e80"></a><!-- doxytag: member="slu_dcomplex.h::zz_conj" ref="8c08104b0130f14f6f40f17bee239e80" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define zz_conj          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">{ \
+        (a)->r = (b)->r; \
+        (a)->i = -((b)->i); \
+    }
+</pre></div>
+</div>
+</div><p>
+<a class="anchor" name="008009fa4c5e6733f840478ceb0fb8ae"></a><!-- doxytag: member="slu_dcomplex.h::zz_mult" ref="008009fa4c5e6733f840478ceb0fb8ae" args="(c, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define zz_mult          </td>
+          <td>(</td>
+          <td class="paramtype">c,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">{ \
+        <span class="keywordtype">double</span> cr, ci; \
+        cr = (a)->r * (b)->r - (a)->i * (b)->i; \
+        ci = (a)->i * (b)->r + (a)->r * (b)->i; \
+        (c)->r = cr; \
+        (c)->i = ci; \
+    }
+</pre></div>
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="753978ee017e26dbdab16a40cf45b2cb"></a><!-- doxytag: member="slu_dcomplex.h::d_cnjg" ref="753978ee017e26dbdab16a40cf45b2cb" args="(doublecomplex *r, doublecomplex *z)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void d_cnjg           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>z</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7a81445c4ec55ec40b6c5f3014887e61"></a><!-- doxytag: member="slu_dcomplex.h::d_imag" ref="7a81445c4ec55ec40b6c5f3014887e61" args="(doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double d_imag           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="56231cc660c4a63d58ec6f02754b7d41"></a><!-- doxytag: member="slu_dcomplex.h::z_abs" ref="56231cc660c4a63d58ec6f02754b7d41" args="(doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double z_abs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="366281128462d1635073d7794fda008a"></a><!-- doxytag: member="slu_dcomplex.h::z_abs1" ref="366281128462d1635073d7794fda008a" args="(doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double z_abs1           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="bfe979e43a797b71939e267913abf791"></a><!-- doxytag: member="slu_dcomplex.h::z_div" ref="bfe979e43a797b71939e267913abf791" args="(doublecomplex *, doublecomplex *, doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void z_div           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="90ddba9274fa6a571dadf228763fee4b"></a><!-- doxytag: member="slu_dcomplex.h::z_exp" ref="90ddba9274fa6a571dadf228763fee4b" args="(doublecomplex *, doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void z_exp           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b05d15baf3424d677bf6784414882b21"></a><!-- doxytag: member="slu_dcomplex.h::z_sgn" ref="b05d15baf3424d677bf6784414882b21" args="(doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structdoublecomplex.html">doublecomplex</a> z_sgn           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c1e4793bdd705299497404ce177c3dcd"></a><!-- doxytag: member="slu_dcomplex.h::z_sqrt" ref="c1e4793bdd705299497404ce177c3dcd" args="(doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structdoublecomplex.html">doublecomplex</a> z_sqrt           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__ddefs_8h-source.html b/DOC/html/slu__ddefs_8h-source.html
new file mode 100644
index 0000000..0eb297d
--- /dev/null
+++ b/DOC/html/slu__ddefs_8h-source.html
@@ -0,0 +1,234 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_ddefs.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<h1>SRC/slu_ddefs.h</h1><a href="slu__ddefs_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00063"></a>00063 <span class="preprocessor">#ifndef __SUPERLU_dSP_DEFS </span><span class="comment">/* allow multiple inclusions */</span>
+<a name="l00064"></a>00064 <span class="preprocessor">#define __SUPERLU_dSP_DEFS</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>
+<a name="l00066"></a>00066 <span class="comment">/*</span>
+<a name="l00067"></a>00067 <span class="comment"> * File name:           dsp_defs.h</span>
+<a name="l00068"></a>00068 <span class="comment"> * Purpose:             Sparse matrix types and function prototypes</span>
+<a name="l00069"></a>00069 <span class="comment"> * History:</span>
+<a name="l00070"></a>00070 <span class="comment"> */</span>
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072 <span class="preprocessor">#ifdef _CRAY</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#include <fortran.h></span>
+<a name="l00074"></a>00074 <span class="preprocessor">#include <string.h></span>
+<a name="l00075"></a>00075 <span class="preprocessor">#endif</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span>
+<a name="l00077"></a>00077 <span class="comment">/* Define my integer type int_t */</span>
+<a name="l00078"></a><a class="code" href="slu__ddefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">00078</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>; <span class="comment">/* default */</span>
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080 <span class="preprocessor">#include <math.h></span>
+<a name="l00081"></a>00081 <span class="preprocessor">#include <limits.h></span>
+<a name="l00082"></a>00082 <span class="preprocessor">#include "<a class="code" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called.">slu_Cnames.h</a>"</span>
+<a name="l00083"></a>00083 <span class="preprocessor">#include "<a class="code" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a>"</span>
+<a name="l00084"></a>00084 <span class="preprocessor">#include "<a class="code" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a>"</span>
+<a name="l00085"></a>00085 
+<a name="l00086"></a>00086 
+<a name="l00087"></a>00087 
+<a name="l00088"></a>00088 <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00089"></a><a class="code" href="structGlobalLU__t.html#94902a11c68912c2d456a58edd29f31d">00089</a>     <span class="keywordtype">int</span>     *xsup;    <span class="comment">/* supernode and column mapping */</span>
+<a name="l00090"></a><a class="code" href="structGlobalLU__t.html#fe003e9f68a924d5ba66c6f655bea55c">00090</a>     <span class="keywordtype">int</span>     *supno;   
+<a name="l00091"></a><a class="code" href="structGlobalLU__t.html#4e7e8cd3ba09e252a04eaf0b8af5fccd">00091</a>     <span class="keywordtype">int</span>     *lsub;    <span class="comment">/* compressed L subscripts */</span>
+<a name="l00092"></a><a class="code" href="structGlobalLU__t.html#c6f1655e303e2947524c29182d0f6a1e">00092</a>     <span class="keywordtype">int</span>     *xlsub;
+<a name="l00093"></a><a class="code" href="structGlobalLU__t.html#726d0a12957a3de9a841b833b8451c09">00093</a>     <span class="keywordtype">double</span>  *lusup;   <span class="comment">/* L supernodes */</span>
+<a name="l00094"></a><a class="code" href="structGlobalLU__t.html#aa63b1382a358278bd2775c921a84246">00094</a>     <span class="keywordtype">int</span>     *xlusup;
+<a name="l00095"></a><a class="code" href="structGlobalLU__t.html#7cfad10c14a658b4079b75c4d980bca8">00095</a>     <span class="keywordtype">double</span>  *ucol;    <span class="comment">/* U columns */</span>
+<a name="l00096"></a><a class="code" href="structGlobalLU__t.html#96b0443ea47703100b9ecad92137dda9">00096</a>     <span class="keywordtype">int</span>     *usub;
+<a name="l00097"></a><a class="code" href="structGlobalLU__t.html#4cbf4786dd6fc6541d5e097b27ab6835">00097</a>     <span class="keywordtype">int</span>     *xusub;
+<a name="l00098"></a>00098     <span class="keywordtype">int</span>     nzlmax;   <span class="comment">/* current max size of lsub */</span>
+<a name="l00099"></a>00099     <span class="keywordtype">int</span>     nzumax;   <span class="comment">/*    "    "    "      ucol */</span>
+<a name="l00100"></a>00100     <span class="keywordtype">int</span>     nzlumax;  <span class="comment">/*    "    "    "     lusup */</span>
+<a name="l00101"></a>00101     <span class="keywordtype">int</span>     n;        <span class="comment">/* number of columns in the matrix */</span>
+<a name="l00102"></a>00102     <a class="code" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f6">LU_space_t</a> MemModel; <span class="comment">/* 0 - system malloc'd; 1 - user provided */</span>
+<a name="l00103"></a>00103     <span class="keywordtype">int</span>     num_expansions;
+<a name="l00104"></a><a class="code" href="structGlobalLU__t.html#edd2ee950bd57f92d4aa9028738b9bdc">00104</a>     <a class="code" href="structe__node.html" title="Headers for 4 types of dynamatically managed memory.">ExpHeader</a> *expanders; <span class="comment">/* Array of pointers to 4 types of memory */</span>
+<a name="l00105"></a>00105     <a class="code" href="structLU__stack__t.html">LU_stack_t</a> stack;     <span class="comment">/* use user supplied memory */</span>
+<a name="l00106"></a>00106 } <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a>;
+<a name="l00107"></a>00107 
+<a name="l00108"></a>00108 
+<a name="l00109"></a>00109 <span class="comment">/* -------- Prototypes -------- */</span>
+<a name="l00110"></a>00110 
+<a name="l00111"></a>00111 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00113"></a>00113 <span class="preprocessor">#endif</span>
+<a name="l00114"></a>00114 <span class="preprocessor"></span>
+<a name="l00116"></a>00116 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00117"></a>00117 <a class="code" href="dgssv_8c.html#d804a93a6806ee4d4694df5b753d91af" title="Driver routines.">dgssv</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00118"></a>00118       <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00119"></a>00119 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00120"></a>00120 <a class="code" href="dgssvx_8c.html#a463b60835d9bca4a4bb1386076d1488">dgssvx</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00121"></a>00121        <span class="keywordtype">char</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00122"></a>00122        <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00123"></a>00123        <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,
+<a name="l00124"></a>00124        <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00125"></a>00125     <span class="comment">/* ILU */</span>
+<a name="l00126"></a>00126 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00127"></a>00127 <a class="code" href="slu__ddefs_8h.html#044b42d8bf8016b19c9013e9bee6d6e7">dgsisv</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00128"></a>00128       <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00129"></a>00129 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00130"></a>00130 <a class="code" href="dgsisx_8c.html#bcbb363b5bc23f538d1210f39bb1d672">dgsisx</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00131"></a>00131        <span class="keywordtype">char</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00132"></a>00132        <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,
+<a name="l00133"></a>00133        <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00134"></a>00134 
+<a name="l00135"></a>00135 
+<a name="l00137"></a>00137 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00138"></a>00138 <a class="code" href="dutil_8c.html#4a177c54dafbe3640c26caa49eeee1de" title="Supernodal LU factor related.">dCreate_CompCol_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *,
+<a name="l00139"></a>00139                        <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00140"></a>00140 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00141"></a>00141 <a class="code" href="dutil_8c.html#db108b8f4be1e79a2e469a4406cbff54">dCreate_CompRow_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *,
+<a name="l00142"></a>00142                        <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00143"></a>00143 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00144"></a>00144 <a class="code" href="dutil_8c.html#0d19111d89390832cad2fb4b6477a40c" title="Copy matrix A into matrix B.">dCopy_CompCol_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00145"></a>00145 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00146"></a>00146 <a class="code" href="dutil_8c.html#12ac523141a258590a76bdad390928fd">dCreate_Dense_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>,
+<a name="l00147"></a>00147                      <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00148"></a>00148 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00149"></a>00149 <a class="code" href="dutil_8c.html#b0cecf427cd82e8b92974a72ecd4d1cb">dCreate_SuperNode_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *, 
+<a name="l00150"></a>00150                          <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00151"></a>00151                          <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00152"></a>00152 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00153"></a>00153 <a class="code" href="dutil_8c.html#503dd1eb30f1ca80e04ad2180366c518">dCopy_Dense_Matrix</a>(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>);
+<a name="l00154"></a>00154 
+<a name="l00155"></a>00155 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc" title="Count the total number of nonzeros in factors L and U, and in the symmetrically reduced...">countnz</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class [...]
+<a name="l00156"></a>00156 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85" title="Count the total number of nonzeros in factors L and U.">ilu_countnz</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00157"></a>00157 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf" title="Fix up the data storage lsub for L-subscripts. It removes the subscript sets for...">fixupL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00158"></a>00158 
+<a name="l00159"></a>00159 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmemory_8c.html#eed250713fbfb3fac567d7a503774ccc" title="Allocate storage for original matrix A.">dallocateA</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00160"></a>00160 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf</a> (<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a>*, <a class="code" href="structSuperMatrix.html">SuperMatrix</a>*,
+<a name="l00161"></a>00161                        <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>*, <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, 
+<a name="l00162"></a>00162                        <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00163"></a>00163 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dsnode__dfs_8c.html#80b831678c233741661d8386d8736da1">dsnode_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span> *,
+<a name="l00164"></a>00164                              <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00165"></a>00165 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dsnode__bmod_8c.html#1466b84198911ff34e828a811e70831e" title="Performs numeric block updates within the relaxed snode.">dsnode_bmod</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span clas [...]
+<a name="l00166"></a>00166                               <span class="keywordtype">double</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00167"></a>00167 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dpanel__dfs_8c.html#2a809488b87d2c1a9b2a574b726e8517">dpanel_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00168"></a>00168                            <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00169"></a>00169                            <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00170"></a>00170 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dpanel__bmod_8c.html#192df249a9fc13ad49bf3f2cd79aba65">dpanel_bmod</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>,
+<a name="l00171"></a>00171                            <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00172"></a>00172                            <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00173"></a>00173 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dcolumn__dfs_8c.html#5e1eb3b6035e0d4e358caa044e58292d">dcolumn_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">in [...]
+<a name="l00174"></a>00174                            <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00175"></a>00175 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dcolumn__bmod_8c.html#5ca322682f98f276feb3c50b31ca56b8">dcolumn_bmod</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *,
+<a name="l00176"></a>00176                            <span class="keywordtype">double</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span>,
+<a name="l00177"></a>00177                            <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00178"></a>00178 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dcopy__to__ucol_8c.html#ce3034cff6ce6be9e0b0f69cda42f196">dcopy_to_ucol</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00179"></a>00179                               <span class="keywordtype">double</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);         
+<a name="l00180"></a>00180 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dpivotL_8c.html#c9bc2a5673ddfce2452bf4a88b97a266">dpivotL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">double</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, 
+<a name="l00181"></a>00181                          <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00182"></a>00182 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dpruneL_8c.html#525e73335e6aeaa1e851a52800bf3965">dpruneL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>,
+<a name="l00183"></a>00183                           <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00184"></a>00184 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__ddefs_8h.html#efc4e420b7fa27a770b4b9db6ba5cfc4">dreadmt</a> (<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">double</span> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00185"></a>00185 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dutil_8c.html#cdfe40e3085c29fd483b63a15ed163c7">dGenXtrue</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>);
+<a name="l00186"></a>00186 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dutil_8c.html#83b6ea01e8b7df0cc9c6fe5261647367" title="Let rhs[i] = sum of i-th row of A, so the solution vector is all 1&#39;s.">dFillRHS</a> (<a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>,  [...]
+<a name="l00187"></a>00187                           <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00188"></a>00188 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dgstrs_8c.html#6e3eace519372b7dfcd053e0d3614fc1">dgstrs</a> (<a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00189"></a>00189                         <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00190"></a>00190 <span class="comment">/* ILU */</span>
+<a name="l00191"></a>00191 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dgsitrf_8c.html#ffb50badd1ff77dbe19f6df360f98e50">dgsitrf</a> (<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a>*, <a class="code" href="structSuperMatrix.html">SuperMatrix</a>*, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>*,
+<a name="l00192"></a>00192                         <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00193"></a>00193                         <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00194"></a>00194 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dldperm_8c.html#5c6a8de5e809f2094735965027adf532">dldperm</a>(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> [], <span class="keywordtype">int</span> [], <span class="keywordtype">double</span> [],
+<a name="l00195"></a>00195                         <span class="keywordtype">int</span> [], <span class="keywordtype">double</span> [], <span class="keywordtype">double</span> []);
+<a name="l00196"></a>00196 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__dsnode__dfs_8c.html#66dbc4626e59d14b4d3458c4eb841829">ilu_dsnode_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</ [...]
+<a name="l00197"></a>00197                                <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00198"></a>00198 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="ilu__dpanel__dfs_8c.html#0a3d016444b041668956824248d22439">ilu_dpanel_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00199"></a>00199                                <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00200"></a>00200                                <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00201"></a>00201 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__dcolumn__dfs_8c.html#f164b7b553eed616e2ed95144698fe7a">ilu_dcolumn_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00202"></a>00202                                 <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00203"></a>00203                                 <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00204"></a>00204 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__dcopy__to__ucol_8c.html#b1802613180b46ffdb7b058a42c38716">ilu_dcopy_to_ucol</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00205"></a>00205                                   <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>, <a class="code" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>,
+<a name="l00206"></a>00206                                   <span class="keywordtype">double</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <span class="keywordtype">double</span> *);
+<a name="l00207"></a>00207 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__dpivotL_8c.html#058d843996bb36b73784b80aae05f04b">ilu_dpivotL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">double</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">i [...]
+<a name="l00208"></a>00208                             <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">double</span>, <a class="code" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>,
+<a name="l00209"></a>00209                             <span class="keywordtype">double</span>, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00210"></a>00210 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__ddrop__row_8c.html#380317801e05b11930fd1e094db34179">ilu_ddrop_row</a> (<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>,
+<a name="l00211"></a>00211                               <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">double</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, 
+<a name="l00212"></a>00212                               <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>);
+<a name="l00213"></a>00213 
+<a name="l00214"></a>00214 
+<a name="l00217"></a>00217 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dgsequ_8c.html#af22b247cc134fb0ba90285e84ccebb4" title="Driver related.">dgsequ</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,
+<a name="l00218"></a>00218                         <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span> *);
+<a name="l00219"></a>00219 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dlaqgs_8c.html#07e1fa4926680eb02069087f0aa26fa1">dlaqgs</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span>,
+<a name="l00220"></a>00220                         <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">char</span> *);
+<a name="l00221"></a>00221 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dgscon_8c.html#2c7a4267d306243d3ceb15531522033e">dgscon</a> (<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, 
+<a name="l00222"></a>00222                          <span class="keywordtype">double</span>, <span class="keywordtype">double</span> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00223"></a>00223 <span class="keyword">extern</span> <span class="keywordtype">double</span>   <a class="code" href="dpivotgrowth_8c.html#770618182a3841e8d10a26a4eb97418a">dPivotGrowth</a>(<span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, 
+<a name="l00224"></a>00224                             <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00225"></a>00225 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dgsrfs_8c.html#db43f7a2408ddb763f36fbfcc0482f28">dgsrfs</a> (<a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00226"></a>00226                        <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">char</span> *, <span class="keywordtype">double</span> *, 
+<a name="l00227"></a>00227                        <span class="keywordtype">double</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00228"></a>00228                        <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00229"></a>00229 
+<a name="l00230"></a>00230 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dsp__blas2_8c.html#aa92ff654356fe62f70ebef5815627e4" title="Solves one of the systems of equations A*x = b, or A&#39;*x = b.">sp_dtrsv</a> (<span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00231"></a>00231                         <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">double</span> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00232"></a>00232 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dsp__blas2_8c.html#221dfb4c5cbc550095a989c61fec4993" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A&#39;*x...">sp_dgemv</a> (<span class="keywordtype">char</span> *, <span class="keywordtype">double</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">double</span> *,
+<a name="l00233"></a>00233                         <span class="keywordtype">int</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>);
+<a name="l00234"></a>00234 
+<a name="l00235"></a>00235 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dsp__blas3_8c.html#6c8c4772ca0f241a43c5561b646fb749">sp_dgemm</a> (<span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>,
+<a name="l00236"></a>00236                         <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>, 
+<a name="l00237"></a>00237                         <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>);
+<a name="l00238"></a>00238 <span class="keyword">extern</span>         <span class="keywordtype">double</span> <a class="code" href="dlamch_8c.html#8f8bef103c45d87276d6508164f5883c">dlamch_</a>(<span class="keywordtype">char</span> *);
+<a name="l00239"></a>00239 
+<a name="l00240"></a>00240 
+<a name="l00242"></a>00242 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dmemory_8c.html#e2ca2ac5e9a763fd3f07487343e4522e" title="Allocate storage for the data structures common to all factor routines.">dLUMemInit</a> (<a class="code" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a>, <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span [...]
+<a name="l00243"></a>00243                             <span class="keywordtype">double</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00244"></a>00244                             <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <span class="keywordtype">int</span> **, <span class="keywordtype">double</span> **);
+<a name="l00245"></a>00245 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmemory_8c.html#aa5359da217b433b43bf6c8e2d29aa45" title="Set up pointers for real working arrays.">dSetRWork</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> **, <span class="keywordtype">double</span> **);
+<a name="l00246"></a>00246 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmemory_8c.html#a7d9129a2b0dc259ccccc8d6d2218cf8" title="Free the working storage used by factor routines.">dLUWorkFree</a> (<span class="keywordtype">int</span> *, <span class="keywordtype">double</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00247"></a>00247 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dmemory_8c.html#9aff5dfe301496ef7c9234789975c043" title="Expand the data structures for L and U during the factorization.">dLUMemXpand</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a>, <span class="keywordtype">int</span> *, <a class="c [...]
+<a name="l00248"></a>00248 
+<a name="l00249"></a>00249 <span class="keyword">extern</span> <span class="keywordtype">double</span>  *<a class="code" href="dmemory_8c.html#8f2b9305cb611c37e7f627da902451a8">doubleMalloc</a>(<span class="keywordtype">int</span>);
+<a name="l00250"></a>00250 <span class="keyword">extern</span> <span class="keywordtype">double</span>  *<a class="code" href="dmemory_8c.html#c8b6d99155644578a5e5542c32040cfe">doubleCalloc</a>(<span class="keywordtype">int</span>);
+<a name="l00251"></a>00251 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dmemory_8c.html#5c9b1e24d07635068c014999d44672aa">dmemory_usage</a>(<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>);
+<a name="l00252"></a>00252 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dmemory_8c.html#e94c561110fcc75c31cda89105fd0a6c">dQuerySpace</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *);
+<a name="l00253"></a>00253 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dmemory_8c.html#61aaccf587a78d15d79c4cc79f80e8b0">ilu_dQuerySpace</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *);
+<a name="l00254"></a>00254 
+<a name="l00256"></a>00256 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dreadhb_8c.html#2a9cf14ec04bddd25fc04ddebc437317" title="Auxiliary routines.">dreadhb</a>(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">double</span> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00257"></a>00257 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dreadrb_8c.html#675b0881eef06ac2d7e09e1c3e1c0403">dreadrb</a>(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">double</span> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00258"></a>00258 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dreadtriple_8c.html#c79bc303193d42d6a40148211796eff0">dreadtriple</a>(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">double</span> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00259"></a>00259 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dutil_8c.html#2163cd7a6b59accc8feb7b40ea2732bd" title="Convert a row compressed storage into a column compressed storage.">dCompRow_to_CompCol</a>(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>*, <span class="keywordtype">int</span>*, <span class="keywordtype [...]
+<a name="l00260"></a>00260                                    <span class="keywordtype">double</span> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00261"></a>00261 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dutil_8c.html#5594dfec40e37514e00e85a90e8973b5" title="Fills a double precision array with a given value.">dfill</a> (<span class="keywordtype">double</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>);
+<a name="l00262"></a>00262 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dutil_8c.html#e6aa0b8725411ba46ac42ee55503ee0f" title="Check the inf-norm of the error vector.">dinf_norm_error</a> (<span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">double</span> *);
+<a name="l00263"></a>00263 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#7a41152a5800bc02bef17b56e070d0e6">PrintPerf</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *,
+<a name="l00264"></a>00264                          <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">char</span> *);
+<a name="l00265"></a>00265 <span class="keyword">extern</span> <span class="keywordtype">double</span>  <a class="code" href="qselect_8c.html#55283ff1f5ff561072afe7c8ad6ac218">dqselect</a>(<span class="keywordtype">int</span>, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>);
+<a name="l00266"></a>00266 
+<a name="l00267"></a>00267 
+<a name="l00269"></a>00269 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dutil_8c.html#2c061ebaaabe5e1bd83ba564b439d8c8" title="Routines for debugging.">dPrint_CompCol_Matrix</a>(<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00270"></a>00270 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dutil_8c.html#402c1ab7977c2f9f5de62e8c66c451f0">dPrint_SuperNode_Matrix</a>(<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00271"></a>00271 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dutil_8c.html#5af0eda3e0026a251a06d320df15a372">dPrint_Dense_Matrix</a>(<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00272"></a>00272 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dutil_8c.html#73eb5fcbf916fc45d05e38767bd7efb3" title="Diagnostic print of column &quot;jcol&quot; in the U/L factor.">dprint_lu_col</a>(<span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00273"></a>00273 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dutil_8c.html#457e11c8736d30b7da4ee14feb422ed0">print_double_vec</a>(<span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *);
+<a name="l00274"></a>00274 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#2cfc97393b65ddc5a40fdc523a50003a">check_tempv</a>(<span class="keywordtype">int</span>, <span class="keywordtype">double</span> *);
+<a name="l00275"></a>00275 
+<a name="l00276"></a>00276 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00277"></a>00277 <span class="preprocessor"></span>  }
+<a name="l00278"></a>00278 <span class="preprocessor">#endif</span>
+<a name="l00279"></a>00279 <span class="preprocessor"></span>
+<a name="l00280"></a>00280 <span class="preprocessor">#endif </span><span class="comment">/* __SUPERLU_dSP_DEFS */</span>
+<a name="l00281"></a>00281 
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__ddefs_8h.html b/DOC/html/slu__ddefs_8h.html
new file mode 100644
index 0000000..b76e2f1
--- /dev/null
+++ b/DOC/html/slu__ddefs_8h.html
@@ -0,0 +1,6027 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_ddefs.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/slu_ddefs.h File Reference</h1>Header file for real operations. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <limits.h></code><br>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<code>#include "<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a>"</code><br>
+<code>#include "<a class="el" href="slu__util_8h-source.html">slu_util.h</a>"</code><br>
+
+<p>
+<a href="slu__ddefs_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#2c8a0856fb555c352ed0f43989d1d71e">dgssv</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class=" [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver routines.  <a href="#2c8a0856fb555c352ed0f43989d1d71e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#55ccb099a318043965a941a7fd8cb095">dgssvx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, int *, char *, double *, double *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#044b42d8bf8016b19c9013e9bee6d6e7">dgsisv</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class= [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#1f70849d53a266fbad14f63ea369caf1">dgsisx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, int *, char *, double *, double *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#3a3d0af1360639f21edacae8f93eb828">dCreate_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int, double *, int *, int *, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related.  <a href="#3a3d0af1360639f21edacae8f93eb828"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#0807ebe794e4353779d2947e9df0f485">dCreate_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int, double *, int *, int *, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#21c06d544ecb9028142abd70a583dd68">dCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B.  <a href="#21c06d544ecb9028142abd70a583dd68"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#08d9d6bf3069c89c0c1207967599c4fc">dCreate_Dense_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, double *, int, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="el" [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#649094ccbc54eaed4ca787fd970049f6">dCreate_SuperNode_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int, double *, int *, int *, int *, int *, int *, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90 [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#9bf038cd2c143a48a14a562ca1f67e27">dCopy_Dense_Matrix</a> (int, int, double *, int, double *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc">countnz</a> (const int, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Count the total number of nonzeros in factors L and U, and in the symmetrically reduced L.  <a href="#8086902aa8be3fc7d04c3c82ec3a79dc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85">ilu_countnz</a> (const int, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Count the total number of nonzeros in factors L and U.  <a href="#ae8eb367a0a2fcdf734738bc9630df85"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf">fixupL</a> (const int, const int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fix up the data storage lsub for L-subscripts. It removes the subscript sets for structural pruning, and applies permuation to the remaining subscripts.  <a href="#7061332d759d7e4d73c1b2e5cb0bf2bf"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#3a86154bfb6453d6358ef52ab1ecfe2d">dallocateA</a> (int, int, double **, int **, int **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A.  <a href="#3a86154bfb6453d6358ef52ab1ecfe2d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#bf0a9c8ab051126eafff67d421f7b99c">dgstrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int *, void *, int, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#b0fe8232652578797bee690fcd8adfd0">dsnode_dfs</a> (const int, const int, const int *, const int *, const int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#289847afa67421491f96367c7f2fe90f">dsnode_bmod</a> (const int, const int, const int, double *, double *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode.  <a href="#289847afa67421491f96367c7f2fe90f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ca83bf1fa16a64ea2ee575574a8bb969">dpanel_dfs</a> (const int, const int, const int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, double *, int *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#22cfb6f57857cc7cb3d853ee5467656f">dpanel_bmod</a> (const int, const int, const int, const int, double *, double *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#1414b492a902b8da3c2e1b620b922644">dcolumn_dfs</a> (const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#351174e818ab7d5149ec9dc116b3a242">dcolumn_bmod</a> (const int, const int, double *, double *, int *, int *, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#9dfcee23fab091d05a4301e25b3b4227">dcopy_to_ucol</a> (int, int, int *, int *, int *, double *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#09624f0c44de80ee2731e44a333ee01c">dpivotL</a> (const int, const double, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#98c8e37fbd3e285de80ae5ebc633c64a">dpruneL</a> (const int, const int *, const int, const int, const int *, const int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#efc4e420b7fa27a770b4b9db6ba5cfc4">dreadmt</a> (int *, int *, int *, double **, int **, int **)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ebd8d273c58591dc435e1afd4e837d9f">dGenXtrue</a> (int, int, double *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ac4705e1c2b9892fd11115ef3cd40bb8">dFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, int, double *, int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's.  <a href="#ac4705e1c2b9892fd11115ef3cd40bb8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#8d42744f59d84a50b19aa4c28cf7aded">dgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMat [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#374c532584b83169e7ca686ad9fb26fb">dgsitrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int *, void *, int, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.htm [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#d48bb6b5f8ebecb3263b80aa0588b62e">dldperm</a> (int, int, int, int[], int[], double[], int[], double[], double[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#cd3bf891014254c364adbb0d1b2d1f49">ilu_dsnode_dfs</a> (const int, const int, const int *, const int *, const int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#5ebb5502086dbb04d4dd640de81de410">ilu_dpanel_dfs</a> (const int, const int, const int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, double *, double *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#4b9639419ceb1d7b476f000292022a24">ilu_dcolumn_dfs</a> (const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#7448553ebd9bd2f4dd9d19c2a988ae8e">ilu_dcopy_to_ucol</a> (int, int, int *, int *, int *, double *, int, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, double, int, double *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, double *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#19d8e83d74fdc411c1f10d76574e4b31">ilu_dpivotL</a> (const int, const double, int *, int *, int, int *, int *, int *, int *, double, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, double, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__ [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#c127b5fda718241500c5a6ee7dae0df5">ilu_ddrop_row</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, int, int, double, int, int *, double *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, double *, double *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#fba0263dae6d5d3a700e9e7a120d6b87">dgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double *, double *, double *, double *, double *, int *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver related.  <a href="#fba0263dae6d5d3a700e9e7a120d6b87"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#7c3a821ed273808f662ddd41be6c6c97">dlaqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double *, double *, double, double, double, char *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#1a5e04478d6d6e4f714fee3080f5a065">dgscon</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double, double *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#2c1536c187133a8a8ea5d856a222eec5">dPivotGrowth</a> (int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#424f8b36e210117c4dea0c590e977bb4">dgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#f7ab3b2b81d10a67b258956bfc468740">sp_dtrsv</a> (char *, char *, char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, int *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b.  <a href="#f7ab3b2b81d10a67b258956bfc468740"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#505f6c005fe6a0cdcbf00512a1e4823a">sp_dgemv</a> (char *, double, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double *, int, double, double *, int)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y,.  <a href="#505f6c005fe6a0cdcbf00512a1e4823a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#b776edfed8eb517dc4d037e76ed2bb24">sp_dgemm</a> (char *, char *, int, int, int, double, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double *, int, double, double *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#177ab9599e432642729507475d5cea83">dlamch_</a> (char *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a93b6921e772245253231d545072e93c">dLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a>, void *, int, int, int, int, int, double, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="str [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Memory-related.  <a href="#a93b6921e772245253231d545072e93c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#6248d2471a710335359db300b35c5066">dSetRWork</a> (int, int, double *, double **, double **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays.  <a href="#6248d2471a710335359db300b35c5066"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#e7976837d1936a3150abf5dd62f0c211">dLUWorkFree</a> (int *, double *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines.  <a href="#e7976837d1936a3150abf5dd62f0c211"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#4cc8cb916b6bf5f2238c374aa7339f4c">dLUMemXpand</a> (int, int, <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a>, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization.  <a href="#4cc8cb916b6bf5f2238c374aa7339f4c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#47c4cf79f8c6305147a70de6da2696ac">doubleMalloc</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#2b7be732f4d725dd35799d772473625e">doubleCalloc</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a7bf96909e8e3579499f46a84b28d9df">dmemory_usage</a> (const int, const int, const int, const int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a28191998cfaddc30d4728535a39d996">dQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#7b3370283f8f5ce4a3fb0207247cc8e2">ilu_dQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#be5e29734eb193fdda83f02fbb72a60a">dreadhb</a> (int *, int *, int *, double **, int **, int **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines.  <a href="#be5e29734eb193fdda83f02fbb72a60a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#6f74181ecc009862e39a3d512c9dc1ae">dreadrb</a> (int *, int *, int *, double **, int **, int **)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#cd7d7ca64b596f459db7e62897c6130a">dreadtriple</a> (int *, int *, int *, double **, int **, int **)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#fab4013ae32ca6413508cefa1e8143d5">dCompRow_to_CompCol</a> (int, int, int, double *, int *, int *, double **, int **, int **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage.  <a href="#fab4013ae32ca6413508cefa1e8143d5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#b20cdc6e4aed319a43b967496932b3e0">dfill</a> (double *, int, double)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fills a double precision array with a given value.  <a href="#b20cdc6e4aed319a43b967496932b3e0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#d778c065ce9768d1f971d8a556752f11">dinf_norm_error</a> (int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector.  <a href="#d778c065ce9768d1f971d8a556752f11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#04b5542748fcc2fee77b587e31bb0a02">PrintPerf</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *, double, double, double *, double *, char *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#293d5d2ac72e4e528ee06d634cb6b59a">dqselect</a> (int, double *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#4908a093c1b9d8d96e3fbba6c29673c1">dPrint_CompCol_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging.  <a href="#4908a093c1b9d8d96e3fbba6c29673c1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#d6acd040a093d5858b9b77d347be954c">dPrint_SuperNode_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#d440b7616886349fe2cde5ac490b0f7d">dPrint_Dense_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#61c31548694df9784dc2612febfedc00">dprint_lu_col</a> (char *, int, int, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor.  <a href="#61c31548694df9784dc2612febfedc00"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ad0c06e9adc1e29a0ab2e78c38119bb4">print_double_vec</a> (char *, int, double *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#c1bba297faf9fa0cb8d4e945138b5a21">check_tempv</a> (int, double *)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre> 
+ -- SuperLU routine (version 4.1) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November, 2010</pre><p>
+<pre> Global data structures used in LU factorization -</pre><p>
+<pre>   nsuper: supernodes = nsuper + 1, numbered [0, nsuper].
+   (xsup,supno): supno[i] is the supernode no to which i belongs;
+	xsup(s) points to the beginning of the s-th supernode.
+	e.g.   supno 0 1 2 2 3 3 3 4 4 4 4 4   (n=12)
+	        xsup 0 1 2 4 7 12
+	Note: dfs will be performed on supernode rep. relative to the new 
+	      row pivoting ordering</pre><p>
+<pre>   (xlsub,lsub): lsub[*] contains the compressed subscript of
+	rectangular supernodes; xlsub[j] points to the starting
+	location of the j-th column in lsub[*]. Note that xlsub 
+	is indexed by column.
+	Storage: original row subscripts</pre><p>
+<pre>      During the course of sparse LU factorization, we also use
+	(xlsub,lsub) for the purpose of symmetric pruning. For each
+	supernode {s,s+1,...,t=s+r} with first column s and last
+	column t, the subscript set
+		lsub[j], j=xlsub[s], .., xlsub[s+1]-1
+	is the structure of column s (i.e. structure of this supernode).
+	It is used for the storage of numerical values.
+	Furthermore,
+		lsub[j], j=xlsub[t], .., xlsub[t+1]-1
+	is the structure of the last column t of this supernode.
+	It is for the purpose of symmetric pruning. Therefore, the
+	structural subscripts can be rearranged without making physical
+	interchanges among the numerical values.</pre><p>
+<pre>	However, if the supernode has only one column, then we
+	only keep one set of subscripts. For any subscript interchange
+	performed, similar interchange must be done on the numerical
+	values.</pre><p>
+<pre>	The last column structures (for pruning) will be removed
+	after the numercial LU factorization phase.</pre><p>
+<pre>   (xlusup,lusup): lusup[*] contains the numerical values of the
+	rectangular supernodes; xlusup[j] points to the starting
+	location of the j-th column in storage vector lusup[*]
+	Note: xlusup is indexed by column.
+	Each rectangular supernode is stored by column-major
+	scheme, consistent with Fortran 2-dim array storage.</pre><p>
+<pre>   (xusub,ucol,usub): ucol[*] stores the numerical values of
+	U-columns outside the rectangular supernodes. The row
+	subscript of nonzero ucol[k] is stored in usub[k].
+	xusub[i] points to the starting location of column i in ucol.
+	Storage: new row subscripts; that is subscripts of PA.
+ </pre> <hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="b6fd6105e64ed14a0c9281326f05e623"></a><!-- doxytag: member="slu_ddefs.h::int_t" ref="b6fd6105e64ed14a0c9281326f05e623" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef int <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="c1bba297faf9fa0cb8d4e945138b5a21"></a><!-- doxytag: member="slu_ddefs.h::check_tempv" ref="c1bba297faf9fa0cb8d4e945138b5a21" args="(int, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void check_tempv           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8086902aa8be3fc7d04c3c82ec3a79dc"></a><!-- doxytag: member="slu_ddefs.h::countnz" ref="8086902aa8be3fc7d04c3c82ec3a79dc" args="(const int, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void countnz           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3a86154bfb6453d6358ef52ab1ecfe2d"></a><!-- doxytag: member="slu_ddefs.h::dallocateA" ref="3a86154bfb6453d6358ef52ab1ecfe2d" args="(int, int, double **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dallocateA           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="351174e818ab7d5149ec9dc116b3a242"></a><!-- doxytag: member="slu_ddefs.h::dcolumn_bmod" ref="351174e818ab7d5149ec9dc116b3a242" args="(const int, const int, double *, double *, int *, int *, int, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dcolumn_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>fpanelc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose:
+ ========
+ Performs numeric block updates (sup-col) in topological order.
+ It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ Special processing on the supernodal portion of L[*,j]
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="1414b492a902b8da3c2e1b620b922644"></a><!-- doxytag: member="slu_ddefs.h::dcolumn_dfs" ref="1414b492a902b8da3c2e1b620b922644" args="(const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dcolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   DCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS 
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal 
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="fab4013ae32ca6413508cefa1e8143d5"></a><!-- doxytag: member="slu_ddefs.h::dCompRow_to_CompCol" ref="fab4013ae32ca6413508cefa1e8143d5" args="(int, int, int, double *, int *, int *, double **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dCompRow_to_CompCol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="21c06d544ecb9028142abd70a583dd68"></a><!-- doxytag: member="slu_ddefs.h::dCopy_CompCol_Matrix" ref="21c06d544ecb9028142abd70a583dd68" args="(SuperMatrix *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dCopy_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9bf038cd2c143a48a14a562ca1f67e27"></a><!-- doxytag: member="slu_ddefs.h::dCopy_Dense_Matrix" ref="9bf038cd2c143a48a14a562ca1f67e27" args="(int, int, double *, int, double *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dCopy_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Copies a two-dimensional matrix X to another matrix Y. 
+</div>
+</div><p>
+<a class="anchor" name="9dfcee23fab091d05a4301e25b3b4227"></a><!-- doxytag: member="slu_ddefs.h::dcopy_to_ucol" ref="9dfcee23fab091d05a4301e25b3b4227" args="(int, int, int *, int *, int *, double *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dcopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3a3d0af1360639f21edacae8f93eb828"></a><!-- doxytag: member="slu_ddefs.h::dCreate_CompCol_Matrix" ref="3a3d0af1360639f21edacae8f93eb828" args="(SuperMatrix *, int, int, int, double *, int *, int *, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dCreate_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0807ebe794e4353779d2947e9df0f485"></a><!-- doxytag: member="slu_ddefs.h::dCreate_CompRow_Matrix" ref="0807ebe794e4353779d2947e9df0f485" args="(SuperMatrix *, int, int, int, double *, int *, int *, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dCreate_CompRow_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="08d9d6bf3069c89c0c1207967599c4fc"></a><!-- doxytag: member="slu_ddefs.h::dCreate_Dense_Matrix" ref="08d9d6bf3069c89c0c1207967599c4fc" args="(SuperMatrix *, int, int, double *, int, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dCreate_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="649094ccbc54eaed4ca787fd970049f6"></a><!-- doxytag: member="slu_ddefs.h::dCreate_SuperNode_Matrix" ref="649094ccbc54eaed4ca787fd970049f6" args="(SuperMatrix *, int, int, int, double *, int *, int *, int *, int *, int *, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dCreate_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b20cdc6e4aed319a43b967496932b3e0"></a><!-- doxytag: member="slu_ddefs.h::dfill" ref="b20cdc6e4aed319a43b967496932b3e0" args="(double *, int, double)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dfill           </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ac4705e1c2b9892fd11115ef3cd40bb8"></a><!-- doxytag: member="slu_ddefs.h::dFillRHS" ref="ac4705e1c2b9892fd11115ef3cd40bb8" args="(trans_t, int, double *, int, SuperMatrix *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dFillRHS           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ebd8d273c58591dc435e1afd4e837d9f"></a><!-- doxytag: member="slu_ddefs.h::dGenXtrue" ref="ebd8d273c58591dc435e1afd4e837d9f" args="(int, int, double *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dGenXtrue           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1a5e04478d6d6e4f714fee3080f5a065"></a><!-- doxytag: member="slu_ddefs.h::dgscon" ref="1a5e04478d6d6e4f714fee3080f5a065" args="(char *, SuperMatrix *, SuperMatrix *, double, double *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgscon           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>norm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>anorm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   DGSCON estimates the reciprocal of the condition number of a general 
+   real matrix A, in either the 1-norm or the infinity-norm, using   
+   the LU factorization computed by DGETRF.   *</pre><p>
+<pre>   An estimate is obtained for norm(inv(A)), and the reciprocal of the   
+   condition number is computed as   
+      RCOND = 1 / ( norm(A) * norm(inv(A)) ).</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>    NORM    (input) char*
+            Specifies whether the 1-norm condition number or the   
+            infinity-norm condition number is required:   
+            = '1' or 'O':  1-norm;   
+            = 'I':         Infinity-norm.</pre><p>
+<pre>    L       (input) SuperMatrix*
+            The factor L from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf()</a>. Use compressed row subscripts storage for supernodes,
+            i.e., L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre>    U       (input) SuperMatrix*
+            The factor U from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+            Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre>    ANORM   (input) double
+            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
+            If NORM = 'I', the infinity-norm of the original matrix A.</pre><p>
+<pre>    RCOND   (output) double*
+           The reciprocal of the condition number of the matrix A,   
+           computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><p>
+<pre>    INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="fba0263dae6d5d3a700e9e7a120d6b87"></a><!-- doxytag: member="slu_ddefs.h::dgsequ" ref="fba0263dae6d5d3a700e9e7a120d6b87" args="(SuperMatrix *, double *, double *, double *, double *, double *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgsequ           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   DGSEQU computes row and column scalings intended to equilibrate an   
+   M-by-N sparse matrix A and reduce its condition number. R returns the row
+   scale factors and C the column scale factors, chosen to try to make   
+   the largest element in each row and column of the matrix B with   
+   elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.</pre><p>
+<pre>   R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
+   number and BIGNUM = largest safe number.  Use of these scaling   
+   factors is not guaranteed to reduce the condition number of A but   
+   works well in practice.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The matrix of dimension (A->nrow, A->ncol) whose equilibration
+           factors are to be computed. The type of A can be:
+           Stype = SLU_NC; Dtype = SLU_D; Mtype = SLU_GE.</pre><p>
+<pre>   R       (output) double*, size A->nrow
+           If INFO = 0 or INFO > M, R contains the row scale factors   
+           for A.</pre><p>
+<pre>   C       (output) double*, size A->ncol
+           If INFO = 0,  C contains the column scale factors for A.</pre><p>
+<pre>   ROWCND  (output) double*
+           If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
+           smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
+           AMAX is neither too large nor too small, it is not worth   
+           scaling by R.</pre><p>
+<pre>   COLCND  (output) double*
+           If INFO = 0, COLCND contains the ratio of the smallest   
+           C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
+           worth scaling by C.</pre><p>
+<pre>   AMAX    (output) double*
+           Absolute value of largest matrix element.  If AMAX is very   
+           close to overflow or very close to underflow, the matrix   
+           should be scaled.</pre><p>
+<pre>   INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value   
+           > 0:  if INFO = i,  and i is   
+                 <= A->nrow:  the i-th row of A is exactly zero   
+                 >  A->ncol:  the (i-M)-th column of A is exactly zero</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="044b42d8bf8016b19c9013e9bee6d6e7"></a><!-- doxytag: member="slu_ddefs.h::dgsisv" ref="044b42d8bf8016b19c9013e9bee6d6e7" args="(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgsisv           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1f70849d53a266fbad14f63ea369caf1"></a><!-- doxytag: member="slu_ddefs.h::dgsisx" ref="1f70849d53a266fbad14f63ea369caf1" args="(superlu_options_t *, SuperMatrix *, int *, int *, int *, char *, double *, double *, SuperMatrix *, SuperMatrix *, void *, int, SuperMatrix *, SuperMatrix *, double *, double *, mem_usage_t *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgsisx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> DGSISX computes an approximate solutions of linear equations
+ A*X=B or A'*X=B, using the ILU factorization from <a class="el" href="dgsitrf_8c.html#ffb50badd1ff77dbe19f6df360f98e50">dgsitrf()</a>.
+ An estimation of the condition number is provided. 
+ The routine performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A is
+	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+	     = TRANS or CONJ).</pre><p>
+<pre>	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+	     matrix that usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the matrix A (after equilibration if options->Equil = YES)
+	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>	1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+	     and info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	1.6. The system of equations is solved for X using the factored form
+	     of A.</pre><p>
+<pre>	1.7. options->IterRefine is not used</pre><p>
+<pre>	1.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>	1.9. options for ILU only
+	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+		entries of modulus 1 on the diagonal and off-diagonal entries
+		of modulus at most 1. If MC64 fails, <a class="el" href="dgsequ_8c.html#af22b247cc134fb0ba90285e84ccebb4" title="Driver related.">dgsequ()</a> is used to
+		equilibrate the system.
+              ( Default: LargeDiag )
+	     2) options->ILU_DropTol = tau is the threshold for dropping.
+		For L, it is used directly (for the whole row in a supernode);
+		For U, ||A(:,i)||_oo * tau is used as the threshold
+	        for the	i-th column.
+		If a secondary dropping rule is required, tau will
+	        also be used to compute the second threshold.
+              ( Default: 1e-4 )
+	     3) options->ILU_FillFactor = gamma, used as the initial guess
+		of memory growth.
+		If a secondary dropping rule is required, it will also
+              be used as an upper bound of the memory.
+              ( Default: 10 )
+	     4) options->ILU_DropRule specifies the dropping rule.
+		Option	      Meaning
+		======	      ===========
+		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+			      p = gamma * nnz(A(:,j)).
+		DROP_AREA:    Variation of ILUTP, for j-th column, use
+			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+			      Otherwise
+				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+			      tau_U(j) uses the similar rule.
+			      NOTE: the thresholds used by L and U are separate.
+		DROP_INTERP:  Compute the second dropping threshold by
+			      interpolation instead of sorting (default).
+			      In this case, the actual fill ratio is not
+			      guaranteed smaller than gamma.
+		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+		( Default: DROP_BASIC | DROP_AREA )
+	     5) options->ILU_Norm is the criterion of measuring the magnitude
+		of a row in a supernode of L. ( Default is INF_NORM )
+		options->ILU_Norm	RowSize(x[1:n])
+		=================	===============
+		ONE_NORM		||x||_1 / n
+		TWO_NORM		||x||_2 / sqrt(n)
+		INF_NORM		max{|x[i]|}
+	     6) options->ILU_MILU specifies the type of MILU's variation.
+		= SILU: do not perform Modified ILU;
+		= SMILU_1 (not recommended):
+		    U(i,i) := U(i,i) + sum(dropped entries);
+		= SMILU_2:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+		= SMILU_3:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+		NOTE: Even SMILU_1 does not preserve the column sum because of
+		late dropping.
+              ( Default: SILU )
+	     7) options->ILU_FillTol is used as the perturbation when
+		encountering zero pivots. If some U(i,i) = 0, so that U is
+		exactly singular, then
+		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+              ( Default: 1e-2 )</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+	to the transpose of A:</pre><p>
+<pre>	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A' is
+	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>	2.2. Permute columns of transpose(A) (rows of A),
+	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+	     usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the transpose(A) (after equilibration if
+	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+	     permutation Pr determined by partial pivoting.</pre><p>
+<pre>	2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+	     And info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	2.6. The system of equations is solved for X using the factored form
+	     of transpose(A).</pre><p>
+<pre>	2.7. If options->IterRefine is not used.</pre><p>
+<pre>	2.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the LU decomposition will be performed and how the
+	   system will be solved.</pre><p>
+<pre> A	   (input/output) SuperMatrix*
+	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+	   of the linear equations is A->nrow. Currently, the type of A can be:
+	   Stype = SLU_NC or SLU_NR, Dtype = SLU_D, Mtype = SLU_GE.
+	   In the future, more general A may be handled.</pre><p>
+<pre>	   On entry, If options->Fact = FACTORED and equed is not 'N',
+	   then A must have been equilibrated by the scaling factors in
+	   R and/or C.
+	   On exit, A is not modified
+         if options->Equil = NO, or
+         if options->Equil = YES but equed = 'N' on exit, or
+         if options->RowPerm = NO.</pre><p>
+<pre>	   Otherwise, if options->Equil = YES and equed is not 'N',
+	   A is scaled as follows:
+	   If A->Stype = SLU_NC:
+	     equed = 'R':  A := diag(R) * A
+	     equed = 'C':  A := A * diag(C)
+	     equed = 'B':  A := diag(R) * A * diag(C).
+	   If A->Stype = SLU_NR:
+	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre>         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+            the matrix to an I-matrix, that is A is modified as follows:
+            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+            off-diagonal entries of modulus at most 1. P is a permutation
+            obtained from MC64.
+            If MC64 fails, <a class="el" href="dgsequ_8c.html#af22b247cc134fb0ba90285e84ccebb4" title="Driver related.">dgsequ()</a> is used to equilibrate the system,
+            and A is scaled as above, but no permutation is involved.
+            On exit, A is restored to the orginal row numbering, so
+            Dr*A*Dc is returned.</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+	   which defines the permutation matrix Pc; perm_c[i] = j means
+	   column i of A is in position j in A*Pc.
+	   On exit, perm_c may be overwritten by the product of the input
+	   perm_c and a permutation that postorders the elimination tree
+	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+	   is already in postorder.</pre><p>
+<pre>	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+	   which describes permutation of columns of transpose(A) 
+	   (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+	   which defines the permutation matrix Pr, and is determined
+	   by MC64 first then followed by partial pivoting.
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+	   determines permutation of rows of transpose(A)
+	   (columns of A) as described above.</pre><p>
+<pre>	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	   will try to use the input perm_r, unless a certain threshold
+	   criterion is violated. In that case, perm_r is overwritten by a
+	   new permutation determined by partial pivoting or diagonal
+	   threshold pivoting.
+	   Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+	   Elimination tree of Pc'*A'*A*Pc.
+	   If options->Fact != FACTORED and options->Fact != DOFACT,
+	   etree is an input argument, otherwise it is an output argument.
+	   Note: etree is a vector of parent pointers for a forest whose
+	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+	   Specifies the form of equilibration that was done.
+	   = 'N': No equilibration.
+	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+	   = 'B': Both row and column equilibration, i.e., A was replaced 
+		  by diag(R)*A*diag(C).
+	   If options->Fact = FACTORED, equed is an input argument,
+	   otherwise it is an output argument.</pre><p>
+<pre> R	   (input/output) double*, dimension (A->nrow)
+	   The row scale factors for A or transpose(A).
+	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+	   If equed = 'N' or 'C', R is not accessed.
+	   If options->Fact = FACTORED, R is an input argument,
+	       otherwise, R is output.
+	   If options->Fact = FACTORED and equed = 'R' or 'B', each element
+	       of R must be positive.</pre><p>
+<pre> C	   (input/output) double*, dimension (A->ncol)
+	   The column scale factors for A or transpose(A).
+	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+	   If equed = 'N' or 'R', C is not accessed.
+	   If options->Fact = FACTORED, C is an input argument,
+	       otherwise, C is output.
+	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+	       of C must be positive.</pre><p>
+<pre> L	   (output) SuperMatrix*
+	   The factor L from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses compressed row subscripts storage for supernodes, i.e.,
+	   L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre> U	   (output) SuperMatrix*
+	   The factor U from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses column-wise storage scheme, i.e., U has types:
+	   Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+	   User supplied workspace, should be large enough
+	   to hold data structures for factors L and U.
+	   On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 mem_usage->total_needed; no other side effects.</pre><p>
+<pre>	   See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B	   (input/output) SuperMatrix*
+	   B has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+	   On entry, the right hand side matrix.
+	   If B->ncol = 0, only LU decomposition is performed, the triangular
+			   solve is skipped.
+	   On exit,
+	      if equed = 'N', B is not modified; otherwise
+	      if A->Stype = SLU_NC:
+		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+		    B is overwritten by diag(R)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+		    B is overwritten by diag(C)*B;
+	      if A->Stype = SLU_NR:
+		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+		    B is overwritten by diag(C)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+		    B is overwritten by diag(R)*B.</pre><p>
+<pre> X	   (output) SuperMatrix*
+	   X has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+	   to the original system of equations. Note that A and B are modified
+	   on exit if equed is not 'N', and the solution to the equilibrated
+	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+	   and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) double*
+	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+	   The infinity norm is used. If recip_pivot_growth is much less
+	   than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) double*
+	   The estimate of the reciprocal condition number of the matrix A
+	   after equilibration (if done). If rcond is less than the machine
+	   precision (in particular, if rcond = 0), the matrix is singular
+	   to working precision. This condition is indicated by a return
+	   code of info > 0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+	   Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+	     The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+	     The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+	     The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+	  Record the statistics on runtime and floating-point operation count.
+	  See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+	   > 0: if info = i, and i is
+		<= A->ncol: number of zero pivots. They are replaced by small
+		      entries due to options->ILU_FillTol.
+		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+		      precision, meaning that the matrix is singular to
+		      working precision. Nevertheless, the solution and
+		      error bounds are computed because there are a number
+		      of situations where the computed solution can be more
+		      accurate than the value of RCOND would suggest.
+		> A->ncol+1: number of bytes allocated when memory allocation
+		      failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="374c532584b83169e7ca686ad9fb26fb"></a><!-- doxytag: member="slu_ddefs.h::dgsitrf" ref="374c532584b83169e7ca686ad9fb26fb" args="(superlu_options_t *, SuperMatrix *, int, int, int *, void *, int, int *, int *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgsitrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> DGSITRF computes an ILU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the ILU decomposition will be performed.</pre><p>
+<pre> A	    (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+	    (A->nrow, A->ncol). The type of A can be:
+	    Stype = SLU_NCP; Dtype = SLU_D; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+	    To control degree of relaxing supernodes. If the number
+	    of nodes (columns) in a subtree of the elimination tree is less
+	    than relax, this subtree is considered as one supernode,
+	    regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+	    A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+	    Elimination tree of A'*A.
+	    Note: etree is a vector of parent pointers for a forest whose
+	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+	    On input, the columns of A should be permuted so that the
+	    etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+	    User-supplied work space and space for the output data structures.
+	    Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the
+	    permutation matrix Pc; perm_c[i] = j means column i of A is
+	    in position j in A*Pc.
+	    When searching for diagonal, perm_c[*] is applied to the
+	    row subscripts of A, so that diagonal threshold pivoting
+	    can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+	    Row permutation vector which defines the permutation matrix Pr,
+	    perm_r[i] = j means row i of A is in position j in Pr*A.
+	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	       will try to use the input perm_r, unless a certain threshold
+	       criterion is violated. In that case, perm_r is overwritten by
+	       a new permutation determined by partial pivoting or diagonal
+	       threshold pivoting.
+	    Otherwise, perm_r is output argument;</pre><p>
+<pre> L	    (output) SuperMatrix*
+	    The factor L from the factorization Pr*A=L*U; use compressed row
+	    subscripts storage for supernodes, i.e., L has type:
+	    Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre> U	    (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+	    storage scheme, i.e., U has types: Stype = SLU_NC,
+	    Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+	    Record the statistics on runtime and floating-point operation count.
+	    See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+	    = 0: successful exit
+	    < 0: if info = -i, the i-th argument had an illegal value
+	    > 0: if info = i, and i is
+	       <= A->ncol: number of zero pivots. They are replaced by small
+		  entries according to options->ILU_FillTol.
+	       > A->ncol: number of bytes allocated when memory allocation
+		  failure occurred, plus A->ncol. If lwork = -1, it is
+		  the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays:
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 4 of them:
+	      marker/marker1 are used for panel dfs, see (ilu_)<a class="el" href="dpanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">dpanel_dfs.c</a>;
+	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+	      marker_relax(has its own space) is used for relaxed supernodes.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+	Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the
+	last column of a supernode.
+	The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+	supernodal representative r, repfnz[r] is the location of the first
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+	the panel diagonal. These are filled in during <a class="el" href="dpanel__dfs_8c.html#2a809488b87d2c1a9b2a574b726e8517">dpanel_dfs()</a>, and are
+	used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+		   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a>.
+	It is also used by the dropping routine <a class="el" href="ilu__ddrop__row_8c.html#380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="424f8b36e210117c4dea0c590e977bb4"></a><!-- doxytag: member="slu_ddefs.h::dgsrfs" ref="424f8b36e210117c4dea0c590e977bb4" args="(trans_t, SuperMatrix *, SuperMatrix *, SuperMatrix *, int *, int *, char *, double *, double *, SuperMatrix *, SuperMatrix *, double *, double *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgsrfs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   DGSRFS improves the computed solution to a system of linear   
+   equations and provides error bounds and backward error estimates for 
+   the solution.</pre><p>
+<pre>   If equilibration was performed, the system becomes:
+           (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The original matrix A in the system, or the scaled A if
+           equilibration was done. The type of A can be:
+           Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_GE.</pre><p>
+<pre>   L       (input) SuperMatrix*
+	     The factor L from the factorization Pr*A*Pc=L*U. Use
+           compressed row subscripts storage for supernodes, 
+           i.e., L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre>   U       (input) SuperMatrix*
+           The factor U from the factorization Pr*A*Pc=L*U as computed by
+           <a class="el" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf()</a>. Use column-wise storage scheme, 
+           i.e., U has types: Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre>   perm_c  (input) int*, dimension (A->ncol)
+	     Column permutation vector, which defines the 
+           permutation matrix Pc; perm_c[i] = j means column i of A is 
+           in position j in A*Pc.</pre><p>
+<pre>   perm_r  (input) int*, dimension (A->nrow)
+           Row permutation vector, which defines the permutation matrix Pr;
+           perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>   equed   (input) Specifies the form of equilibration that was done.
+           = 'N': No equilibration.
+           = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+           = 'C': Column equilibration, i.e., A was postmultiplied by
+                  diag(C).
+           = 'B': Both row and column equilibration, i.e., A was replaced 
+                  by diag(R)*A*diag(C).</pre><p>
+<pre>   R       (input) double*, dimension (A->nrow)
+           The row scale factors for A.
+           If equed = 'R' or 'B', A is premultiplied by diag(R).
+           If equed = 'N' or 'C', R is not accessed.</pre><p>
+<pre>   C       (input) double*, dimension (A->ncol)
+           The column scale factors for A.
+           If equed = 'C' or 'B', A is postmultiplied by diag(C).
+           If equed = 'N' or 'R', C is not accessed.</pre><p>
+<pre>   B       (input) SuperMatrix*
+           B has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+           The right hand side matrix B.
+           if equed = 'R' or 'B', B is premultiplied by diag(R).</pre><p>
+<pre>   X       (input/output) SuperMatrix*
+           X has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+           On entry, the solution matrix X, as computed by <a class="el" href="dgstrs_8c.html#6e3eace519372b7dfcd053e0d3614fc1">dgstrs()</a>.
+           On exit, the improved solution matrix X.
+           if *equed = 'C' or 'B', X should be premultiplied by diag(C)
+               in order to obtain the solution to the original system.</pre><p>
+<pre>   FERR    (output) double*, dimension (B->ncol)   
+           The estimated forward error bound for each solution vector   
+           X(j) (the j-th column of the solution matrix X).   
+           If XTRUE is the true solution corresponding to X(j), FERR(j) 
+           is an estimated upper bound for the magnitude of the largest 
+           element in (X(j) - XTRUE) divided by the magnitude of the   
+           largest element in X(j).  The estimate is as reliable as   
+           the estimate for RCOND, and is almost always a slight   
+           overestimate of the true error.</pre><p>
+<pre>   BERR    (output) double*, dimension (B->ncol)   
+           The componentwise relative backward error of each solution   
+           vector X(j) (i.e., the smallest relative change in   
+           any element of A or B that makes X(j) an exact solution).</pre><p>
+<pre>   stat     (output) SuperLUStat_t*
+            Record the statistics on runtime and floating-point operation count.
+            See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre>   info    (output) int*   
+           = 0:  successful exit   
+            < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    Internal Parameters   
+    ===================</pre><p>
+<pre>    ITMAX is the maximum number of steps of iterative refinement.</pre><p>
+<pre> </pre> 
+</div>
+</div><p>
+<a class="anchor" name="2c8a0856fb555c352ed0f43989d1d71e"></a><!-- doxytag: member="slu_ddefs.h::dgssv" ref="2c8a0856fb555c352ed0f43989d1d71e" args="(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgssv           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> DGSSV solves the system of linear equations A*X=B, using the
+ LU factorization from DGSTRF. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. Permute the columns of A, forming A*Pc, where Pc
+           is a permutation matrix. For more details of this step, 
+           see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.2. Factor A as Pr*A*Pc=L*U with the permutation Pr determined
+           by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      1.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+      above algorithm to the transpose of A:</pre><p>
+<pre>      2.1. Permute columns of transpose(A) (rows of A),
+           forming transpose(A)*Pc, where Pc is a permutation matrix. 
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.2. Factor A as Pr*transpose(A)*Pc=L*U with the permutation Pr
+           determined by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      2.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR; Dtype = SLU_D; Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre> perm_c  (input/output) int*
+         If A->Stype = SLU_NC, column permutation vector of size A->ncol
+         which defines the permutation matrix Pc; perm_c[i] = j means 
+         column i of A is in position j in A*Pc.
+         If A->Stype = SLU_NR, column permutation vector of size A->nrow
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre>         If options->ColPerm = MY_PERMC or options->Fact = SamePattern or
+            options->Fact = SamePattern_SameRowPerm, it is an input argument.
+            On exit, perm_c may be overwritten by the product of the input
+            perm_c and a permutation that postorders the elimination tree
+            of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+            is already in postorder.
+         Otherwise, it is an output argument.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined 
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.
+         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->RowPerm = MY_PERMR or
+            options->Fact = SamePattern_SameRowPerm, perm_r is an
+            input argument.
+         otherwise it is an output argument.</pre><p>
+<pre> L       (output) SuperMatrix*
+         The factor L from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+         > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                so the solution could not be computed.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="55ccb099a318043965a941a7fd8cb095"></a><!-- doxytag: member="slu_ddefs.h::dgssvx" ref="55ccb099a318043965a941a7fd8cb095" args="(superlu_options_t *, SuperMatrix *, int *, int *, int *, char *, double *, double *, SuperMatrix *, SuperMatrix *, void *, int, SuperMatrix *, SuperMatrix *, double *, double *, double *, double *, mem_usage_t *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgssvx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> DGSSVX solves the system of linear equations A*X=B or A'*X=B, using
+ the LU factorization from <a class="el" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf()</a>. Error bounds on the solution and
+ a condition estimate are also provided. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A is
+           overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+           (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+           = TRANS or CONJ).</pre><p>
+<pre>      1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+           matrix that usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the matrix A (after equilibration if options->Equil = YES)
+           as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>      1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form of 
+           A is used to estimate the condition number of the matrix A. If
+           the reciprocal of the condition number is less than machine
+           precision, info = A->ncol+1 is returned as a warning, but the
+           routine still goes on to solve for X and computes error bounds
+           as described below.</pre><p>
+<pre>      1.6. The system of equations is solved for X using the factored form
+           of A.</pre><p>
+<pre>      1.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      1.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R)
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+      to the transpose of A:</pre><p>
+<pre>      2.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A' is
+           overwritten by diag(R)*A'*diag(C) and B by diag(R)*B 
+           (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>      2.2. Permute columns of transpose(A) (rows of A), 
+           forming transpose(A)*Pc, where Pc is a permutation matrix that 
+           usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the transpose(A) (after equilibration if 
+           options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+           permutation Pr determined by partial pivoting.</pre><p>
+<pre>      2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form 
+           of transpose(A) is used to estimate the condition number of the
+           matrix A. If the reciprocal of the condition number
+           is less than machine precision, info = A->nrow+1 is returned as
+           a warning, but the routine still goes on to solve for X and
+           computes error bounds as described below.</pre><p>
+<pre>      2.6. The system of equations is solved for X using the factored form
+           of transpose(A).</pre><p>
+<pre>      2.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      2.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R) 
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input/output) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of the linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR, Dtype = SLU_D, Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre>         On entry, If options->Fact = FACTORED and equed is not 'N', 
+         then A must have been equilibrated by the scaling factors in
+         R and/or C.  
+         On exit, A is not modified if options->Equil = NO, or if 
+         options->Equil = YES but equed = 'N' on exit.
+         Otherwise, if options->Equil = YES and equed is not 'N',
+         A is scaled as follows:
+         If A->Stype = SLU_NC:
+           equed = 'R':  A := diag(R) * A
+           equed = 'C':  A := A * diag(C)
+           equed = 'B':  A := diag(R) * A * diag(C).
+         If A->Stype = SLU_NR:
+           equed = 'R':  transpose(A) := diag(R) * transpose(A)
+           equed = 'C':  transpose(A) := transpose(A) * diag(C)
+           equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+         which defines the permutation matrix Pc; perm_c[i] = j means
+         column i of A is in position j in A*Pc.
+         On exit, perm_c may be overwritten by the product of the input
+         perm_c and a permutation that postorders the elimination tree
+         of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+         is already in postorder.</pre><p>
+<pre>         If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.</pre><p>
+<pre>         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+         will try to use the input perm_r, unless a certain threshold
+         criterion is violated. In that case, perm_r is overwritten by a
+         new permutation determined by partial pivoting or diagonal
+         threshold pivoting.
+         Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+         Elimination tree of Pc'*A'*A*Pc.
+         If options->Fact != FACTORED and options->Fact != DOFACT,
+         etree is an input argument, otherwise it is an output argument.
+         Note: etree is a vector of parent pointers for a forest whose
+         vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+         Specifies the form of equilibration that was done.
+         = 'N': No equilibration.
+         = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+         = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+         = 'B': Both row and column equilibration, i.e., A was replaced 
+                by diag(R)*A*diag(C).
+         If options->Fact = FACTORED, equed is an input argument,
+         otherwise it is an output argument.</pre><p>
+<pre> R       (input/output) double*, dimension (A->nrow)
+         The row scale factors for A or transpose(A).
+         If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+         If equed = 'N' or 'C', R is not accessed.
+         If options->Fact = FACTORED, R is an input argument,
+             otherwise, R is output.
+         If options->zFact = FACTORED and equed = 'R' or 'B', each element
+             of R must be positive.</pre><p>
+<pre> C       (input/output) double*, dimension (A->ncol)
+         The column scale factors for A or transpose(A).
+         If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+         If equed = 'N' or 'R', C is not accessed.
+         If options->Fact = FACTORED, C is an input argument,
+             otherwise, C is output.
+         If options->Fact = FACTORED and equed = 'C' or 'B', each element
+             of C must be positive.</pre><p>
+<pre> L       (output) SuperMatrix*
+	   The factor L from the factorization
+             Pr*A*Pc=L*U              (if A->Stype SLU_= NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+         User supplied workspace, should be large enough
+         to hold data structures for factors L and U.
+         On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               mem_usage->total_needed; no other side effects.</pre><p>
+<pre>         See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         If B->ncol = 0, only LU decomposition is performed, the triangular
+                         solve is skipped.
+         On exit,
+            if equed = 'N', B is not modified; otherwise
+            if A->Stype = SLU_NC:
+               if options->Trans = NOTRANS and equed = 'R' or 'B',
+                  B is overwritten by diag(R)*B;
+               if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+                  B is overwritten by diag(C)*B;
+            if A->Stype = SLU_NR:
+               if options->Trans = NOTRANS and equed = 'C' or 'B',
+                  B is overwritten by diag(C)*B;
+               if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+                  B is overwritten by diag(R)*B.</pre><p>
+<pre> X       (output) SuperMatrix*
+         X has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE. 
+         If info = 0 or info = A->ncol+1, X contains the solution matrix
+         to the original system of equations. Note that A and B are modified
+         on exit if equed is not 'N', and the solution to the equilibrated
+         system is inv(diag(C))*X if options->Trans = NOTRANS and
+         equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+         and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) double*
+         The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+         The infinity norm is used. If recip_pivot_growth is much less
+         than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) double*
+         The estimate of the reciprocal condition number of the matrix A
+         after equilibration (if done). If rcond is less than the machine
+         precision (in particular, if rcond = 0), the matrix is singular
+         to working precision. This condition is indicated by a return
+         code of info > 0.</pre><p>
+<pre> FERR    (output) double*, dimension (B->ncol)   
+         The estimated forward error bound for each solution vector   
+         X(j) (the j-th column of the solution matrix X).   
+         If XTRUE is the true solution corresponding to X(j), FERR(j) 
+         is an estimated upper bound for the magnitude of the largest 
+         element in (X(j) - XTRUE) divided by the magnitude of the   
+         largest element in X(j).  The estimate is as reliable as   
+         the estimate for RCOND, and is almost always a slight   
+         overestimate of the true error.
+         If options->IterRefine = NOREFINE, ferr = 1.0.</pre><p>
+<pre> BERR    (output) double*, dimension (B->ncol)
+         The componentwise relative backward error of each solution   
+         vector X(j) (i.e., the smallest relative change in   
+         any element of A or B that makes X(j) an exact solution).
+         If options->IterRefine = NOREFINE, berr = 1.0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+         Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+           The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+           The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+           The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+         = 0: successful exit   
+         < 0: if info = -i, the i-th argument had an illegal value   
+         > 0: if info = i, and i is   
+              <= A->ncol: U(i,i) is exactly zero. The factorization has   
+                    been completed, but the factor U is exactly   
+                    singular, so the solution and error bounds   
+                    could not be computed.   
+              = A->ncol+1: U is nonsingular, but RCOND is less than machine
+                    precision, meaning that the matrix is singular to
+                    working precision. Nevertheless, the solution and
+                    error bounds are computed because there are a number
+                    of situations where the computed solution can be more
+                    accurate than the value of RCOND would suggest.   
+              > A->ncol+1: number of bytes allocated when memory allocation
+                    failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="bf0a9c8ab051126eafff67d421f7b99c"></a><!-- doxytag: member="slu_ddefs.h::dgstrf" ref="bf0a9c8ab051126eafff67d421f7b99c" args="(superlu_options_t *, SuperMatrix *, int, int, int *, void *, int, int *, int *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgstrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> DGSTRF computes an LU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper 
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = SLU_NCP; Dtype = SLU_D; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+          To control degree of relaxing supernodes. If the number
+          of nodes (columns) in a subtree of the elimination tree is less
+          than relax, this subtree is considered as one supernode,
+          regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+          A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+          Elimination tree of A'*A.
+          Note: etree is a vector of parent pointers for a forest whose
+          vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+          On input, the columns of A should be permuted so that the
+          etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+          User-supplied work space and space for the output data structures.
+          Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the 
+          permutation matrix Pc; perm_c[i] = j means column i of A is 
+          in position j in A*Pc.
+          When searching for diagonal, perm_c[*] is applied to the
+          row subscripts of A, so that diagonal threshold pivoting
+          can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+          Row permutation vector which defines the permutation matrix Pr,
+          perm_r[i] = j means row i of A is in position j in Pr*A.
+          If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+             will try to use the input perm_r, unless a certain threshold
+             criterion is violated. In that case, perm_r is overwritten by
+             a new permutation determined by partial pivoting or diagonal
+             threshold pivoting.
+          Otherwise, perm_r is output argument;</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = SLU_NC, 
+          Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+          = 0: successful exit
+          < 0: if info = -i, the i-th argument had an illegal value
+          > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                and division by zero will occur if it is used to solve a
+                system of equations.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol. If lwork = -1, it is
+                the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays: 
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   xprune[0:n-1]: xprune[*] points to locations in subscript 
+	vector lsub[*]. For column i, xprune[i] denotes the point where 
+	structural pruning begins. I.e. only xlsub[i],..,xprune[i]-1 need 
+	to be traversed for symbolic factorization.</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been 
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 3 of them: marker/marker1 are used for panel dfs, 
+	      see <a class="el" href="dpanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">dpanel_dfs.c</a>; marker2 is used for inner-factorization,
+            see <a class="el" href="dcolumn__dfs_8c.html" title="Performs a symbolic factorization.">dcolumn_dfs.c</a>.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+      Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs) 
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the 
+	last column of a supernode.
+      The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a 
+	supernodal representative r, repfnz[r] is the location of the first 
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below 
+      the panel diagonal. These are filled in during <a class="el" href="dpanel__dfs_8c.html#2a809488b87d2c1a9b2a574b726e8517">dpanel_dfs()</a>, and are
+      used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+	    	   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__ddefs_8h.html" title="Header file for real operations.">slu_ddefs.h</a>.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="8d42744f59d84a50b19aa4c28cf7aded"></a><!-- doxytag: member="slu_ddefs.h::dgstrs" ref="8d42744f59d84a50b19aa4c28cf7aded" args="(trans_t, SuperMatrix *, SuperMatrix *, int *, int *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgstrs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> DGSTRS solves a system of linear equations A*X=B or A'*X=B
+ with A sparse and B dense, using the LU factorization computed by
+ DGSTRF.</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre> L       (input) SuperMatrix*
+         The factor L from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf()</a>. Use compressed row subscripts storage for supernodes,
+         i.e., L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (input) SuperMatrix*
+         The factor U from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="dgstrf_8c.html#65a25ed27f2524e9cbc8f6ce8cd22c38">dgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><p>
+<pre> perm_c  (input) int*, dimension (L->ncol)
+	   Column permutation vector, which defines the 
+         permutation matrix Pc; perm_c[i] = j means column i of A is 
+         in position j in A*Pc.</pre><p>
+<pre> perm_r  (input) int*, dimension (L->nrow)
+         Row permutation vector, which defines the permutation matrix Pr; 
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+ 	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="d778c065ce9768d1f971d8a556752f11"></a><!-- doxytag: member="slu_ddefs.h::dinf_norm_error" ref="d778c065ce9768d1f971d8a556752f11" args="(int, SuperMatrix *, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dinf_norm_error           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="177ab9599e432642729507475d5cea83"></a><!-- doxytag: member="slu_ddefs.h::dlamch_" ref="177ab9599e432642729507475d5cea83" args="(char *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dlamch_           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>cmach</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    DLAMCH determines double precision machine parameters.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    CMACH   (input) CHARACTER*1   
+            Specifies the value to be returned by DLAMCH:   
+            = 'E' or 'e',   DLAMCH := eps   
+            = 'S' or 's ,   DLAMCH := sfmin   
+            = 'B' or 'b',   DLAMCH := base   
+            = 'P' or 'p',   DLAMCH := eps*base   
+            = 'N' or 'n',   DLAMCH := t   
+            = 'R' or 'r',   DLAMCH := rnd   
+            = 'M' or 'm',   DLAMCH := emin   
+            = 'U' or 'u',   DLAMCH := rmin   
+            = 'L' or 'l',   DLAMCH := emax   
+            = 'O' or 'o',   DLAMCH := rmax</pre><p>
+<pre>            where</pre><p>
+<pre>            eps   = relative machine precision   
+            sfmin = safe minimum, such that 1/sfmin does not overflow   
+            base  = base of the machine   
+            prec  = eps*base   
+            t     = number of (base) digits in the mantissa   
+            rnd   = 1.0 when rounding occurs in addition, 0.0 otherwise   
+            emin  = minimum exponent before (gradual) underflow   
+            rmin  = underflow threshold - base**(emin-1)   
+            emax  = largest exponent before overflow   
+            rmax  = overflow threshold  - (base**emax)*(1-eps)</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="7c3a821ed273808f662ddd41be6c6c97"></a><!-- doxytag: member="slu_ddefs.h::dlaqgs" ref="7c3a821ed273808f662ddd41be6c6c97" args="(SuperMatrix *, double *, double *, double, double, double, char *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dlaqgs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   DLAQGS equilibrates a general sparse M by N matrix A using the row and   
+   scaling factors in the vectors R and C.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input/output) SuperMatrix*
+           On exit, the equilibrated matrix.  See EQUED for the form of 
+           the equilibrated matrix. The type of A can be:
+	    Stype = NC; Dtype = SLU_D; Mtype = GE.</pre><p>
+<pre>   R       (input) double*, dimension (A->nrow)
+           The row scale factors for A.</pre><p>
+<pre>   C       (input) double*, dimension (A->ncol)
+           The column scale factors for A.</pre><p>
+<pre>   ROWCND  (input) double
+           Ratio of the smallest R(i) to the largest R(i).</pre><p>
+<pre>   COLCND  (input) double
+           Ratio of the smallest C(i) to the largest C(i).</pre><p>
+<pre>   AMAX    (input) double
+           Absolute value of largest matrix entry.</pre><p>
+<pre>   EQUED   (output) char*
+           Specifies the form of equilibration that was done.   
+           = 'N':  No equilibration   
+           = 'R':  Row equilibration, i.e., A has been premultiplied by  
+                   diag(R).   
+           = 'C':  Column equilibration, i.e., A has been postmultiplied  
+                   by diag(C).   
+           = 'B':  Both row and column equilibration, i.e., A has been
+                   replaced by diag(R) * A * diag(C).</pre><p>
+<pre>   Internal Parameters   
+   ===================</pre><p>
+<pre>   THRESH is a threshold value used to decide if row or column scaling   
+   should be done based on the ratio of the row or column scaling   
+   factors.  If ROWCND < THRESH, row scaling is done, and if   
+   COLCND < THRESH, column scaling is done.</pre><p>
+<pre>   LARGE and SMALL are threshold values used to decide if row scaling   
+   should be done based on the absolute size of the largest matrix   
+   element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="d48bb6b5f8ebecb3263b80aa0588b62e"></a><!-- doxytag: member="slu_ddefs.h::dldperm" ref="d48bb6b5f8ebecb3263b80aa0588b62e" args="(int, int, int, int[], int[], double[], int[], double[], double[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dldperm           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a93b6921e772245253231d545072e93c"></a><!-- doxytag: member="slu_ddefs.h::dLUMemInit" ref="a93b6921e772245253231d545072e93c" args="(fact_t, void *, int, int, int, int, int, double, SuperMatrix *, SuperMatrix *, GlobalLU_t *, int **, double **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dLUMemInit           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a> </td>
+          <td class="paramname"> <em>fact</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>annz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>fill_ratio</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>iwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname"> <em>dwork</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Memory-related.<p>
+<pre>
+ For those unpredictable size, estimate as fill_ratio * nnz(A).
+ Return value:
+     If lwork = -1, return the estimated amount of space required, plus n;
+     otherwise, return the amount of space actually allocated when
+     memory allocation failure occurred.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="4cc8cb916b6bf5f2238c374aa7339f4c"></a><!-- doxytag: member="slu_ddefs.h::dLUMemXpand" ref="4cc8cb916b6bf5f2238c374aa7339f4c" args="(int, int, MemType, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dLUMemXpand           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>next</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> </td>
+          <td class="paramname"> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>maxlen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="e7976837d1936a3150abf5dd62f0c211"></a><!-- doxytag: member="slu_ddefs.h::dLUWorkFree" ref="e7976837d1936a3150abf5dd62f0c211" args="(int *, double *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dLUWorkFree           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a7bf96909e8e3579499f46a84b28d9df"></a><!-- doxytag: member="slu_ddefs.h::dmemory_usage" ref="a7bf96909e8e3579499f46a84b28d9df" args="(const int, const int, const int, const int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dmemory_usage           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2b7be732f4d725dd35799d772473625e"></a><!-- doxytag: member="slu_ddefs.h::doubleCalloc" ref="2b7be732f4d725dd35799d772473625e" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* doubleCalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="47c4cf79f8c6305147a70de6da2696ac"></a><!-- doxytag: member="slu_ddefs.h::doubleMalloc" ref="47c4cf79f8c6305147a70de6da2696ac" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* doubleMalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="22cfb6f57857cc7cb3d853ee5467656f"></a><!-- doxytag: member="slu_ddefs.h::dpanel_bmod" ref="22cfb6f57857cc7cb3d853ee5467656f" args="(const int, const int, const int, const int, double *, double *, int *, int *, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dpanel_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>    Performs numeric block updates (sup-panel) in topological order.
+    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+    Special processing on the supernodal portion of L[*,j]</pre><p>
+<pre>    Before entering this routine, the original nonzeros in the panel 
+    were already copied into the spa[m,w].</pre><p>
+<pre>    Updated/Output parameters-
+    dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
+    collectively in the m-by-w vector dense[*]. 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="ca83bf1fa16a64ea2ee575574a8bb969"></a><!-- doxytag: member="slu_ddefs.h::dpanel_dfs" ref="ca83bf1fa16a64ea2ee575574a8bb969" args="(const int, const int, const int, SuperMatrix *, int *, int *, double *, int *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dpanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel. 
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a 
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="2c1536c187133a8a8ea5d856a222eec5"></a><!-- doxytag: member="slu_ddefs.h::dPivotGrowth" ref="2c1536c187133a8a8ea5d856a222eec5" args="(int, SuperMatrix *, int *, SuperMatrix *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dPivotGrowth           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> Compute the reciprocal pivot growth factor of the leading ncols columns
+ of the matrix, using the formula:
+     min_j ( max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>) / max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(U_ij)</a>) )</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> ncols    (input) int
+          The number of columns of matrices A, L and U.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = NC; Dtype = SLU_D; Mtype = GE.</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SC; Dtype = SLU_D; Mtype = TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = NC;
+          Dtype = SLU_D; Mtype = TRU.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="09624f0c44de80ee2731e44a333ee01c"></a><!-- doxytag: member="slu_ddefs.h::dpivotL" ref="09624f0c44de80ee2731e44a333ee01c" args="(const int, const double, int *, int *, int *, int *, int *, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dpivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+           pivot row = k;
+       ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+           pivot row = j;
+       ELSE
+           pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0      success;
+                 i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="4908a093c1b9d8d96e3fbba6c29673c1"></a><!-- doxytag: member="slu_ddefs.h::dPrint_CompCol_Matrix" ref="4908a093c1b9d8d96e3fbba6c29673c1" args="(char *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dPrint_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d440b7616886349fe2cde5ac490b0f7d"></a><!-- doxytag: member="slu_ddefs.h::dPrint_Dense_Matrix" ref="d440b7616886349fe2cde5ac490b0f7d" args="(char *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dPrint_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="61c31548694df9784dc2612febfedc00"></a><!-- doxytag: member="slu_ddefs.h::dprint_lu_col" ref="61c31548694df9784dc2612febfedc00" args="(char *, int, int, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dprint_lu_col           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d6acd040a093d5858b9b77d347be954c"></a><!-- doxytag: member="slu_ddefs.h::dPrint_SuperNode_Matrix" ref="d6acd040a093d5858b9b77d347be954c" args="(char *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dPrint_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="98c8e37fbd3e285de80ae5ebc633c64a"></a><!-- doxytag: member="slu_ddefs.h::dpruneL" ref="98c8e37fbd3e285de80ae5ebc633c64a" args="(const int, const int *, const int, const int, const int *, const int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dpruneL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Prunes the L-structure of supernodes whose L-structure
+   contains the current pivot row "pivrow"
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="293d5d2ac72e4e528ee06d634cb6b59a"></a><!-- doxytag: member="slu_ddefs.h::dqselect" ref="293d5d2ac72e4e528ee06d634cb6b59a" args="(int, double *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dqselect           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a28191998cfaddc30d4728535a39d996"></a><!-- doxytag: member="slu_ddefs.h::dQuerySpace" ref="a28191998cfaddc30d4728535a39d996" args="(SuperMatrix *, SuperMatrix *, mem_usage_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="be5e29734eb193fdda83f02fbb72a60a"></a><!-- doxytag: member="slu_ddefs.h::dreadhb" ref="be5e29734eb193fdda83f02fbb72a60a" args="(int *, int *, int *, double **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dreadhb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="efc4e420b7fa27a770b4b9db6ba5cfc4"></a><!-- doxytag: member="slu_ddefs.h::dreadmt" ref="efc4e420b7fa27a770b4b9db6ba5cfc4" args="(int *, int *, int *, double **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dreadmt           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6f74181ecc009862e39a3d512c9dc1ae"></a><!-- doxytag: member="slu_ddefs.h::dreadrb" ref="6f74181ecc009862e39a3d512c9dc1ae" args="(int *, int *, int *, double **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dreadrb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cd7d7ca64b596f459db7e62897c6130a"></a><!-- doxytag: member="slu_ddefs.h::dreadtriple" ref="cd7d7ca64b596f459db7e62897c6130a" args="(int *, int *, int *, double **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dreadtriple           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6248d2471a710335359db300b35c5066"></a><!-- doxytag: member="slu_ddefs.h::dSetRWork" ref="6248d2471a710335359db300b35c5066" args="(int, int, double *, double **, double **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dSetRWork           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="289847afa67421491f96367c7f2fe90f"></a><!-- doxytag: member="slu_ddefs.h::dsnode_bmod" ref="289847afa67421491f96367c7f2fe90f" args="(const int, const int, const int, double *, double *, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dsnode_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b0fe8232652578797bee690fcd8adfd0"></a><!-- doxytag: member="slu_ddefs.h::dsnode_dfs" ref="b0fe8232652578797bee690fcd8adfd0" args="(const int, const int, const int *, const int *, const int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int dsnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="dsnode__dfs_8c.html#80b831678c233741661d8386d8736da1">dsnode_dfs()</a> - Determine the union of the row structures of those 
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="7061332d759d7e4d73c1b2e5cb0bf2bf"></a><!-- doxytag: member="slu_ddefs.h::fixupL" ref="7061332d759d7e4d73c1b2e5cb0bf2bf" args="(const int, const int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fixupL           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ae8eb367a0a2fcdf734738bc9630df85"></a><!-- doxytag: member="slu_ddefs.h::ilu_countnz" ref="ae8eb367a0a2fcdf734738bc9630df85" args="(const int, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_countnz           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4b9639419ceb1d7b476f000292022a24"></a><!-- doxytag: member="slu_ddefs.h::ilu_dcolumn_dfs" ref="4b9639419ceb1d7b476f000292022a24" args="(const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_dcolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   ILU_DCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="7448553ebd9bd2f4dd9d19c2a988ae8e"></a><!-- doxytag: member="slu_ddefs.h::ilu_dcopy_to_ucol" ref="7448553ebd9bd2f4dd9d19c2a988ae8e" args="(int, int, int *, int *, int *, double *, int, milu_t, double, int, double *, int *, GlobalLU_t *, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_dcopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c127b5fda718241500c5a6ee7dae0df5"></a><!-- doxytag: member="slu_ddefs.h::ilu_ddrop_row" ref="c127b5fda718241500c5a6ee7dae0df5" args="(superlu_options_t *, int, int, double, int, int *, double *, GlobalLU_t *, double *, double *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_ddrop_row           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5ebb5502086dbb04d4dd640de81de410"></a><!-- doxytag: member="slu_ddefs.h::ilu_dpanel_dfs" ref="5ebb5502086dbb04d4dd640de81de410" args="(const int, const int, const int, SuperMatrix *, int *, int *, double *, double *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_dpanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel.
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="19d8e83d74fdc411c1f10d76574e4b31"></a><!-- doxytag: member="slu_ddefs.h::ilu_dpivotL" ref="19d8e83d74fdc411c1f10d76574e4b31" args="(const int, const double, int *, int *, int, int *, int *, int *, int *, double, milu_t, double, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_dpivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>diagind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>swap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iswap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>fill_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname"> <em>milu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>drop_sum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+	     pivot row = k;
+	 ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+	     pivot row = j;
+	 ELSE
+	     pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0	  success;
+		   i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="7b3370283f8f5ce4a3fb0207247cc8e2"></a><!-- doxytag: member="slu_ddefs.h::ilu_dQuerySpace" ref="7b3370283f8f5ce4a3fb0207247cc8e2" args="(SuperMatrix *, SuperMatrix *, mem_usage_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_dQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="cd3bf891014254c364adbb0d1b2d1f49"></a><!-- doxytag: member="slu_ddefs.h::ilu_dsnode_dfs" ref="cd3bf891014254c364adbb0d1b2d1f49" args="(const int, const int, const int *, const int *, const int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_dsnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__dsnode__dfs_8c.html#66dbc4626e59d14b4d3458c4eb841829">ilu_dsnode_dfs()</a> - Determine the union of the row structures of those
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore,
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="ad0c06e9adc1e29a0ab2e78c38119bb4"></a><!-- doxytag: member="slu_ddefs.h::print_double_vec" ref="ad0c06e9adc1e29a0ab2e78c38119bb4" args="(char *, int, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int print_double_vec           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="04b5542748fcc2fee77b587e31bb0a02"></a><!-- doxytag: member="slu_ddefs.h::PrintPerf" ref="04b5542748fcc2fee77b587e31bb0a02" args="(SuperMatrix *, SuperMatrix *, mem_usage_t *, double, double, double *, double *, char *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PrintPerf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b776edfed8eb517dc4d037e76ed2bb24"></a><!-- doxytag: member="slu_ddefs.h::sp_dgemm" ref="b776edfed8eb517dc4d037e76ed2bb24" args="(char *, char *, int, int, int, double, SuperMatrix *, double *, int, double, double *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_dgemm           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transa</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   sp_d performs one of the matrix-matrix operations</pre><p>
+<pre>      C := alpha*op( A )*op( B ) + beta*C,</pre><p>
+<pre>   where  op( X ) is one of</pre><p>
+<pre>      op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),</pre><p>
+<pre>   alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
+   an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANSA - (input) char*
+            On entry, TRANSA specifies the form of op( A ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSA = 'N' or 'n',  op( A ) = A.   
+               TRANSA = 'T' or 't',  op( A ) = A'.   
+               TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
+            Unchanged on exit.</pre><p>
+<pre>   TRANSB - (input) char*
+            On entry, TRANSB specifies the form of op( B ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSB = 'N' or 'n',  op( B ) = B.   
+               TRANSB = 'T' or 't',  op( B ) = B'.   
+               TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
+            Unchanged on exit.</pre><p>
+<pre>   M      - (input) int   
+            On entry,  M  specifies  the number of rows of the matrix 
+	     op( A ) and of the matrix C.  M must be at least zero. 
+	     Unchanged on exit.</pre><p>
+<pre>   N      - (input) int
+            On entry,  N specifies the number of columns of the matrix 
+	     op( B ) and the number of columns of the matrix C. N must be 
+	     at least zero.
+	     Unchanged on exit.</pre><p>
+<pre>   K      - (input) int
+            On entry, K specifies the number of columns of the matrix 
+	     op( A ) and the number of rows of the matrix op( B ). K must 
+	     be at least  zero.   
+           Unchanged on exit.</pre><p>
+<pre>   ALPHA  - (input) double
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+            Currently, the type of A can be:
+                Stype = NC or NCP; Dtype = SLU_D; Mtype = GE. 
+            In the future, more general A can be handled.</pre><p>
+<pre>   B      - DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb is 
+            n when TRANSB = 'N' or 'n',  and is  k otherwise.   
+            Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
+            part of the array B must contain the matrix B, otherwise 
+            the leading n by k part of the array B must contain the 
+            matrix B.   
+            Unchanged on exit.</pre><p>
+<pre>   LDB    - (input) int
+            On entry, LDB specifies the first dimension of B as declared 
+            in the calling (sub) program. LDB must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max( 1, n )</a>.  
+            Unchanged on exit.</pre><p>
+<pre>   BETA   - (input) double
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then C need not be set on input.</pre><p>
+<pre>   C      - DOUBLE PRECISION array of DIMENSION ( LDC, n ).   
+            Before entry, the leading m by n part of the array C must 
+            contain the matrix C,  except when beta is zero, in which 
+            case C need not be set on entry.   
+            On exit, the array C is overwritten by the m by n matrix 
+	     ( alpha*op( A )*B + beta*C ).</pre><p>
+<pre>   LDC    - (input) int
+            On entry, LDC specifies the first dimension of C as declared 
+            in the calling (sub)program. LDC must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max(1,m)</a>.   
+            Unchanged on exit.</pre><p>
+<pre>   ==== Sparse Level 3 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="505f6c005fe6a0cdcbf00512a1e4823a"></a><!-- doxytag: member="slu_ddefs.h::sp_dgemv" ref="505f6c005fe6a0cdcbf00512a1e4823a" args="(char *, double, SuperMatrix *, double *, int, double, double *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_dgemv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incy</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   <a class="el" href="dsp__blas2_8c.html#221dfb4c5cbc550095a989c61fec4993" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x...">sp_dgemv()</a>  performs one of the matrix-vector operations   
+      y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
+   where alpha and beta are scalars, x and y are vectors and A is a
+   sparse A->nrow by A->ncol matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANS  - (input) char*
+            On entry, TRANS specifies the operation to be performed as   
+            follows:   
+               TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
+               TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
+               TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.</pre><p>
+<pre>   ALPHA  - (input) double
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+            Currently, the type of A can be:
+                Stype = NC or NCP; Dtype = SLU_D; Mtype = GE. 
+            In the future, more general A can be handled.</pre><p>
+<pre>   X      - (input) double*, array of DIMENSION at least   
+            ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
+            and at least   
+            ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
+            Before entry, the incremented array X must contain the   
+            vector x.</pre><p>
+<pre>   INCX   - (input) int
+            On entry, INCX specifies the increment for the elements of   
+            X. INCX must not be zero.</pre><p>
+<pre>   BETA   - (input) double
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then Y need not be set on input.</pre><p>
+<pre>   Y      - (output) double*,  array of DIMENSION at least   
+            ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
+            and at least   
+            ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
+            Before entry with BETA non-zero, the incremented array Y   
+            must contain the vector y. On exit, Y is overwritten by the 
+            updated vector y.</pre><p>
+<pre>   INCY   - (input) int
+            On entry, INCY specifies the increment for the elements of   
+            Y. INCY must not be zero.</pre><p>
+<pre>   ==== Sparse Level 2 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="f7ab3b2b81d10a67b258956bfc468740"></a><!-- doxytag: member="slu_ddefs.h::sp_dtrsv" ref="f7ab3b2b81d10a67b258956bfc468740" args="(char *, char *, char *, SuperMatrix *, SuperMatrix *, double *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_dtrsv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>uplo</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>diag</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose
+   =======</pre><p>
+<pre>   <a class="el" href="dsp__blas2_8c.html#aa92ff654356fe62f70ebef5815627e4" title="Solves one of the systems of equations A*x = b, or A'*x = b.">sp_dtrsv()</a> solves one of the systems of equations   
+       A*x = b,   or   A'*x = b,
+   where b and x are n element vectors and A is a sparse unit , or   
+   non-unit, upper or lower triangular matrix.   
+   No test for singularity or near-singularity is included in this   
+   routine. Such tests must be performed before calling this routine.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   uplo   - (input) char*
+            On entry, uplo specifies whether the matrix is an upper or   
+             lower triangular matrix as follows:   
+                uplo = 'U' or 'u'   A is an upper triangular matrix.   
+                uplo = 'L' or 'l'   A is a lower triangular matrix.</pre><p>
+<pre>   trans  - (input) char*
+             On entry, trans specifies the equations to be solved as   
+             follows:   
+                trans = 'N' or 'n'   A*x = b.   
+                trans = 'T' or 't'   A'*x = b.
+                trans = 'C' or 'c'   A'*x = b.</pre><p>
+<pre>   diag   - (input) char*
+             On entry, diag specifies whether or not A is unit   
+             triangular as follows:   
+                diag = 'U' or 'u'   A is assumed to be unit triangular.   
+                diag = 'N' or 'n'   A is not assumed to be unit   
+                                    triangular.</pre><p>
+<pre>   L       - (input) SuperMatrix*
+	       The factor L from the factorization Pr*A*Pc=L*U. Use
+             compressed row subscripts storage for supernodes,
+             i.e., L has types: Stype = SC, Dtype = SLU_D, Mtype = TRLU.</pre><p>
+<pre>   U       - (input) SuperMatrix*
+	        The factor U from the factorization Pr*A*Pc=L*U.
+	        U has types: Stype = NC, Dtype = SLU_D, Mtype = TRU.</pre><p>
+<pre>   x       - (input/output) double*
+             Before entry, the incremented array X must contain the n   
+             element right-hand side vector b. On exit, X is overwritten 
+             with the solution vector x.</pre><p>
+<pre>   info    - (output) int*
+             If *info = -i, the i-th argument had an illegal value.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__scomplex_8h-source.html b/DOC/html/slu__scomplex_8h-source.html
new file mode 100644
index 0000000..9a34f88
--- /dev/null
+++ b/DOC/html/slu__scomplex_8h-source.html
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_scomplex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<h1>SRC/slu_scomplex.h</h1><a href="slu__scomplex_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00014"></a>00014 <span class="preprocessor">#ifndef __SUPERLU_SCOMPLEX </span><span class="comment">/* allow multiple inclusions */</span>
+<a name="l00015"></a>00015 <span class="preprocessor">#define __SUPERLU_SCOMPLEX</span>
+<a name="l00016"></a>00016 <span class="preprocessor"></span>
+<a name="l00017"></a>00017 
+<a name="l00018"></a>00018 <span class="preprocessor">#ifndef SCOMPLEX_INCLUDE</span>
+<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define SCOMPLEX_INCLUDE</span>
+<a name="l00020"></a>00020 <span class="preprocessor"></span>
+<a name="l00021"></a><a class="code" href="structcomplex.html#6b24d5cc84eef41dbe90b79e93de030f">00021</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{ <span class="keywordtype">float</span> r, i; } <a class="code" href="structcomplex.html">complex</a>;
+<a name="l00022"></a>00022 
+<a name="l00023"></a>00023 
+<a name="l00024"></a>00024 <span class="comment">/* Macro definitions */</span>
+<a name="l00025"></a>00025 
+<a name="l00027"></a><a class="code" href="slu__scomplex_8h.html#f3df9377099fd2cba886d217734ce884">00027</a> <span class="preprocessor">#define c_add(c, a, b) { (c)->r = (a)->r + (b)->r; \</span>
+<a name="l00028"></a>00028 <span class="preprocessor">                         (c)->i = (a)->i + (b)->i; }</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<a name="l00031"></a><a class="code" href="slu__scomplex_8h.html#0fe6bb9dac5f735dd69a127519a9c841">00031</a> <span class="preprocessor">#define c_sub(c, a, b) { (c)->r = (a)->r - (b)->r; \</span>
+<a name="l00032"></a>00032 <span class="preprocessor">                         (c)->i = (a)->i - (b)->i; }</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00035"></a><a class="code" href="slu__scomplex_8h.html#a675d825b907fe4d939ddc2533b38bb8">00035</a> <span class="preprocessor">#define cs_mult(c, a, b) { (c)->r = (a)->r * (b); \</span>
+<a name="l00036"></a>00036 <span class="preprocessor">                           (c)->i = (a)->i * (b); }</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00039"></a><a class="code" href="slu__scomplex_8h.html#515037047a218e7f77c4f495b1d6abca">00039</a> <span class="preprocessor">#define cc_mult(c, a, b) { \</span>
+<a name="l00040"></a>00040 <span class="preprocessor">        float cr, ci; \</span>
+<a name="l00041"></a>00041 <span class="preprocessor">        cr = (a)->r * (b)->r - (a)->i * (b)->i; \</span>
+<a name="l00042"></a>00042 <span class="preprocessor">        ci = (a)->i * (b)->r + (a)->r * (b)->i; \</span>
+<a name="l00043"></a>00043 <span class="preprocessor">        (c)->r = cr; \</span>
+<a name="l00044"></a>00044 <span class="preprocessor">        (c)->i = ci; \</span>
+<a name="l00045"></a>00045 <span class="preprocessor">    }</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span>
+<a name="l00047"></a><a class="code" href="slu__scomplex_8h.html#c917679ece23ee5f61e994fb56b30e1c">00047</a> <span class="preprocessor">#define cc_conj(a, b) { \</span>
+<a name="l00048"></a>00048 <span class="preprocessor">        (a)->r = (b)->r; \</span>
+<a name="l00049"></a>00049 <span class="preprocessor">        (a)->i = -((b)->i); \</span>
+<a name="l00050"></a>00050 <span class="preprocessor">    }</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span>
+<a name="l00053"></a><a class="code" href="slu__scomplex_8h.html#82b7c0f8931b82e92d24a076eab0e82e">00053</a> <span class="preprocessor">#define c_eq(a, b)  ( (a)->r == (b)->r && (a)->i == (b)->i )</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span>
+<a name="l00055"></a>00055 
+<a name="l00056"></a>00056 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00058"></a>00058 <span class="preprocessor">#endif</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span>
+<a name="l00060"></a>00060 <span class="comment">/* Prototypes for functions in scomplex.c */</span>
+<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="scomplex_8c.html#19814f5030befb85c4bb07e0fac34a7b" title="Complex Division c = a/b.">c_div</a>(<a class="code" href="structcomplex.html">complex</a> *, <a class="code" href="structcomplex.html">complex</a> *, <a class="code" href="structcomplex.html">complex</a> *);
+<a name="l00062"></a>00062 <span class="keywordtype">double</span> <a class="code" href="scomplex_8c.html#fc2967f7b71477625eb58de94a6e4c71" title="Returns sqrt(z.r^2 + z.i^2).">c_abs</a>(<a class="code" href="structcomplex.html">complex</a> *);     <span class="comment">/* exact */</span>
+<a name="l00063"></a>00063 <span class="keywordtype">double</span> <a class="code" href="scomplex_8c.html#6a6e9259e2eadc976a783d1b0e8f013b" title="Approximates the abs. Returns abs(z.r) + abs(z.i).">c_abs1</a>(<a class="code" href="structcomplex.html">complex</a> *);    <span class="comment">/* approximate */</span>
+<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="scomplex_8c.html#6111d345ee625a35d42da30db28c6041" title="Return the exponentiation.">c_exp</a>(<a class="code" href="structcomplex.html">complex</a> *, <a class="code" href="structcomplex.html">complex</a> *);
+<a name="l00065"></a>00065 <span class="keywordtype">void</span> <a class="code" href="scomplex_8c.html#dd0e09f7411e03b7516ddedacd6a59df" title="Return the complex conjugate.">r_cnjg</a>(<a class="code" href="structcomplex.html">complex</a> *, <a class="code" href="structcomplex.html">complex</a> *);
+<a name="l00066"></a>00066 <span class="keywordtype">double</span> <a class="code" href="scomplex_8c.html#b6bc19479c8838286f451d5d9a6c86a3" title="Return the imaginary part.">r_imag</a>(<a class="code" href="structcomplex.html">complex</a> *);
+<a name="l00067"></a>00067 <a class="code" href="structcomplex.html">complex</a> <a class="code" href="scomplex_8c.html#ee98d3dfc6ee26d36a2e095bd28414e5" title="SIGN functions for complex number. Returns z/abs(z).">c_sgn</a>(<a class="code" href="structcomplex.html">complex</a> *);
+<a name="l00068"></a>00068 <a class="code" href="structcomplex.html">complex</a> <a class="code" href="scomplex_8c.html#8e9b533cd4055cb200a5d63152754898" title="Square-root of a complex number.">c_sqrt</a>(<a class="code" href="structcomplex.html">complex</a> *);
+<a name="l00069"></a>00069 
+<a name="l00070"></a>00070 
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span>  }
+<a name="l00074"></a>00074 <span class="preprocessor">#endif</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span>
+<a name="l00076"></a>00076 <span class="preprocessor">#endif</span>
+<a name="l00077"></a>00077 <span class="preprocessor"></span>
+<a name="l00078"></a>00078 <span class="preprocessor">#endif  </span><span class="comment">/* __SUPERLU_SCOMPLEX */</span>
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__scomplex_8h.html b/DOC/html/slu__scomplex_8h.html
new file mode 100644
index 0000000..6c48c1f
--- /dev/null
+++ b/DOC/html/slu__scomplex_8h.html
@@ -0,0 +1,446 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_scomplex.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/slu_scomplex.h File Reference</h1>Header file for <a class="el" href="structcomplex.html">complex</a> operations. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="slu__scomplex_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structcomplex.html">complex</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#f3df9377099fd2cba886d217734ce884">c_add</a>(c, a, b)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Complex Addition c = a + b.  <a href="#f3df9377099fd2cba886d217734ce884"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#0fe6bb9dac5f735dd69a127519a9c841">c_sub</a>(c, a, b)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Complex Subtraction c = a - b.  <a href="#0fe6bb9dac5f735dd69a127519a9c841"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#a675d825b907fe4d939ddc2533b38bb8">cs_mult</a>(c, a, b)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Complex-Double Multiplication.  <a href="#a675d825b907fe4d939ddc2533b38bb8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#515037047a218e7f77c4f495b1d6abca">cc_mult</a>(c, a, b)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Complex-Complex Multiplication.  <a href="#515037047a218e7f77c4f495b1d6abca"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#c917679ece23ee5f61e994fb56b30e1c">cc_conj</a>(a, b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#82b7c0f8931b82e92d24a076eab0e82e">c_eq</a>(a, b)   ( (a)->r == (b)->r && (a)->i == (b)->i )</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Complex equality testing.  <a href="#82b7c0f8931b82e92d24a076eab0e82e"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#6b7d3c87a3029e808bb32eed7dad81f7">c_div</a> (<a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Complex Division c = a/b.  <a href="#6b7d3c87a3029e808bb32eed7dad81f7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#f55ee2cd6c55b5ad16136940080c9f67">c_abs</a> (<a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns sqrt(z.r^2 + z.i^2).  <a href="#f55ee2cd6c55b5ad16136940080c9f67"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#47b65089087d28e542f04907937cb8a9">c_abs1</a> (<a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Approximates the abs. Returns abs(z.r) + abs(z.i).  <a href="#47b65089087d28e542f04907937cb8a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#36d8645ac9bf1eb00128329fe5edb982">c_exp</a> (<a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the exponentiation.  <a href="#36d8645ac9bf1eb00128329fe5edb982"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#0837d7f15d3b03860fdd17de957c788c">r_cnjg</a> (<a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the <a class="el" href="structcomplex.html">complex</a> conjugate.  <a href="#0837d7f15d3b03860fdd17de957c788c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#29e2cb7ddb38711cdae8f6dc4481a80f">r_imag</a> (<a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the imaginary part.  <a href="#29e2cb7ddb38711cdae8f6dc4481a80f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structcomplex.html">complex</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#8b1147936f5b008b9cba0a9745199519">c_sgn</a> (<a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">SIGN functions for <a class="el" href="structcomplex.html">complex</a> number. Returns z/abs(z).  <a href="#8b1147936f5b008b9cba0a9745199519"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structcomplex.html">complex</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#d2e9c9356a42769f53e741e68e1aac9d">c_sqrt</a> (<a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Square-root of a <a class="el" href="structcomplex.html">complex</a> number.  <a href="#d2e9c9356a42769f53e741e68e1aac9d"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre> 
+  -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Contains definitions for various <a class="el" href="structcomplex.html">complex</a> operations.
+ This header file is to be included in source files c*.c
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="f3df9377099fd2cba886d217734ce884"></a><!-- doxytag: member="slu_scomplex.h::c_add" ref="f3df9377099fd2cba886d217734ce884" args="(c, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define c_add          </td>
+          <td>(</td>
+          <td class="paramtype">c,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">{ (c)->r = (a)->r + (b)->r; \
+                         (c)->i = (a)->i + (b)->i; }
+</pre></div>
+</div>
+</div><p>
+<a class="anchor" name="82b7c0f8931b82e92d24a076eab0e82e"></a><!-- doxytag: member="slu_scomplex.h::c_eq" ref="82b7c0f8931b82e92d24a076eab0e82e" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define c_eq          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( (a)->r == (b)->r && (a)->i == (b)->i )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0fe6bb9dac5f735dd69a127519a9c841"></a><!-- doxytag: member="slu_scomplex.h::c_sub" ref="0fe6bb9dac5f735dd69a127519a9c841" args="(c, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define c_sub          </td>
+          <td>(</td>
+          <td class="paramtype">c,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">{ (c)->r = (a)->r - (b)->r; \
+                         (c)->i = (a)->i - (b)->i; }
+</pre></div>
+</div>
+</div><p>
+<a class="anchor" name="c917679ece23ee5f61e994fb56b30e1c"></a><!-- doxytag: member="slu_scomplex.h::cc_conj" ref="c917679ece23ee5f61e994fb56b30e1c" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_conj          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">{ \
+        (a)->r = (b)->r; \
+        (a)->i = -((b)->i); \
+    }
+</pre></div>
+</div>
+</div><p>
+<a class="anchor" name="515037047a218e7f77c4f495b1d6abca"></a><!-- doxytag: member="slu_scomplex.h::cc_mult" ref="515037047a218e7f77c4f495b1d6abca" args="(c, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_mult          </td>
+          <td>(</td>
+          <td class="paramtype">c,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">{ \
+        <span class="keywordtype">float</span> cr, ci; \
+        cr = (a)->r * (b)->r - (a)->i * (b)->i; \
+        ci = (a)->i * (b)->r + (a)->r * (b)->i; \
+        (c)->r = cr; \
+        (c)->i = ci; \
+    }
+</pre></div>
+</div>
+</div><p>
+<a class="anchor" name="a675d825b907fe4d939ddc2533b38bb8"></a><!-- doxytag: member="slu_scomplex.h::cs_mult" ref="a675d825b907fe4d939ddc2533b38bb8" args="(c, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cs_mult          </td>
+          <td>(</td>
+          <td class="paramtype">c,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">{ (c)->r = (a)->r * (b); \
+                           (c)->i = (a)->i * (b); }
+</pre></div>
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="f55ee2cd6c55b5ad16136940080c9f67"></a><!-- doxytag: member="slu_scomplex.h::c_abs" ref="f55ee2cd6c55b5ad16136940080c9f67" args="(complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double c_abs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="47b65089087d28e542f04907937cb8a9"></a><!-- doxytag: member="slu_scomplex.h::c_abs1" ref="47b65089087d28e542f04907937cb8a9" args="(complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double c_abs1           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6b7d3c87a3029e808bb32eed7dad81f7"></a><!-- doxytag: member="slu_scomplex.h::c_div" ref="6b7d3c87a3029e808bb32eed7dad81f7" args="(complex *, complex *, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void c_div           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="36d8645ac9bf1eb00128329fe5edb982"></a><!-- doxytag: member="slu_scomplex.h::c_exp" ref="36d8645ac9bf1eb00128329fe5edb982" args="(complex *, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void c_exp           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8b1147936f5b008b9cba0a9745199519"></a><!-- doxytag: member="slu_scomplex.h::c_sgn" ref="8b1147936f5b008b9cba0a9745199519" args="(complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcomplex.html">complex</a> c_sgn           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d2e9c9356a42769f53e741e68e1aac9d"></a><!-- doxytag: member="slu_scomplex.h::c_sqrt" ref="d2e9c9356a42769f53e741e68e1aac9d" args="(complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcomplex.html">complex</a> c_sqrt           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0837d7f15d3b03860fdd17de957c788c"></a><!-- doxytag: member="slu_scomplex.h::r_cnjg" ref="0837d7f15d3b03860fdd17de957c788c" args="(complex *, complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void r_cnjg           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="29e2cb7ddb38711cdae8f6dc4481a80f"></a><!-- doxytag: member="slu_scomplex.h::r_imag" ref="29e2cb7ddb38711cdae8f6dc4481a80f" args="(complex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double r_imag           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcomplex.html">complex</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__sdefs_8h-source.html b/DOC/html/slu__sdefs_8h-source.html
new file mode 100644
index 0000000..00dd5f4
--- /dev/null
+++ b/DOC/html/slu__sdefs_8h-source.html
@@ -0,0 +1,234 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_sdefs.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<h1>SRC/slu_sdefs.h</h1><a href="slu__sdefs_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00063"></a>00063 <span class="preprocessor">#ifndef __SUPERLU_sSP_DEFS </span><span class="comment">/* allow multiple inclusions */</span>
+<a name="l00064"></a>00064 <span class="preprocessor">#define __SUPERLU_sSP_DEFS</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>
+<a name="l00066"></a>00066 <span class="comment">/*</span>
+<a name="l00067"></a>00067 <span class="comment"> * File name:           ssp_defs.h</span>
+<a name="l00068"></a>00068 <span class="comment"> * Purpose:             Sparse matrix types and function prototypes</span>
+<a name="l00069"></a>00069 <span class="comment"> * History:</span>
+<a name="l00070"></a>00070 <span class="comment"> */</span>
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072 <span class="preprocessor">#ifdef _CRAY</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#include <fortran.h></span>
+<a name="l00074"></a>00074 <span class="preprocessor">#include <string.h></span>
+<a name="l00075"></a>00075 <span class="preprocessor">#endif</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span>
+<a name="l00077"></a>00077 <span class="comment">/* Define my integer type int_t */</span>
+<a name="l00078"></a><a class="code" href="slu__sdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">00078</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>; <span class="comment">/* default */</span>
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080 <span class="preprocessor">#include <math.h></span>
+<a name="l00081"></a>00081 <span class="preprocessor">#include <limits.h></span>
+<a name="l00082"></a>00082 <span class="preprocessor">#include "<a class="code" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called.">slu_Cnames.h</a>"</span>
+<a name="l00083"></a>00083 <span class="preprocessor">#include "<a class="code" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a>"</span>
+<a name="l00084"></a>00084 <span class="preprocessor">#include "<a class="code" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a>"</span>
+<a name="l00085"></a>00085 
+<a name="l00086"></a>00086 
+<a name="l00087"></a>00087 
+<a name="l00088"></a>00088 <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00089"></a><a class="code" href="structGlobalLU__t.html#94902a11c68912c2d456a58edd29f31d">00089</a>     <span class="keywordtype">int</span>     *xsup;    <span class="comment">/* supernode and column mapping */</span>
+<a name="l00090"></a><a class="code" href="structGlobalLU__t.html#fe003e9f68a924d5ba66c6f655bea55c">00090</a>     <span class="keywordtype">int</span>     *supno;   
+<a name="l00091"></a><a class="code" href="structGlobalLU__t.html#4e7e8cd3ba09e252a04eaf0b8af5fccd">00091</a>     <span class="keywordtype">int</span>     *lsub;    <span class="comment">/* compressed L subscripts */</span>
+<a name="l00092"></a><a class="code" href="structGlobalLU__t.html#c6f1655e303e2947524c29182d0f6a1e">00092</a>     <span class="keywordtype">int</span>     *xlsub;
+<a name="l00093"></a><a class="code" href="structGlobalLU__t.html#2c939400d4e502551f9b64edd27f614a">00093</a>     <span class="keywordtype">float</span>  *lusup;   <span class="comment">/* L supernodes */</span>
+<a name="l00094"></a><a class="code" href="structGlobalLU__t.html#aa63b1382a358278bd2775c921a84246">00094</a>     <span class="keywordtype">int</span>     *xlusup;
+<a name="l00095"></a><a class="code" href="structGlobalLU__t.html#2542f90c18839f310699cb3e4722626f">00095</a>     <span class="keywordtype">float</span>  *ucol;    <span class="comment">/* U columns */</span>
+<a name="l00096"></a><a class="code" href="structGlobalLU__t.html#96b0443ea47703100b9ecad92137dda9">00096</a>     <span class="keywordtype">int</span>     *usub;
+<a name="l00097"></a><a class="code" href="structGlobalLU__t.html#4cbf4786dd6fc6541d5e097b27ab6835">00097</a>     <span class="keywordtype">int</span>     *xusub;
+<a name="l00098"></a>00098     <span class="keywordtype">int</span>     nzlmax;   <span class="comment">/* current max size of lsub */</span>
+<a name="l00099"></a>00099     <span class="keywordtype">int</span>     nzumax;   <span class="comment">/*    "    "    "      ucol */</span>
+<a name="l00100"></a>00100     <span class="keywordtype">int</span>     nzlumax;  <span class="comment">/*    "    "    "     lusup */</span>
+<a name="l00101"></a>00101     <span class="keywordtype">int</span>     n;        <span class="comment">/* number of columns in the matrix */</span>
+<a name="l00102"></a>00102     <a class="code" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f6">LU_space_t</a> MemModel; <span class="comment">/* 0 - system malloc'd; 1 - user provided */</span>
+<a name="l00103"></a>00103     <span class="keywordtype">int</span>     num_expansions;
+<a name="l00104"></a><a class="code" href="structGlobalLU__t.html#edd2ee950bd57f92d4aa9028738b9bdc">00104</a>     <a class="code" href="structe__node.html" title="Headers for 4 types of dynamatically managed memory.">ExpHeader</a> *expanders; <span class="comment">/* Array of pointers to 4 types of memory */</span>
+<a name="l00105"></a>00105     <a class="code" href="structLU__stack__t.html">LU_stack_t</a> stack;     <span class="comment">/* use user supplied memory */</span>
+<a name="l00106"></a>00106 } <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a>;
+<a name="l00107"></a>00107 
+<a name="l00108"></a>00108 
+<a name="l00109"></a>00109 <span class="comment">/* -------- Prototypes -------- */</span>
+<a name="l00110"></a>00110 
+<a name="l00111"></a>00111 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00113"></a>00113 <span class="preprocessor">#endif</span>
+<a name="l00114"></a>00114 <span class="preprocessor"></span>
+<a name="l00116"></a>00116 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00117"></a>00117 <a class="code" href="sgssv_8c.html#6d5d8cc5159f2230fc059d0e382a63b8" title="Driver routines.">sgssv</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00118"></a>00118       <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00119"></a>00119 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00120"></a>00120 <a class="code" href="sgssvx_8c.html#f372ad744992d76301a23ae20a290b3c">sgssvx</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00121"></a>00121        <span class="keywordtype">char</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00122"></a>00122        <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00123"></a>00123        <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *,
+<a name="l00124"></a>00124        <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00125"></a>00125     <span class="comment">/* ILU */</span>
+<a name="l00126"></a>00126 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00127"></a>00127 <a class="code" href="slu__sdefs_8h.html#ff6cdbb84f0fbd4cbce7a64ea1f7eb20">sgsisv</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00128"></a>00128       <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00129"></a>00129 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00130"></a>00130 <a class="code" href="sgsisx_8c.html#7ef921fcca8189c43499e3e89e7e05ce">sgsisx</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00131"></a>00131        <span class="keywordtype">char</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00132"></a>00132        <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *,
+<a name="l00133"></a>00133        <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00134"></a>00134 
+<a name="l00135"></a>00135 
+<a name="l00137"></a>00137 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00138"></a>00138 <a class="code" href="slu__sdefs_8h.html#bb3d30eea43abc536793244e7564e70d" title="Supernodal LU factor related.">sCreate_CompCol_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">float</span> *,
+<a name="l00139"></a>00139                        <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00140"></a>00140 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00141"></a>00141 <a class="code" href="slu__sdefs_8h.html#77496309d539716f616365a2515aa653">sCreate_CompRow_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">float</span> *,
+<a name="l00142"></a>00142                        <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00143"></a>00143 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00144"></a>00144 <a class="code" href="slu__sdefs_8h.html#7369dba9a8c3e34a27bdc9eba73cbe3e" title="Copy matrix A into matrix B.">sCopy_CompCol_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00145"></a>00145 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00146"></a>00146 <a class="code" href="slu__sdefs_8h.html#ca98118f5539f098beff0b70c041c2e6">sCreate_Dense_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span>,
+<a name="l00147"></a>00147                      <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00148"></a>00148 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00149"></a>00149 <a class="code" href="slu__sdefs_8h.html#f4386b0d87e1c8886b58fcf9d243bc12">sCreate_SuperNode_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">float</span> *, 
+<a name="l00150"></a>00150                          <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00151"></a>00151                          <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00152"></a>00152 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00153"></a>00153 <a class="code" href="slu__sdefs_8h.html#5ef26ab4351b4ab39c2ef3d0ff5d6cb5">sCopy_Dense_Matrix</a>(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span>);
+<a name="l00154"></a>00154 
+<a name="l00155"></a>00155 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc" title="Count the total number of nonzeros in factors L and U, and in the symmetrically reduced...">countnz</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class [...]
+<a name="l00156"></a>00156 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85" title="Count the total number of nonzeros in factors L and U.">ilu_countnz</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00157"></a>00157 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf" title="Fix up the data storage lsub for L-subscripts. It removes the subscript sets for...">fixupL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00158"></a>00158 
+<a name="l00159"></a>00159 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#aef6f98786d0bd76103237385ddbeb9f" title="Allocate storage for original matrix A.">sallocateA</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">float</span> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00160"></a>00160 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf</a> (<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a>*, <a class="code" href="structSuperMatrix.html">SuperMatrix</a>*,
+<a name="l00161"></a>00161                        <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>*, <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, 
+<a name="l00162"></a>00162                        <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00163"></a>00163 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__sdefs_8h.html#d9d54c8dfc11f1e034b4b7175be60ffb">ssnode_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span> *,
+<a name="l00164"></a>00164                              <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00165"></a>00165 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__sdefs_8h.html#60e60255360fae0b1458da070690a3a2" title="Performs numeric block updates within the relaxed snode.">ssnode_bmod</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class= [...]
+<a name="l00166"></a>00166                               <span class="keywordtype">float</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00167"></a>00167 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#77baf210393e04fa71d4e73b5e60e556">spanel_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00168"></a>00168                            <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00169"></a>00169                            <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00170"></a>00170 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#51486936a9ff5079afed80eb5bf8a3e0">spanel_bmod</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>,
+<a name="l00171"></a>00171                            <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00172"></a>00172                            <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00173"></a>00173 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="scolumn__dfs_8c.html#c9a044320fe8bfbb051a344686a4cb7d">scolumn_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">in [...]
+<a name="l00174"></a>00174                            <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00175"></a>00175 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="scolumn__bmod_8c.html#c89043410fd16fe2b8d3b2c902fec9f7">scolumn_bmod</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">float</span> *,
+<a name="l00176"></a>00176                            <span class="keywordtype">float</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span>,
+<a name="l00177"></a>00177                            <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00178"></a>00178 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="scopy__to__ucol_8c.html#b44d465713c602e68295999c003daf7d">scopy_to_ucol</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00179"></a>00179                               <span class="keywordtype">float</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);         
+<a name="l00180"></a>00180 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__sdefs_8h.html#d7ddf03faedae25b4d73e0b6b33bf50c">spivotL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">double</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, 
+<a name="l00181"></a>00181                          <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00182"></a>00182 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#cf9da2c45289246ef663fc4a96d1ad78">spruneL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>,
+<a name="l00183"></a>00183                           <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00184"></a>00184 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#b345670a95db3f9c4b9c451224db8227">sreadmt</a> (<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">float</span> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00185"></a>00185 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#b79adc3c2d496feb17f359aa303211fc">sGenXtrue</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span>);
+<a name="l00186"></a>00186 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#c8b784b5551863e8d50047ee280c34cf" title="Let rhs[i] = sum of i-th row of A, so the solution vector is all 1&#39;s.">sFillRHS</a> (<a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <span class="keywordtype">int</span>, <span class="keywordtype">float</span> *, <span class="keywordtype">int</spa [...]
+<a name="l00187"></a>00187                           <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00188"></a>00188 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="sgstrs_8c.html#9b6e1e555af9cf109ef3a584054a91e2">sgstrs</a> (<a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00189"></a>00189                         <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00190"></a>00190 <span class="comment">/* ILU */</span>
+<a name="l00191"></a>00191 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="sgsitrf_8c.html#25788392a605519048cafa995b641fcc">sgsitrf</a> (<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a>*, <a class="code" href="structSuperMatrix.html">SuperMatrix</a>*, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>*,
+<a name="l00192"></a>00192                         <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00193"></a>00193                         <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00194"></a>00194 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="sldperm_8c.html#6c181d905cb61481e86ddfce701e74a0">sldperm</a>(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> [], <span class="keywordtype">int</span> [], <span class="keywordtype">float</span> [],
+<a name="l00195"></a>00195                         <span class="keywordtype">int</span> [], <span class="keywordtype">float</span> [], <span class="keywordtype">float</span> []);
+<a name="l00196"></a>00196 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__ssnode__dfs_8c.html#510a9174e442a65aaa83f9ce97390f85">ilu_ssnode_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</ [...]
+<a name="l00197"></a>00197                                <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00198"></a>00198 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="ilu__spanel__dfs_8c.html#fffee4e945eab223be6daa1759e98f60">ilu_spanel_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00199"></a>00199                                <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00200"></a>00200                                <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00201"></a>00201 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__scolumn__dfs_8c.html#7cca59251907bd7e1973d394487f74af">ilu_scolumn_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00202"></a>00202                                 <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00203"></a>00203                                 <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00204"></a>00204 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__scopy__to__ucol_8c.html#ac49754df15a9466857a0eca885f9444">ilu_scopy_to_ucol</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00205"></a>00205                                   <span class="keywordtype">float</span> *, <span class="keywordtype">int</span>, <a class="code" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>,
+<a name="l00206"></a>00206                                   <span class="keywordtype">float</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <span class="keywordtype">float</span> *);
+<a name="l00207"></a>00207 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__spivotL_8c.html#9da652b68b6ecee45919cf56f256b7e0">ilu_spivotL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">double</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">i [...]
+<a name="l00208"></a>00208                             <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">double</span>, <a class="code" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>,
+<a name="l00209"></a>00209                             <span class="keywordtype">float</span>, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00210"></a>00210 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__sdrop__row_8c.html#0d9b169f47790d6eed41107efb445867">ilu_sdrop_row</a> (<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>,
+<a name="l00211"></a>00211                               <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">double</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, 
+<a name="l00212"></a>00212                               <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span>);
+<a name="l00213"></a>00213 
+<a name="l00214"></a>00214 
+<a name="l00217"></a>00217 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="sgsequ_8c.html#d8a808e807e38c32c08cfbeadb088f08" title="Driver related.">sgsequ</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *,
+<a name="l00218"></a>00218                         <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span> *);
+<a name="l00219"></a>00219 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slaqgs_8c.html#f44216962efdebc7e1117b273743e84f">slaqgs</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span>,
+<a name="l00220"></a>00220                         <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">char</span> *);
+<a name="l00221"></a>00221 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="sgscon_8c.html#76b21c7561d5bce81821a76c3465601b">sgscon</a> (<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, 
+<a name="l00222"></a>00222                          <span class="keywordtype">float</span>, <span class="keywordtype">float</span> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00223"></a>00223 <span class="keyword">extern</span> <span class="keywordtype">float</span>   <a class="code" href="slu__sdefs_8h.html#cb8787465a6296109b9a306d5a315ff8">sPivotGrowth</a>(<span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, 
+<a name="l00224"></a>00224                             <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00225"></a>00225 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="sgsrfs_8c.html#a619758588187cd5ad69a10a808d18f6">sgsrfs</a> (<a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00226"></a>00226                        <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">char</span> *, <span class="keywordtype">float</span> *, 
+<a name="l00227"></a>00227                        <span class="keywordtype">float</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00228"></a>00228                        <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00229"></a>00229 
+<a name="l00230"></a>00230 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__sdefs_8h.html#a6d287b6b9bcaf72a692343e614c429c" title="Solves one of the systems of equations A*x = b, or A&#39;*x = b.">sp_strsv</a> (<span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00231"></a>00231                         <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">float</span> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00232"></a>00232 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__sdefs_8h.html#9e543b2d14781b56ef349114012b4fc9" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A&#39;*x...">sp_sgemv</a> (<span class="keywordtype">char</span> *, <span class="keywordtype">float</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">float</span> *,
+<a name="l00233"></a>00233                         <span class="keywordtype">int</span>, <span class="keywordtype">float</span>, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span>);
+<a name="l00234"></a>00234 
+<a name="l00235"></a>00235 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__sdefs_8h.html#35b4a0e44c32443df609069021d27812">sp_sgemm</a> (<span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">float</span>,
+<a name="l00236"></a>00236                         <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">float</span>, 
+<a name="l00237"></a>00237                         <span class="keywordtype">float</span> *, <span class="keywordtype">int</span>);
+<a name="l00238"></a>00238 <span class="keyword">extern</span>         <span class="keywordtype">float</span> <a class="code" href="slamch_8c.html#5458a369e694e54bb5758774f492b6cb">slamch_</a>(<span class="keywordtype">char</span> *);
+<a name="l00239"></a>00239 
+<a name="l00240"></a>00240 
+<a name="l00242"></a>00242 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__sdefs_8h.html#f68715ec86cde90aa31fec07164d6ea6" title="Memory-related.">sLUMemInit</a> (<a class="code" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a>, <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keyword [...]
+<a name="l00243"></a>00243                             <span class="keywordtype">float</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00244"></a>00244                             <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <span class="keywordtype">int</span> **, <span class="keywordtype">float</span> **);
+<a name="l00245"></a>00245 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#b5b2859bf1ef1900506dfa702574c6ad" title="Set up pointers for real working arrays.">sSetRWork</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> **, <span class="keywordtype">float</span> **);
+<a name="l00246"></a>00246 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#9035f0d2a50cf5d8e29287572bd1be83" title="Free the working storage used by factor routines.">sLUWorkFree</a> (<span class="keywordtype">int</span> *, <span class="keywordtype">float</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00247"></a>00247 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__sdefs_8h.html#9af26d0426eb0bb63755880f2e67e7b7" title="Expand the data structures for L and U during the factorization.">sLUMemXpand</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a>, <span class="keywordtype">int</span> *, <a class [...]
+<a name="l00248"></a>00248 
+<a name="l00249"></a>00249 <span class="keyword">extern</span> <span class="keywordtype">float</span>  *<a class="code" href="slu__cdefs_8h.html#42361c3ce2ba81d149ffba01fbd6f138">floatMalloc</a>(<span class="keywordtype">int</span>);
+<a name="l00250"></a>00250 <span class="keyword">extern</span> <span class="keywordtype">float</span>  *<a class="code" href="slu__cdefs_8h.html#3e1230bff11a9e47c35555299bcdcf1b">floatCalloc</a>(<span class="keywordtype">int</span>);
+<a name="l00251"></a>00251 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__sdefs_8h.html#b50ebebf3a620086366b6c310d52d681">smemory_usage</a>(<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>);
+<a name="l00252"></a>00252 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__sdefs_8h.html#1357f9a3b2ffb9522883ad84affa63e3">sQuerySpace</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *);
+<a name="l00253"></a>00253 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__sdefs_8h.html#db260ae3f26e2179b1cf33c3e754d6f1">ilu_sQuerySpace</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *);
+<a name="l00254"></a>00254 
+<a name="l00256"></a>00256 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#734dbf3f5d66b2a53d88e69daaad729e" title="Auxiliary routines.">sreadhb</a>(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">float</span> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00257"></a>00257 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#d992a573876b4abfe192ec2bc207f6b0">sreadrb</a>(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">float</span> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00258"></a>00258 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#e99cb18465c8992235a7bc003237f692">sreadtriple</a>(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">float</span> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00259"></a>00259 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#ef4be8ddf6a62ef48ca8dfc3a6992634" title="Convert a row compressed storage into a column compressed storage.">sCompRow_to_CompCol</a>(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">float</span>*, <span class="keywordtype">int</span>*, <span class="keyword [...]
+<a name="l00260"></a>00260                                    <span class="keywordtype">float</span> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00261"></a>00261 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#2d734e40276e89a3ef04bf79bc21acb6" title="Fills a float precision array with a given value.">sfill</a> (<span class="keywordtype">float</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">float</span>);
+<a name="l00262"></a>00262 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#ba0eeda28d139bf88878880edd3cca5a" title="Check the inf-norm of the error vector.">sinf_norm_error</a> (<span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">float</span> *);
+<a name="l00263"></a>00263 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#7a41152a5800bc02bef17b56e070d0e6">PrintPerf</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *,
+<a name="l00264"></a>00264                          <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">float</span> *, <span class="keywordtype">float</span> *, <span class="keywordtype">char</span> *);
+<a name="l00265"></a>00265 <span class="keyword">extern</span> <span class="keywordtype">float</span>  <a class="code" href="qselect_8c.html#5a36bc5d24fe074bc4f3cfb65d7f0ae8">sqselect</a>(<span class="keywordtype">int</span>, <span class="keywordtype">float</span> *, <span class="keywordtype">int</span>);
+<a name="l00266"></a>00266 
+<a name="l00267"></a>00267 
+<a name="l00269"></a>00269 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#5cd6efad9d9fb7aef8a984f5e3cff66b" title="Routines for debugging.">sPrint_CompCol_Matrix</a>(<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00270"></a>00270 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#eb289a84407c9cbbb33cdf3dbb1dacbe">sPrint_SuperNode_Matrix</a>(<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00271"></a>00271 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#25b29c47333295f4aa744e541e277ea0">sPrint_Dense_Matrix</a>(<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00272"></a>00272 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__sdefs_8h.html#297455c494a78c098b2bf418edbc6b16" title="Diagnostic print of column &quot;jcol&quot; in the U/L factor.">sprint_lu_col</a>(<span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00273"></a>00273 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dutil_8c.html#457e11c8736d30b7da4ee14feb422ed0">print_double_vec</a>(<span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *);
+<a name="l00274"></a>00274 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#2cfc97393b65ddc5a40fdc523a50003a">check_tempv</a>(<span class="keywordtype">int</span>, <span class="keywordtype">float</span> *);
+<a name="l00275"></a>00275 
+<a name="l00276"></a>00276 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00277"></a>00277 <span class="preprocessor"></span>  }
+<a name="l00278"></a>00278 <span class="preprocessor">#endif</span>
+<a name="l00279"></a>00279 <span class="preprocessor"></span>
+<a name="l00280"></a>00280 <span class="preprocessor">#endif </span><span class="comment">/* __SUPERLU_sSP_DEFS */</span>
+<a name="l00281"></a>00281 
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__sdefs_8h.html b/DOC/html/slu__sdefs_8h.html
new file mode 100644
index 0000000..2af03eb
--- /dev/null
+++ b/DOC/html/slu__sdefs_8h.html
@@ -0,0 +1,6027 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_sdefs.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/slu_sdefs.h File Reference</h1>Header file for real operations. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <limits.h></code><br>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<code>#include "<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a>"</code><br>
+<code>#include "<a class="el" href="slu__util_8h-source.html">slu_util.h</a>"</code><br>
+
+<p>
+<a href="slu__sdefs_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#44bbae3b1218d951ed229c461a5f14b6">sgssv</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class=" [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver routines.  <a href="#44bbae3b1218d951ed229c461a5f14b6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#4d6a37b565522c7c77a173826588deee">sgssvx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, int *, char *, float *, float *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.h [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ff6cdbb84f0fbd4cbce7a64ea1f7eb20">sgsisv</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class= [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#b57375a81b174861bcb68ed11861a4f5">sgsisx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, int *, char *, float *, float *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.h [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#bb3d30eea43abc536793244e7564e70d">sCreate_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int, float *, int *, int *, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related.  <a href="#bb3d30eea43abc536793244e7564e70d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#77496309d539716f616365a2515aa653">sCreate_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int, float *, int *, int *, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#7369dba9a8c3e34a27bdc9eba73cbe3e">sCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B.  <a href="#7369dba9a8c3e34a27bdc9eba73cbe3e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ca98118f5539f098beff0b70c041c2e6">sCreate_Dense_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, float *, int, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="el"  [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#f4386b0d87e1c8886b58fcf9d243bc12">sCreate_SuperNode_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int, float *, int *, int *, int *, int *, int *, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#5ef26ab4351b4ab39c2ef3d0ff5d6cb5">sCopy_Dense_Matrix</a> (int, int, float *, int, float *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc">countnz</a> (const int, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Count the total number of nonzeros in factors L and U, and in the symmetrically reduced L.  <a href="#8086902aa8be3fc7d04c3c82ec3a79dc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85">ilu_countnz</a> (const int, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Count the total number of nonzeros in factors L and U.  <a href="#ae8eb367a0a2fcdf734738bc9630df85"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf">fixupL</a> (const int, const int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fix up the data storage lsub for L-subscripts. It removes the subscript sets for structural pruning, and applies permuation to the remaining subscripts.  <a href="#7061332d759d7e4d73c1b2e5cb0bf2bf"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#aef6f98786d0bd76103237385ddbeb9f">sallocateA</a> (int, int, float **, int **, int **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A.  <a href="#aef6f98786d0bd76103237385ddbeb9f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#f006a81b576fffa92a1c848ac3191c70">sgstrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int *, void *, int, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#d9d54c8dfc11f1e034b4b7175be60ffb">ssnode_dfs</a> (const int, const int, const int *, const int *, const int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#60e60255360fae0b1458da070690a3a2">ssnode_bmod</a> (const int, const int, const int, float *, float *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode.  <a href="#60e60255360fae0b1458da070690a3a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#77baf210393e04fa71d4e73b5e60e556">spanel_dfs</a> (const int, const int, const int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, float *, int *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#51486936a9ff5079afed80eb5bf8a3e0">spanel_bmod</a> (const int, const int, const int, const int, float *, float *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#20dc9300377cb7240572ba34a31af3d1">scolumn_dfs</a> (const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#e21004feb23626f7ea648b46657a257a">scolumn_bmod</a> (const int, const int, float *, float *, int *, int *, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#249a312149bcf091fcc8adbd0c536cb2">scopy_to_ucol</a> (int, int, int *, int *, int *, float *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#d7ddf03faedae25b4d73e0b6b33bf50c">spivotL</a> (const int, const double, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#cf9da2c45289246ef663fc4a96d1ad78">spruneL</a> (const int, const int *, const int, const int, const int *, const int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#b345670a95db3f9c4b9c451224db8227">sreadmt</a> (int *, int *, int *, float **, int **, int **)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#b79adc3c2d496feb17f359aa303211fc">sGenXtrue</a> (int, int, float *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#c8b784b5551863e8d50047ee280c34cf">sFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, int, float *, int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's.  <a href="#c8b784b5551863e8d50047ee280c34cf"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ea450a9c52512127d6eaaebf0a65f9ce">sgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMat [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#22204c4186c4412ee33cd16285ee6bb0">sgsitrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int *, void *, int, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.htm [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#69557d06b4e300aa6aca944561f3bb32">sldperm</a> (int, int, int, int[], int[], float[], int[], float[], float[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#714eccb6cd0fb1fc0920e8a52489f1a5">ilu_ssnode_dfs</a> (const int, const int, const int *, const int *, const int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a91b3297a15ace9ac5abd65c5e708f2d">ilu_spanel_dfs</a> (const int, const int, const int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, float *, float *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ab2366ea3e2cdcbf51b976432fc43616">ilu_scolumn_dfs</a> (const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#35a18be483569110edc1665d13e260e3">ilu_scopy_to_ucol</a> (int, int, int *, int *, int *, float *, int, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, double, int, float *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, float *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#b7f61e0a95c151f53f8a400bc9c6192e">ilu_spivotL</a> (const int, const double, int *, int *, int, int *, int *, int *, int *, double, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, float, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#5f5e67d3b2d715a388ca99bb28387fb9">ilu_sdrop_row</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, int, int, double, int, int *, double *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, float *, float *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#3dbdb406f2fb8b186f0f8d3a4cd2d60d">sgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float *, float *, float *, float *, float *, int *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver related.  <a href="#3dbdb406f2fb8b186f0f8d3a4cd2d60d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#fe4b556cd9d484f53606d114f83649d4">slaqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float *, float *, float, float, float, char *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#1c910cf12639a22a03727ad204575b3b">sgscon</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float, float *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#cb8787465a6296109b9a306d5a315ff8">sPivotGrowth</a> (int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#e824bcb507f76ad3053d845352fb6b3d">sgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a6d287b6b9bcaf72a692343e614c429c">sp_strsv</a> (char *, char *, char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, int *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b.  <a href="#a6d287b6b9bcaf72a692343e614c429c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#9e543b2d14781b56ef349114012b4fc9">sp_sgemv</a> (char *, float, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float *, int, float, float *, int)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y,.  <a href="#9e543b2d14781b56ef349114012b4fc9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#35b4a0e44c32443df609069021d27812">sp_sgemm</a> (char *, char *, int, int, int, float, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float *, int, float, float *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#47c1dd1b8332f4366d5c5112219fdb3a">slamch_</a> (char *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#f68715ec86cde90aa31fec07164d6ea6">sLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a>, void *, int, int, int, int, int, float, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="stru [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Memory-related.  <a href="#f68715ec86cde90aa31fec07164d6ea6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#b5b2859bf1ef1900506dfa702574c6ad">sSetRWork</a> (int, int, float *, float **, float **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays.  <a href="#b5b2859bf1ef1900506dfa702574c6ad"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#9035f0d2a50cf5d8e29287572bd1be83">sLUWorkFree</a> (int *, float *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines.  <a href="#9035f0d2a50cf5d8e29287572bd1be83"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#9af26d0426eb0bb63755880f2e67e7b7">sLUMemXpand</a> (int, int, <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a>, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization.  <a href="#9af26d0426eb0bb63755880f2e67e7b7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#42361c3ce2ba81d149ffba01fbd6f138">floatMalloc</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#3e1230bff11a9e47c35555299bcdcf1b">floatCalloc</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#b50ebebf3a620086366b6c310d52d681">smemory_usage</a> (const int, const int, const int, const int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#1357f9a3b2ffb9522883ad84affa63e3">sQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#db260ae3f26e2179b1cf33c3e754d6f1">ilu_sQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#734dbf3f5d66b2a53d88e69daaad729e">sreadhb</a> (int *, int *, int *, float **, int **, int **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines.  <a href="#734dbf3f5d66b2a53d88e69daaad729e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#d992a573876b4abfe192ec2bc207f6b0">sreadrb</a> (int *, int *, int *, float **, int **, int **)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#e99cb18465c8992235a7bc003237f692">sreadtriple</a> (int *, int *, int *, float **, int **, int **)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ef4be8ddf6a62ef48ca8dfc3a6992634">sCompRow_to_CompCol</a> (int, int, int, float *, int *, int *, float **, int **, int **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage.  <a href="#ef4be8ddf6a62ef48ca8dfc3a6992634"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#2d734e40276e89a3ef04bf79bc21acb6">sfill</a> (float *, int, float)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fills a float precision array with a given value.  <a href="#2d734e40276e89a3ef04bf79bc21acb6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ba0eeda28d139bf88878880edd3cca5a">sinf_norm_error</a> (int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector.  <a href="#ba0eeda28d139bf88878880edd3cca5a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#dca8047332d0b0c161945583ecb3435d">PrintPerf</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *, float, float, float *, float *, char *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#98d44fe59660f87330b0172151a76141">sqselect</a> (int, float *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#5cd6efad9d9fb7aef8a984f5e3cff66b">sPrint_CompCol_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging.  <a href="#5cd6efad9d9fb7aef8a984f5e3cff66b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#eb289a84407c9cbbb33cdf3dbb1dacbe">sPrint_SuperNode_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#25b29c47333295f4aa744e541e277ea0">sPrint_Dense_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#297455c494a78c098b2bf418edbc6b16">sprint_lu_col</a> (char *, int, int, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor.  <a href="#297455c494a78c098b2bf418edbc6b16"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ad0c06e9adc1e29a0ab2e78c38119bb4">print_double_vec</a> (char *, int, double *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#46e1e8ccffc9a076461dbd042ae91654">check_tempv</a> (int, float *)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre> 
+ -- SuperLU routine (version 4.1) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November, 2010</pre><p>
+<pre> Global data structures used in LU factorization -</pre><p>
+<pre>   nsuper: supernodes = nsuper + 1, numbered [0, nsuper].
+   (xsup,supno): supno[i] is the supernode no to which i belongs;
+	xsup(s) points to the beginning of the s-th supernode.
+	e.g.   supno 0 1 2 2 3 3 3 4 4 4 4 4   (n=12)
+	        xsup 0 1 2 4 7 12
+	Note: dfs will be performed on supernode rep. relative to the new 
+	      row pivoting ordering</pre><p>
+<pre>   (xlsub,lsub): lsub[*] contains the compressed subscript of
+	rectangular supernodes; xlsub[j] points to the starting
+	location of the j-th column in lsub[*]. Note that xlsub 
+	is indexed by column.
+	Storage: original row subscripts</pre><p>
+<pre>      During the course of sparse LU factorization, we also use
+	(xlsub,lsub) for the purpose of symmetric pruning. For each
+	supernode {s,s+1,...,t=s+r} with first column s and last
+	column t, the subscript set
+		lsub[j], j=xlsub[s], .., xlsub[s+1]-1
+	is the structure of column s (i.e. structure of this supernode).
+	It is used for the storage of numerical values.
+	Furthermore,
+		lsub[j], j=xlsub[t], .., xlsub[t+1]-1
+	is the structure of the last column t of this supernode.
+	It is for the purpose of symmetric pruning. Therefore, the
+	structural subscripts can be rearranged without making physical
+	interchanges among the numerical values.</pre><p>
+<pre>	However, if the supernode has only one column, then we
+	only keep one set of subscripts. For any subscript interchange
+	performed, similar interchange must be done on the numerical
+	values.</pre><p>
+<pre>	The last column structures (for pruning) will be removed
+	after the numercial LU factorization phase.</pre><p>
+<pre>   (xlusup,lusup): lusup[*] contains the numerical values of the
+	rectangular supernodes; xlusup[j] points to the starting
+	location of the j-th column in storage vector lusup[*]
+	Note: xlusup is indexed by column.
+	Each rectangular supernode is stored by column-major
+	scheme, consistent with Fortran 2-dim array storage.</pre><p>
+<pre>   (xusub,ucol,usub): ucol[*] stores the numerical values of
+	U-columns outside the rectangular supernodes. The row
+	subscript of nonzero ucol[k] is stored in usub[k].
+	xusub[i] points to the starting location of column i in ucol.
+	Storage: new row subscripts; that is subscripts of PA.
+ </pre> <hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="b6fd6105e64ed14a0c9281326f05e623"></a><!-- doxytag: member="slu_sdefs.h::int_t" ref="b6fd6105e64ed14a0c9281326f05e623" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef int <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="46e1e8ccffc9a076461dbd042ae91654"></a><!-- doxytag: member="slu_sdefs.h::check_tempv" ref="46e1e8ccffc9a076461dbd042ae91654" args="(int, float *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void check_tempv           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8086902aa8be3fc7d04c3c82ec3a79dc"></a><!-- doxytag: member="slu_sdefs.h::countnz" ref="8086902aa8be3fc7d04c3c82ec3a79dc" args="(const int, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void countnz           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7061332d759d7e4d73c1b2e5cb0bf2bf"></a><!-- doxytag: member="slu_sdefs.h::fixupL" ref="7061332d759d7e4d73c1b2e5cb0bf2bf" args="(const int, const int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fixupL           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3e1230bff11a9e47c35555299bcdcf1b"></a><!-- doxytag: member="slu_sdefs.h::floatCalloc" ref="3e1230bff11a9e47c35555299bcdcf1b" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float* floatCalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="42361c3ce2ba81d149ffba01fbd6f138"></a><!-- doxytag: member="slu_sdefs.h::floatMalloc" ref="42361c3ce2ba81d149ffba01fbd6f138" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float* floatMalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ae8eb367a0a2fcdf734738bc9630df85"></a><!-- doxytag: member="slu_sdefs.h::ilu_countnz" ref="ae8eb367a0a2fcdf734738bc9630df85" args="(const int, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_countnz           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ab2366ea3e2cdcbf51b976432fc43616"></a><!-- doxytag: member="slu_sdefs.h::ilu_scolumn_dfs" ref="ab2366ea3e2cdcbf51b976432fc43616" args="(const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_scolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   ILU_SCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="35a18be483569110edc1665d13e260e3"></a><!-- doxytag: member="slu_sdefs.h::ilu_scopy_to_ucol" ref="35a18be483569110edc1665d13e260e3" args="(int, int, int *, int *, int *, float *, int, milu_t, double, int, float *, int *, GlobalLU_t *, float *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_scopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5f5e67d3b2d715a388ca99bb28387fb9"></a><!-- doxytag: member="slu_sdefs.h::ilu_sdrop_row" ref="5f5e67d3b2d715a388ca99bb28387fb9" args="(superlu_options_t *, int, int, double, int, int *, double *, GlobalLU_t *, float *, float *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_sdrop_row           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a91b3297a15ace9ac5abd65c5e708f2d"></a><!-- doxytag: member="slu_sdefs.h::ilu_spanel_dfs" ref="a91b3297a15ace9ac5abd65c5e708f2d" args="(const int, const int, const int, SuperMatrix *, int *, int *, float *, float *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_spanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel.
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="b7f61e0a95c151f53f8a400bc9c6192e"></a><!-- doxytag: member="slu_sdefs.h::ilu_spivotL" ref="b7f61e0a95c151f53f8a400bc9c6192e" args="(const int, const double, int *, int *, int, int *, int *, int *, int *, double, milu_t, float, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_spivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>diagind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>swap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iswap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>fill_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname"> <em>milu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>drop_sum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+	     pivot row = k;
+	 ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+	     pivot row = j;
+	 ELSE
+	     pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0	  success;
+		   i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="db260ae3f26e2179b1cf33c3e754d6f1"></a><!-- doxytag: member="slu_sdefs.h::ilu_sQuerySpace" ref="db260ae3f26e2179b1cf33c3e754d6f1" args="(SuperMatrix *, SuperMatrix *, mem_usage_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_sQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="714eccb6cd0fb1fc0920e8a52489f1a5"></a><!-- doxytag: member="slu_sdefs.h::ilu_ssnode_dfs" ref="714eccb6cd0fb1fc0920e8a52489f1a5" args="(const int, const int, const int *, const int *, const int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_ssnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__ssnode__dfs_8c.html#510a9174e442a65aaa83f9ce97390f85">ilu_ssnode_dfs()</a> - Determine the union of the row structures of those
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore,
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="ad0c06e9adc1e29a0ab2e78c38119bb4"></a><!-- doxytag: member="slu_sdefs.h::print_double_vec" ref="ad0c06e9adc1e29a0ab2e78c38119bb4" args="(char *, int, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int print_double_vec           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="dca8047332d0b0c161945583ecb3435d"></a><!-- doxytag: member="slu_sdefs.h::PrintPerf" ref="dca8047332d0b0c161945583ecb3435d" args="(SuperMatrix *, SuperMatrix *, mem_usage_t *, float, float, float *, float *, char *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PrintPerf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="aef6f98786d0bd76103237385ddbeb9f"></a><!-- doxytag: member="slu_sdefs.h::sallocateA" ref="aef6f98786d0bd76103237385ddbeb9f" args="(int, int, float **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sallocateA           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e21004feb23626f7ea648b46657a257a"></a><!-- doxytag: member="slu_sdefs.h::scolumn_bmod" ref="e21004feb23626f7ea648b46657a257a" args="(const int, const int, float *, float *, int *, int *, int, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int scolumn_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>fpanelc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose:
+ ========
+ Performs numeric block updates (sup-col) in topological order.
+ It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ Special processing on the supernodal portion of L[*,j]
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="20dc9300377cb7240572ba34a31af3d1"></a><!-- doxytag: member="slu_sdefs.h::scolumn_dfs" ref="20dc9300377cb7240572ba34a31af3d1" args="(const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int scolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   SCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS 
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal 
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="ef4be8ddf6a62ef48ca8dfc3a6992634"></a><!-- doxytag: member="slu_sdefs.h::sCompRow_to_CompCol" ref="ef4be8ddf6a62ef48ca8dfc3a6992634" args="(int, int, int, float *, int *, int *, float **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sCompRow_to_CompCol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7369dba9a8c3e34a27bdc9eba73cbe3e"></a><!-- doxytag: member="slu_sdefs.h::sCopy_CompCol_Matrix" ref="7369dba9a8c3e34a27bdc9eba73cbe3e" args="(SuperMatrix *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sCopy_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5ef26ab4351b4ab39c2ef3d0ff5d6cb5"></a><!-- doxytag: member="slu_sdefs.h::sCopy_Dense_Matrix" ref="5ef26ab4351b4ab39c2ef3d0ff5d6cb5" args="(int, int, float *, int, float *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sCopy_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Copies a two-dimensional matrix X to another matrix Y. 
+</div>
+</div><p>
+<a class="anchor" name="249a312149bcf091fcc8adbd0c536cb2"></a><!-- doxytag: member="slu_sdefs.h::scopy_to_ucol" ref="249a312149bcf091fcc8adbd0c536cb2" args="(int, int, int *, int *, int *, float *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int scopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="bb3d30eea43abc536793244e7564e70d"></a><!-- doxytag: member="slu_sdefs.h::sCreate_CompCol_Matrix" ref="bb3d30eea43abc536793244e7564e70d" args="(SuperMatrix *, int, int, int, float *, int *, int *, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sCreate_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="77496309d539716f616365a2515aa653"></a><!-- doxytag: member="slu_sdefs.h::sCreate_CompRow_Matrix" ref="77496309d539716f616365a2515aa653" args="(SuperMatrix *, int, int, int, float *, int *, int *, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sCreate_CompRow_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ca98118f5539f098beff0b70c041c2e6"></a><!-- doxytag: member="slu_sdefs.h::sCreate_Dense_Matrix" ref="ca98118f5539f098beff0b70c041c2e6" args="(SuperMatrix *, int, int, float *, int, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sCreate_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f4386b0d87e1c8886b58fcf9d243bc12"></a><!-- doxytag: member="slu_sdefs.h::sCreate_SuperNode_Matrix" ref="f4386b0d87e1c8886b58fcf9d243bc12" args="(SuperMatrix *, int, int, int, float *, int *, int *, int *, int *, int *, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sCreate_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2d734e40276e89a3ef04bf79bc21acb6"></a><!-- doxytag: member="slu_sdefs.h::sfill" ref="2d734e40276e89a3ef04bf79bc21acb6" args="(float *, int, float)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sfill           </td>
+          <td>(</td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c8b784b5551863e8d50047ee280c34cf"></a><!-- doxytag: member="slu_sdefs.h::sFillRHS" ref="c8b784b5551863e8d50047ee280c34cf" args="(trans_t, int, float *, int, SuperMatrix *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sFillRHS           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b79adc3c2d496feb17f359aa303211fc"></a><!-- doxytag: member="slu_sdefs.h::sGenXtrue" ref="b79adc3c2d496feb17f359aa303211fc" args="(int, int, float *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sGenXtrue           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1c910cf12639a22a03727ad204575b3b"></a><!-- doxytag: member="slu_sdefs.h::sgscon" ref="1c910cf12639a22a03727ad204575b3b" args="(char *, SuperMatrix *, SuperMatrix *, float, float *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgscon           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>norm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>anorm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   SGSCON estimates the reciprocal of the condition number of a general 
+   real matrix A, in either the 1-norm or the infinity-norm, using   
+   the LU factorization computed by SGETRF.   *</pre><p>
+<pre>   An estimate is obtained for norm(inv(A)), and the reciprocal of the   
+   condition number is computed as   
+      RCOND = 1 / ( norm(A) * norm(inv(A)) ).</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>    NORM    (input) char*
+            Specifies whether the 1-norm condition number or the   
+            infinity-norm condition number is required:   
+            = '1' or 'O':  1-norm;   
+            = 'I':         Infinity-norm.</pre><p>
+<pre>    L       (input) SuperMatrix*
+            The factor L from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf()</a>. Use compressed row subscripts storage for supernodes,
+            i.e., L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre>    U       (input) SuperMatrix*
+            The factor U from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+            Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre>    ANORM   (input) float
+            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
+            If NORM = 'I', the infinity-norm of the original matrix A.</pre><p>
+<pre>    RCOND   (output) float*
+           The reciprocal of the condition number of the matrix A,   
+           computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><p>
+<pre>    INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="3dbdb406f2fb8b186f0f8d3a4cd2d60d"></a><!-- doxytag: member="slu_sdefs.h::sgsequ" ref="3dbdb406f2fb8b186f0f8d3a4cd2d60d" args="(SuperMatrix *, float *, float *, float *, float *, float *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgsequ           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   SGSEQU computes row and column scalings intended to equilibrate an   
+   M-by-N sparse matrix A and reduce its condition number. R returns the row
+   scale factors and C the column scale factors, chosen to try to make   
+   the largest element in each row and column of the matrix B with   
+   elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.</pre><p>
+<pre>   R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
+   number and BIGNUM = largest safe number.  Use of these scaling   
+   factors is not guaranteed to reduce the condition number of A but   
+   works well in practice.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The matrix of dimension (A->nrow, A->ncol) whose equilibration
+           factors are to be computed. The type of A can be:
+           Stype = SLU_NC; Dtype = SLU_S; Mtype = SLU_GE.</pre><p>
+<pre>   R       (output) float*, size A->nrow
+           If INFO = 0 or INFO > M, R contains the row scale factors   
+           for A.</pre><p>
+<pre>   C       (output) float*, size A->ncol
+           If INFO = 0,  C contains the column scale factors for A.</pre><p>
+<pre>   ROWCND  (output) float*
+           If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
+           smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
+           AMAX is neither too large nor too small, it is not worth   
+           scaling by R.</pre><p>
+<pre>   COLCND  (output) float*
+           If INFO = 0, COLCND contains the ratio of the smallest   
+           C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
+           worth scaling by C.</pre><p>
+<pre>   AMAX    (output) float*
+           Absolute value of largest matrix element.  If AMAX is very   
+           close to overflow or very close to underflow, the matrix   
+           should be scaled.</pre><p>
+<pre>   INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value   
+           > 0:  if INFO = i,  and i is   
+                 <= A->nrow:  the i-th row of A is exactly zero   
+                 >  A->ncol:  the (i-M)-th column of A is exactly zero</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="ff6cdbb84f0fbd4cbce7a64ea1f7eb20"></a><!-- doxytag: member="slu_sdefs.h::sgsisv" ref="ff6cdbb84f0fbd4cbce7a64ea1f7eb20" args="(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgsisv           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b57375a81b174861bcb68ed11861a4f5"></a><!-- doxytag: member="slu_sdefs.h::sgsisx" ref="b57375a81b174861bcb68ed11861a4f5" args="(superlu_options_t *, SuperMatrix *, int *, int *, int *, char *, float *, float *, SuperMatrix *, SuperMatrix *, void *, int, SuperMatrix *, SuperMatrix *, float *, float *, mem_usage_t *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgsisx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> SGSISX computes an approximate solutions of linear equations
+ A*X=B or A'*X=B, using the ILU factorization from <a class="el" href="sgsitrf_8c.html#25788392a605519048cafa995b641fcc">sgsitrf()</a>.
+ An estimation of the condition number is provided. 
+ The routine performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A is
+	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+	     = TRANS or CONJ).</pre><p>
+<pre>	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+	     matrix that usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the matrix A (after equilibration if options->Equil = YES)
+	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>	1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+	     and info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	1.6. The system of equations is solved for X using the factored form
+	     of A.</pre><p>
+<pre>	1.7. options->IterRefine is not used</pre><p>
+<pre>	1.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>	1.9. options for ILU only
+	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+		entries of modulus 1 on the diagonal and off-diagonal entries
+		of modulus at most 1. If MC64 fails, <a class="el" href="dgsequ_8c.html#af22b247cc134fb0ba90285e84ccebb4" title="Driver related.">dgsequ()</a> is used to
+		equilibrate the system.
+              ( Default: LargeDiag )
+	     2) options->ILU_DropTol = tau is the threshold for dropping.
+		For L, it is used directly (for the whole row in a supernode);
+		For U, ||A(:,i)||_oo * tau is used as the threshold
+	        for the	i-th column.
+		If a secondary dropping rule is required, tau will
+	        also be used to compute the second threshold.
+              ( Default: 1e-4 )
+	     3) options->ILU_FillFactor = gamma, used as the initial guess
+		of memory growth.
+		If a secondary dropping rule is required, it will also
+              be used as an upper bound of the memory.
+              ( Default: 10 )
+	     4) options->ILU_DropRule specifies the dropping rule.
+		Option	      Meaning
+		======	      ===========
+		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+			      p = gamma * nnz(A(:,j)).
+		DROP_AREA:    Variation of ILUTP, for j-th column, use
+			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+			      Otherwise
+				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+			      tau_U(j) uses the similar rule.
+			      NOTE: the thresholds used by L and U are separate.
+		DROP_INTERP:  Compute the second dropping threshold by
+			      interpolation instead of sorting (default).
+			      In this case, the actual fill ratio is not
+			      guaranteed smaller than gamma.
+		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+		( Default: DROP_BASIC | DROP_AREA )
+	     5) options->ILU_Norm is the criterion of measuring the magnitude
+		of a row in a supernode of L. ( Default is INF_NORM )
+		options->ILU_Norm	RowSize(x[1:n])
+		=================	===============
+		ONE_NORM		||x||_1 / n
+		TWO_NORM		||x||_2 / sqrt(n)
+		INF_NORM		max{|x[i]|}
+	     6) options->ILU_MILU specifies the type of MILU's variation.
+		= SILU: do not perform Modified ILU;
+		= SMILU_1 (not recommended):
+		    U(i,i) := U(i,i) + sum(dropped entries);
+		= SMILU_2:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+		= SMILU_3:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+		NOTE: Even SMILU_1 does not preserve the column sum because of
+		late dropping.
+              ( Default: SILU )
+	     7) options->ILU_FillTol is used as the perturbation when
+		encountering zero pivots. If some U(i,i) = 0, so that U is
+		exactly singular, then
+		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+              ( Default: 1e-2 )</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+	to the transpose of A:</pre><p>
+<pre>	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A' is
+	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>	2.2. Permute columns of transpose(A) (rows of A),
+	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+	     usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the transpose(A) (after equilibration if
+	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+	     permutation Pr determined by partial pivoting.</pre><p>
+<pre>	2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+	     And info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	2.6. The system of equations is solved for X using the factored form
+	     of transpose(A).</pre><p>
+<pre>	2.7. If options->IterRefine is not used.</pre><p>
+<pre>	2.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the LU decomposition will be performed and how the
+	   system will be solved.</pre><p>
+<pre> A	   (input/output) SuperMatrix*
+	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+	   of the linear equations is A->nrow. Currently, the type of A can be:
+	   Stype = SLU_NC or SLU_NR, Dtype = SLU_S, Mtype = SLU_GE.
+	   In the future, more general A may be handled.</pre><p>
+<pre>	   On entry, If options->Fact = FACTORED and equed is not 'N',
+	   then A must have been equilibrated by the scaling factors in
+	   R and/or C.
+	   On exit, A is not modified
+         if options->Equil = NO, or
+         if options->Equil = YES but equed = 'N' on exit, or
+         if options->RowPerm = NO.</pre><p>
+<pre>	   Otherwise, if options->Equil = YES and equed is not 'N',
+	   A is scaled as follows:
+	   If A->Stype = SLU_NC:
+	     equed = 'R':  A := diag(R) * A
+	     equed = 'C':  A := A * diag(C)
+	     equed = 'B':  A := diag(R) * A * diag(C).
+	   If A->Stype = SLU_NR:
+	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre>         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+            the matrix to an I-matrix, that is A is modified as follows:
+            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+            off-diagonal entries of modulus at most 1. P is a permutation
+            obtained from MC64.
+            If MC64 fails, <a class="el" href="sgsequ_8c.html#d8a808e807e38c32c08cfbeadb088f08" title="Driver related.">sgsequ()</a> is used to equilibrate the system,
+            and A is scaled as above, but no permutation is involved.
+            On exit, A is restored to the orginal row numbering, so
+            Dr*A*Dc is returned.</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+	   which defines the permutation matrix Pc; perm_c[i] = j means
+	   column i of A is in position j in A*Pc.
+	   On exit, perm_c may be overwritten by the product of the input
+	   perm_c and a permutation that postorders the elimination tree
+	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+	   is already in postorder.</pre><p>
+<pre>	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+	   which describes permutation of columns of transpose(A) 
+	   (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+	   which defines the permutation matrix Pr, and is determined
+	   by MC64 first then followed by partial pivoting.
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+	   determines permutation of rows of transpose(A)
+	   (columns of A) as described above.</pre><p>
+<pre>	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	   will try to use the input perm_r, unless a certain threshold
+	   criterion is violated. In that case, perm_r is overwritten by a
+	   new permutation determined by partial pivoting or diagonal
+	   threshold pivoting.
+	   Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+	   Elimination tree of Pc'*A'*A*Pc.
+	   If options->Fact != FACTORED and options->Fact != DOFACT,
+	   etree is an input argument, otherwise it is an output argument.
+	   Note: etree is a vector of parent pointers for a forest whose
+	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+	   Specifies the form of equilibration that was done.
+	   = 'N': No equilibration.
+	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+	   = 'B': Both row and column equilibration, i.e., A was replaced 
+		  by diag(R)*A*diag(C).
+	   If options->Fact = FACTORED, equed is an input argument,
+	   otherwise it is an output argument.</pre><p>
+<pre> R	   (input/output) float*, dimension (A->nrow)
+	   The row scale factors for A or transpose(A).
+	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+	   If equed = 'N' or 'C', R is not accessed.
+	   If options->Fact = FACTORED, R is an input argument,
+	       otherwise, R is output.
+	   If options->Fact = FACTORED and equed = 'R' or 'B', each element
+	       of R must be positive.</pre><p>
+<pre> C	   (input/output) float*, dimension (A->ncol)
+	   The column scale factors for A or transpose(A).
+	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+	   If equed = 'N' or 'R', C is not accessed.
+	   If options->Fact = FACTORED, C is an input argument,
+	       otherwise, C is output.
+	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+	       of C must be positive.</pre><p>
+<pre> L	   (output) SuperMatrix*
+	   The factor L from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses compressed row subscripts storage for supernodes, i.e.,
+	   L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre> U	   (output) SuperMatrix*
+	   The factor U from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses column-wise storage scheme, i.e., U has types:
+	   Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+	   User supplied workspace, should be large enough
+	   to hold data structures for factors L and U.
+	   On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 mem_usage->total_needed; no other side effects.</pre><p>
+<pre>	   See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B	   (input/output) SuperMatrix*
+	   B has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+	   On entry, the right hand side matrix.
+	   If B->ncol = 0, only LU decomposition is performed, the triangular
+			   solve is skipped.
+	   On exit,
+	      if equed = 'N', B is not modified; otherwise
+	      if A->Stype = SLU_NC:
+		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+		    B is overwritten by diag(R)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+		    B is overwritten by diag(C)*B;
+	      if A->Stype = SLU_NR:
+		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+		    B is overwritten by diag(C)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+		    B is overwritten by diag(R)*B.</pre><p>
+<pre> X	   (output) SuperMatrix*
+	   X has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+	   to the original system of equations. Note that A and B are modified
+	   on exit if equed is not 'N', and the solution to the equilibrated
+	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+	   and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) float*
+	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+	   The infinity norm is used. If recip_pivot_growth is much less
+	   than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) float*
+	   The estimate of the reciprocal condition number of the matrix A
+	   after equilibration (if done). If rcond is less than the machine
+	   precision (in particular, if rcond = 0), the matrix is singular
+	   to working precision. This condition is indicated by a return
+	   code of info > 0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+	   Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+	     The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+	     The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+	     The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+	  Record the statistics on runtime and floating-point operation count.
+	  See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+	   > 0: if info = i, and i is
+		<= A->ncol: number of zero pivots. They are replaced by small
+		      entries due to options->ILU_FillTol.
+		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+		      precision, meaning that the matrix is singular to
+		      working precision. Nevertheless, the solution and
+		      error bounds are computed because there are a number
+		      of situations where the computed solution can be more
+		      accurate than the value of RCOND would suggest.
+		> A->ncol+1: number of bytes allocated when memory allocation
+		      failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="22204c4186c4412ee33cd16285ee6bb0"></a><!-- doxytag: member="slu_sdefs.h::sgsitrf" ref="22204c4186c4412ee33cd16285ee6bb0" args="(superlu_options_t *, SuperMatrix *, int, int, int *, void *, int, int *, int *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgsitrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> SGSITRF computes an ILU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the ILU decomposition will be performed.</pre><p>
+<pre> A	    (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+	    (A->nrow, A->ncol). The type of A can be:
+	    Stype = SLU_NCP; Dtype = SLU_S; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+	    To control degree of relaxing supernodes. If the number
+	    of nodes (columns) in a subtree of the elimination tree is less
+	    than relax, this subtree is considered as one supernode,
+	    regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+	    A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+	    Elimination tree of A'*A.
+	    Note: etree is a vector of parent pointers for a forest whose
+	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+	    On input, the columns of A should be permuted so that the
+	    etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+	    User-supplied work space and space for the output data structures.
+	    Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the
+	    permutation matrix Pc; perm_c[i] = j means column i of A is
+	    in position j in A*Pc.
+	    When searching for diagonal, perm_c[*] is applied to the
+	    row subscripts of A, so that diagonal threshold pivoting
+	    can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+	    Row permutation vector which defines the permutation matrix Pr,
+	    perm_r[i] = j means row i of A is in position j in Pr*A.
+	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	       will try to use the input perm_r, unless a certain threshold
+	       criterion is violated. In that case, perm_r is overwritten by
+	       a new permutation determined by partial pivoting or diagonal
+	       threshold pivoting.
+	    Otherwise, perm_r is output argument;</pre><p>
+<pre> L	    (output) SuperMatrix*
+	    The factor L from the factorization Pr*A=L*U; use compressed row
+	    subscripts storage for supernodes, i.e., L has type:
+	    Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre> U	    (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+	    storage scheme, i.e., U has types: Stype = SLU_NC,
+	    Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+	    Record the statistics on runtime and floating-point operation count.
+	    See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+	    = 0: successful exit
+	    < 0: if info = -i, the i-th argument had an illegal value
+	    > 0: if info = i, and i is
+	       <= A->ncol: number of zero pivots. They are replaced by small
+		  entries according to options->ILU_FillTol.
+	       > A->ncol: number of bytes allocated when memory allocation
+		  failure occurred, plus A->ncol. If lwork = -1, it is
+		  the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays:
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 4 of them:
+	      marker/marker1 are used for panel dfs, see (ilu_)<a class="el" href="dpanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">dpanel_dfs.c</a>;
+	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+	      marker_relax(has its own space) is used for relaxed supernodes.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+	Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the
+	last column of a supernode.
+	The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+	supernodal representative r, repfnz[r] is the location of the first
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+	the panel diagonal. These are filled in during <a class="el" href="dpanel__dfs_8c.html#2a809488b87d2c1a9b2a574b726e8517">dpanel_dfs()</a>, and are
+	used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+		   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a>.
+	It is also used by the dropping routine <a class="el" href="ilu__ddrop__row_8c.html#380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="e824bcb507f76ad3053d845352fb6b3d"></a><!-- doxytag: member="slu_sdefs.h::sgsrfs" ref="e824bcb507f76ad3053d845352fb6b3d" args="(trans_t, SuperMatrix *, SuperMatrix *, SuperMatrix *, int *, int *, char *, float *, float *, SuperMatrix *, SuperMatrix *, float *, float *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgsrfs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   SGSRFS improves the computed solution to a system of linear   
+   equations and provides error bounds and backward error estimates for 
+   the solution.</pre><p>
+<pre>   If equilibration was performed, the system becomes:
+           (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The original matrix A in the system, or the scaled A if
+           equilibration was done. The type of A can be:
+           Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_GE.</pre><p>
+<pre>   L       (input) SuperMatrix*
+	     The factor L from the factorization Pr*A*Pc=L*U. Use
+           compressed row subscripts storage for supernodes, 
+           i.e., L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre>   U       (input) SuperMatrix*
+           The factor U from the factorization Pr*A*Pc=L*U as computed by
+           <a class="el" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf()</a>. Use column-wise storage scheme, 
+           i.e., U has types: Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre>   perm_c  (input) int*, dimension (A->ncol)
+	     Column permutation vector, which defines the 
+           permutation matrix Pc; perm_c[i] = j means column i of A is 
+           in position j in A*Pc.</pre><p>
+<pre>   perm_r  (input) int*, dimension (A->nrow)
+           Row permutation vector, which defines the permutation matrix Pr;
+           perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>   equed   (input) Specifies the form of equilibration that was done.
+           = 'N': No equilibration.
+           = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+           = 'C': Column equilibration, i.e., A was postmultiplied by
+                  diag(C).
+           = 'B': Both row and column equilibration, i.e., A was replaced 
+                  by diag(R)*A*diag(C).</pre><p>
+<pre>   R       (input) float*, dimension (A->nrow)
+           The row scale factors for A.
+           If equed = 'R' or 'B', A is premultiplied by diag(R).
+           If equed = 'N' or 'C', R is not accessed.</pre><p>
+<pre>   C       (input) float*, dimension (A->ncol)
+           The column scale factors for A.
+           If equed = 'C' or 'B', A is postmultiplied by diag(C).
+           If equed = 'N' or 'R', C is not accessed.</pre><p>
+<pre>   B       (input) SuperMatrix*
+           B has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+           The right hand side matrix B.
+           if equed = 'R' or 'B', B is premultiplied by diag(R).</pre><p>
+<pre>   X       (input/output) SuperMatrix*
+           X has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+           On entry, the solution matrix X, as computed by <a class="el" href="sgstrs_8c.html#9b6e1e555af9cf109ef3a584054a91e2">sgstrs()</a>.
+           On exit, the improved solution matrix X.
+           if *equed = 'C' or 'B', X should be premultiplied by diag(C)
+               in order to obtain the solution to the original system.</pre><p>
+<pre>   FERR    (output) float*, dimension (B->ncol)   
+           The estimated forward error bound for each solution vector   
+           X(j) (the j-th column of the solution matrix X).   
+           If XTRUE is the true solution corresponding to X(j), FERR(j) 
+           is an estimated upper bound for the magnitude of the largest 
+           element in (X(j) - XTRUE) divided by the magnitude of the   
+           largest element in X(j).  The estimate is as reliable as   
+           the estimate for RCOND, and is almost always a slight   
+           overestimate of the true error.</pre><p>
+<pre>   BERR    (output) float*, dimension (B->ncol)   
+           The componentwise relative backward error of each solution   
+           vector X(j) (i.e., the smallest relative change in   
+           any element of A or B that makes X(j) an exact solution).</pre><p>
+<pre>   stat     (output) SuperLUStat_t*
+            Record the statistics on runtime and floating-point operation count.
+            See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre>   info    (output) int*   
+           = 0:  successful exit   
+            < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    Internal Parameters   
+    ===================</pre><p>
+<pre>    ITMAX is the maximum number of steps of iterative refinement.</pre><p>
+<pre> </pre> 
+</div>
+</div><p>
+<a class="anchor" name="44bbae3b1218d951ed229c461a5f14b6"></a><!-- doxytag: member="slu_sdefs.h::sgssv" ref="44bbae3b1218d951ed229c461a5f14b6" args="(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgssv           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> SGSSV solves the system of linear equations A*X=B, using the
+ LU factorization from SGSTRF. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. Permute the columns of A, forming A*Pc, where Pc
+           is a permutation matrix. For more details of this step, 
+           see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.2. Factor A as Pr*A*Pc=L*U with the permutation Pr determined
+           by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      1.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+      above algorithm to the transpose of A:</pre><p>
+<pre>      2.1. Permute columns of transpose(A) (rows of A),
+           forming transpose(A)*Pc, where Pc is a permutation matrix. 
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.2. Factor A as Pr*transpose(A)*Pc=L*U with the permutation Pr
+           determined by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      2.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR; Dtype = SLU_S; Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre> perm_c  (input/output) int*
+         If A->Stype = SLU_NC, column permutation vector of size A->ncol
+         which defines the permutation matrix Pc; perm_c[i] = j means 
+         column i of A is in position j in A*Pc.
+         If A->Stype = SLU_NR, column permutation vector of size A->nrow
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre>         If options->ColPerm = MY_PERMC or options->Fact = SamePattern or
+            options->Fact = SamePattern_SameRowPerm, it is an input argument.
+            On exit, perm_c may be overwritten by the product of the input
+            perm_c and a permutation that postorders the elimination tree
+            of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+            is already in postorder.
+         Otherwise, it is an output argument.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined 
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.
+         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->RowPerm = MY_PERMR or
+            options->Fact = SamePattern_SameRowPerm, perm_r is an
+            input argument.
+         otherwise it is an output argument.</pre><p>
+<pre> L       (output) SuperMatrix*
+         The factor L from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+         > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                so the solution could not be computed.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="4d6a37b565522c7c77a173826588deee"></a><!-- doxytag: member="slu_sdefs.h::sgssvx" ref="4d6a37b565522c7c77a173826588deee" args="(superlu_options_t *, SuperMatrix *, int *, int *, int *, char *, float *, float *, SuperMatrix *, SuperMatrix *, void *, int, SuperMatrix *, SuperMatrix *, float *, float *, float *, float *, mem_usage_t *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgssvx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> SGSSVX solves the system of linear equations A*X=B or A'*X=B, using
+ the LU factorization from <a class="el" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf()</a>. Error bounds on the solution and
+ a condition estimate are also provided. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A is
+           overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+           (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+           = TRANS or CONJ).</pre><p>
+<pre>      1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+           matrix that usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the matrix A (after equilibration if options->Equil = YES)
+           as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>      1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form of 
+           A is used to estimate the condition number of the matrix A. If
+           the reciprocal of the condition number is less than machine
+           precision, info = A->ncol+1 is returned as a warning, but the
+           routine still goes on to solve for X and computes error bounds
+           as described below.</pre><p>
+<pre>      1.6. The system of equations is solved for X using the factored form
+           of A.</pre><p>
+<pre>      1.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      1.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R)
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+      to the transpose of A:</pre><p>
+<pre>      2.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A' is
+           overwritten by diag(R)*A'*diag(C) and B by diag(R)*B 
+           (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>      2.2. Permute columns of transpose(A) (rows of A), 
+           forming transpose(A)*Pc, where Pc is a permutation matrix that 
+           usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the transpose(A) (after equilibration if 
+           options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+           permutation Pr determined by partial pivoting.</pre><p>
+<pre>      2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form 
+           of transpose(A) is used to estimate the condition number of the
+           matrix A. If the reciprocal of the condition number
+           is less than machine precision, info = A->nrow+1 is returned as
+           a warning, but the routine still goes on to solve for X and
+           computes error bounds as described below.</pre><p>
+<pre>      2.6. The system of equations is solved for X using the factored form
+           of transpose(A).</pre><p>
+<pre>      2.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      2.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R) 
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input/output) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of the linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR, Dtype = SLU_D, Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre>         On entry, If options->Fact = FACTORED and equed is not 'N', 
+         then A must have been equilibrated by the scaling factors in
+         R and/or C.  
+         On exit, A is not modified if options->Equil = NO, or if 
+         options->Equil = YES but equed = 'N' on exit.
+         Otherwise, if options->Equil = YES and equed is not 'N',
+         A is scaled as follows:
+         If A->Stype = SLU_NC:
+           equed = 'R':  A := diag(R) * A
+           equed = 'C':  A := A * diag(C)
+           equed = 'B':  A := diag(R) * A * diag(C).
+         If A->Stype = SLU_NR:
+           equed = 'R':  transpose(A) := diag(R) * transpose(A)
+           equed = 'C':  transpose(A) := transpose(A) * diag(C)
+           equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+         which defines the permutation matrix Pc; perm_c[i] = j means
+         column i of A is in position j in A*Pc.
+         On exit, perm_c may be overwritten by the product of the input
+         perm_c and a permutation that postorders the elimination tree
+         of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+         is already in postorder.</pre><p>
+<pre>         If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.</pre><p>
+<pre>         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+         will try to use the input perm_r, unless a certain threshold
+         criterion is violated. In that case, perm_r is overwritten by a
+         new permutation determined by partial pivoting or diagonal
+         threshold pivoting.
+         Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+         Elimination tree of Pc'*A'*A*Pc.
+         If options->Fact != FACTORED and options->Fact != DOFACT,
+         etree is an input argument, otherwise it is an output argument.
+         Note: etree is a vector of parent pointers for a forest whose
+         vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+         Specifies the form of equilibration that was done.
+         = 'N': No equilibration.
+         = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+         = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+         = 'B': Both row and column equilibration, i.e., A was replaced 
+                by diag(R)*A*diag(C).
+         If options->Fact = FACTORED, equed is an input argument,
+         otherwise it is an output argument.</pre><p>
+<pre> R       (input/output) float*, dimension (A->nrow)
+         The row scale factors for A or transpose(A).
+         If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+         If equed = 'N' or 'C', R is not accessed.
+         If options->Fact = FACTORED, R is an input argument,
+             otherwise, R is output.
+         If options->zFact = FACTORED and equed = 'R' or 'B', each element
+             of R must be positive.</pre><p>
+<pre> C       (input/output) float*, dimension (A->ncol)
+         The column scale factors for A or transpose(A).
+         If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+         If equed = 'N' or 'R', C is not accessed.
+         If options->Fact = FACTORED, C is an input argument,
+             otherwise, C is output.
+         If options->Fact = FACTORED and equed = 'C' or 'B', each element
+             of C must be positive.</pre><p>
+<pre> L       (output) SuperMatrix*
+	   The factor L from the factorization
+             Pr*A*Pc=L*U              (if A->Stype SLU_= NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+         User supplied workspace, should be large enough
+         to hold data structures for factors L and U.
+         On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               mem_usage->total_needed; no other side effects.</pre><p>
+<pre>         See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         If B->ncol = 0, only LU decomposition is performed, the triangular
+                         solve is skipped.
+         On exit,
+            if equed = 'N', B is not modified; otherwise
+            if A->Stype = SLU_NC:
+               if options->Trans = NOTRANS and equed = 'R' or 'B',
+                  B is overwritten by diag(R)*B;
+               if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+                  B is overwritten by diag(C)*B;
+            if A->Stype = SLU_NR:
+               if options->Trans = NOTRANS and equed = 'C' or 'B',
+                  B is overwritten by diag(C)*B;
+               if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+                  B is overwritten by diag(R)*B.</pre><p>
+<pre> X       (output) SuperMatrix*
+         X has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE. 
+         If info = 0 or info = A->ncol+1, X contains the solution matrix
+         to the original system of equations. Note that A and B are modified
+         on exit if equed is not 'N', and the solution to the equilibrated
+         system is inv(diag(C))*X if options->Trans = NOTRANS and
+         equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+         and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) float*
+         The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+         The infinity norm is used. If recip_pivot_growth is much less
+         than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) float*
+         The estimate of the reciprocal condition number of the matrix A
+         after equilibration (if done). If rcond is less than the machine
+         precision (in particular, if rcond = 0), the matrix is singular
+         to working precision. This condition is indicated by a return
+         code of info > 0.</pre><p>
+<pre> FERR    (output) float*, dimension (B->ncol)   
+         The estimated forward error bound for each solution vector   
+         X(j) (the j-th column of the solution matrix X).   
+         If XTRUE is the true solution corresponding to X(j), FERR(j) 
+         is an estimated upper bound for the magnitude of the largest 
+         element in (X(j) - XTRUE) divided by the magnitude of the   
+         largest element in X(j).  The estimate is as reliable as   
+         the estimate for RCOND, and is almost always a slight   
+         overestimate of the true error.
+         If options->IterRefine = NOREFINE, ferr = 1.0.</pre><p>
+<pre> BERR    (output) float*, dimension (B->ncol)
+         The componentwise relative backward error of each solution   
+         vector X(j) (i.e., the smallest relative change in   
+         any element of A or B that makes X(j) an exact solution).
+         If options->IterRefine = NOREFINE, berr = 1.0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+         Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+           The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+           The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+           The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+         = 0: successful exit   
+         < 0: if info = -i, the i-th argument had an illegal value   
+         > 0: if info = i, and i is   
+              <= A->ncol: U(i,i) is exactly zero. The factorization has   
+                    been completed, but the factor U is exactly   
+                    singular, so the solution and error bounds   
+                    could not be computed.   
+              = A->ncol+1: U is nonsingular, but RCOND is less than machine
+                    precision, meaning that the matrix is singular to
+                    working precision. Nevertheless, the solution and
+                    error bounds are computed because there are a number
+                    of situations where the computed solution can be more
+                    accurate than the value of RCOND would suggest.   
+              > A->ncol+1: number of bytes allocated when memory allocation
+                    failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="f006a81b576fffa92a1c848ac3191c70"></a><!-- doxytag: member="slu_sdefs.h::sgstrf" ref="f006a81b576fffa92a1c848ac3191c70" args="(superlu_options_t *, SuperMatrix *, int, int, int *, void *, int, int *, int *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgstrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> SGSTRF computes an LU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper 
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = SLU_NCP; Dtype = SLU_S; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+          To control degree of relaxing supernodes. If the number
+          of nodes (columns) in a subtree of the elimination tree is less
+          than relax, this subtree is considered as one supernode,
+          regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+          A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+          Elimination tree of A'*A.
+          Note: etree is a vector of parent pointers for a forest whose
+          vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+          On input, the columns of A should be permuted so that the
+          etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+          User-supplied work space and space for the output data structures.
+          Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the 
+          permutation matrix Pc; perm_c[i] = j means column i of A is 
+          in position j in A*Pc.
+          When searching for diagonal, perm_c[*] is applied to the
+          row subscripts of A, so that diagonal threshold pivoting
+          can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+          Row permutation vector which defines the permutation matrix Pr,
+          perm_r[i] = j means row i of A is in position j in Pr*A.
+          If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+             will try to use the input perm_r, unless a certain threshold
+             criterion is violated. In that case, perm_r is overwritten by
+             a new permutation determined by partial pivoting or diagonal
+             threshold pivoting.
+          Otherwise, perm_r is output argument;</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = SLU_NC, 
+          Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+          = 0: successful exit
+          < 0: if info = -i, the i-th argument had an illegal value
+          > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                and division by zero will occur if it is used to solve a
+                system of equations.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol. If lwork = -1, it is
+                the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays: 
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   xprune[0:n-1]: xprune[*] points to locations in subscript 
+	vector lsub[*]. For column i, xprune[i] denotes the point where 
+	structural pruning begins. I.e. only xlsub[i],..,xprune[i]-1 need 
+	to be traversed for symbolic factorization.</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been 
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 3 of them: marker/marker1 are used for panel dfs, 
+	      see <a class="el" href="spanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">spanel_dfs.c</a>; marker2 is used for inner-factorization,
+            see <a class="el" href="scolumn__dfs_8c.html" title="Performs a symbolic factorization.">scolumn_dfs.c</a>.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+      Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs) 
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the 
+	last column of a supernode.
+      The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a 
+	supernodal representative r, repfnz[r] is the location of the first 
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below 
+      the panel diagonal. These are filled in during <a class="el" href="slu__sdefs_8h.html#77baf210393e04fa71d4e73b5e60e556">spanel_dfs()</a>, and are
+      used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+	    	   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__sdefs_8h.html" title="Header file for real operations.">slu_sdefs.h</a>.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="ea450a9c52512127d6eaaebf0a65f9ce"></a><!-- doxytag: member="slu_sdefs.h::sgstrs" ref="ea450a9c52512127d6eaaebf0a65f9ce" args="(trans_t, SuperMatrix *, SuperMatrix *, int *, int *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sgstrs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> SGSTRS solves a system of linear equations A*X=B or A'*X=B
+ with A sparse and B dense, using the LU factorization computed by
+ SGSTRF.</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre> L       (input) SuperMatrix*
+         The factor L from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf()</a>. Use compressed row subscripts storage for supernodes,
+         i.e., L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (input) SuperMatrix*
+         The factor U from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="sgstrf_8c.html#2428d5d7ef46cf9a08069d9f55901284">sgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><p>
+<pre> perm_c  (input) int*, dimension (L->ncol)
+	   Column permutation vector, which defines the 
+         permutation matrix Pc; perm_c[i] = j means column i of A is 
+         in position j in A*Pc.</pre><p>
+<pre> perm_r  (input) int*, dimension (L->nrow)
+         Row permutation vector, which defines the permutation matrix Pr; 
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+ 	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="ba0eeda28d139bf88878880edd3cca5a"></a><!-- doxytag: member="slu_sdefs.h::sinf_norm_error" ref="ba0eeda28d139bf88878880edd3cca5a" args="(int, SuperMatrix *, float *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sinf_norm_error           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="47c1dd1b8332f4366d5c5112219fdb3a"></a><!-- doxytag: member="slu_sdefs.h::slamch_" ref="47c1dd1b8332f4366d5c5112219fdb3a" args="(char *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float slamch_           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>cmach</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+    =======</pre><p>
+<pre>    SLAMCH determines single precision machine parameters.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    CMACH   (input) CHARACTER*1   
+            Specifies the value to be returned by SLAMCH:   
+            = 'E' or 'e',   SLAMCH := eps   
+            = 'S' or 's ,   SLAMCH := sfmin   
+            = 'B' or 'b',   SLAMCH := base   
+            = 'P' or 'p',   SLAMCH := eps*base   
+            = 'N' or 'n',   SLAMCH := t   
+            = 'R' or 'r',   SLAMCH := rnd   
+            = 'M' or 'm',   SLAMCH := emin   
+            = 'U' or 'u',   SLAMCH := rmin   
+            = 'L' or 'l',   SLAMCH := emax   
+            = 'O' or 'o',   SLAMCH := rmax</pre><p>
+<pre>            where</pre><p>
+<pre>            eps   = relative machine precision   
+            sfmin = safe minimum, such that 1/sfmin does not overflow   
+            base  = base of the machine   
+            prec  = eps*base   
+            t     = number of (base) digits in the mantissa   
+            rnd   = 1.0 when rounding occurs in addition, 0.0 otherwise   
+            emin  = minimum exponent before (gradual) underflow   
+            rmin  = underflow threshold - base**(emin-1)   
+            emax  = largest exponent before overflow   
+            rmax  = overflow threshold  - (base**emax)*(1-eps)</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="fe4b556cd9d484f53606d114f83649d4"></a><!-- doxytag: member="slu_sdefs.h::slaqgs" ref="fe4b556cd9d484f53606d114f83649d4" args="(SuperMatrix *, float *, float *, float, float, float, char *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void slaqgs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   SLAQGS equilibrates a general sparse M by N matrix A using the row and   
+   scaling factors in the vectors R and C.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input/output) SuperMatrix*
+           On exit, the equilibrated matrix.  See EQUED for the form of 
+           the equilibrated matrix. The type of A can be:
+	    Stype = NC; Dtype = SLU_S; Mtype = GE.</pre><p>
+<pre>   R       (input) float*, dimension (A->nrow)
+           The row scale factors for A.</pre><p>
+<pre>   C       (input) float*, dimension (A->ncol)
+           The column scale factors for A.</pre><p>
+<pre>   ROWCND  (input) float
+           Ratio of the smallest R(i) to the largest R(i).</pre><p>
+<pre>   COLCND  (input) float
+           Ratio of the smallest C(i) to the largest C(i).</pre><p>
+<pre>   AMAX    (input) float
+           Absolute value of largest matrix entry.</pre><p>
+<pre>   EQUED   (output) char*
+           Specifies the form of equilibration that was done.   
+           = 'N':  No equilibration   
+           = 'R':  Row equilibration, i.e., A has been premultiplied by  
+                   diag(R).   
+           = 'C':  Column equilibration, i.e., A has been postmultiplied  
+                   by diag(C).   
+           = 'B':  Both row and column equilibration, i.e., A has been
+                   replaced by diag(R) * A * diag(C).</pre><p>
+<pre>   Internal Parameters   
+   ===================</pre><p>
+<pre>   THRESH is a threshold value used to decide if row or column scaling   
+   should be done based on the ratio of the row or column scaling   
+   factors.  If ROWCND < THRESH, row scaling is done, and if   
+   COLCND < THRESH, column scaling is done.</pre><p>
+<pre>   LARGE and SMALL are threshold values used to decide if row scaling   
+   should be done based on the absolute size of the largest matrix   
+   element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="69557d06b4e300aa6aca944561f3bb32"></a><!-- doxytag: member="slu_sdefs.h::sldperm" ref="69557d06b4e300aa6aca944561f3bb32" args="(int, int, int, int[], int[], float[], int[], float[], float[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sldperm           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname">[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f68715ec86cde90aa31fec07164d6ea6"></a><!-- doxytag: member="slu_sdefs.h::sLUMemInit" ref="f68715ec86cde90aa31fec07164d6ea6" args="(fact_t, void *, int, int, int, int, int, float, SuperMatrix *, SuperMatrix *, GlobalLU_t *, int **, float **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sLUMemInit           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a> </td>
+          <td class="paramname"> <em>fact</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>annz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>fill_ratio</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>iwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname"> <em>dwork</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Memory-related.<p>
+<pre>
+ For those unpredictable size, estimate as fill_ratio * nnz(A).
+ Return value:
+     If lwork = -1, return the estimated amount of space required, plus n;
+     otherwise, return the amount of space actually allocated when
+     memory allocation failure occurred.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="9af26d0426eb0bb63755880f2e67e7b7"></a><!-- doxytag: member="slu_sdefs.h::sLUMemXpand" ref="9af26d0426eb0bb63755880f2e67e7b7" args="(int, int, MemType, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sLUMemXpand           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>next</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> </td>
+          <td class="paramname"> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>maxlen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="9035f0d2a50cf5d8e29287572bd1be83"></a><!-- doxytag: member="slu_sdefs.h::sLUWorkFree" ref="9035f0d2a50cf5d8e29287572bd1be83" args="(int *, float *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sLUWorkFree           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b50ebebf3a620086366b6c310d52d681"></a><!-- doxytag: member="slu_sdefs.h::smemory_usage" ref="b50ebebf3a620086366b6c310d52d681" args="(const int, const int, const int, const int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int smemory_usage           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="35b4a0e44c32443df609069021d27812"></a><!-- doxytag: member="slu_sdefs.h::sp_sgemm" ref="35b4a0e44c32443df609069021d27812" args="(char *, char *, int, int, int, float, SuperMatrix *, float *, int, float, float *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_sgemm           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transa</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   sp_s performs one of the matrix-matrix operations</pre><p>
+<pre>      C := alpha*op( A )*op( B ) + beta*C,</pre><p>
+<pre>   where  op( X ) is one of</pre><p>
+<pre>      op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),</pre><p>
+<pre>   alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
+   an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANSA - (input) char*
+            On entry, TRANSA specifies the form of op( A ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSA = 'N' or 'n',  op( A ) = A.   
+               TRANSA = 'T' or 't',  op( A ) = A'.   
+               TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
+            Unchanged on exit.</pre><p>
+<pre>   TRANSB - (input) char*
+            On entry, TRANSB specifies the form of op( B ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSB = 'N' or 'n',  op( B ) = B.   
+               TRANSB = 'T' or 't',  op( B ) = B'.   
+               TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
+            Unchanged on exit.</pre><p>
+<pre>   M      - (input) int   
+            On entry,  M  specifies  the number of rows of the matrix 
+	     op( A ) and of the matrix C.  M must be at least zero. 
+	     Unchanged on exit.</pre><p>
+<pre>   N      - (input) int
+            On entry,  N specifies the number of columns of the matrix 
+	     op( B ) and the number of columns of the matrix C. N must be 
+	     at least zero.
+	     Unchanged on exit.</pre><p>
+<pre>   K      - (input) int
+            On entry, K specifies the number of columns of the matrix 
+	     op( A ) and the number of rows of the matrix op( B ). K must 
+	     be at least  zero.   
+           Unchanged on exit.</pre><p>
+<pre>   ALPHA  - (input) float
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+            Currently, the type of A can be:
+                Stype = NC or NCP; Dtype = SLU_S; Mtype = GE. 
+            In the future, more general A can be handled.</pre><p>
+<pre>   B      - FLOAT PRECISION array of DIMENSION ( LDB, kb ), where kb is 
+            n when TRANSB = 'N' or 'n',  and is  k otherwise.   
+            Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
+            part of the array B must contain the matrix B, otherwise 
+            the leading n by k part of the array B must contain the 
+            matrix B.   
+            Unchanged on exit.</pre><p>
+<pre>   LDB    - (input) int
+            On entry, LDB specifies the first dimension of B as declared 
+            in the calling (sub) program. LDB must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max( 1, n )</a>.  
+            Unchanged on exit.</pre><p>
+<pre>   BETA   - (input) float
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then C need not be set on input.</pre><p>
+<pre>   C      - FLOAT PRECISION array of DIMENSION ( LDC, n ).   
+            Before entry, the leading m by n part of the array C must 
+            contain the matrix C,  except when beta is zero, in which 
+            case C need not be set on entry.   
+            On exit, the array C is overwritten by the m by n matrix 
+	     ( alpha*op( A )*B + beta*C ).</pre><p>
+<pre>   LDC    - (input) int
+            On entry, LDC specifies the first dimension of C as declared 
+            in the calling (sub)program. LDC must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max(1,m)</a>.   
+            Unchanged on exit.</pre><p>
+<pre>   ==== Sparse Level 3 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="9e543b2d14781b56ef349114012b4fc9"></a><!-- doxytag: member="slu_sdefs.h::sp_sgemv" ref="9e543b2d14781b56ef349114012b4fc9" args="(char *, float, SuperMatrix *, float *, int, float, float *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_sgemv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incy</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   <a class="el" href="slu__sdefs_8h.html#9e543b2d14781b56ef349114012b4fc9" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x...">sp_sgemv()</a>  performs one of the matrix-vector operations   
+      y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
+   where alpha and beta are scalars, x and y are vectors and A is a
+   sparse A->nrow by A->ncol matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANS  - (input) char*
+            On entry, TRANS specifies the operation to be performed as   
+            follows:   
+               TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
+               TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
+               TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.</pre><p>
+<pre>   ALPHA  - (input) float
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+            Currently, the type of A can be:
+                Stype = NC or NCP; Dtype = SLU_S; Mtype = GE. 
+            In the future, more general A can be handled.</pre><p>
+<pre>   X      - (input) float*, array of DIMENSION at least   
+            ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
+            and at least   
+            ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
+            Before entry, the incremented array X must contain the   
+            vector x.</pre><p>
+<pre>   INCX   - (input) int
+            On entry, INCX specifies the increment for the elements of   
+            X. INCX must not be zero.</pre><p>
+<pre>   BETA   - (input) float
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then Y need not be set on input.</pre><p>
+<pre>   Y      - (output) float*,  array of DIMENSION at least   
+            ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
+            and at least   
+            ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
+            Before entry with BETA non-zero, the incremented array Y   
+            must contain the vector y. On exit, Y is overwritten by the 
+            updated vector y.</pre><p>
+<pre>   INCY   - (input) int
+            On entry, INCY specifies the increment for the elements of   
+            Y. INCY must not be zero.</pre><p>
+<pre>   ==== Sparse Level 2 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="a6d287b6b9bcaf72a692343e614c429c"></a><!-- doxytag: member="slu_sdefs.h::sp_strsv" ref="a6d287b6b9bcaf72a692343e614c429c" args="(char *, char *, char *, SuperMatrix *, SuperMatrix *, float *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_strsv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>uplo</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>diag</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose
+   =======</pre><p>
+<pre>   <a class="el" href="slu__sdefs_8h.html#a6d287b6b9bcaf72a692343e614c429c" title="Solves one of the systems of equations A*x = b, or A'*x = b.">sp_strsv()</a> solves one of the systems of equations   
+       A*x = b,   or   A'*x = b,
+   where b and x are n element vectors and A is a sparse unit , or   
+   non-unit, upper or lower triangular matrix.   
+   No test for singularity or near-singularity is included in this   
+   routine. Such tests must be performed before calling this routine.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   uplo   - (input) char*
+            On entry, uplo specifies whether the matrix is an upper or   
+             lower triangular matrix as follows:   
+                uplo = 'U' or 'u'   A is an upper triangular matrix.   
+                uplo = 'L' or 'l'   A is a lower triangular matrix.</pre><p>
+<pre>   trans  - (input) char*
+             On entry, trans specifies the equations to be solved as   
+             follows:   
+                trans = 'N' or 'n'   A*x = b.   
+                trans = 'T' or 't'   A'*x = b.
+                trans = 'C' or 'c'   A'*x = b.</pre><p>
+<pre>   diag   - (input) char*
+             On entry, diag specifies whether or not A is unit   
+             triangular as follows:   
+                diag = 'U' or 'u'   A is assumed to be unit triangular.   
+                diag = 'N' or 'n'   A is not assumed to be unit   
+                                    triangular.</pre><p>
+<pre>   L       - (input) SuperMatrix*
+	       The factor L from the factorization Pr*A*Pc=L*U. Use
+             compressed row subscripts storage for supernodes,
+             i.e., L has types: Stype = SC, Dtype = SLU_S, Mtype = TRLU.</pre><p>
+<pre>   U       - (input) SuperMatrix*
+	        The factor U from the factorization Pr*A*Pc=L*U.
+	        U has types: Stype = NC, Dtype = SLU_S, Mtype = TRU.</pre><p>
+<pre>   x       - (input/output) float*
+             Before entry, the incremented array X must contain the n   
+             element right-hand side vector b. On exit, X is overwritten 
+             with the solution vector x.</pre><p>
+<pre>   info    - (output) int*
+             If *info = -i, the i-th argument had an illegal value.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="51486936a9ff5079afed80eb5bf8a3e0"></a><!-- doxytag: member="slu_sdefs.h::spanel_bmod" ref="51486936a9ff5079afed80eb5bf8a3e0" args="(const int, const int, const int, const int, float *, float *, int *, int *, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void spanel_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>    Performs numeric block updates (sup-panel) in topological order.
+    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+    Special processing on the supernodal portion of L[*,j]</pre><p>
+<pre>    Before entering this routine, the original nonzeros in the panel 
+    were already copied into the spa[m,w].</pre><p>
+<pre>    Updated/Output parameters-
+    dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
+    collectively in the m-by-w vector dense[*]. 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="77baf210393e04fa71d4e73b5e60e556"></a><!-- doxytag: member="slu_sdefs.h::spanel_dfs" ref="77baf210393e04fa71d4e73b5e60e556" args="(const int, const int, const int, SuperMatrix *, int *, int *, float *, int *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void spanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel. 
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a 
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="cb8787465a6296109b9a306d5a315ff8"></a><!-- doxytag: member="slu_sdefs.h::sPivotGrowth" ref="cb8787465a6296109b9a306d5a315ff8" args="(int, SuperMatrix *, int *, SuperMatrix *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float sPivotGrowth           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> Compute the reciprocal pivot growth factor of the leading ncols columns
+ of the matrix, using the formula:
+     min_j ( max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>) / max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(U_ij)</a>) )</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> ncols    (input) int
+          The number of columns of matrices A, L and U.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = NC; Dtype = SLU_S; Mtype = GE.</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SC; Dtype = SLU_S; Mtype = TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = NC;
+          Dtype = SLU_S; Mtype = TRU.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="d7ddf03faedae25b4d73e0b6b33bf50c"></a><!-- doxytag: member="slu_sdefs.h::spivotL" ref="d7ddf03faedae25b4d73e0b6b33bf50c" args="(const int, const double, int *, int *, int *, int *, int *, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int spivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+           pivot row = k;
+       ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+           pivot row = j;
+       ELSE
+           pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0      success;
+                 i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="5cd6efad9d9fb7aef8a984f5e3cff66b"></a><!-- doxytag: member="slu_sdefs.h::sPrint_CompCol_Matrix" ref="5cd6efad9d9fb7aef8a984f5e3cff66b" args="(char *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sPrint_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="25b29c47333295f4aa744e541e277ea0"></a><!-- doxytag: member="slu_sdefs.h::sPrint_Dense_Matrix" ref="25b29c47333295f4aa744e541e277ea0" args="(char *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sPrint_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="297455c494a78c098b2bf418edbc6b16"></a><!-- doxytag: member="slu_sdefs.h::sprint_lu_col" ref="297455c494a78c098b2bf418edbc6b16" args="(char *, int, int, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sprint_lu_col           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="eb289a84407c9cbbb33cdf3dbb1dacbe"></a><!-- doxytag: member="slu_sdefs.h::sPrint_SuperNode_Matrix" ref="eb289a84407c9cbbb33cdf3dbb1dacbe" args="(char *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sPrint_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cf9da2c45289246ef663fc4a96d1ad78"></a><!-- doxytag: member="slu_sdefs.h::spruneL" ref="cf9da2c45289246ef663fc4a96d1ad78" args="(const int, const int *, const int, const int, const int *, const int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void spruneL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Prunes the L-structure of supernodes whose L-structure
+   contains the current pivot row "pivrow"
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="98d44fe59660f87330b0172151a76141"></a><!-- doxytag: member="slu_sdefs.h::sqselect" ref="98d44fe59660f87330b0172151a76141" args="(int, float *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float sqselect           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1357f9a3b2ffb9522883ad84affa63e3"></a><!-- doxytag: member="slu_sdefs.h::sQuerySpace" ref="1357f9a3b2ffb9522883ad84affa63e3" args="(SuperMatrix *, SuperMatrix *, mem_usage_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="734dbf3f5d66b2a53d88e69daaad729e"></a><!-- doxytag: member="slu_sdefs.h::sreadhb" ref="734dbf3f5d66b2a53d88e69daaad729e" args="(int *, int *, int *, float **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sreadhb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b345670a95db3f9c4b9c451224db8227"></a><!-- doxytag: member="slu_sdefs.h::sreadmt" ref="b345670a95db3f9c4b9c451224db8227" args="(int *, int *, int *, float **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sreadmt           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d992a573876b4abfe192ec2bc207f6b0"></a><!-- doxytag: member="slu_sdefs.h::sreadrb" ref="d992a573876b4abfe192ec2bc207f6b0" args="(int *, int *, int *, float **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sreadrb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e99cb18465c8992235a7bc003237f692"></a><!-- doxytag: member="slu_sdefs.h::sreadtriple" ref="e99cb18465c8992235a7bc003237f692" args="(int *, int *, int *, float **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sreadtriple           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b5b2859bf1ef1900506dfa702574c6ad"></a><!-- doxytag: member="slu_sdefs.h::sSetRWork" ref="b5b2859bf1ef1900506dfa702574c6ad" args="(int, int, float *, float **, float **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sSetRWork           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="60e60255360fae0b1458da070690a3a2"></a><!-- doxytag: member="slu_sdefs.h::ssnode_bmod" ref="60e60255360fae0b1458da070690a3a2" args="(const int, const int, const int, float *, float *, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ssnode_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d9d54c8dfc11f1e034b4b7175be60ffb"></a><!-- doxytag: member="slu_sdefs.h::ssnode_dfs" ref="d9d54c8dfc11f1e034b4b7175be60ffb" args="(const int, const int, const int *, const int *, const int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ssnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="slu__sdefs_8h.html#d9d54c8dfc11f1e034b4b7175be60ffb">ssnode_dfs()</a> - Determine the union of the row structures of those 
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__util_8h-source.html b/DOC/html/slu__util_8h-source.html
new file mode 100644
index 0000000..0e50654
--- /dev/null
+++ b/DOC/html/slu__util_8h-source.html
@@ -0,0 +1,373 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_util.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<h1>SRC/slu_util.h</h1><a href="slu__util_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00011"></a>00011 <span class="preprocessor">#ifndef __SUPERLU_UTIL </span><span class="comment">/* allow multiple inclusions */</span>
+<a name="l00012"></a>00012 <span class="preprocessor">#define __SUPERLU_UTIL</span>
+<a name="l00013"></a>00013 <span class="preprocessor"></span>
+<a name="l00014"></a>00014 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00015"></a>00015 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00016"></a>00016 <span class="preprocessor">#include <string.h></span>
+<a name="l00017"></a>00017 <span class="comment">/*</span>
+<a name="l00018"></a>00018 <span class="comment">#ifndef __STDC__</span>
+<a name="l00019"></a>00019 <span class="comment">#include <malloc.h></span>
+<a name="l00020"></a>00020 <span class="comment">#endif</span>
+<a name="l00021"></a>00021 <span class="comment">*/</span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include <assert.h></span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include "<a class="code" href="superlu__enum__consts_8h.html" title="enum constants header file">superlu_enum_consts.h</a>"</span>
+<a name="l00024"></a>00024 
+<a name="l00025"></a>00025 <span class="comment">/***********************************************************************</span>
+<a name="l00026"></a>00026 <span class="comment"> * Macros</span>
+<a name="l00027"></a>00027 <span class="comment"> ***********************************************************************/</span>
+<a name="l00028"></a><a class="code" href="slu__util_8h.html#745e85e3ef4b1267858c9df86608518c">00028</a> <span class="preprocessor">#define FIRSTCOL_OF_SNODE(i)    (xsup[i])</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/* No of marker arrays used in the symbolic factorization,</span>
+<a name="l00030"></a>00030 <span class="comment">   each of size n */</span>
+<a name="l00031"></a><a class="code" href="slu__util_8h.html#9b7b2a5116ee487722b0967317ab6360">00031</a> <span class="preprocessor">#define NO_MARKER     3</span>
+<a name="l00032"></a><a class="code" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">00032</a> <span class="preprocessor"></span><span class="preprocessor">#define NUM_TEMPV(m,w,t,b)  ( SUPERLU_MAX(m, (t + b)*w) )</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00034"></a>00034 <span class="preprocessor">#ifndef USER_ABORT</span>
+<a name="l00035"></a><a class="code" href="slu__util_8h.html#aba7be0a786a716c200675ac43827e2a">00035</a> <span class="preprocessor"></span><span class="preprocessor">#define USER_ABORT(msg) superlu_abort_and_exit(msg)</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00038"></a><a class="code" href="slu__util_8h.html#a4b133a54309e2c6e4ba69f3ff1141c2">00038</a> <span class="preprocessor">#define ABORT(err_msg) \</span>
+<a name="l00039"></a>00039 <span class="preprocessor"> { char msg[256];\</span>
+<a name="l00040"></a>00040 <span class="preprocessor">   sprintf(msg,"%s at line %d in file %s\n",err_msg,__LINE__, __FILE__);\</span>
+<a name="l00041"></a>00041 <span class="preprocessor">   USER_ABORT(msg); }</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span>
+<a name="l00043"></a>00043 
+<a name="l00044"></a>00044 <span class="preprocessor">#ifndef USER_MALLOC</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#if 1</span>
+<a name="l00046"></a><a class="code" href="slu__util_8h.html#232b101af98715228590ae6e089f4c65">00046</a> <span class="preprocessor"></span><span class="preprocessor">#define USER_MALLOC(size) superlu_malloc(size)</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="comment">/* The following may check out some uninitialized data */</span>
+<a name="l00049"></a>00049 <span class="preprocessor">#define USER_MALLOC(size) memset (superlu_malloc(size), '\x0F', size)</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span>
+<a name="l00053"></a><a class="code" href="slu__util_8h.html#55a5ed83733c30850c14cc7b3f922a54">00053</a> <span class="preprocessor">#define SUPERLU_MALLOC(size) USER_MALLOC(size)</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span>
+<a name="l00055"></a>00055 <span class="preprocessor">#ifndef USER_FREE</span>
+<a name="l00056"></a><a class="code" href="slu__util_8h.html#d7924033040c27afdb4a51ac9f8295b1">00056</a> <span class="preprocessor"></span><span class="preprocessor">#define USER_FREE(addr) superlu_free(addr)</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span>
+<a name="l00059"></a><a class="code" href="slu__util_8h.html#9672c5511c3efd9467e4d375a347c192">00059</a> <span class="preprocessor">#define SUPERLU_FREE(addr) USER_FREE(addr)</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span>
+<a name="l00061"></a><a class="code" href="slu__util_8h.html#35401f732a50d2a0af33db1ea224b1f6">00061</a> <span class="preprocessor">#define CHECK_MALLOC(where) {                 \</span>
+<a name="l00062"></a>00062 <span class="preprocessor">    extern int superlu_malloc_total;        \</span>
+<a name="l00063"></a>00063 <span class="preprocessor">    printf("%s: malloc_total %d Bytes\n",     \</span>
+<a name="l00064"></a>00064 <span class="preprocessor">           where, superlu_malloc_total); \</span>
+<a name="l00065"></a>00065 <span class="preprocessor">}</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span>
+<a name="l00067"></a><a class="code" href="slu__util_8h.html#dca8259e9d345c7cbaaa0608a1acdfd4">00067</a> <span class="preprocessor">#define SUPERLU_MAX(x, y)       ( (x) > (y) ? (x) : (y) )</span>
+<a name="l00068"></a><a class="code" href="slu__util_8h.html#7147dd5df1048562cd4ab83e9fd808d9">00068</a> <span class="preprocessor"></span><span class="preprocessor">#define SUPERLU_MIN(x, y)       ( (x) < (y) ? (x) : (y) )</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span>
+<a name="l00070"></a>00070 <span class="comment">/*********************************************************</span>
+<a name="l00071"></a>00071 <span class="comment"> * Macros used for easy access of sparse matrix entries. *</span>
+<a name="l00072"></a>00072 <span class="comment"> *********************************************************/</span>
+<a name="l00073"></a><a class="code" href="slu__util_8h.html#445a44f88349753bc17f28fbac4df382">00073</a> <span class="preprocessor">#define L_SUB_START(col)     ( Lstore->rowind_colptr[col] )</span>
+<a name="l00074"></a><a class="code" href="slu__util_8h.html#8de2450f2d4cf12794954b63a319c423">00074</a> <span class="preprocessor"></span><span class="preprocessor">#define L_SUB(ptr)           ( Lstore->rowind[ptr] )</span>
+<a name="l00075"></a><a class="code" href="slu__util_8h.html#79b13489e4cd00b09633e0c5e0be1b7c">00075</a> <span class="preprocessor"></span><span class="preprocessor">#define L_NZ_START(col)      ( Lstore->nzval_colptr[col] )</span>
+<a name="l00076"></a><a class="code" href="slu__util_8h.html#0ea367a3afecd30b570d0a46cc819cdf">00076</a> <span class="preprocessor"></span><span class="preprocessor">#define L_FST_SUPC(superno)  ( Lstore->sup_to_col[superno] )</span>
+<a name="l00077"></a><a class="code" href="slu__util_8h.html#c641190b1a047ebcf224372cb3dfec68">00077</a> <span class="preprocessor"></span><span class="preprocessor">#define U_NZ_START(col)      ( Ustore->colptr[col] )</span>
+<a name="l00078"></a><a class="code" href="slu__util_8h.html#cbd74ce05240823854ebfcd301f200e8">00078</a> <span class="preprocessor"></span><span class="preprocessor">#define U_SUB(ptr)           ( Ustore->rowind[ptr] )</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span>
+<a name="l00080"></a>00080 
+<a name="l00081"></a>00081 <span class="comment">/***********************************************************************</span>
+<a name="l00082"></a>00082 <span class="comment"> * Constants </span>
+<a name="l00083"></a>00083 <span class="comment"> ***********************************************************************/</span>
+<a name="l00084"></a><a class="code" href="slu__util_8h.html#2b7cf2a3641be7b89138615764d60ba3">00084</a> <span class="preprocessor">#define EMPTY   (-1)</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span><span class="comment">/*#define NO    (-1)*/</span>
+<a name="l00086"></a><a class="code" href="slu__util_8h.html#a93f0eb578d23995850d61f7d61c55c1">00086</a> <span class="preprocessor">#define FALSE   0</span>
+<a name="l00087"></a><a class="code" href="slu__util_8h.html#a8cecfc5c5c054d2875c03e77b7be15d">00087</a> <span class="preprocessor"></span><span class="preprocessor">#define TRUE    1</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span>
+<a name="l00089"></a><a class="code" href="slu__util_8h.html#b9ccb8b9963ca083d7f36f5d3acc5744">00089</a> <span class="preprocessor">#define NO_MEMTYPE  4      </span><span class="comment">/* 0: lusup;</span>
+<a name="l00090"></a>00090 <span class="comment">                              1: ucol;</span>
+<a name="l00091"></a>00091 <span class="comment">                              2: lsub;</span>
+<a name="l00092"></a>00092 <span class="comment">                              3: usub */</span>
+<a name="l00093"></a>00093 
+<a name="l00094"></a><a class="code" href="slu__util_8h.html#d3754689b2ab3abc8b3afe4facdd76f3">00094</a> <span class="preprocessor">#define GluIntArray(n)   (5 * (n) + 5)</span>
+<a name="l00095"></a>00095 <span class="preprocessor"></span>
+<a name="l00096"></a>00096 <span class="comment">/* Dropping rules */</span>
+<a name="l00097"></a><a class="code" href="slu__util_8h.html#aa1b4d4ec24548decf1f389060a7d878">00097</a> <span class="preprocessor">#define  NODROP         ( 0x0000 )</span>
+<a name="l00098"></a><a class="code" href="slu__util_8h.html#fb51a22d4d20fb9e39acd95129344997">00098</a> <span class="preprocessor"></span><span class="preprocessor">#define  DROP_BASIC     ( 0x0001 )  </span><span class="comment">/* ILU(tau) */</span>
+<a name="l00099"></a><a class="code" href="slu__util_8h.html#34a649fce94fb9a61524f3b18161aef8">00099</a> <span class="preprocessor">#define  DROP_PROWS     ( 0x0002 )  </span><span class="comment">/* ILUTP: keep p maximum rows */</span>
+<a name="l00100"></a><a class="code" href="slu__util_8h.html#741f1ee3e9529b1384492787d09a0c70">00100</a> <span class="preprocessor">#define  DROP_COLUMN    ( 0x0004 )  </span><span class="comment">/* ILUTP: for j-th column, </span>
+<a name="l00101"></a>00101 <span class="comment">                                              p = gamma * nnz(A(:,j)) */</span>
+<a name="l00102"></a><a class="code" href="slu__util_8h.html#e56780c0f0b5afa706231cbe2b1ee82f">00102</a> <span class="preprocessor">#define  DROP_AREA      ( 0x0008 )  </span><span class="comment">/* ILUTP: for j-th column, use</span>
+<a name="l00103"></a>00103 <span class="comment">                                              nnz(F(:,1:j)) / nnz(A(:,1:j))</span>
+<a name="l00104"></a>00104 <span class="comment">                                              to limit memory growth  */</span>
+<a name="l00105"></a><a class="code" href="slu__util_8h.html#72349305248ecb540ca43f404884bef5">00105</a> <span class="preprocessor">#define  DROP_SECONDARY ( 0x000E )  </span><span class="comment">/* PROWS | COLUMN | AREA */</span>
+<a name="l00106"></a><a class="code" href="slu__util_8h.html#c6089af2caea8fef6aa343cb16fd1646">00106</a> <span class="preprocessor">#define  DROP_DYNAMIC   ( 0x0010 )  </span><span class="comment">/* adaptive tau */</span>
+<a name="l00107"></a><a class="code" href="slu__util_8h.html#ea78484190db0dd61d91743797bf6bfe">00107</a> <span class="preprocessor">#define  DROP_INTERP    ( 0x0100 )  </span><span class="comment">/* use interpolation */</span>
+<a name="l00108"></a>00108 
+<a name="l00109"></a>00109 
+<a name="l00110"></a>00110 <span class="preprocessor">#if 1</span>
+<a name="l00111"></a><a class="code" href="slu__util_8h.html#90dea7f830398b8c30be7488e24089bb">00111</a> <span class="preprocessor"></span><span class="preprocessor">#define MILU_ALPHA (1.0e-2) </span><span class="comment">/* multiple of drop_sum to be added to diagonal */</span>
+<a name="l00112"></a>00112 <span class="preprocessor">#else</span>
+<a name="l00113"></a>00113 <span class="preprocessor"></span><span class="preprocessor">#define MILU_ALPHA  1.0 </span><span class="comment">/* multiple of drop_sum to be added to diagonal */</span>
+<a name="l00114"></a>00114 <span class="preprocessor">#endif</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span>
+<a name="l00116"></a>00116 
+<a name="l00117"></a>00117 <span class="comment">/***********************************************************************</span>
+<a name="l00118"></a>00118 <span class="comment"> * Type definitions</span>
+<a name="l00119"></a>00119 <span class="comment"> ***********************************************************************/</span>
+<a name="l00120"></a><a class="code" href="slu__util_8h.html#aae6020bb33e780ff6edbd4e45ce08ac">00120</a> <span class="keyword">typedef</span> <span class="keywordtype">float</span>    <a class="code" href="slu__util_8h.html#aae6020bb33e780ff6edbd4e45ce08ac">flops_t</a>;
+<a name="l00121"></a><a class="code" href="slu__util_8h.html#30f473cd214dc43270f7a4d54b2887d2">00121</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="slu__util_8h.html#30f473cd214dc43270f7a4d54b2887d2">Logical</a>;
+<a name="l00122"></a>00122 
+<a name="l00123"></a>00123 <span class="comment">/* </span>
+<a name="l00124"></a>00124 <span class="comment"> *-- This contains the options used to control the solution process.</span>
+<a name="l00125"></a>00125 <span class="comment"> *</span>
+<a name="l00126"></a>00126 <span class="comment"> * Fact   (fact_t)</span>
+<a name="l00127"></a>00127 <span class="comment"> *        Specifies whether or not the factored form of the matrix</span>
+<a name="l00128"></a>00128 <span class="comment"> *        A is supplied on entry, and if not, how the matrix A should</span>
+<a name="l00129"></a>00129 <span class="comment"> *        be factorizaed.</span>
+<a name="l00130"></a>00130 <span class="comment"> *        = DOFACT: The matrix A will be factorized from scratch, and the</span>
+<a name="l00131"></a>00131 <span class="comment"> *             factors will be stored in L and U.</span>
+<a name="l00132"></a>00132 <span class="comment"> *        = SamePattern: The matrix A will be factorized assuming</span>
+<a name="l00133"></a>00133 <span class="comment"> *             that a factorization of a matrix with the same sparsity</span>
+<a name="l00134"></a>00134 <span class="comment"> *             pattern was performed prior to this one. Therefore, this</span>
+<a name="l00135"></a>00135 <span class="comment"> *             factorization will reuse column permutation vector </span>
+<a name="l00136"></a>00136 <span class="comment"> *             ScalePermstruct->perm_c and the column elimination tree</span>
+<a name="l00137"></a>00137 <span class="comment"> *             LUstruct->etree.</span>
+<a name="l00138"></a>00138 <span class="comment"> *        = SamePattern_SameRowPerm: The matrix A will be factorized</span>
+<a name="l00139"></a>00139 <span class="comment"> *             assuming that a factorization of a matrix with the same</span>
+<a name="l00140"></a>00140 <span class="comment"> *             sparsity pattern and similar numerical values was performed</span>
+<a name="l00141"></a>00141 <span class="comment"> *             prior to this one. Therefore, this factorization will reuse</span>
+<a name="l00142"></a>00142 <span class="comment"> *             both row and column scaling factors R and C, both row and</span>
+<a name="l00143"></a>00143 <span class="comment"> *             column permutation vectors perm_r and perm_c, and the</span>
+<a name="l00144"></a>00144 <span class="comment"> *             data structure set up from the previous symbolic factorization.</span>
+<a name="l00145"></a>00145 <span class="comment"> *        = FACTORED: On entry, L, U, perm_r and perm_c contain the </span>
+<a name="l00146"></a>00146 <span class="comment"> *              factored form of A. If DiagScale is not NOEQUIL, the matrix</span>
+<a name="l00147"></a>00147 <span class="comment"> *              A has been equilibrated with scaling factors R and C.</span>
+<a name="l00148"></a>00148 <span class="comment"> *</span>
+<a name="l00149"></a>00149 <span class="comment"> * Equil  (yes_no_t)</span>
+<a name="l00150"></a>00150 <span class="comment"> *        Specifies whether to equilibrate the system (scale A's row and</span>
+<a name="l00151"></a>00151 <span class="comment"> *        columns to have unit norm).</span>
+<a name="l00152"></a>00152 <span class="comment"> *</span>
+<a name="l00153"></a>00153 <span class="comment"> * ColPerm (colperm_t)</span>
+<a name="l00154"></a>00154 <span class="comment"> *        Specifies what type of column permutation to use to reduce fill.</span>
+<a name="l00155"></a>00155 <span class="comment"> *        = NATURAL: use the natural ordering </span>
+<a name="l00156"></a>00156 <span class="comment"> *        = MMD_ATA: use minimum degree ordering on structure of A'*A</span>
+<a name="l00157"></a>00157 <span class="comment"> *        = MMD_AT_PLUS_A: use minimum degree ordering on structure of A'+A</span>
+<a name="l00158"></a>00158 <span class="comment"> *        = COLAMD: use approximate minimum degree column ordering</span>
+<a name="l00159"></a>00159 <span class="comment"> *        = MY_PERMC: use the ordering specified by the user</span>
+<a name="l00160"></a>00160 <span class="comment"> *         </span>
+<a name="l00161"></a>00161 <span class="comment"> * Trans  (trans_t)</span>
+<a name="l00162"></a>00162 <span class="comment"> *        Specifies the form of the system of equations:</span>
+<a name="l00163"></a>00163 <span class="comment"> *        = NOTRANS: A * X = B        (No transpose)</span>
+<a name="l00164"></a>00164 <span class="comment"> *        = TRANS:   A**T * X = B     (Transpose)</span>
+<a name="l00165"></a>00165 <span class="comment"> *        = CONJ:    A**H * X = B     (Transpose)</span>
+<a name="l00166"></a>00166 <span class="comment"> *</span>
+<a name="l00167"></a>00167 <span class="comment"> * IterRefine (IterRefine_t)</span>
+<a name="l00168"></a>00168 <span class="comment"> *        Specifies whether to perform iterative refinement.</span>
+<a name="l00169"></a>00169 <span class="comment"> *        = NO: no iterative refinement</span>
+<a name="l00170"></a>00170 <span class="comment"> *        = SINGLE: perform iterative refinement in single precision</span>
+<a name="l00171"></a>00171 <span class="comment"> *        = DOUBLE: perform iterative refinement in double precision</span>
+<a name="l00172"></a>00172 <span class="comment"> *        = EXTRA: perform iterative refinement in extra precision</span>
+<a name="l00173"></a>00173 <span class="comment"> *</span>
+<a name="l00174"></a>00174 <span class="comment"> * DiagPivotThresh (double, in [0.0, 1.0]) (only for sequential SuperLU)</span>
+<a name="l00175"></a>00175 <span class="comment"> *        Specifies the threshold used for a diagonal entry to be an</span>
+<a name="l00176"></a>00176 <span class="comment"> *        acceptable pivot.</span>
+<a name="l00177"></a>00177 <span class="comment"> *</span>
+<a name="l00178"></a>00178 <span class="comment"> * SymmetricMode (yest_no_t)</span>
+<a name="l00179"></a>00179 <span class="comment"> *        Specifies whether to use symmetric mode. Symmetric mode gives </span>
+<a name="l00180"></a>00180 <span class="comment"> *        preference to diagonal pivots, and uses an (A'+A)-based column</span>
+<a name="l00181"></a>00181 <span class="comment"> *        permutation algorithm.</span>
+<a name="l00182"></a>00182 <span class="comment"> *</span>
+<a name="l00183"></a>00183 <span class="comment"> * PivotGrowth (yes_no_t)</span>
+<a name="l00184"></a>00184 <span class="comment"> *        Specifies whether to compute the reciprocal pivot growth.</span>
+<a name="l00185"></a>00185 <span class="comment"> *</span>
+<a name="l00186"></a>00186 <span class="comment"> * ConditionNumber (ues_no_t)</span>
+<a name="l00187"></a>00187 <span class="comment"> *        Specifies whether to compute the reciprocal condition number.</span>
+<a name="l00188"></a>00188 <span class="comment"> *</span>
+<a name="l00189"></a>00189 <span class="comment"> * RowPerm (rowperm_t) (only for SuperLU_DIST or ILU)</span>
+<a name="l00190"></a>00190 <span class="comment"> *        Specifies whether to permute rows of the original matrix.</span>
+<a name="l00191"></a>00191 <span class="comment"> *        = NO: not to permute the rows</span>
+<a name="l00192"></a>00192 <span class="comment"> *        = LargeDiag: make the diagonal large relative to the off-diagonal</span>
+<a name="l00193"></a>00193 <span class="comment"> *        = MY_PERMR: use the permutation given by the user</span>
+<a name="l00194"></a>00194 <span class="comment"> *</span>
+<a name="l00195"></a>00195 <span class="comment"> * ILU_DropRule (int)</span>
+<a name="l00196"></a>00196 <span class="comment"> *        Specifies the dropping rule:</span>
+<a name="l00197"></a>00197 <span class="comment"> *        = DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).</span>
+<a name="l00198"></a>00198 <span class="comment"> *        = DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma * nnz(A)/n.</span>
+<a name="l00199"></a>00199 <span class="comment"> *        = DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,</span>
+<a name="l00200"></a>00200 <span class="comment"> *                            p = gamma * nnz(A(:,j)).</span>
+<a name="l00201"></a>00201 <span class="comment"> *        = DROP_AREA:    Variation of ILUTP, for j-th column, use</span>
+<a name="l00202"></a>00202 <span class="comment"> *                            nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.</span>
+<a name="l00203"></a>00203 <span class="comment"> *        = DROP_DYNAMIC: Modify the threshold tau during factorizaion:</span>
+<a name="l00204"></a>00204 <span class="comment"> *                        If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma</span>
+<a name="l00205"></a>00205 <span class="comment"> *                                tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);</span>
+<a name="l00206"></a>00206 <span class="comment"> *                        Otherwise</span>
+<a name="l00207"></a>00207 <span class="comment"> *                                tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);</span>
+<a name="l00208"></a>00208 <span class="comment"> *                        tau_U(j) uses the similar rule.</span>
+<a name="l00209"></a>00209 <span class="comment"> *                        NOTE: the thresholds used by L and U are separate.</span>
+<a name="l00210"></a>00210 <span class="comment"> *        = DROP_INTERP:  Compute the second dropping threshold by</span>
+<a name="l00211"></a>00211 <span class="comment"> *                        interpolation instead of sorting (default).</span>
+<a name="l00212"></a>00212 <span class="comment"> *                        In this case, the actual fill ratio is not</span>
+<a name="l00213"></a>00213 <span class="comment"> *                        guaranteed to be smaller than gamma.</span>
+<a name="l00214"></a>00214 <span class="comment"> *        Note: DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.</span>
+<a name="l00215"></a>00215 <span class="comment"> *        ( Default: DROP_BASIC | DROP_AREA )</span>
+<a name="l00216"></a>00216 <span class="comment"> *</span>
+<a name="l00217"></a>00217 <span class="comment"> * ILU_DropTol (double)</span>
+<a name="l00218"></a>00218 <span class="comment"> *        numerical threshold for dropping.</span>
+<a name="l00219"></a>00219 <span class="comment"> *</span>
+<a name="l00220"></a>00220 <span class="comment"> * ILU_FillFactor (double) </span>
+<a name="l00221"></a>00221 <span class="comment"> *        Gamma in the secondary dropping.</span>
+<a name="l00222"></a>00222 <span class="comment"> *</span>
+<a name="l00223"></a>00223 <span class="comment"> * ILU_Norm (norm_t)</span>
+<a name="l00224"></a>00224 <span class="comment"> *        Specify which norm to use to measure the row size in a</span>
+<a name="l00225"></a>00225 <span class="comment"> *        supernode: infinity-norm, 1-norm, or 2-norm.</span>
+<a name="l00226"></a>00226 <span class="comment"> *</span>
+<a name="l00227"></a>00227 <span class="comment"> * ILU_FillTol (double)</span>
+<a name="l00228"></a>00228 <span class="comment"> *        numerical threshold for zero pivot perturbation.</span>
+<a name="l00229"></a>00229 <span class="comment"> *</span>
+<a name="l00230"></a>00230 <span class="comment"> * ILU_MILU (milu_t)</span>
+<a name="l00231"></a>00231 <span class="comment"> *        Specifies which version of MILU to use.</span>
+<a name="l00232"></a>00232 <span class="comment"> *</span>
+<a name="l00233"></a>00233 <span class="comment"> * ILU_MILU_Dim (double) </span>
+<a name="l00234"></a>00234 <span class="comment"> *        Dimension of the PDE if available.</span>
+<a name="l00235"></a>00235 <span class="comment"> *</span>
+<a name="l00236"></a>00236 <span class="comment"> * ReplaceTinyPivot (yes_no_t) (only for SuperLU_DIST)</span>
+<a name="l00237"></a>00237 <span class="comment"> *        Specifies whether to replace the tiny diagonals by</span>
+<a name="l00238"></a>00238 <span class="comment"> *        sqrt(epsilon)*||A|| during LU factorization.</span>
+<a name="l00239"></a>00239 <span class="comment"> *</span>
+<a name="l00240"></a>00240 <span class="comment"> * SolveInitialized (yes_no_t) (only for SuperLU_DIST)</span>
+<a name="l00241"></a>00241 <span class="comment"> *        Specifies whether the initialization has been performed to the</span>
+<a name="l00242"></a>00242 <span class="comment"> *        triangular solve.</span>
+<a name="l00243"></a>00243 <span class="comment"> *</span>
+<a name="l00244"></a>00244 <span class="comment"> * RefineInitialized (yes_no_t) (only for SuperLU_DIST)</span>
+<a name="l00245"></a>00245 <span class="comment"> *        Specifies whether the initialization has been performed to the</span>
+<a name="l00246"></a>00246 <span class="comment"> *        sparse matrix-vector multiplication routine needed in iterative</span>
+<a name="l00247"></a>00247 <span class="comment"> *        refinement.</span>
+<a name="l00248"></a>00248 <span class="comment"> *</span>
+<a name="l00249"></a>00249 <span class="comment"> * PrintStat (yes_no_t)</span>
+<a name="l00250"></a>00250 <span class="comment"> *        Specifies whether to print the solver's statistics.</span>
+<a name="l00251"></a>00251 <span class="comment"> */</span>
+<a name="l00252"></a><a class="code" href="structsuperlu__options__t.html">00252</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00253"></a><a class="code" href="structsuperlu__options__t.html#cbd3cc1d27bbaf5bc168ebbbd6bf60fe">00253</a>     <a class="code" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a>        Fact;
+<a name="l00254"></a><a class="code" href="structsuperlu__options__t.html#3fe998e3518ad90532072fa8929a1e2f">00254</a>     <a class="code" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a>      Equil;
+<a name="l00255"></a><a class="code" href="structsuperlu__options__t.html#f6e41a7d8ca989c5396f6edc67be0409">00255</a>     <a class="code" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c">colperm_t</a>     ColPerm;
+<a name="l00256"></a><a class="code" href="structsuperlu__options__t.html#23fa8259c7091d82f10f0dfc7718dc36">00256</a>     <a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>       Trans;
+<a name="l00257"></a><a class="code" href="structsuperlu__options__t.html#3e40fb39641e0caf27feb6998d21d98a">00257</a>     <a class="code" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e37">IterRefine_t</a>  IterRefine;
+<a name="l00258"></a><a class="code" href="structsuperlu__options__t.html#e574f08a3f4094dae8f635690b71d944">00258</a>     <span class="keywordtype">double</span>        DiagPivotThresh;
+<a name="l00259"></a><a class="code" href="structsuperlu__options__t.html#ad1b52d0366ae8601e97fab5c470c45d">00259</a>     <a class="code" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a>      SymmetricMode;
+<a name="l00260"></a><a class="code" href="structsuperlu__options__t.html#a75cfd534f156c78b7dc69e7e68596da">00260</a>     <a class="code" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a>      PivotGrowth;
+<a name="l00261"></a><a class="code" href="structsuperlu__options__t.html#3394d6658ec588071a9fee24a728eb07">00261</a>     <a class="code" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a>      ConditionNumber;
+<a name="l00262"></a><a class="code" href="structsuperlu__options__t.html#d38e45769deca7564ea75caec2ad58e6">00262</a>     <a class="code" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adf">rowperm_t</a>     RowPerm;
+<a name="l00263"></a><a class="code" href="structsuperlu__options__t.html#c0ca2f81f68ad7596f2ada5739acc4d5">00263</a>     <span class="keywordtype">int</span>           ILU_DropRule;
+<a name="l00264"></a><a class="code" href="structsuperlu__options__t.html#4f629bb593cb42f213887d521c8f2288">00264</a>     <span class="keywordtype">double</span>        ILU_DropTol;    <span class="comment">/* threshold for dropping */</span>
+<a name="l00265"></a><a class="code" href="structsuperlu__options__t.html#cf43941c86c9f3d1b46a6655f97bac70">00265</a>     <span class="keywordtype">double</span>        ILU_FillFactor; <span class="comment">/* gamma in the secondary dropping */</span>
+<a name="l00266"></a><a class="code" href="structsuperlu__options__t.html#d8ed1b7a0243a10193ff792053b281c9">00266</a>     <a class="code" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2f">norm_t</a>        ILU_Norm;       <span class="comment">/* infinity-norm, 1-norm, or 2-norm */</span>
+<a name="l00267"></a><a class="code" href="structsuperlu__options__t.html#8021fa436ad10dfdee734364bcd428c5">00267</a>     <span class="keywordtype">double</span>        ILU_FillTol;    <span class="comment">/* threshold for zero pivot perturbation */</span>
+<a name="l00268"></a><a class="code" href="structsuperlu__options__t.html#74708fd3231a761394bed90da1eba63b">00268</a>     <a class="code" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>        ILU_MILU;
+<a name="l00269"></a><a class="code" href="structsuperlu__options__t.html#ba6edb00ac03655feb075bf9d6904d18">00269</a>     <span class="keywordtype">double</span>        ILU_MILU_Dim;   <span class="comment">/* Dimension of PDE (if available) */</span>
+<a name="l00270"></a><a class="code" href="structsuperlu__options__t.html#e2f1847e26bce58631ca5d58ad3d46ed">00270</a>     <a class="code" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a>      ParSymbFact;
+<a name="l00271"></a><a class="code" href="structsuperlu__options__t.html#791051ffa3861ba7203b0a1da2e6bf4b">00271</a>     <a class="code" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a>      ReplaceTinyPivot; <span class="comment">/* used in SuperLU_DIST */</span>
+<a name="l00272"></a><a class="code" href="structsuperlu__options__t.html#246344bda7ff7d5547101c2f01737ee7">00272</a>     <a class="code" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a>      SolveInitialized;
+<a name="l00273"></a><a class="code" href="structsuperlu__options__t.html#6cfb6d3c0e8d5d2c8b4b813883e395b7">00273</a>     <a class="code" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a>      RefineInitialized;
+<a name="l00274"></a><a class="code" href="structsuperlu__options__t.html#afe514c5a01fe24b70cc636621a86576">00274</a>     <a class="code" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a>      PrintStat;
+<a name="l00275"></a>00275 } <a class="code" href="structsuperlu__options__t.html">superlu_options_t</a>;
+<a name="l00276"></a>00276 
+<a name="l00278"></a><a class="code" href="structe__node.html">00278</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structe__node.html" title="Headers for 4 types of dynamatically managed memory.">e_node</a> {
+<a name="l00279"></a><a class="code" href="structe__node.html#2b5a49fe848fe66d1643a37ae2a842eb">00279</a>     <span class="keywordtype">int</span> <a class="code" href="structe__node.html#2b5a49fe848fe66d1643a37ae2a842eb">size</a>;      <span class="comment">/* length of the memory that has been used */</span>
+<a name="l00280"></a><a class="code" href="structe__node.html#6a040bdcee064559b0b480a96ccfac65">00280</a>     <span class="keywordtype">void</span> *<a class="code" href="structe__node.html#6a040bdcee064559b0b480a96ccfac65">mem</a>;     <span class="comment">/* pointer to the new malloc'd store */</span>
+<a name="l00281"></a>00281 } <a class="code" href="structe__node.html" title="Headers for 4 types of dynamatically managed memory.">ExpHeader</a>;
+<a name="l00282"></a>00282 
+<a name="l00283"></a><a class="code" href="structLU__stack__t.html">00283</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00284"></a><a class="code" href="structLU__stack__t.html#f05e6775b79809e7bcc0c92da24c12f5">00284</a>     <span class="keywordtype">int</span>  size;
+<a name="l00285"></a><a class="code" href="structLU__stack__t.html#78ad1773677b220bd843c9d84bbda869">00285</a>     <span class="keywordtype">int</span>  used;
+<a name="l00286"></a><a class="code" href="structLU__stack__t.html#3ba965e6621326c518c95d791afe6fef">00286</a>     <span class="keywordtype">int</span>  top1;  <span class="comment">/* grow upward, relative to &array[0] */</span>
+<a name="l00287"></a><a class="code" href="structLU__stack__t.html#1ae2a485bc81409ceb05bce271363901">00287</a>     <span class="keywordtype">int</span>  top2;  <span class="comment">/* grow downward */</span>
+<a name="l00288"></a><a class="code" href="structLU__stack__t.html#c76a2713e4f4c516d7189303b6f82c8d">00288</a>     <span class="keywordtype">void</span> *array;
+<a name="l00289"></a>00289 } <a class="code" href="structLU__stack__t.html">LU_stack_t</a>;
+<a name="l00290"></a>00290 
+<a name="l00291"></a><a class="code" href="structSuperLUStat__t.html">00291</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00292"></a><a class="code" href="structSuperLUStat__t.html#9a15399d38ecaf731ec300977f268b75">00292</a>     <span class="keywordtype">int</span>     *panel_histo; <span class="comment">/* histogram of panel size distribution */</span>
+<a name="l00293"></a><a class="code" href="structSuperLUStat__t.html#5eccc9eba32b749c87f7a97991cfdc18">00293</a>     <span class="keywordtype">double</span>  *utime;       <span class="comment">/* running time at various phases */</span>
+<a name="l00294"></a><a class="code" href="structSuperLUStat__t.html#ec6afa389e49ac9d04dc44e24805c99d">00294</a>     <a class="code" href="slu__util_8h.html#aae6020bb33e780ff6edbd4e45ce08ac">flops_t</a> *ops;         <span class="comment">/* operation count at various phases */</span>
+<a name="l00295"></a><a class="code" href="structSuperLUStat__t.html#d752e80fc9fa85195ec9c0e9a17b481c">00295</a>     <span class="keywordtype">int</span>     TinyPivots;   <span class="comment">/* number of tiny pivots */</span>
+<a name="l00296"></a><a class="code" href="structSuperLUStat__t.html#472eadaf612c983b8829ae40b09f411b">00296</a>     <span class="keywordtype">int</span>     RefineSteps;  <span class="comment">/* number of iterative refinement steps */</span>
+<a name="l00297"></a><a class="code" href="structSuperLUStat__t.html#b0281af9350a75b2d4a3108b8bc0bf23">00297</a>     <span class="keywordtype">int</span>     expansions;   <span class="comment">/* number of memory expansions */</span>
+<a name="l00298"></a>00298 } <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>;
+<a name="l00299"></a>00299 
+<a name="l00300"></a><a class="code" href="structmem__usage__t.html">00300</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00301"></a><a class="code" href="structmem__usage__t.html#ea63300065ca81e5387c1706d7b3e705">00301</a>     <span class="keywordtype">float</span> for_lu;
+<a name="l00302"></a><a class="code" href="structmem__usage__t.html#7225324e3925e071e95a58d49367a88a">00302</a>     <span class="keywordtype">float</span> total_needed;
+<a name="l00303"></a>00303 } <a class="code" href="structmem__usage__t.html">mem_usage_t</a>;
+<a name="l00304"></a>00304 
+<a name="l00305"></a>00305 
+<a name="l00306"></a>00306 <span class="comment">/***********************************************************************</span>
+<a name="l00307"></a>00307 <span class="comment"> * Prototypes</span>
+<a name="l00308"></a>00308 <span class="comment"> ***********************************************************************/</span>
+<a name="l00309"></a>00309 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00310"></a>00310 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00311"></a>00311 <span class="preprocessor">#endif</span>
+<a name="l00312"></a>00312 <span class="preprocessor"></span>
+<a name="l00313"></a>00313 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#2c43be55861c6e4ee5b806ac16cc382c" title="Deallocate the structure pointing to the actual storage of the matrix.">Destroy_SuperMatrix_Store</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00314"></a>00314 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#4257e4d9cca1db286b73154d81ec3880">Destroy_CompCol_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00315"></a>00315 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#98cbb427c29a6be1760288b63857bc12">Destroy_CompRow_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00316"></a>00316 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#de01201644d38ff78cd1824ff2e5022b">Destroy_SuperNode_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00317"></a>00317 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#4de38e1c0ef18dd0791cb206c7f5348f" title="A is of type Stype==NCP.">Destroy_CompCol_Permuted</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00318"></a>00318 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#9f7e658f2e17e08b2d88fadc11f2b437" title="A is of type Stype==DN.">Destroy_Dense_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00319"></a>00319 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="get__perm__c_8c.html#aecb6e6e7a3e97356050bcfdf2573796">get_perm_c</a>(<span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *);
+<a name="l00320"></a>00320 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#4792687285a879f7955029421ba99795" title="Set the default values for the options argument.">set_default_options</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *options);
+<a name="l00321"></a>00321 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#fce6cba2b855a4b046f6521d5dd1beb4" title="Set the default values for the options argument for ILU.">ilu_set_default_options</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *options);
+<a name="l00322"></a>00322 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#df9c573cbfb4520a5ea820702d27cfa5">sp_preorder</a> (<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a>*, <span class="keywordtype">int</span>*, <span class="keywordtype">int</span>*,
+<a name="l00323"></a>00323                             <a class="code" href="structSuperMatrix.html">SuperMatrix</a>*);
+<a name="l00324"></a>00324 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#bd38b081866ed2c3e4959c4c0560913c" title="Global statistics variale.">superlu_abort_and_exit</a>(<span class="keywordtype">char</span>*);
+<a name="l00325"></a>00325 <span class="keyword">extern</span> <span class="keywordtype">void</span>    *<a class="code" href="memory_8c.html#9ab2cc28807c3b5f5ca8eb9b85ea1f3f">superlu_malloc</a> (<span class="keywordtype">size_t</span>);
+<a name="l00326"></a>00326 <span class="keyword">extern</span> <span class="keywordtype">int</span>     *<a class="code" href="memory_8c.html#49bbe20102e5b541c8e8963afa2bd46a">intMalloc</a> (<span class="keywordtype">int</span>);
+<a name="l00327"></a>00327 <span class="keyword">extern</span> <span class="keywordtype">int</span>     *<a class="code" href="memory_8c.html#af51f82a79c361236a2d825a59a63403">intCalloc</a> (<span class="keywordtype">int</span>);
+<a name="l00328"></a>00328 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="memory_8c.html#50cc6d9102542bf48b24f6d21cfa7deb">superlu_free</a> (<span class="keywordtype">void</span>*);
+<a name="l00329"></a>00329 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="memory_8c.html#dbbe5a57b4ed64564c887fb52d798c54" title="Set up pointers for integer working arrays.">SetIWork</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **, <span class="ke [...]
+<a name="l00330"></a>00330                          <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00331"></a>00331 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__util_8h.html#f8198f26bef3c82fbb8601fc5a8e0d9e">sp_coletree</a> (<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *);
+<a name="l00332"></a>00332 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="relax__snode_8c.html#d70bc12cb9031ab8aba4a37a18be46e3">relax_snode</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *);
+<a name="l00333"></a>00333 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="heap__relax__snode_8c.html#059d36bb76b7562c9bb2cbd7870e7ffe">heap_relax_snode</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *);
+<a name="l00334"></a>00334 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="mark__relax_8c.html#5e85b0273eec011f0027d8506a20350e">mark_relax</a>(<span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *);
+<a name="l00335"></a>00335 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="ilu__relax__snode_8c.html#e0e2bbb8507d800766030635a3bd5a7e">ilu_relax_snode</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *,
+<a name="l00336"></a>00336                                 <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *);
+<a name="l00337"></a>00337 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="ilu__heap__relax__snode_8c.html#ac1a978dda622cdb58c3c2eaee4b4030">ilu_heap_relax_snode</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *,
+<a name="l00338"></a>00338                                      <span class="keywordtype">int</span> *, <span class="keywordtype">int</span>*);
+<a name="l00339"></a>00339 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#b71db926d60d7b8fd739df197b766366" title="Reset repfnz[] for the current column.">resetrep_col</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *);
+<a name="l00340"></a>00340 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__util_8h.html#0bccee6dda29384503240026c062bfc6">spcoletree</a> (<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *);
+<a name="l00341"></a>00341 <span class="keyword">extern</span> <span class="keywordtype">int</span>     *<a class="code" href="slu__util_8h.html#44084fde835d2ccaa25e9fd942a72b7a">TreePostorder</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span> *);
+<a name="l00342"></a>00342 <span class="keyword">extern</span> <span class="keywordtype">double</span>  <a class="code" href="slu__util_8h.html#0c6777573bbfe81917cd381e0090d355" title="Timer function.">SuperLU_timer_</a> ();
+<a name="l00343"></a>00343 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__util_8h.html#72be96e75e58564c4322ef9ef73ca65f">sp_ienv</a> (<span class="keywordtype">int</span>);
+<a name="l00344"></a>00344 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="lsame_8c.html#6de88349c1fe993f318dd0643af908c3">lsame_</a> (<span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *);
+<a name="l00345"></a>00345 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__util_8h.html#8ddc46fddd8c0c53fc9e77fefdf9a456">xerbla_</a> (<span class="keywordtype">char</span> *, <span class="keywordtype">int</span> *);
+<a name="l00346"></a>00346 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#b0dfb6551008bcad5e758defdbd13006" title="Fills an integer array with a given value.">ifill</a> (<span class="keywordtype">int</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>);
+<a name="l00347"></a>00347 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#01ded59744addeefd265dbb22d9f37d0">snode_profile</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span> *);
+<a name="l00348"></a>00348 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#c33e407326ae1dc222aee7ff08f322cf">super_stats</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span> *);
+<a name="l00349"></a>00349 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#9e29ce75ab694aa7fdb32b7644f9da69" title="Check whether repfnz[] == EMPTY after reset.">check_repfnz</a>(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *);
+<a name="l00350"></a>00350 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#47292875a12f5601efa82a4350656db8" title="Print a summary of the testing results.">PrintSumm</a> (<span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>);
+<a name="l00351"></a>00351 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#3b979ab4f4e75bdc1b89106dde6c8d72">StatInit</a>(<a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *);
+<a name="l00352"></a>00352 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#a157fecae472b8ef5ce79bd59876099d">StatPrint</a> (<a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *);
+<a name="l00353"></a>00353 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#b0fb3345d479a7ac24f75f0e64bdff4b">StatFree</a>(<a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *);
+<a name="l00354"></a>00354 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__util_8h.html#48208ca68e95c765c0c55c12b196d79e" title="Diagnostic print of segment info after panel_dfs().">print_panel_seg</a>(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *);
+<a name="l00355"></a>00355 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__util_8h.html#8a3ba6cbe163f9c12f6f10ee8ba98fc7">print_int_vec</a>(<span class="keywordtype">char</span> *,<span class="keywordtype">int</span>, <span class="keywordtype">int</span> *);
+<a name="l00356"></a>00356 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__util_8h.html#de363dcb4babb66fa0e5f51bd2e6e42c">slu_PrintInt10</a>(<span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *);
+<a name="l00357"></a>00357 
+<a name="l00358"></a>00358 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00359"></a>00359 <span class="preprocessor"></span>  }
+<a name="l00360"></a>00360 <span class="preprocessor">#endif</span>
+<a name="l00361"></a>00361 <span class="preprocessor"></span>
+<a name="l00362"></a>00362 <span class="preprocessor">#endif </span><span class="comment">/* __SUPERLU_UTIL */</span>
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__util_8h.html b/DOC/html/slu__util_8h.html
new file mode 100644
index 0000000..3391c2c
--- /dev/null
+++ b/DOC/html/slu__util_8h.html
@@ -0,0 +1,2296 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_util.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/slu_util.h File Reference</h1>Utility header file. <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include <string.h></code><br>
+<code>#include <assert.h></code><br>
+<code>#include "<a class="el" href="superlu__enum__consts_8h-source.html">superlu_enum_consts.h</a>"</code><br>
+
+<p>
+<a href="slu__util_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structe__node.html">e_node</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Headers for 4 types of dynamatically managed memory.  <a href="structe__node.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structLU__stack__t.html">LU_stack_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structmem__usage__t.html">mem_usage_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#745e85e3ef4b1267858c9df86608518c">FIRSTCOL_OF_SNODE</a>(i)   (xsup[i])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#9b7b2a5116ee487722b0967317ab6360">NO_MARKER</a>   3</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV</a>(m, w, t, b)   ( SUPERLU_MAX(m, (t + b)*w) )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#aba7be0a786a716c200675ac43827e2a">USER_ABORT</a>(msg)   superlu_abort_and_exit(msg)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a4b133a54309e2c6e4ba69f3ff1141c2">ABORT</a>(err_msg)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#232b101af98715228590ae6e089f4c65">USER_MALLOC</a>(size)   superlu_malloc(size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#55a5ed83733c30850c14cc7b3f922a54">SUPERLU_MALLOC</a>(size)   USER_MALLOC(size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#d7924033040c27afdb4a51ac9f8295b1">USER_FREE</a>(addr)   superlu_free(addr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#9672c5511c3efd9467e4d375a347c192">SUPERLU_FREE</a>(addr)   USER_FREE(addr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#35401f732a50d2a0af33db1ea224b1f6">CHECK_MALLOC</a>(where)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#dca8259e9d345c7cbaaa0608a1acdfd4">SUPERLU_MAX</a>(x, y)   ( (x) > (y) ? (x) : (y) )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#7147dd5df1048562cd4ab83e9fd808d9">SUPERLU_MIN</a>(x, y)   ( (x) < (y) ? (x) : (y) )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#445a44f88349753bc17f28fbac4df382">L_SUB_START</a>(col)   ( Lstore->rowind_colptr[col] )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#8de2450f2d4cf12794954b63a319c423">L_SUB</a>(ptr)   ( Lstore->rowind[ptr] )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#79b13489e4cd00b09633e0c5e0be1b7c">L_NZ_START</a>(col)   ( Lstore->nzval_colptr[col] )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#0ea367a3afecd30b570d0a46cc819cdf">L_FST_SUPC</a>(superno)   ( Lstore->sup_to_col[superno] )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#c641190b1a047ebcf224372cb3dfec68">U_NZ_START</a>(col)   ( Ustore->colptr[col] )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#cbd74ce05240823854ebfcd301f200e8">U_SUB</a>(ptr)   ( Ustore->rowind[ptr] )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#2b7cf2a3641be7b89138615764d60ba3">EMPTY</a>   (-1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a93f0eb578d23995850d61f7d61c55c1">FALSE</a>   0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>   1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#b9ccb8b9963ca083d7f36f5d3acc5744">NO_MEMTYPE</a>   4</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#d3754689b2ab3abc8b3afe4facdd76f3">GluIntArray</a>(n)   (5 * (n) + 5)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#aa1b4d4ec24548decf1f389060a7d878">NODROP</a>   ( 0x0000 )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#fb51a22d4d20fb9e39acd95129344997">DROP_BASIC</a>   ( 0x0001 )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#34a649fce94fb9a61524f3b18161aef8">DROP_PROWS</a>   ( 0x0002 )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#741f1ee3e9529b1384492787d09a0c70">DROP_COLUMN</a>   ( 0x0004 )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#e56780c0f0b5afa706231cbe2b1ee82f">DROP_AREA</a>   ( 0x0008 )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#72349305248ecb540ca43f404884bef5">DROP_SECONDARY</a>   ( 0x000E )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#c6089af2caea8fef6aa343cb16fd1646">DROP_DYNAMIC</a>   ( 0x0010 )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#ea78484190db0dd61d91743797bf6bfe">DROP_INTERP</a>   ( 0x0100 )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#90dea7f830398b8c30be7488e24089bb">MILU_ALPHA</a>   (1.0e-2)</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef float </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#aae6020bb33e780ff6edbd4e45ce08ac">flops_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#30f473cd214dc43270f7a4d54b2887d2">Logical</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structe__node.html">e_node</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#c071de4d8a39e15f13c92a5f60bc16f0">ExpHeader</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#2c43be55861c6e4ee5b806ac16cc382c">Destroy_SuperMatrix_Store</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Deallocate the structure pointing to the actual storage of the matrix.  <a href="#2c43be55861c6e4ee5b806ac16cc382c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#4257e4d9cca1db286b73154d81ec3880">Destroy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#98cbb427c29a6be1760288b63857bc12">Destroy_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#de01201644d38ff78cd1824ff2e5022b">Destroy_SuperNode_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#4de38e1c0ef18dd0791cb206c7f5348f">Destroy_CompCol_Permuted</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A is of type Stype==NCP.  <a href="#4de38e1c0ef18dd0791cb206c7f5348f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#9f7e658f2e17e08b2d88fadc11f2b437">Destroy_Dense_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A is of type Stype==DN.  <a href="#9f7e658f2e17e08b2d88fadc11f2b437"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#263122009c4421188a14285798b7bff7">get_perm_c</a> (int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#4792687285a879f7955029421ba99795">set_default_options</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the default values for the options argument.  <a href="#4792687285a879f7955029421ba99795"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#fce6cba2b855a4b046f6521d5dd1beb4">ilu_set_default_options</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the default values for the options argument for ILU.  <a href="#fce6cba2b855a4b046f6521d5dd1beb4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#df9c573cbfb4520a5ea820702d27cfa5">sp_preorder</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#bd38b081866ed2c3e4959c4c0560913c">superlu_abort_and_exit</a> (char *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Global statistics variale.  <a href="#bd38b081866ed2c3e4959c4c0560913c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#7ec97fcbe08a55ad56048a43919d6843">superlu_malloc</a> (size_t)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#c5e3eb5cdc6962ab8238dd3e663bea67">intMalloc</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#f7f89277b471647ea6b3581ca11becd3">intCalloc</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#1745be2114a7b66ea7632292b03cb3ce">superlu_free</a> (void *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#eaaa4cb43f415698df4f891e1a1afaa4">SetIWork</a> (int, int, int, int *, int **, int **, int **, int **, int **, int **, int **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for integer working arrays.  <a href="#eaaa4cb43f415698df4f891e1a1afaa4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#f8198f26bef3c82fbb8601fc5a8e0d9e">sp_coletree</a> (int *, int *, int *, int, int, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a9dcebe0d2709ff7ab053c3acb8f35af">relax_snode</a> (const int, int *, const int, int *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#de3f23f612ced035318a59623b6925e5">heap_relax_snode</a> (const int, int *, const int, int *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#23057ebe27329fd8fc65970c7c3e2b3f">mark_relax</a> (int, int *, int *, int *, int *, int *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#2212f489d8bb77b74c61e0a7442796a8">ilu_relax_snode</a> (const int, int *, const int, int *, int *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#cd37f89f3fd101b2860c26b45bd4c2a1">ilu_heap_relax_snode</a> (const int, int *, const int, int *, int *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#b71db926d60d7b8fd739df197b766366">resetrep_col</a> (const int, const int *, int *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reset repfnz[] for the current column.  <a href="#b71db926d60d7b8fd739df197b766366"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#0bccee6dda29384503240026c062bfc6">spcoletree</a> (int *, int *, int *, int, int, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#44084fde835d2ccaa25e9fd942a72b7a">TreePostorder</a> (int, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#0c6777573bbfe81917cd381e0090d355">SuperLU_timer_</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Timer function.  <a href="#0c6777573bbfe81917cd381e0090d355"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#72be96e75e58564c4322ef9ef73ca65f">sp_ienv</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#4d9eb0e1ec853020a42e867b4ff3018c">lsame_</a> (char *, char *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#8ddc46fddd8c0c53fc9e77fefdf9a456">xerbla_</a> (char *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#b0dfb6551008bcad5e758defdbd13006">ifill</a> (int *, int, int)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fills an integer array with a given value.  <a href="#b0dfb6551008bcad5e758defdbd13006"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#01ded59744addeefd265dbb22d9f37d0">snode_profile</a> (int, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#c33e407326ae1dc222aee7ff08f322cf">super_stats</a> (int, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#9e29ce75ab694aa7fdb32b7644f9da69">check_repfnz</a> (int, int, int, int *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check whether repfnz[] == EMPTY after reset.  <a href="#9e29ce75ab694aa7fdb32b7644f9da69"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#47292875a12f5601efa82a4350656db8">PrintSumm</a> (char *, int, int, int)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Print a summary of the testing results.  <a href="#47292875a12f5601efa82a4350656db8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#3b979ab4f4e75bdc1b89106dde6c8d72">StatInit</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a157fecae472b8ef5ce79bd59876099d">StatPrint</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#b0fb3345d479a7ac24f75f0e64bdff4b">StatFree</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#48208ca68e95c765c0c55c12b196d79e">print_panel_seg</a> (int, int, int, int, int *, int *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of segment info after panel_dfs().  <a href="#48208ca68e95c765c0c55c12b196d79e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#8a3ba6cbe163f9c12f6f10ee8ba98fc7">print_int_vec</a> (char *, int, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#de363dcb4babb66fa0e5f51bd2e6e42c">slu_PrintInt10</a> (char *, int, int *)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+-- SuperLU routine (version 4.1) -- Univ. of California Berkeley, Xerox Palo Alto Research Center, and Lawrence Berkeley National Lab. November, 2010 <hr><h2>Define Documentation</h2>
+<a class="anchor" name="a4b133a54309e2c6e4ba69f3ff1141c2"></a><!-- doxytag: member="slu_util.h::ABORT" ref="a4b133a54309e2c6e4ba69f3ff1141c2" args="(err_msg)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ABORT          </td>
+          <td>(</td>
+          <td class="paramtype">err_msg </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">{ <span class="keywordtype">char</span> msg[256];\
+   sprintf(msg,<span class="stringliteral">"%s at line %d in file %s\n"</span>,err_msg,__LINE__, __FILE__);\
+   <a class="code" href="slu__util_8h.html#aba7be0a786a716c200675ac43827e2a">USER_ABORT</a>(msg); }
+</pre></div>
+</div>
+</div><p>
+<a class="anchor" name="35401f732a50d2a0af33db1ea224b1f6"></a><!-- doxytag: member="slu_util.h::CHECK_MALLOC" ref="35401f732a50d2a0af33db1ea224b1f6" args="(where)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define CHECK_MALLOC          </td>
+          <td>(</td>
+          <td class="paramtype">where </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">{                 \
+    <span class="keyword">extern</span> <span class="keywordtype">int</span> superlu_malloc_total;        \
+    printf(<span class="stringliteral">"%s: malloc_total %d Bytes\n"</span>,     \
+           where, superlu_malloc_total); \
+}
+</pre></div>
+</div>
+</div><p>
+<a class="anchor" name="e56780c0f0b5afa706231cbe2b1ee82f"></a><!-- doxytag: member="slu_util.h::DROP_AREA" ref="e56780c0f0b5afa706231cbe2b1ee82f" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DROP_AREA   ( 0x0008 )          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fb51a22d4d20fb9e39acd95129344997"></a><!-- doxytag: member="slu_util.h::DROP_BASIC" ref="fb51a22d4d20fb9e39acd95129344997" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DROP_BASIC   ( 0x0001 )          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="741f1ee3e9529b1384492787d09a0c70"></a><!-- doxytag: member="slu_util.h::DROP_COLUMN" ref="741f1ee3e9529b1384492787d09a0c70" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DROP_COLUMN   ( 0x0004 )          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c6089af2caea8fef6aa343cb16fd1646"></a><!-- doxytag: member="slu_util.h::DROP_DYNAMIC" ref="c6089af2caea8fef6aa343cb16fd1646" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DROP_DYNAMIC   ( 0x0010 )          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ea78484190db0dd61d91743797bf6bfe"></a><!-- doxytag: member="slu_util.h::DROP_INTERP" ref="ea78484190db0dd61d91743797bf6bfe" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DROP_INTERP   ( 0x0100 )          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="34a649fce94fb9a61524f3b18161aef8"></a><!-- doxytag: member="slu_util.h::DROP_PROWS" ref="34a649fce94fb9a61524f3b18161aef8" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DROP_PROWS   ( 0x0002 )          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="72349305248ecb540ca43f404884bef5"></a><!-- doxytag: member="slu_util.h::DROP_SECONDARY" ref="72349305248ecb540ca43f404884bef5" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DROP_SECONDARY   ( 0x000E )          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2b7cf2a3641be7b89138615764d60ba3"></a><!-- doxytag: member="slu_util.h::EMPTY" ref="2b7cf2a3641be7b89138615764d60ba3" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define EMPTY   (-1)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a93f0eb578d23995850d61f7d61c55c1"></a><!-- doxytag: member="slu_util.h::FALSE" ref="a93f0eb578d23995850d61f7d61c55c1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FALSE   0          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="745e85e3ef4b1267858c9df86608518c"></a><!-- doxytag: member="slu_util.h::FIRSTCOL_OF_SNODE" ref="745e85e3ef4b1267858c9df86608518c" args="(i)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FIRSTCOL_OF_SNODE          </td>
+          <td>(</td>
+          <td class="paramtype">i </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   (xsup[i])</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d3754689b2ab3abc8b3afe4facdd76f3"></a><!-- doxytag: member="slu_util.h::GluIntArray" ref="d3754689b2ab3abc8b3afe4facdd76f3" args="(n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define GluIntArray          </td>
+          <td>(</td>
+          <td class="paramtype">n </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   (5 * (n) + 5)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0ea367a3afecd30b570d0a46cc819cdf"></a><!-- doxytag: member="slu_util.h::L_FST_SUPC" ref="0ea367a3afecd30b570d0a46cc819cdf" args="(superno)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define L_FST_SUPC          </td>
+          <td>(</td>
+          <td class="paramtype">superno </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( Lstore->sup_to_col[superno] )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="79b13489e4cd00b09633e0c5e0be1b7c"></a><!-- doxytag: member="slu_util.h::L_NZ_START" ref="79b13489e4cd00b09633e0c5e0be1b7c" args="(col)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define L_NZ_START          </td>
+          <td>(</td>
+          <td class="paramtype">col </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( Lstore->nzval_colptr[col] )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8de2450f2d4cf12794954b63a319c423"></a><!-- doxytag: member="slu_util.h::L_SUB" ref="8de2450f2d4cf12794954b63a319c423" args="(ptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define L_SUB          </td>
+          <td>(</td>
+          <td class="paramtype">ptr </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( Lstore->rowind[ptr] )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="445a44f88349753bc17f28fbac4df382"></a><!-- doxytag: member="slu_util.h::L_SUB_START" ref="445a44f88349753bc17f28fbac4df382" args="(col)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define L_SUB_START          </td>
+          <td>(</td>
+          <td class="paramtype">col </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( Lstore->rowind_colptr[col] )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="90dea7f830398b8c30be7488e24089bb"></a><!-- doxytag: member="slu_util.h::MILU_ALPHA" ref="90dea7f830398b8c30be7488e24089bb" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MILU_ALPHA   (1.0e-2)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9b7b2a5116ee487722b0967317ab6360"></a><!-- doxytag: member="slu_util.h::NO_MARKER" ref="9b7b2a5116ee487722b0967317ab6360" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NO_MARKER   3          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b9ccb8b9963ca083d7f36f5d3acc5744"></a><!-- doxytag: member="slu_util.h::NO_MEMTYPE" ref="b9ccb8b9963ca083d7f36f5d3acc5744" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NO_MEMTYPE   4          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="aa1b4d4ec24548decf1f389060a7d878"></a><!-- doxytag: member="slu_util.h::NODROP" ref="aa1b4d4ec24548decf1f389060a7d878" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NODROP   ( 0x0000 )          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="06193b28f40a4779ae7737711642eb45"></a><!-- doxytag: member="slu_util.h::NUM_TEMPV" ref="06193b28f40a4779ae7737711642eb45" args="(m, w, t, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NUM_TEMPV          </td>
+          <td>(</td>
+          <td class="paramtype">m,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">w,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">t,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( SUPERLU_MAX(m, (t + b)*w) )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9672c5511c3efd9467e4d375a347c192"></a><!-- doxytag: member="slu_util.h::SUPERLU_FREE" ref="9672c5511c3efd9467e4d375a347c192" args="(addr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SUPERLU_FREE          </td>
+          <td>(</td>
+          <td class="paramtype">addr </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   USER_FREE(addr)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="55a5ed83733c30850c14cc7b3f922a54"></a><!-- doxytag: member="slu_util.h::SUPERLU_MALLOC" ref="55a5ed83733c30850c14cc7b3f922a54" args="(size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SUPERLU_MALLOC          </td>
+          <td>(</td>
+          <td class="paramtype">size </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   USER_MALLOC(size)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="dca8259e9d345c7cbaaa0608a1acdfd4"></a><!-- doxytag: member="slu_util.h::SUPERLU_MAX" ref="dca8259e9d345c7cbaaa0608a1acdfd4" args="(x, y)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SUPERLU_MAX          </td>
+          <td>(</td>
+          <td class="paramtype">x,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">y </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( (x) > (y) ? (x) : (y) )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7147dd5df1048562cd4ab83e9fd808d9"></a><!-- doxytag: member="slu_util.h::SUPERLU_MIN" ref="7147dd5df1048562cd4ab83e9fd808d9" args="(x, y)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SUPERLU_MIN          </td>
+          <td>(</td>
+          <td class="paramtype">x,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">y </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( (x) < (y) ? (x) : (y) )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a8cecfc5c5c054d2875c03e77b7be15d"></a><!-- doxytag: member="slu_util.h::TRUE" ref="a8cecfc5c5c054d2875c03e77b7be15d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TRUE   1          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c641190b1a047ebcf224372cb3dfec68"></a><!-- doxytag: member="slu_util.h::U_NZ_START" ref="c641190b1a047ebcf224372cb3dfec68" args="(col)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define U_NZ_START          </td>
+          <td>(</td>
+          <td class="paramtype">col </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( Ustore->colptr[col] )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cbd74ce05240823854ebfcd301f200e8"></a><!-- doxytag: member="slu_util.h::U_SUB" ref="cbd74ce05240823854ebfcd301f200e8" args="(ptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define U_SUB          </td>
+          <td>(</td>
+          <td class="paramtype">ptr </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( Ustore->rowind[ptr] )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="aba7be0a786a716c200675ac43827e2a"></a><!-- doxytag: member="slu_util.h::USER_ABORT" ref="aba7be0a786a716c200675ac43827e2a" args="(msg)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define USER_ABORT          </td>
+          <td>(</td>
+          <td class="paramtype">msg </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   superlu_abort_and_exit(msg)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d7924033040c27afdb4a51ac9f8295b1"></a><!-- doxytag: member="slu_util.h::USER_FREE" ref="d7924033040c27afdb4a51ac9f8295b1" args="(addr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define USER_FREE          </td>
+          <td>(</td>
+          <td class="paramtype">addr </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   superlu_free(addr)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="232b101af98715228590ae6e089f4c65"></a><!-- doxytag: member="slu_util.h::USER_MALLOC" ref="232b101af98715228590ae6e089f4c65" args="(size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define USER_MALLOC          </td>
+          <td>(</td>
+          <td class="paramtype">size </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   superlu_malloc(size)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="c071de4d8a39e15f13c92a5f60bc16f0"></a><!-- doxytag: member="slu_util.h::ExpHeader" ref="c071de4d8a39e15f13c92a5f60bc16f0" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structe__node.html">e_node</a>  <a class="el" href="structe__node.html">ExpHeader</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="aae6020bb33e780ff6edbd4e45ce08ac"></a><!-- doxytag: member="slu_util.h::flops_t" ref="aae6020bb33e780ff6edbd4e45ce08ac" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef float <a class="el" href="slu__util_8h.html#aae6020bb33e780ff6edbd4e45ce08ac">flops_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="30f473cd214dc43270f7a4d54b2887d2"></a><!-- doxytag: member="slu_util.h::Logical" ref="30f473cd214dc43270f7a4d54b2887d2" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef unsigned char <a class="el" href="slu__util_8h.html#30f473cd214dc43270f7a4d54b2887d2">Logical</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="9e29ce75ab694aa7fdb32b7644f9da69"></a><!-- doxytag: member="slu_util.h::check_repfnz" ref="9e29ce75ab694aa7fdb32b7644f9da69" args="(int, int, int, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void check_repfnz           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4257e4d9cca1db286b73154d81ec3880"></a><!-- doxytag: member="slu_util.h::Destroy_CompCol_Matrix" ref="4257e4d9cca1db286b73154d81ec3880" args="(SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Destroy_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4de38e1c0ef18dd0791cb206c7f5348f"></a><!-- doxytag: member="slu_util.h::Destroy_CompCol_Permuted" ref="4de38e1c0ef18dd0791cb206c7f5348f" args="(SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Destroy_CompCol_Permuted           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="98cbb427c29a6be1760288b63857bc12"></a><!-- doxytag: member="slu_util.h::Destroy_CompRow_Matrix" ref="98cbb427c29a6be1760288b63857bc12" args="(SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Destroy_CompRow_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9f7e658f2e17e08b2d88fadc11f2b437"></a><!-- doxytag: member="slu_util.h::Destroy_Dense_Matrix" ref="9f7e658f2e17e08b2d88fadc11f2b437" args="(SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Destroy_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2c43be55861c6e4ee5b806ac16cc382c"></a><!-- doxytag: member="slu_util.h::Destroy_SuperMatrix_Store" ref="2c43be55861c6e4ee5b806ac16cc382c" args="(SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Destroy_SuperMatrix_Store           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="de01201644d38ff78cd1824ff2e5022b"></a><!-- doxytag: member="slu_util.h::Destroy_SuperNode_Matrix" ref="de01201644d38ff78cd1824ff2e5022b" args="(SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Destroy_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="263122009c4421188a14285798b7bff7"></a><!-- doxytag: member="slu_util.h::get_perm_c" ref="263122009c4421188a14285798b7bff7" args="(int, SuperMatrix *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void get_perm_c           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ispec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> GET_PERM_C obtains a permutation matrix Pc, by applying the multiple
+ minimum degree ordering code by Joseph Liu to matrix A'*A or A+A'.
+ or using approximate minimum degree column ordering by Davis et. al.
+ The LU factorization of A*Pc tends to have less fill than the LU 
+ factorization of A.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> ispec   (input) int
+         Specifies the type of column ordering to reduce fill:
+         = 1: minimum degree on the structure of A^T * A
+         = 2: minimum degree on the structure of A^T + A
+         = 3: approximate minimum degree for unsymmetric matrices
+         If ispec == 0, the natural ordering (i.e., Pc = I) is returned.</pre><p>
+<pre> A       (input) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of the linear equations is A->nrow. Currently, the type of A 
+         can be: Stype = NC; Dtype = _D; Mtype = GE. In the future,
+         more general A can be handled.</pre><p>
+<pre> perm_c  (output) int*
+	   Column permutation vector of size A->ncol, which defines the 
+         permutation matrix Pc; perm_c[i] = j means column i of A is 
+         in position j in A*Pc.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="de3f23f612ced035318a59623b6925e5"></a><!-- doxytag: member="slu_util.h::heap_relax_snode" ref="de3f23f612ced035318a59623b6925e5" args="(const int, int *, const int, int *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void heap_relax_snode           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>et</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>relax_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>descendants</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_end</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="relax__snode_8c.html#d70bc12cb9031ab8aba4a37a18be46e3">relax_snode()</a> - Identify the initial relaxed supernodes, assuming that 
+    the matrix has been reordered according to the postorder of the etree.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="b0dfb6551008bcad5e758defdbd13006"></a><!-- doxytag: member="slu_util.h::ifill" ref="b0dfb6551008bcad5e758defdbd13006" args="(int *, int, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ifill           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cd37f89f3fd101b2860c26b45bd4c2a1"></a><!-- doxytag: member="slu_util.h::ilu_heap_relax_snode" ref="cd37f89f3fd101b2860c26b45bd4c2a1" args="(const int, int *, const int, int *, int *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_heap_relax_snode           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>et</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>relax_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>descendants</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_fsupc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__heap__relax__snode_8c.html#ac1a978dda622cdb58c3c2eaee4b4030">ilu_heap_relax_snode()</a> - Identify the initial relaxed supernodes,
+    assuming that the matrix has been reordered according to the postorder
+    of the etree.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="2212f489d8bb77b74c61e0a7442796a8"></a><!-- doxytag: member="slu_util.h::ilu_relax_snode" ref="2212f489d8bb77b74c61e0a7442796a8" args="(const int, int *, const int, int *, int *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_relax_snode           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>et</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>relax_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>descendants</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_fsupc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__relax__snode_8c.html#e0e2bbb8507d800766030635a3bd5a7e">ilu_relax_snode()</a> - Identify the initial relaxed supernodes, assuming
+    that the matrix has been reordered according to the postorder of the
+    etree.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="fce6cba2b855a4b046f6521d5dd1beb4"></a><!-- doxytag: member="slu_util.h::ilu_set_default_options" ref="fce6cba2b855a4b046f6521d5dd1beb4" args="(superlu_options_t *options)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_set_default_options           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f7f89277b471647ea6b3581ca11becd3"></a><!-- doxytag: member="slu_util.h::intCalloc" ref="f7f89277b471647ea6b3581ca11becd3" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* intCalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c5e3eb5cdc6962ab8238dd3e663bea67"></a><!-- doxytag: member="slu_util.h::intMalloc" ref="c5e3eb5cdc6962ab8238dd3e663bea67" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* intMalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4d9eb0e1ec853020a42e867b4ff3018c"></a><!-- doxytag: member="slu_util.h::lsame_" ref="4d9eb0e1ec853020a42e867b4ff3018c" args="(char *, char *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int lsame_           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>ca</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>cb</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    LSAME returns .TRUE. if CA is the same letter as CB regardless of case.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    CA      (input) CHARACTER*1   
+    CB      (input) CHARACTER*1   
+            CA and CB specify the single characters to be compared.</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="23057ebe27329fd8fc65970c7c3e2b3f"></a><!-- doxytag: member="slu_util.h::mark_relax" ref="23057ebe27329fd8fc65970c7c3e2b3f" args="(int, int *, int *, int *, int *, int *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int mark_relax           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_fsupc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="mark__relax_8c.html#5e85b0273eec011f0027d8506a20350e">mark_relax()</a> - record the rows used by the relaxed supernodes.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="8a3ba6cbe163f9c12f6f10ee8ba98fc7"></a><!-- doxytag: member="slu_util.h::print_int_vec" ref="8a3ba6cbe163f9c12f6f10ee8ba98fc7" args="(char *, int, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int print_int_vec           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="48208ca68e95c765c0c55c12b196d79e"></a><!-- doxytag: member="slu_util.h::print_panel_seg" ref="48208ca68e95c765c0c55c12b196d79e" args="(int, int, int, int, int *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void print_panel_seg           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="47292875a12f5601efa82a4350656db8"></a><!-- doxytag: member="slu_util.h::PrintSumm" ref="47292875a12f5601efa82a4350656db8" args="(char *, int, int, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PrintSumm           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a9dcebe0d2709ff7ab053c3acb8f35af"></a><!-- doxytag: member="slu_util.h::relax_snode" ref="a9dcebe0d2709ff7ab053c3acb8f35af" args="(const int, int *, const int, int *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void relax_snode           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>et</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>relax_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>descendants</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>relax_end</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="relax__snode_8c.html#d70bc12cb9031ab8aba4a37a18be46e3">relax_snode()</a> - Identify the initial relaxed supernodes, assuming that 
+    the matrix has been reordered according to the postorder of the etree.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="b71db926d60d7b8fd739df197b766366"></a><!-- doxytag: member="slu_util.h::resetrep_col" ref="b71db926d60d7b8fd739df197b766366" args="(const int, const int *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void resetrep_col           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4792687285a879f7955029421ba99795"></a><!-- doxytag: member="slu_util.h::set_default_options" ref="4792687285a879f7955029421ba99795" args="(superlu_options_t *options)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void set_default_options           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="eaaa4cb43f415698df4f891e1a1afaa4"></a><!-- doxytag: member="slu_util.h::SetIWork" ref="eaaa4cb43f415698df4f891e1a1afaa4" args="(int, int, int, int *, int **, int **, int **, int **, int **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SetIWork           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="de363dcb4babb66fa0e5f51bd2e6e42c"></a><!-- doxytag: member="slu_util.h::slu_PrintInt10" ref="de363dcb4babb66fa0e5f51bd2e6e42c" args="(char *, int, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int slu_PrintInt10           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="01ded59744addeefd265dbb22d9f37d0"></a><!-- doxytag: member="slu_util.h::snode_profile" ref="01ded59744addeefd265dbb22d9f37d0" args="(int, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void snode_profile           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f8198f26bef3c82fbb8601fc5a8e0d9e"></a><!-- doxytag: member="slu_util.h::sp_coletree" ref="f8198f26bef3c82fbb8601fc5a8e0d9e" args="(int *, int *, int *, int, int, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_coletree           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="72be96e75e58564c4322ef9ef73ca65f"></a><!-- doxytag: member="slu_util.h::sp_ienv" ref="72be96e75e58564c4322ef9ef73ca65f" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_ienv           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ispec</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    <a class="el" href="slu__util_8h.html#72be96e75e58564c4322ef9ef73ca65f">sp_ienv()</a> is inquired to choose machine-dependent parameters for the
+    local environment. See ISPEC for a description of the parameters.</pre><p>
+<pre>    This version provides a set of parameters which should give good,   
+    but not optimal, performance on many of the currently available   
+    computers.  Users are encouraged to modify this subroutine to set   
+    the tuning parameters for their particular machine using the option   
+    and problem size information in the arguments.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    ISPEC   (input) int
+            Specifies the parameter to be returned as the value of SP_IENV.   
+            = 1: the panel size w; a panel consists of w consecutive
+	         columns of matrix A in the process of Gaussian elimination.
+		 The best value depends on machine's cache characters.
+            = 2: the relaxation parameter relax; if the number of
+	         nodes (columns) in a subtree of the elimination tree is less
+		 than relax, this subtree is considered as one supernode,
+		 regardless of their row structures.
+            = 3: the maximum size for a supernode in complete LU;
+	    = 4: the minimum row dimension for 2-D blocking to be used;
+	    = 5: the minimum column dimension for 2-D blocking to be used;
+	    = 6: the estimated fills factor for L and U, compared with A;
+	    = 7: the maximum size for a supernode in ILU.</pre><p>
+<pre>   (SP_IENV) (output) int
+            >= 0: the value of the parameter specified by ISPEC   
+            < 0:  if SP_IENV = -k, the k-th argument had an illegal value.</pre><p>
+<pre>    ===================================================================== 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="df9c573cbfb4520a5ea820702d27cfa5"></a><!-- doxytag: member="slu_util.h::sp_preorder" ref="df9c573cbfb4520a5ea820702d27cfa5" args="(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sp_preorder           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>AC</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> <a class="el" href="slu__util_8h.html#df9c573cbfb4520a5ea820702d27cfa5">sp_preorder()</a> permutes the columns of the original matrix. It performs
+ the following steps:</pre><p>
+<pre>    1. Apply column permutation perm_c[] to A's column pointers to form AC;</pre><p>
+<pre>    2. If options->Fact = DOFACT, then
+       (1) Compute column elimination tree etree[] of AC'AC;
+       (2) Post order etree[] to get a postordered elimination tree etree[],
+           and a postorder permutation post[];
+       (3) Apply post[] permutation to columns of AC;
+       (4) Overwrite perm_c[] with the product perm_c * post.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         Specifies whether or not the elimination tree will be re-used.
+         If options->Fact == DOFACT, this means first time factor A, 
+         etree is computed, postered, and output.
+         Otherwise, re-factor A, etree is input, unchanged on exit.</pre><p>
+<pre> A       (input) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of the linear equations is A->nrow. Currently, the type of A can be:
+         Stype = NC or SLU_NCP; Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre> perm_c  (input/output) int*
+	   Column permutation vector of size A->ncol, which defines the 
+         permutation matrix Pc; perm_c[i] = j means column i of A is 
+         in position j in A*Pc.
+         If options->Fact == DOFACT, perm_c is both input and output.
+         On output, it is changed according to a postorder of etree.
+         Otherwise, perm_c is input.</pre><p>
+<pre> etree   (input/output) int*
+         Elimination tree of Pc'*A'*A*Pc, dimension A->ncol.
+         If options->Fact == DOFACT, etree is an output argument,
+         otherwise it is an input argument.
+         Note: etree is a vector of parent pointers for a forest whose
+         vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> AC      (output) SuperMatrix*
+         The resulting matrix after applied the column permutation
+         perm_c[] to matrix A. The type of AC can be:
+         Stype = SLU_NCP; Dtype = A->Dtype; Mtype = SLU_GE.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="0bccee6dda29384503240026c062bfc6"></a><!-- doxytag: member="slu_util.h::spcoletree" ref="0bccee6dda29384503240026c062bfc6" args="(int *, int *, int *, int, int, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int spcoletree           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b0fb3345d479a7ac24f75f0e64bdff4b"></a><!-- doxytag: member="slu_util.h::StatFree" ref="b0fb3345d479a7ac24f75f0e64bdff4b" args="(SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void StatFree           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3b979ab4f4e75bdc1b89106dde6c8d72"></a><!-- doxytag: member="slu_util.h::StatInit" ref="3b979ab4f4e75bdc1b89106dde6c8d72" args="(SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void StatInit           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a157fecae472b8ef5ce79bd59876099d"></a><!-- doxytag: member="slu_util.h::StatPrint" ref="a157fecae472b8ef5ce79bd59876099d" args="(SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void StatPrint           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c33e407326ae1dc222aee7ff08f322cf"></a><!-- doxytag: member="slu_util.h::super_stats" ref="c33e407326ae1dc222aee7ff08f322cf" args="(int, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void super_stats           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="bd38b081866ed2c3e4959c4c0560913c"></a><!-- doxytag: member="slu_util.h::superlu_abort_and_exit" ref="bd38b081866ed2c3e4959c4c0560913c" args="(char *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void superlu_abort_and_exit           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1745be2114a7b66ea7632292b03cb3ce"></a><!-- doxytag: member="slu_util.h::superlu_free" ref="1745be2114a7b66ea7632292b03cb3ce" args="(void *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void superlu_free           </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7ec97fcbe08a55ad56048a43919d6843"></a><!-- doxytag: member="slu_util.h::superlu_malloc" ref="7ec97fcbe08a55ad56048a43919d6843" args="(size_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* superlu_malloc           </td>
+          <td>(</td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"> <em>size</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Precision-independent memory-related routines. (Shared by [sdcz]<a class="el" href="memory_8c.html" title="Precision-independent memory-related routines.">memory.c</a>) 
+</div>
+</div><p>
+<a class="anchor" name="0c6777573bbfe81917cd381e0090d355"></a><!-- doxytag: member="slu_util.h::SuperLU_timer_" ref="0c6777573bbfe81917cd381e0090d355" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double SuperLU_timer_           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="44084fde835d2ccaa25e9fd942a72b7a"></a><!-- doxytag: member="slu_util.h::TreePostorder" ref="44084fde835d2ccaa25e9fd942a72b7a" args="(int, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* TreePostorder           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8ddc46fddd8c0c53fc9e77fefdf9a456"></a><!-- doxytag: member="slu_util.h::xerbla_" ref="8ddc46fddd8c0c53fc9e77fefdf9a456" args="(char *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int xerbla_           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__zdefs_8h-source.html b/DOC/html/slu__zdefs_8h-source.html
new file mode 100644
index 0000000..4d45c37
--- /dev/null
+++ b/DOC/html/slu__zdefs_8h-source.html
@@ -0,0 +1,237 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_zdefs.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<h1>SRC/slu_zdefs.h</h1><a href="slu__zdefs_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00063"></a>00063 <span class="preprocessor">#ifndef __SUPERLU_zSP_DEFS </span><span class="comment">/* allow multiple inclusions */</span>
+<a name="l00064"></a>00064 <span class="preprocessor">#define __SUPERLU_zSP_DEFS</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>
+<a name="l00066"></a>00066 <span class="comment">/*</span>
+<a name="l00067"></a>00067 <span class="comment"> * File name:           zsp_defs.h</span>
+<a name="l00068"></a>00068 <span class="comment"> * Purpose:             Sparse matrix types and function prototypes</span>
+<a name="l00069"></a>00069 <span class="comment"> * History:</span>
+<a name="l00070"></a>00070 <span class="comment"> */</span>
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072 <span class="preprocessor">#ifdef _CRAY</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#include <fortran.h></span>
+<a name="l00074"></a>00074 <span class="preprocessor">#include <string.h></span>
+<a name="l00075"></a>00075 <span class="preprocessor">#endif</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span>
+<a name="l00077"></a>00077 <span class="comment">/* Define my integer type int_t */</span>
+<a name="l00078"></a><a class="code" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">00078</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>; <span class="comment">/* default */</span>
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080 <span class="preprocessor">#include <math.h></span>
+<a name="l00081"></a>00081 <span class="preprocessor">#include <limits.h></span>
+<a name="l00082"></a>00082 <span class="preprocessor">#include "<a class="code" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called.">slu_Cnames.h</a>"</span>
+<a name="l00083"></a>00083 <span class="preprocessor">#include "<a class="code" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a>"</span>
+<a name="l00084"></a>00084 <span class="preprocessor">#include "<a class="code" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a>"</span>
+<a name="l00085"></a>00085 <span class="preprocessor">#include "<a class="code" href="slu__dcomplex_8h.html" title="Header file for complex operations.">slu_dcomplex.h</a>"</span>
+<a name="l00086"></a>00086 
+<a name="l00087"></a>00087 
+<a name="l00088"></a>00088 
+<a name="l00089"></a>00089 <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00090"></a><a class="code" href="structGlobalLU__t.html#94902a11c68912c2d456a58edd29f31d">00090</a>     <span class="keywordtype">int</span>     *xsup;    <span class="comment">/* supernode and column mapping */</span>
+<a name="l00091"></a><a class="code" href="structGlobalLU__t.html#fe003e9f68a924d5ba66c6f655bea55c">00091</a>     <span class="keywordtype">int</span>     *supno;   
+<a name="l00092"></a><a class="code" href="structGlobalLU__t.html#4e7e8cd3ba09e252a04eaf0b8af5fccd">00092</a>     <span class="keywordtype">int</span>     *lsub;    <span class="comment">/* compressed L subscripts */</span>
+<a name="l00093"></a><a class="code" href="structGlobalLU__t.html#c6f1655e303e2947524c29182d0f6a1e">00093</a>     <span class="keywordtype">int</span>     *xlsub;
+<a name="l00094"></a><a class="code" href="structGlobalLU__t.html#2a029c0f5964a535c8ec85911987b639">00094</a>     <a class="code" href="structdoublecomplex.html">doublecomplex</a>  *lusup;   <span class="comment">/* L supernodes */</span>
+<a name="l00095"></a><a class="code" href="structGlobalLU__t.html#aa63b1382a358278bd2775c921a84246">00095</a>     <span class="keywordtype">int</span>     *xlusup;
+<a name="l00096"></a><a class="code" href="structGlobalLU__t.html#3fbdc21b78d160d4cbe9f4c435381586">00096</a>     <a class="code" href="structdoublecomplex.html">doublecomplex</a>  *ucol;    <span class="comment">/* U columns */</span>
+<a name="l00097"></a><a class="code" href="structGlobalLU__t.html#96b0443ea47703100b9ecad92137dda9">00097</a>     <span class="keywordtype">int</span>     *usub;
+<a name="l00098"></a><a class="code" href="structGlobalLU__t.html#4cbf4786dd6fc6541d5e097b27ab6835">00098</a>     <span class="keywordtype">int</span>     *xusub;
+<a name="l00099"></a>00099     <span class="keywordtype">int</span>     nzlmax;   <span class="comment">/* current max size of lsub */</span>
+<a name="l00100"></a>00100     <span class="keywordtype">int</span>     nzumax;   <span class="comment">/*    "    "    "      ucol */</span>
+<a name="l00101"></a>00101     <span class="keywordtype">int</span>     nzlumax;  <span class="comment">/*    "    "    "     lusup */</span>
+<a name="l00102"></a>00102     <span class="keywordtype">int</span>     n;        <span class="comment">/* number of columns in the matrix */</span>
+<a name="l00103"></a>00103     <a class="code" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f6">LU_space_t</a> MemModel; <span class="comment">/* 0 - system malloc'd; 1 - user provided */</span>
+<a name="l00104"></a>00104     <span class="keywordtype">int</span>     num_expansions;
+<a name="l00105"></a><a class="code" href="structGlobalLU__t.html#edd2ee950bd57f92d4aa9028738b9bdc">00105</a>     <a class="code" href="structe__node.html" title="Headers for 4 types of dynamatically managed memory.">ExpHeader</a> *expanders; <span class="comment">/* Array of pointers to 4 types of memory */</span>
+<a name="l00106"></a>00106     <a class="code" href="structLU__stack__t.html">LU_stack_t</a> stack;     <span class="comment">/* use user supplied memory */</span>
+<a name="l00107"></a>00107 } <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a>;
+<a name="l00108"></a>00108 
+<a name="l00109"></a>00109 
+<a name="l00110"></a>00110 <span class="comment">/* -------- Prototypes -------- */</span>
+<a name="l00111"></a>00111 
+<a name="l00112"></a>00112 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00113"></a>00113 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00114"></a>00114 <span class="preprocessor">#endif</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span>
+<a name="l00117"></a>00117 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00118"></a>00118 <a class="code" href="slu__zdefs_8h.html#f381e217f2aa7e57bcdebfc9e1e7b973" title="Driver routines.">zgssv</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00119"></a>00119       <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00120"></a>00120 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00121"></a>00121 <a class="code" href="slu__zdefs_8h.html#75f04171385eb89527fe10f871b2149a">zgssvx</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00122"></a>00122        <span class="keywordtype">char</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00123"></a>00123        <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00124"></a>00124        <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,
+<a name="l00125"></a>00125        <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00126"></a>00126     <span class="comment">/* ILU */</span>
+<a name="l00127"></a>00127 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00128"></a>00128 <a class="code" href="slu__zdefs_8h.html#06d5de0123fd4c7a00bcbf0a3944883d">zgsisv</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00129"></a>00129       <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00130"></a>00130 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00131"></a>00131 <a class="code" href="slu__zdefs_8h.html#34c7b072bc210f8cfb9d88d0ab20775a">zgsisx</a>(<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00132"></a>00132        <span class="keywordtype">char</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00133"></a>00133        <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,
+<a name="l00134"></a>00134        <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, <span class="keywordtype">int</span> *);
+<a name="l00135"></a>00135 
+<a name="l00136"></a>00136 
+<a name="l00138"></a>00138 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00139"></a>00139 <a class="code" href="slu__zdefs_8h.html#7281942aff23b914e0cb23478bf8cf39" title="Supernodal LU factor related.">zCreate_CompCol_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *,
+<a name="l00140"></a>00140                        <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00141"></a>00141 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00142"></a>00142 <a class="code" href="slu__zdefs_8h.html#d88d522f3d109c52379fa9c7274f100f">zCreate_CompRow_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *,
+<a name="l00143"></a>00143                        <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00144"></a>00144 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00145"></a>00145 <a class="code" href="slu__zdefs_8h.html#5d43eba6fc1bbf869b2d696b71a6566c" title="Copy matrix A into matrix B.">zCopy_CompCol_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00146"></a>00146 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00147"></a>00147 <a class="code" href="slu__zdefs_8h.html#b9280cf311111348a607e78aa2311e73">zCreate_Dense_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span class="keywordtype">int</span>,
+<a name="l00148"></a>00148                      <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00149"></a>00149 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00150"></a>00150 <a class="code" href="slu__zdefs_8h.html#c64ee6fda439e62b0e0a855cd5a19441">zCreate_SuperNode_Matrix</a>(<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, 
+<a name="l00151"></a>00151                          <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00152"></a>00152                          <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>, <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>);
+<a name="l00153"></a>00153 <span class="keyword">extern</span> <span class="keywordtype">void</span>
+<a name="l00154"></a>00154 <a class="code" href="slu__zdefs_8h.html#4a51f1cca404f383d725cf6ca2ab1f5b">zCopy_Dense_Matrix</a>(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span class="keywordtype">int</span>);
+<a name="l00155"></a>00155 
+<a name="l00156"></a>00156 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc" title="Count the total number of nonzeros in factors L and U, and in the symmetrically reduced...">countnz</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class [...]
+<a name="l00157"></a>00157 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85" title="Count the total number of nonzeros in factors L and U.">ilu_countnz</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00158"></a>00158 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf" title="Fix up the data storage lsub for L-subscripts. It removes the subscript sets for...">fixupL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00159"></a>00159 
+<a name="l00160"></a>00160 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#2643ac77912d9f351f7294677bbe05f2" title="Allocate storage for original matrix A.">zallocateA</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00161"></a>00161 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">zgstrf</a> (<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a>*, <a class="code" href="structSuperMatrix.html">SuperMatrix</a>*,
+<a name="l00162"></a>00162                        <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>*, <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, 
+<a name="l00163"></a>00163                        <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00164"></a>00164 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__zdefs_8h.html#f0e16dd7be5f8beaf0e445562995de49">zsnode_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span> *,
+<a name="l00165"></a>00165                              <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00166"></a>00166 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__zdefs_8h.html#f416483e20a4ec79bf0d04d6e55c585b" title="Performs numeric block updates within the relaxed snode.">zsnode_bmod</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <a class="co [...]
+<a name="l00167"></a>00167                               <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00168"></a>00168 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#ddc01b7cd28e5566177c284480a680f3">zpanel_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00169"></a>00169                            <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00170"></a>00170                            <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00171"></a>00171 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#58b397fc5660a6a0638f2aba584abf64">zpanel_bmod</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>,
+<a name="l00172"></a>00172                            <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00173"></a>00173                            <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00174"></a>00174 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__zdefs_8h.html#b7a8371a03a4cd272a5cb05d1fd7d8ae">zcolumn_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int< [...]
+<a name="l00175"></a>00175                            <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00176"></a>00176 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__zdefs_8h.html#49aac39da44afbad110705d4a7f9f862">zcolumn_bmod</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *,
+<a name="l00177"></a>00177                            <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span>,
+<a name="l00178"></a>00178                            <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00179"></a>00179 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__zdefs_8h.html#01e6dfda172d9c30fe038497a10d25fa">zcopy_to_ucol</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00180"></a>00180                               <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);         
+<a name="l00181"></a>00181 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__zdefs_8h.html#dce57d338c03a6432064f295023ba976">zpivotL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">double</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, 
+<a name="l00182"></a>00182                          <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00183"></a>00183 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#8a368adca5d498e86910b5371de3131d">zpruneL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>,
+<a name="l00184"></a>00184                           <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00185"></a>00185 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#cd4ff4683d71e444e948fbcacb23e803">zreadmt</a> (<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00186"></a>00186 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#bf8c836a49482c27abdc046ec7c726cb">zGenXtrue</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span class="keywordtype">int</span>);
+<a name="l00187"></a>00187 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#856d8820ae8cf7ccf6ca662bc680de26" title="Let rhs[i] = sum of i-th row of A, so the solution vector is all 1&#39;s.">zFillRHS</a> (<a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span c [...]
+<a name="l00188"></a>00188                           <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00189"></a>00189 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#1b74304cd437572bbec487bc29422a90">zgstrs</a> (<a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00190"></a>00190                         <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00191"></a>00191 <span class="comment">/* ILU */</span>
+<a name="l00192"></a>00192 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#2fee39459dfac17529487ea539648cfb">zgsitrf</a> (<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a>*, <a class="code" href="structSuperMatrix.html">SuperMatrix</a>*, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>*,
+<a name="l00193"></a>00193                         <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00194"></a>00194                         <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00195"></a>00195 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__zdefs_8h.html#231c25a6f73e928d43ee8f3f4f291844">zldperm</a>(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> [], <span class="keywordtype">int</span> [], <a class="code" href="structdoublecomplex.html">doublecomplex</a> [],
+<a name="l00196"></a>00196                         <span class="keywordtype">int</span> [], <span class="keywordtype">double</span> [], <span class="keywordtype">double</span> []);
+<a name="l00197"></a>00197 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__zsnode__dfs_8c.html#6fa78a3059d75e11a66434992dddafab">ilu_zsnode_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keyword">const</span> <span class="keywordtype">int</ [...]
+<a name="l00198"></a>00198                                <span class="keyword">const</span> <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00199"></a>00199 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="ilu__zpanel__dfs_8c.html#8bc5f8a774d7fab0ba65cd9bca243435">ilu_zpanel_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00200"></a>00200                                <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00201"></a>00201                                <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00202"></a>00202 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__zcolumn__dfs_8c.html#e44a937bcd7d34ad6b18ad859680d8f1">ilu_zcolumn_dfs</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00203"></a>00203                                 <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00204"></a>00204                                 <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00205"></a>00205 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__zcopy__to__ucol_8c.html#b3c195f1b0db2f8686e3be3dc5107007">ilu_zcopy_to_ucol</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
+<a name="l00206"></a>00206                                   <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span class="keywordtype">int</span>, <a class="code" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>,
+<a name="l00207"></a>00207                                   <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <span class="keywordtype">double</span> *);
+<a name="l00208"></a>00208 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__zpivotL_8c.html#857e99bebbdf102f2b9d2ef4a25d1135">ilu_zpivotL</a> (<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">double</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">i [...]
+<a name="l00209"></a>00209                             <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">double</span>, <a class="code" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>,
+<a name="l00210"></a>00210                             <a class="code" href="structdoublecomplex.html">doublecomplex</a>, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*);
+<a name="l00211"></a>00211 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="ilu__zdrop__row_8c.html#f4b8c50d3afed76a8b9809673a7da4f3">ilu_zdrop_row</a> (<a class="code" href="structsuperlu__options__t.html">superlu_options_t</a> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>,
+<a name="l00212"></a>00212                               <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">double</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, 
+<a name="l00213"></a>00213                               <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>);
+<a name="l00214"></a>00214 
+<a name="l00215"></a>00215 
+<a name="l00218"></a>00218 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#e112ddfff2798b7e4c090d96d2a8d80a" title="Driver related.">zgsequ</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,
+<a name="l00219"></a>00219                         <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span> *);
+<a name="l00220"></a>00220 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#a7f8e784fe805303d413a3dc684aa8a5">zlaqgs</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span>,
+<a name="l00221"></a>00221                         <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">char</span> *);
+<a name="l00222"></a>00222 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#42c7a1b7c813c330cd5a60852a592395">zgscon</a> (<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, 
+<a name="l00223"></a>00223                          <span class="keywordtype">double</span>, <span class="keywordtype">double</span> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00224"></a>00224 <span class="keyword">extern</span> <span class="keywordtype">double</span>   <a class="code" href="slu__zdefs_8h.html#87aab883e88a4ee7f6e19b7d9d5f690c">zPivotGrowth</a>(<span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, 
+<a name="l00225"></a>00225                             <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00226"></a>00226 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#7675aa04369725f7f65c74249388f5a5">zgsrfs</a> (<a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00227"></a>00227                        <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">char</span> *, <span class="keywordtype">double</span> *, 
+<a name="l00228"></a>00228                        <span class="keywordtype">double</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00229"></a>00229                        <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00230"></a>00230 
+<a name="l00231"></a>00231 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__zdefs_8h.html#4f8e25c2e20af0219ad6719db052f3d7" title="Solves one of the systems of equations A*x = b, or A&#39;*x = b.">sp_ztrsv</a> (<span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00232"></a>00232                         <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <a class="code" href="structSuperLUStat__t.html">SuperLUStat_t</a>*, <span class="keywordtype">int</span> *);
+<a name="l00233"></a>00233 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__zdefs_8h.html#295a004dbce1f1b0aa48e7cb319da461" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A&#39;*x...">sp_zgemv</a> (<span class="keywordtype">char</span> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" hr [...]
+<a name="l00234"></a>00234                         <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a>, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span class="keywordtype">int</span>);
+<a name="l00235"></a>00235 
+<a name="l00236"></a>00236 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__zdefs_8h.html#723eb34b4ba347bbaa753c5d66cca4ab">sp_zgemm</a> (<span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a>,
+<a name="l00237"></a>00237                         <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a>, 
+<a name="l00238"></a>00238                         <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span class="keywordtype">int</span>);
+<a name="l00239"></a>00239 <span class="keyword">extern</span>         <span class="keywordtype">double</span> <a class="code" href="dlamch_8c.html#8f8bef103c45d87276d6508164f5883c">dlamch_</a>(<span class="keywordtype">char</span> *);
+<a name="l00240"></a>00240 
+<a name="l00241"></a>00241 
+<a name="l00243"></a>00243 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__zdefs_8h.html#0c3bf2c88bdda13cede034c6e9a407e5" title="Memory-related.">zLUMemInit</a> (<a class="code" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a>, <span class="keywordtype">void</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keyword [...]
+<a name="l00244"></a>00244                             <span class="keywordtype">double</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *,
+<a name="l00245"></a>00245                             <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *, <span class="keywordtype">int</span> **, <a class="code" href="structdoublecomplex.html">doublecomplex</a> **);
+<a name="l00246"></a>00246 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#a4e2012fe2ee4c2d1cd2a261bdb0455b" title="Set up pointers for real working arrays.">zSetRWork</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> **, <a class="code" href="structdouble [...]
+<a name="l00247"></a>00247 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#572914748b4f1aa544a61477095e7fe5" title="Free the working storage used by factor routines.">zLUWorkFree</a> (<span class="keywordtype">int</span> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00248"></a>00248 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__zdefs_8h.html#399a28849bd52ce90c1cbc8e4cd85046" title="Expand the data structures for L and U during the factorization.">zLUMemXpand</a> (<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a>, <span class="keywordtype">int</span> *, <a class [...]
+<a name="l00249"></a>00249 
+<a name="l00250"></a>00250 <span class="keyword">extern</span> <a class="code" href="structdoublecomplex.html">doublecomplex</a>  *<a class="code" href="slu__zdefs_8h.html#e33b5268048e570c0cdf96498198e821">doublecomplexMalloc</a>(<span class="keywordtype">int</span>);
+<a name="l00251"></a>00251 <span class="keyword">extern</span> <a class="code" href="structdoublecomplex.html">doublecomplex</a>  *<a class="code" href="slu__zdefs_8h.html#b7683ac1617339478753ab308a7b0fc5">doublecomplexCalloc</a>(<span class="keywordtype">int</span>);
+<a name="l00252"></a>00252 <span class="keyword">extern</span> <span class="keywordtype">double</span>  *<a class="code" href="dmemory_8c.html#8f2b9305cb611c37e7f627da902451a8">doubleMalloc</a>(<span class="keywordtype">int</span>);
+<a name="l00253"></a>00253 <span class="keyword">extern</span> <span class="keywordtype">double</span>  *<a class="code" href="dmemory_8c.html#c8b6d99155644578a5e5542c32040cfe">doubleCalloc</a>(<span class="keywordtype">int</span>);
+<a name="l00254"></a>00254 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__zdefs_8h.html#5987692fb793ccc6122ff861261f1ca2">zmemory_usage</a>(<span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">int</span>);
+<a name="l00255"></a>00255 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__zdefs_8h.html#711303a4bc043eb0b1bff72b32d52397">zQuerySpace</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *);
+<a name="l00256"></a>00256 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="slu__zdefs_8h.html#5bc1efbf682521f7f23c16b8a36b81e9">ilu_zQuerySpace</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *);
+<a name="l00257"></a>00257 
+<a name="l00259"></a>00259 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#cc866ab1cbd2abcb56913ad79af5d0ea" title="Auxiliary routines.">zreadhb</a>(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00260"></a>00260 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#e3c9645c921a407e41fdd5f98c4b1a80">zreadrb</a>(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00261"></a>00261 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#952c154abdfc9bda69b118d25c7e599f">zreadtriple</a>(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00262"></a>00262 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#b2b58eff4de76ae8ea11d3fd1d285f97" title="Convert a row compressed storage into a column compressed storage.">zCompRow_to_CompCol</a>(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a>*, <span class="keywordtype">int</s [...]
+<a name="l00263"></a>00263                                    <a class="code" href="structdoublecomplex.html">doublecomplex</a> **, <span class="keywordtype">int</span> **, <span class="keywordtype">int</span> **);
+<a name="l00264"></a>00264 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#ff0de872dc60f87b89ae93a8f93a7a70" title="Fills a doublecomplex precision array with a given value.">zfill</a> (<a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a>);
+<a name="l00265"></a>00265 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#7b335e97d77b1adf81e383e5bcb58f3e" title="Check the inf-norm of the error vector.">zinf_norm_error</a> (<span class="keywordtype">int</span>, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *);
+<a name="l00266"></a>00266 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#7a41152a5800bc02bef17b56e070d0e6">PrintPerf</a> (<a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="code" href="structmem__usage__t.html">mem_usage_t</a> *,
+<a name="l00267"></a>00267                          <a class="code" href="structdoublecomplex.html">doublecomplex</a>, <a class="code" href="structdoublecomplex.html">doublecomplex</a>, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *, <span class="keywordtype">char</span> *);
+<a name="l00268"></a>00268 <span class="keyword">extern</span> <span class="keywordtype">double</span>  <a class="code" href="qselect_8c.html#55283ff1f5ff561072afe7c8ad6ac218">dqselect</a>(<span class="keywordtype">int</span>, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>);
+<a name="l00269"></a>00269 
+<a name="l00270"></a>00270 
+<a name="l00272"></a>00272 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#03a002c56d260744e0c73d90a28ca92e" title="Routines for debugging.">zPrint_CompCol_Matrix</a>(<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00273"></a>00273 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#fa07de3629132fd900f759166eef6f45">zPrint_SuperNode_Matrix</a>(<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00274"></a>00274 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#4cf22ecc8aa6e20245d071b53f1a71c4">zPrint_Dense_Matrix</a>(<span class="keywordtype">char</span> *, <a class="code" href="structSuperMatrix.html">SuperMatrix</a> *);
+<a name="l00275"></a>00275 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__zdefs_8h.html#3bdc4fd0a2bb9efd731dee5828ad64a9" title="Diagnostic print of column &quot;jcol&quot; in the U/L factor.">zprint_lu_col</a>(<span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <a class="code" href="structGlobalLU__t.html">GlobalLU_t</a> *);
+<a name="l00276"></a>00276 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dutil_8c.html#457e11c8736d30b7da4ee14feb422ed0">print_double_vec</a>(<span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *);
+<a name="l00277"></a>00277 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="slu__cdefs_8h.html#2cfc97393b65ddc5a40fdc523a50003a">check_tempv</a>(<span class="keywordtype">int</span>, <a class="code" href="structdoublecomplex.html">doublecomplex</a> *);
+<a name="l00278"></a>00278 
+<a name="l00279"></a>00279 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00280"></a>00280 <span class="preprocessor"></span>  }
+<a name="l00281"></a>00281 <span class="preprocessor">#endif</span>
+<a name="l00282"></a>00282 <span class="preprocessor"></span>
+<a name="l00283"></a>00283 <span class="preprocessor">#endif </span><span class="comment">/* __SUPERLU_zSP_DEFS */</span>
+<a name="l00284"></a>00284 
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/slu__zdefs_8h.html b/DOC/html/slu__zdefs_8h.html
new file mode 100644
index 0000000..0cd1ff1
--- /dev/null
+++ b/DOC/html/slu__zdefs_8h.html
@@ -0,0 +1,6070 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/slu_zdefs.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/slu_zdefs.h File Reference</h1>Header file for real operations. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <limits.h></code><br>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<code>#include "<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a>"</code><br>
+<code>#include "<a class="el" href="slu__util_8h-source.html">slu_util.h</a>"</code><br>
+<code>#include "<a class="el" href="slu__dcomplex_8h-source.html">slu_dcomplex.h</a>"</code><br>
+
+<p>
+<a href="slu__zdefs_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#f381e217f2aa7e57bcdebfc9e1e7b973">zgssv</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class=" [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver routines.  <a href="#f381e217f2aa7e57bcdebfc9e1e7b973"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#75f04171385eb89527fe10f871b2149a">zgssvx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, int *, char *, double *, double *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#06d5de0123fd4c7a00bcbf0a3944883d">zgsisv</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class= [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#34c7b072bc210f8cfb9d88d0ab20775a">zgsisx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, int *, char *, double *, double *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#7281942aff23b914e0cb23478bf8cf39">zCreate_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int *, int *, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="superma [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related.  <a href="#7281942aff23b914e0cb23478bf8cf39"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#d88d522f3d109c52379fa9c7274f100f">zCreate_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int *, int *, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="superma [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#5d43eba6fc1bbf869b2d696b71a6566c">zCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B.  <a href="#5d43eba6fc1bbf869b2d696b71a6566c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#b9280cf311111348a607e78aa2311e73">zCreate_Dense_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html#798 [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#c64ee6fda439e62b0e0a855cd5a19441">zCreate_SuperNode_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int *, int *, int *, int *, int *, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a c [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#4a51f1cca404f383d725cf6ca2ab1f5b">zCopy_Dense_Matrix</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#8086902aa8be3fc7d04c3c82ec3a79dc">countnz</a> (const int, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Count the total number of nonzeros in factors L and U, and in the symmetrically reduced L.  <a href="#8086902aa8be3fc7d04c3c82ec3a79dc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ae8eb367a0a2fcdf734738bc9630df85">ilu_countnz</a> (const int, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Count the total number of nonzeros in factors L and U.  <a href="#ae8eb367a0a2fcdf734738bc9630df85"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#7061332d759d7e4d73c1b2e5cb0bf2bf">fixupL</a> (const int, const int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fix up the data storage lsub for L-subscripts. It removes the subscript sets for structural pruning, and applies permuation to the remaining subscripts.  <a href="#7061332d759d7e4d73c1b2e5cb0bf2bf"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#2643ac77912d9f351f7294677bbe05f2">zallocateA</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **, int **, int **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A.  <a href="#2643ac77912d9f351f7294677bbe05f2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">zgstrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int *, void *, int, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#f0e16dd7be5f8beaf0e445562995de49">zsnode_dfs</a> (const int, const int, const int *, const int *, const int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#f416483e20a4ec79bf0d04d6e55c585b">zsnode_bmod</a> (const int, const int, const int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLUSt [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode.  <a href="#f416483e20a4ec79bf0d04d6e55c585b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ddc01b7cd28e5566177c284480a680f3">zpanel_dfs</a> (const int, const int, const int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a>  [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#58b397fc5660a6a0638f2aba584abf64">zpanel_bmod</a> (const int, const int, const int, const int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSupe [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#b7a8371a03a4cd272a5cb05d1fd7d8ae">zcolumn_dfs</a> (const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#49aac39da44afbad110705d4a7f9f862">zcolumn_bmod</a> (const int, const int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int *, int *, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t.html"> [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#01e6dfda172d9c30fe038497a10d25fa">zcopy_to_ucol</a> (int, int, int *, int *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#dce57d338c03a6432064f295023ba976">zpivotL</a> (const int, const double, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#8a368adca5d498e86910b5371de3131d">zpruneL</a> (const int, const int *, const int, const int, const int *, const int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#cd4ff4683d71e444e948fbcacb23e803">zreadmt</a> (int *, int *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **, int **, int **)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#bf8c836a49482c27abdc046ec7c726cb">zGenXtrue</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#856d8820ae8cf7ccf6ca662bc680de26">zFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperM [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's.  <a href="#856d8820ae8cf7ccf6ca662bc680de26"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#1b74304cd437572bbec487bc29422a90">zgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMat [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#2fee39459dfac17529487ea539648cfb">zgsitrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, int *, void *, int, int *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.htm [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#231c25a6f73e928d43ee8f3f4f291844">zldperm</a> (int, int, int, int[], int[], <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int[], double[], double[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#973a22230ce47cdca6dc0d509b246f5b">ilu_zsnode_dfs</a> (const int, const int, const int *, const int *, const int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#c3883f7039a1c9b1349452d22a972396">ilu_zpanel_dfs</a> (const int, const int, const int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, double *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#fc18a3d9096f5d951d28cb6933077233">ilu_zcolumn_dfs</a> (const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#09d54c3f2ea8ecc5e74170c38771ab46">ilu_zcopy_to_ucol</a> (int, int, int *, int *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, double, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *,  [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#b9679d0b020666979ae1686461e26ae2">ilu_zpivotL</a> (const int, const double, int *, int *, int, int *, int *, int *, int *, double, <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, <a class="el" href="structdoublecomplex.html">doublecomplex</a>, <a class="el" href="structGlobalLU__t.html"> [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#94d5ac6f75873f62e1bef9c521534d43">ilu_zdrop_row</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *, int, int, double, int, int *, double *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, double *, double *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#e112ddfff2798b7e4c090d96d2a8d80a">zgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double *, double *, double *, double *, double *, int *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver related.  <a href="#e112ddfff2798b7e4c090d96d2a8d80a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a7f8e784fe805303d413a3dc684aa8a5">zlaqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double *, double *, double, double, double, char *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#42c7a1b7c813c330cd5a60852a592395">zgscon</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double, double *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#87aab883e88a4ee7f6e19b7d9d5f690c">zPivotGrowth</a> (int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#7675aa04369725f7f65c74249388f5a5">zgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#4f8e25c2e20af0219ad6719db052f3d7">sp_ztrsv</a> (char *, char *, char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *, int [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b.  <a href="#4f8e25c2e20af0219ad6719db052f3d7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#295a004dbce1f1b0aa48e7cb319da461">sp_zgemv</a> (char *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a>, <a class="el" h [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y.  <a href="#295a004dbce1f1b0aa48e7cb319da461"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#723eb34b4ba347bbaa753c5d66cca4ab">sp_zgemm</a> (char *, char *, int, int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int, <a class="el" href="structdoublecomplex.html">doublecompl [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#177ab9599e432642729507475d5cea83">dlamch_</a> (char *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#0c3bf2c88bdda13cede034c6e9a407e5">zLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a>, void *, int, int, int, int, int, double, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="str [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Memory-related.  <a href="#0c3bf2c88bdda13cede034c6e9a407e5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a4e2012fe2ee4c2d1cd2a261bdb0455b">zSetRWork</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays.  <a href="#a4e2012fe2ee4c2d1cd2a261bdb0455b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#572914748b4f1aa544a61477095e7fe5">zLUWorkFree</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines.  <a href="#572914748b4f1aa544a61477095e7fe5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#399a28849bd52ce90c1cbc8e4cd85046">zLUMemXpand</a> (int, int, <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a>, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization.  <a href="#399a28849bd52ce90c1cbc8e4cd85046"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#e33b5268048e570c0cdf96498198e821">doublecomplexMalloc</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#b7683ac1617339478753ab308a7b0fc5">doublecomplexCalloc</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#47c4cf79f8c6305147a70de6da2696ac">doubleMalloc</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#2b7be732f4d725dd35799d772473625e">doubleCalloc</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#5987692fb793ccc6122ff861261f1ca2">zmemory_usage</a> (const int, const int, const int, const int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#711303a4bc043eb0b1bff72b32d52397">zQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#5bc1efbf682521f7f23c16b8a36b81e9">ilu_zQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#cc866ab1cbd2abcb56913ad79af5d0ea">zreadhb</a> (int *, int *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **, int **, int **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines.  <a href="#cc866ab1cbd2abcb56913ad79af5d0ea"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#e3c9645c921a407e41fdd5f98c4b1a80">zreadrb</a> (int *, int *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **, int **, int **)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#952c154abdfc9bda69b118d25c7e599f">zreadtriple</a> (int *, int *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **, int **, int **)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#b2b58eff4de76ae8ea11d3fd1d285f97">zCompRow_to_CompCol</a> (int, int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **, int **, int **)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage.  <a href="#b2b58eff4de76ae8ea11d3fd1d285f97"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ff0de872dc60f87b89ae93a8f93a7a70">zfill</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fills a <a class="el" href="structdoublecomplex.html">doublecomplex</a> precision array with a given value.  <a href="#ff0de872dc60f87b89ae93a8f93a7a70"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#7b335e97d77b1adf81e383e5bcb58f3e">zinf_norm_error</a> (int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector.  <a href="#7b335e97d77b1adf81e383e5bcb58f3e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#e8ef28d59bc98423cc4e69465edfd736">PrintPerf</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>, <a class="el" href="structdoub [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#293d5d2ac72e4e528ee06d634cb6b59a">dqselect</a> (int, double *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#03a002c56d260744e0c73d90a28ca92e">zPrint_CompCol_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging.  <a href="#03a002c56d260744e0c73d90a28ca92e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#fa07de3629132fd900f759166eef6f45">zPrint_SuperNode_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#4cf22ecc8aa6e20245d071b53f1a71c4">zPrint_Dense_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#3bdc4fd0a2bb9efd731dee5828ad64a9">zprint_lu_col</a> (char *, int, int, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor.  <a href="#3bdc4fd0a2bb9efd731dee5828ad64a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ad0c06e9adc1e29a0ab2e78c38119bb4">print_double_vec</a> (char *, int, double *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#821f68442e6f5db3ec997699120a2215">check_tempv</a> (int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre> 
+ -- SuperLU routine (version 4.1) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November, 2010</pre><p>
+<pre> Global data structures used in LU factorization -</pre><p>
+<pre>   nsuper: supernodes = nsuper + 1, numbered [0, nsuper].
+   (xsup,supno): supno[i] is the supernode no to which i belongs;
+	xsup(s) points to the beginning of the s-th supernode.
+	e.g.   supno 0 1 2 2 3 3 3 4 4 4 4 4   (n=12)
+	        xsup 0 1 2 4 7 12
+	Note: dfs will be performed on supernode rep. relative to the new 
+	      row pivoting ordering</pre><p>
+<pre>   (xlsub,lsub): lsub[*] contains the compressed subscript of
+	rectangular supernodes; xlsub[j] points to the starting
+	location of the j-th column in lsub[*]. Note that xlsub 
+	is indexed by column.
+	Storage: original row subscripts</pre><p>
+<pre>      During the course of sparse LU factorization, we also use
+	(xlsub,lsub) for the purpose of symmetric pruning. For each
+	supernode {s,s+1,...,t=s+r} with first column s and last
+	column t, the subscript set
+		lsub[j], j=xlsub[s], .., xlsub[s+1]-1
+	is the structure of column s (i.e. structure of this supernode).
+	It is used for the storage of numerical values.
+	Furthermore,
+		lsub[j], j=xlsub[t], .., xlsub[t+1]-1
+	is the structure of the last column t of this supernode.
+	It is for the purpose of symmetric pruning. Therefore, the
+	structural subscripts can be rearranged without making physical
+	interchanges among the numerical values.</pre><p>
+<pre>	However, if the supernode has only one column, then we
+	only keep one set of subscripts. For any subscript interchange
+	performed, similar interchange must be done on the numerical
+	values.</pre><p>
+<pre>	The last column structures (for pruning) will be removed
+	after the numercial LU factorization phase.</pre><p>
+<pre>   (xlusup,lusup): lusup[*] contains the numerical values of the
+	rectangular supernodes; xlusup[j] points to the starting
+	location of the j-th column in storage vector lusup[*]
+	Note: xlusup is indexed by column.
+	Each rectangular supernode is stored by column-major
+	scheme, consistent with Fortran 2-dim array storage.</pre><p>
+<pre>   (xusub,ucol,usub): ucol[*] stores the numerical values of
+	U-columns outside the rectangular supernodes. The row
+	subscript of nonzero ucol[k] is stored in usub[k].
+	xusub[i] points to the starting location of column i in ucol.
+	Storage: new row subscripts; that is subscripts of PA.
+ </pre> <hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="b6fd6105e64ed14a0c9281326f05e623"></a><!-- doxytag: member="slu_zdefs.h::int_t" ref="b6fd6105e64ed14a0c9281326f05e623" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef int <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="821f68442e6f5db3ec997699120a2215"></a><!-- doxytag: member="slu_zdefs.h::check_tempv" ref="821f68442e6f5db3ec997699120a2215" args="(int, doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void check_tempv           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8086902aa8be3fc7d04c3c82ec3a79dc"></a><!-- doxytag: member="slu_zdefs.h::countnz" ref="8086902aa8be3fc7d04c3c82ec3a79dc" args="(const int, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void countnz           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="177ab9599e432642729507475d5cea83"></a><!-- doxytag: member="slu_zdefs.h::dlamch_" ref="177ab9599e432642729507475d5cea83" args="(char *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dlamch_           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>cmach</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    DLAMCH determines double precision machine parameters.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    CMACH   (input) CHARACTER*1   
+            Specifies the value to be returned by DLAMCH:   
+            = 'E' or 'e',   DLAMCH := eps   
+            = 'S' or 's ,   DLAMCH := sfmin   
+            = 'B' or 'b',   DLAMCH := base   
+            = 'P' or 'p',   DLAMCH := eps*base   
+            = 'N' or 'n',   DLAMCH := t   
+            = 'R' or 'r',   DLAMCH := rnd   
+            = 'M' or 'm',   DLAMCH := emin   
+            = 'U' or 'u',   DLAMCH := rmin   
+            = 'L' or 'l',   DLAMCH := emax   
+            = 'O' or 'o',   DLAMCH := rmax</pre><p>
+<pre>            where</pre><p>
+<pre>            eps   = relative machine precision   
+            sfmin = safe minimum, such that 1/sfmin does not overflow   
+            base  = base of the machine   
+            prec  = eps*base   
+            t     = number of (base) digits in the mantissa   
+            rnd   = 1.0 when rounding occurs in addition, 0.0 otherwise   
+            emin  = minimum exponent before (gradual) underflow   
+            rmin  = underflow threshold - base**(emin-1)   
+            emax  = largest exponent before overflow   
+            rmax  = overflow threshold  - (base**emax)*(1-eps)</pre><p>
+<pre>   ===================================================================== 
+</pre> 
+</div>
+</div><p>
+<a class="anchor" name="2b7be732f4d725dd35799d772473625e"></a><!-- doxytag: member="slu_zdefs.h::doubleCalloc" ref="2b7be732f4d725dd35799d772473625e" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* doubleCalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b7683ac1617339478753ab308a7b0fc5"></a><!-- doxytag: member="slu_zdefs.h::doublecomplexCalloc" ref="b7683ac1617339478753ab308a7b0fc5" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structdoublecomplex.html">doublecomplex</a>* doublecomplexCalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e33b5268048e570c0cdf96498198e821"></a><!-- doxytag: member="slu_zdefs.h::doublecomplexMalloc" ref="e33b5268048e570c0cdf96498198e821" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structdoublecomplex.html">doublecomplex</a>* doublecomplexMalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="47c4cf79f8c6305147a70de6da2696ac"></a><!-- doxytag: member="slu_zdefs.h::doubleMalloc" ref="47c4cf79f8c6305147a70de6da2696ac" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* doubleMalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="293d5d2ac72e4e528ee06d634cb6b59a"></a><!-- doxytag: member="slu_zdefs.h::dqselect" ref="293d5d2ac72e4e528ee06d634cb6b59a" args="(int, double *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dqselect           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7061332d759d7e4d73c1b2e5cb0bf2bf"></a><!-- doxytag: member="slu_zdefs.h::fixupL" ref="7061332d759d7e4d73c1b2e5cb0bf2bf" args="(const int, const int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fixupL           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ae8eb367a0a2fcdf734738bc9630df85"></a><!-- doxytag: member="slu_zdefs.h::ilu_countnz" ref="ae8eb367a0a2fcdf734738bc9630df85" args="(const int, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_countnz           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fc18a3d9096f5d951d28cb6933077233"></a><!-- doxytag: member="slu_zdefs.h::ilu_zcolumn_dfs" ref="fc18a3d9096f5d951d28cb6933077233" args="(const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_zcolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   ILU_ZCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="09d54c3f2ea8ecc5e74170c38771ab46"></a><!-- doxytag: member="slu_zdefs.h::ilu_zcopy_to_ucol" ref="09d54c3f2ea8ecc5e74170c38771ab46" args="(int, int, int *, int *, int *, doublecomplex *, int, milu_t, double, int, doublecomplex *, int *, GlobalLU_t *, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_zcopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="94d5ac6f75873f62e1bef9c521534d43"></a><!-- doxytag: member="slu_zdefs.h::ilu_zdrop_row" ref="94d5ac6f75873f62e1bef9c521534d43" args="(superlu_options_t *, int, int, double, int, int *, double *, GlobalLU_t *, double *, double *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_zdrop_row           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c3883f7039a1c9b1349452d22a972396"></a><!-- doxytag: member="slu_zdefs.h::ilu_zpanel_dfs" ref="c3883f7039a1c9b1349452d22a972396" args="(const int, const int, const int, SuperMatrix *, int *, int *, doublecomplex *, double *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_zpanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel.
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="b9679d0b020666979ae1686461e26ae2"></a><!-- doxytag: member="slu_zdefs.h::ilu_zpivotL" ref="b9679d0b020666979ae1686461e26ae2" args="(const int, const double, int *, int *, int, int *, int *, int *, int *, double, milu_t, doublecomplex, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_zpivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>diagind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>swap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iswap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>fill_tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td>
+          <td class="paramname"> <em>milu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>drop_sum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+	     pivot row = k;
+	 ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+	     pivot row = j;
+	 ELSE
+	     pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0	  success;
+		   i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="5bc1efbf682521f7f23c16b8a36b81e9"></a><!-- doxytag: member="slu_zdefs.h::ilu_zQuerySpace" ref="5bc1efbf682521f7f23c16b8a36b81e9" args="(SuperMatrix *, SuperMatrix *, mem_usage_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_zQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="973a22230ce47cdca6dc0d509b246f5b"></a><!-- doxytag: member="slu_zdefs.h::ilu_zsnode_dfs" ref="973a22230ce47cdca6dc0d509b246f5b" args="(const int, const int, const int *, const int *, const int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_zsnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="ilu__zsnode__dfs_8c.html#6fa78a3059d75e11a66434992dddafab">ilu_zsnode_dfs()</a> - Determine the union of the row structures of those
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore,
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="ad0c06e9adc1e29a0ab2e78c38119bb4"></a><!-- doxytag: member="slu_zdefs.h::print_double_vec" ref="ad0c06e9adc1e29a0ab2e78c38119bb4" args="(char *, int, double *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int print_double_vec           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e8ef28d59bc98423cc4e69465edfd736"></a><!-- doxytag: member="slu_zdefs.h::PrintPerf" ref="e8ef28d59bc98423cc4e69465edfd736" args="(SuperMatrix *, SuperMatrix *, mem_usage_t *, doublecomplex, doublecomplex, doublecomplex *, doublecomplex *, char *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PrintPerf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="723eb34b4ba347bbaa753c5d66cca4ab"></a><!-- doxytag: member="slu_zdefs.h::sp_zgemm" ref="723eb34b4ba347bbaa753c5d66cca4ab" args="(char *, char *, int, int, int, doublecomplex, SuperMatrix *, doublecomplex *, int, doublecomplex, doublecomplex *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_zgemm           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transa</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   sp_z performs one of the matrix-matrix operations</pre><p>
+<pre>      C := alpha*op( A )*op( B ) + beta*C,</pre><p>
+<pre>   where  op( X ) is one of</pre><p>
+<pre>      op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),</pre><p>
+<pre>   alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
+   an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANSA - (input) char*
+            On entry, TRANSA specifies the form of op( A ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSA = 'N' or 'n',  op( A ) = A.   
+               TRANSA = 'T' or 't',  op( A ) = A'.   
+               TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
+            Unchanged on exit.</pre><p>
+<pre>   TRANSB - (input) char*
+            On entry, TRANSB specifies the form of op( B ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSB = 'N' or 'n',  op( B ) = B.   
+               TRANSB = 'T' or 't',  op( B ) = B'.   
+               TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
+            Unchanged on exit.</pre><p>
+<pre>   M      - (input) int   
+            On entry,  M  specifies  the number of rows of the matrix 
+	     op( A ) and of the matrix C.  M must be at least zero. 
+	     Unchanged on exit.</pre><p>
+<pre>   N      - (input) int
+            On entry,  N specifies the number of columns of the matrix 
+	     op( B ) and the number of columns of the matrix C. N must be 
+	     at least zero.
+	     Unchanged on exit.</pre><p>
+<pre>   K      - (input) int
+            On entry, K specifies the number of columns of the matrix 
+	     op( A ) and the number of rows of the matrix op( B ). K must 
+	     be at least  zero.   
+           Unchanged on exit.</pre><p>
+<pre>   ALPHA  - (input) <a class="el" href="structdoublecomplex.html">doublecomplex</a>
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+            Currently, the type of A can be:
+                Stype = NC or NCP; Dtype = SLU_Z; Mtype = GE. 
+            In the future, more general A can be handled.</pre><p>
+<pre>   B      - DOUBLE COMPLEX PRECISION array of DIMENSION ( LDB, kb ), where kb is 
+            n when TRANSB = 'N' or 'n',  and is  k otherwise.   
+            Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
+            part of the array B must contain the matrix B, otherwise 
+            the leading n by k part of the array B must contain the 
+            matrix B.   
+            Unchanged on exit.</pre><p>
+<pre>   LDB    - (input) int
+            On entry, LDB specifies the first dimension of B as declared 
+            in the calling (sub) program. LDB must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max( 1, n )</a>.  
+            Unchanged on exit.</pre><p>
+<pre>   BETA   - (input) <a class="el" href="structdoublecomplex.html">doublecomplex</a>
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then C need not be set on input.</pre><p>
+<pre>   C      - DOUBLE COMPLEX PRECISION array of DIMENSION ( LDC, n ).   
+            Before entry, the leading m by n part of the array C must 
+            contain the matrix C,  except when beta is zero, in which 
+            case C need not be set on entry.   
+            On exit, the array C is overwritten by the m by n matrix 
+	     ( alpha*op( A )*B + beta*C ).</pre><p>
+<pre>   LDC    - (input) int
+            On entry, LDC specifies the first dimension of C as declared 
+            in the calling (sub)program. LDC must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max(1,m)</a>.   
+            Unchanged on exit.</pre><p>
+<pre>   ==== Sparse Level 3 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="295a004dbce1f1b0aa48e7cb319da461"></a><!-- doxytag: member="slu_zdefs.h::sp_zgemv" ref="295a004dbce1f1b0aa48e7cb319da461" args="(char *, doublecomplex, SuperMatrix *, doublecomplex *, int, doublecomplex, doublecomplex *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_zgemv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incy</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>  
+   Purpose   
+   =======</pre><p>
+<pre>   <a class="el" href="slu__zdefs_8h.html#295a004dbce1f1b0aa48e7cb319da461" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x...">sp_zgemv()</a>  performs one of the matrix-vector operations   
+      y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
+   where alpha and beta are scalars, x and y are vectors and A is a
+   sparse A->nrow by A->ncol matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANS  - (input) char*
+            On entry, TRANS specifies the operation to be performed as   
+            follows:   
+               TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
+               TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
+               TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.</pre><p>
+<pre>   ALPHA  - (input) <a class="el" href="structdoublecomplex.html">doublecomplex</a>
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Before entry, the leading m by n part of the array A must   
+            contain the matrix of coefficients.</pre><p>
+<pre>   X      - (input) doublecomplex*, array of DIMENSION at least   
+            ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
+           and at least   
+            ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
+            Before entry, the incremented array X must contain the   
+            vector x.</pre><p>
+<pre>   INCX   - (input) int
+            On entry, INCX specifies the increment for the elements of   
+            X. INCX must not be zero.</pre><p>
+<pre>   BETA   - (input) <a class="el" href="structdoublecomplex.html">doublecomplex</a>
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then Y need not be set on input.</pre><p>
+<pre>   Y      - (output) doublecomplex*,  array of DIMENSION at least   
+            ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
+            and at least   
+            ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
+            Before entry with BETA non-zero, the incremented array Y   
+            must contain the vector y. On exit, Y is overwritten by the 
+            updated vector y.</pre><p>
+<pre>   INCY   - (input) int
+            On entry, INCY specifies the increment for the elements of   
+            Y. INCY must not be zero.</pre><p>
+<pre>    ==== Sparse Level 2 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="4f8e25c2e20af0219ad6719db052f3d7"></a><!-- doxytag: member="slu_zdefs.h::sp_ztrsv" ref="4f8e25c2e20af0219ad6719db052f3d7" args="(char *, char *, char *, SuperMatrix *, SuperMatrix *, doublecomplex *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_ztrsv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>uplo</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>diag</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose
+   =======</pre><p>
+<pre>   <a class="el" href="slu__zdefs_8h.html#4f8e25c2e20af0219ad6719db052f3d7" title="Solves one of the systems of equations A*x = b, or A'*x = b.">sp_ztrsv()</a> solves one of the systems of equations   
+       A*x = b,   or   A'*x = b,
+   where b and x are n element vectors and A is a sparse unit , or   
+   non-unit, upper or lower triangular matrix.   
+   No test for singularity or near-singularity is included in this   
+   routine. Such tests must be performed before calling this routine.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   uplo   - (input) char*
+            On entry, uplo specifies whether the matrix is an upper or   
+             lower triangular matrix as follows:   
+                uplo = 'U' or 'u'   A is an upper triangular matrix.   
+                uplo = 'L' or 'l'   A is a lower triangular matrix.</pre><p>
+<pre>   trans  - (input) char*
+             On entry, trans specifies the equations to be solved as   
+             follows:   
+                trans = 'N' or 'n'   A*x = b.   
+                trans = 'T' or 't'   A'*x = b.
+                trans = 'C' or 'c'   A^H*x = b.</pre><p>
+<pre>   diag   - (input) char*
+             On entry, diag specifies whether or not A is unit   
+             triangular as follows:   
+                diag = 'U' or 'u'   A is assumed to be unit triangular.   
+                diag = 'N' or 'n'   A is not assumed to be unit   
+                                    triangular.</pre><p>
+<pre>   L       - (input) SuperMatrix*
+	       The factor L from the factorization Pr*A*Pc=L*U. Use
+             compressed row subscripts storage for supernodes,
+             i.e., L has types: Stype = SC, Dtype = SLU_Z, Mtype = TRLU.</pre><p>
+<pre>   U       - (input) SuperMatrix*
+	        The factor U from the factorization Pr*A*Pc=L*U.
+	        U has types: Stype = NC, Dtype = SLU_Z, Mtype = TRU.</pre><p>
+<pre>   x       - (input/output) doublecomplex*
+             Before entry, the incremented array X must contain the n   
+             element right-hand side vector b. On exit, X is overwritten 
+             with the solution vector x.</pre><p>
+<pre>   info    - (output) int*
+             If *info = -i, the i-th argument had an illegal value.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="2643ac77912d9f351f7294677bbe05f2"></a><!-- doxytag: member="slu_zdefs.h::zallocateA" ref="2643ac77912d9f351f7294677bbe05f2" args="(int, int, doublecomplex **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zallocateA           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="49aac39da44afbad110705d4a7f9f862"></a><!-- doxytag: member="slu_zdefs.h::zcolumn_bmod" ref="49aac39da44afbad110705d4a7f9f862" args="(const int, const int, doublecomplex *, doublecomplex *, int *, int *, int, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zcolumn_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>fpanelc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose:
+ ========
+ Performs numeric block updates (sup-col) in topological order.
+ It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ Special processing on the supernodal portion of L[*,j]
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="b7a8371a03a4cd272a5cb05d1fd7d8ae"></a><!-- doxytag: member="slu_zdefs.h::zcolumn_dfs" ref="b7a8371a03a4cd272a5cb05d1fd7d8ae" args="(const int, const int, int *, int *, int *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zcolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   ZCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS 
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal 
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="b2b58eff4de76ae8ea11d3fd1d285f97"></a><!-- doxytag: member="slu_zdefs.h::zCompRow_to_CompCol" ref="b2b58eff4de76ae8ea11d3fd1d285f97" args="(int, int, int, doublecomplex *, int *, int *, doublecomplex **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zCompRow_to_CompCol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5d43eba6fc1bbf869b2d696b71a6566c"></a><!-- doxytag: member="slu_zdefs.h::zCopy_CompCol_Matrix" ref="5d43eba6fc1bbf869b2d696b71a6566c" args="(SuperMatrix *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zCopy_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4a51f1cca404f383d725cf6ca2ab1f5b"></a><!-- doxytag: member="slu_zdefs.h::zCopy_Dense_Matrix" ref="4a51f1cca404f383d725cf6ca2ab1f5b" args="(int, int, doublecomplex *, int, doublecomplex *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zCopy_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Copies a two-dimensional matrix X to another matrix Y. 
+</div>
+</div><p>
+<a class="anchor" name="01e6dfda172d9c30fe038497a10d25fa"></a><!-- doxytag: member="slu_zdefs.h::zcopy_to_ucol" ref="01e6dfda172d9c30fe038497a10d25fa" args="(int, int, int *, int *, int *, doublecomplex *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zcopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7281942aff23b914e0cb23478bf8cf39"></a><!-- doxytag: member="slu_zdefs.h::zCreate_CompCol_Matrix" ref="7281942aff23b914e0cb23478bf8cf39" args="(SuperMatrix *, int, int, int, doublecomplex *, int *, int *, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zCreate_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d88d522f3d109c52379fa9c7274f100f"></a><!-- doxytag: member="slu_zdefs.h::zCreate_CompRow_Matrix" ref="d88d522f3d109c52379fa9c7274f100f" args="(SuperMatrix *, int, int, int, doublecomplex *, int *, int *, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zCreate_CompRow_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b9280cf311111348a607e78aa2311e73"></a><!-- doxytag: member="slu_zdefs.h::zCreate_Dense_Matrix" ref="b9280cf311111348a607e78aa2311e73" args="(SuperMatrix *, int, int, doublecomplex *, int, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zCreate_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c64ee6fda439e62b0e0a855cd5a19441"></a><!-- doxytag: member="slu_zdefs.h::zCreate_SuperNode_Matrix" ref="c64ee6fda439e62b0e0a855cd5a19441" args="(SuperMatrix *, int, int, int, doublecomplex *, int *, int *, int *, int *, int *, Stype_t, Dtype_t, Mtype_t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zCreate_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ff0de872dc60f87b89ae93a8f93a7a70"></a><!-- doxytag: member="slu_zdefs.h::zfill" ref="ff0de872dc60f87b89ae93a8f93a7a70" args="(doublecomplex *, int, doublecomplex)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zfill           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="856d8820ae8cf7ccf6ca662bc680de26"></a><!-- doxytag: member="slu_zdefs.h::zFillRHS" ref="856d8820ae8cf7ccf6ca662bc680de26" args="(trans_t, int, doublecomplex *, int, SuperMatrix *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zFillRHS           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="bf8c836a49482c27abdc046ec7c726cb"></a><!-- doxytag: member="slu_zdefs.h::zGenXtrue" ref="bf8c836a49482c27abdc046ec7c726cb" args="(int, int, doublecomplex *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zGenXtrue           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="42c7a1b7c813c330cd5a60852a592395"></a><!-- doxytag: member="slu_zdefs.h::zgscon" ref="42c7a1b7c813c330cd5a60852a592395" args="(char *, SuperMatrix *, SuperMatrix *, double, double *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgscon           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>norm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>anorm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   ZGSCON estimates the reciprocal of the condition number of a general 
+   real matrix A, in either the 1-norm or the infinity-norm, using   
+   the LU factorization computed by ZGETRF.   *</pre><p>
+<pre>   An estimate is obtained for norm(inv(A)), and the reciprocal of the   
+   condition number is computed as   
+      RCOND = 1 / ( norm(A) * norm(inv(A)) ).</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>    NORM    (input) char*
+            Specifies whether the 1-norm condition number or the   
+            infinity-norm condition number is required:   
+            = '1' or 'O':  1-norm;   
+            = 'I':         Infinity-norm.</pre><p>
+<pre>    L       (input) SuperMatrix*
+            The factor L from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">zgstrf()</a>. Use compressed row subscripts storage for supernodes,
+            i.e., L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre>    U       (input) SuperMatrix*
+            The factor U from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">zgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+            Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre>    ANORM   (input) double
+            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
+            If NORM = 'I', the infinity-norm of the original matrix A.</pre><p>
+<pre>    RCOND   (output) double*
+           The reciprocal of the condition number of the matrix A,   
+           computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><p>
+<pre>    INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="e112ddfff2798b7e4c090d96d2a8d80a"></a><!-- doxytag: member="slu_zdefs.h::zgsequ" ref="e112ddfff2798b7e4c090d96d2a8d80a" args="(SuperMatrix *, double *, double *, double *, double *, double *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgsequ           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   ZGSEQU computes row and column scalings intended to equilibrate an   
+   M-by-N sparse matrix A and reduce its condition number. R returns the row
+   scale factors and C the column scale factors, chosen to try to make   
+   the largest element in each row and column of the matrix B with   
+   elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.</pre><p>
+<pre>   R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
+   number and BIGNUM = largest safe number.  Use of these scaling   
+   factors is not guaranteed to reduce the condition number of A but   
+   works well in practice.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The matrix of dimension (A->nrow, A->ncol) whose equilibration
+           factors are to be computed. The type of A can be:
+           Stype = SLU_NC; Dtype = SLU_Z; Mtype = SLU_GE.</pre><p>
+<pre>   R       (output) double*, size A->nrow
+           If INFO = 0 or INFO > M, R contains the row scale factors   
+           for A.</pre><p>
+<pre>   C       (output) double*, size A->ncol
+           If INFO = 0,  C contains the column scale factors for A.</pre><p>
+<pre>   ROWCND  (output) double*
+           If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
+           smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
+           AMAX is neither too large nor too small, it is not worth   
+           scaling by R.</pre><p>
+<pre>   COLCND  (output) double*
+           If INFO = 0, COLCND contains the ratio of the smallest   
+           C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
+           worth scaling by C.</pre><p>
+<pre>   AMAX    (output) double*
+           Absolute value of largest matrix element.  If AMAX is very   
+           close to overflow or very close to underflow, the matrix   
+           should be scaled.</pre><p>
+<pre>   INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value   
+           > 0:  if INFO = i,  and i is   
+                 <= A->nrow:  the i-th row of A is exactly zero   
+                 >  A->ncol:  the (i-M)-th column of A is exactly zero</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="06d5de0123fd4c7a00bcbf0a3944883d"></a><!-- doxytag: member="slu_zdefs.h::zgsisv" ref="06d5de0123fd4c7a00bcbf0a3944883d" args="(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgsisv           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="34c7b072bc210f8cfb9d88d0ab20775a"></a><!-- doxytag: member="slu_zdefs.h::zgsisx" ref="34c7b072bc210f8cfb9d88d0ab20775a" args="(superlu_options_t *, SuperMatrix *, int *, int *, int *, char *, double *, double *, SuperMatrix *, SuperMatrix *, void *, int, SuperMatrix *, SuperMatrix *, double *, double *, mem_usage_t *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgsisx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> ZGSISX computes an approximate solutions of linear equations
+ A*X=B or A'*X=B, using the ILU factorization from <a class="el" href="slu__zdefs_8h.html#2fee39459dfac17529487ea539648cfb">zgsitrf()</a>.
+ An estimation of the condition number is provided. 
+ The routine performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A is
+	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+	     = TRANS or CONJ).</pre><p>
+<pre>	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+	     matrix that usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the matrix A (after equilibration if options->Equil = YES)
+	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>	1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+	     and info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	1.6. The system of equations is solved for X using the factored form
+	     of A.</pre><p>
+<pre>	1.7. options->IterRefine is not used</pre><p>
+<pre>	1.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>	1.9. options for ILU only
+	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+		entries of modulus 1 on the diagonal and off-diagonal entries
+		of modulus at most 1. If MC64 fails, <a class="el" href="dgsequ_8c.html#af22b247cc134fb0ba90285e84ccebb4" title="Driver related.">dgsequ()</a> is used to
+		equilibrate the system.
+              ( Default: LargeDiag )
+	     2) options->ILU_DropTol = tau is the threshold for dropping.
+		For L, it is used directly (for the whole row in a supernode);
+		For U, ||A(:,i)||_oo * tau is used as the threshold
+	        for the	i-th column.
+		If a secondary dropping rule is required, tau will
+	        also be used to compute the second threshold.
+              ( Default: 1e-4 )
+	     3) options->ILU_FillFactor = gamma, used as the initial guess
+		of memory growth.
+		If a secondary dropping rule is required, it will also
+              be used as an upper bound of the memory.
+              ( Default: 10 )
+	     4) options->ILU_DropRule specifies the dropping rule.
+		Option	      Meaning
+		======	      ===========
+		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+			      p = gamma * nnz(A(:,j)).
+		DROP_AREA:    Variation of ILUTP, for j-th column, use
+			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+			      Otherwise
+				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+			      tau_U(j) uses the similar rule.
+			      NOTE: the thresholds used by L and U are separate.
+		DROP_INTERP:  Compute the second dropping threshold by
+			      interpolation instead of sorting (default).
+			      In this case, the actual fill ratio is not
+			      guaranteed smaller than gamma.
+		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+		( Default: DROP_BASIC | DROP_AREA )
+	     5) options->ILU_Norm is the criterion of measuring the magnitude
+		of a row in a supernode of L. ( Default is INF_NORM )
+		options->ILU_Norm	RowSize(x[1:n])
+		=================	===============
+		ONE_NORM		||x||_1 / n
+		TWO_NORM		||x||_2 / sqrt(n)
+		INF_NORM		max{|x[i]|}
+	     6) options->ILU_MILU specifies the type of MILU's variation.
+		= SILU: do not perform Modified ILU;
+		= SMILU_1 (not recommended):
+		    U(i,i) := U(i,i) + sum(dropped entries);
+		= SMILU_2:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+		= SMILU_3:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+		NOTE: Even SMILU_1 does not preserve the column sum because of
+		late dropping.
+              ( Default: SILU )
+	     7) options->ILU_FillTol is used as the perturbation when
+		encountering zero pivots. If some U(i,i) = 0, so that U is
+		exactly singular, then
+		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+              ( Default: 1e-2 )</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+	to the transpose of A:</pre><p>
+<pre>	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A' is
+	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>	2.2. Permute columns of transpose(A) (rows of A),
+	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+	     usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the transpose(A) (after equilibration if
+	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+	     permutation Pr determined by partial pivoting.</pre><p>
+<pre>	2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+	     And info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	2.6. The system of equations is solved for X using the factored form
+	     of transpose(A).</pre><p>
+<pre>	2.7. If options->IterRefine is not used.</pre><p>
+<pre>	2.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the LU decomposition will be performed and how the
+	   system will be solved.</pre><p>
+<pre> A	   (input/output) SuperMatrix*
+	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+	   of the linear equations is A->nrow. Currently, the type of A can be:
+	   Stype = SLU_NC or SLU_NR, Dtype = SLU_Z, Mtype = SLU_GE.
+	   In the future, more general A may be handled.</pre><p>
+<pre>	   On entry, If options->Fact = FACTORED and equed is not 'N',
+	   then A must have been equilibrated by the scaling factors in
+	   R and/or C.
+	   On exit, A is not modified
+         if options->Equil = NO, or
+         if options->Equil = YES but equed = 'N' on exit, or
+         if options->RowPerm = NO.</pre><p>
+<pre>	   Otherwise, if options->Equil = YES and equed is not 'N',
+	   A is scaled as follows:
+	   If A->Stype = SLU_NC:
+	     equed = 'R':  A := diag(R) * A
+	     equed = 'C':  A := A * diag(C)
+	     equed = 'B':  A := diag(R) * A * diag(C).
+	   If A->Stype = SLU_NR:
+	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre>         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+            the matrix to an I-matrix, that is A is modified as follows:
+            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+            off-diagonal entries of modulus at most 1. P is a permutation
+            obtained from MC64.
+            If MC64 fails, <a class="el" href="slu__zdefs_8h.html#e112ddfff2798b7e4c090d96d2a8d80a" title="Driver related.">zgsequ()</a> is used to equilibrate the system,
+            and A is scaled as above, but no permutation is involved.
+            On exit, A is restored to the orginal row numbering, so
+            Dr*A*Dc is returned.</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+	   which defines the permutation matrix Pc; perm_c[i] = j means
+	   column i of A is in position j in A*Pc.
+	   On exit, perm_c may be overwritten by the product of the input
+	   perm_c and a permutation that postorders the elimination tree
+	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+	   is already in postorder.</pre><p>
+<pre>	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+	   which describes permutation of columns of transpose(A) 
+	   (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+	   which defines the permutation matrix Pr, and is determined
+	   by MC64 first then followed by partial pivoting.
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+	   determines permutation of rows of transpose(A)
+	   (columns of A) as described above.</pre><p>
+<pre>	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	   will try to use the input perm_r, unless a certain threshold
+	   criterion is violated. In that case, perm_r is overwritten by a
+	   new permutation determined by partial pivoting or diagonal
+	   threshold pivoting.
+	   Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+	   Elimination tree of Pc'*A'*A*Pc.
+	   If options->Fact != FACTORED and options->Fact != DOFACT,
+	   etree is an input argument, otherwise it is an output argument.
+	   Note: etree is a vector of parent pointers for a forest whose
+	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+	   Specifies the form of equilibration that was done.
+	   = 'N': No equilibration.
+	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+	   = 'B': Both row and column equilibration, i.e., A was replaced 
+		  by diag(R)*A*diag(C).
+	   If options->Fact = FACTORED, equed is an input argument,
+	   otherwise it is an output argument.</pre><p>
+<pre> R	   (input/output) double*, dimension (A->nrow)
+	   The row scale factors for A or transpose(A).
+	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+	   If equed = 'N' or 'C', R is not accessed.
+	   If options->Fact = FACTORED, R is an input argument,
+	       otherwise, R is output.
+	   If options->Fact = FACTORED and equed = 'R' or 'B', each element
+	       of R must be positive.</pre><p>
+<pre> C	   (input/output) double*, dimension (A->ncol)
+	   The column scale factors for A or transpose(A).
+	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+	   If equed = 'N' or 'R', C is not accessed.
+	   If options->Fact = FACTORED, C is an input argument,
+	       otherwise, C is output.
+	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+	       of C must be positive.</pre><p>
+<pre> L	   (output) SuperMatrix*
+	   The factor L from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses compressed row subscripts storage for supernodes, i.e.,
+	   L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre> U	   (output) SuperMatrix*
+	   The factor U from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses column-wise storage scheme, i.e., U has types:
+	   Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+	   User supplied workspace, should be large enough
+	   to hold data structures for factors L and U.
+	   On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 mem_usage->total_needed; no other side effects.</pre><p>
+<pre>	   See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B	   (input/output) SuperMatrix*
+	   B has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+	   On entry, the right hand side matrix.
+	   If B->ncol = 0, only LU decomposition is performed, the triangular
+			   solve is skipped.
+	   On exit,
+	      if equed = 'N', B is not modified; otherwise
+	      if A->Stype = SLU_NC:
+		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+		    B is overwritten by diag(R)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+		    B is overwritten by diag(C)*B;
+	      if A->Stype = SLU_NR:
+		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+		    B is overwritten by diag(C)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+		    B is overwritten by diag(R)*B.</pre><p>
+<pre> X	   (output) SuperMatrix*
+	   X has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+	   to the original system of equations. Note that A and B are modified
+	   on exit if equed is not 'N', and the solution to the equilibrated
+	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+	   and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) double*
+	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+	   The infinity norm is used. If recip_pivot_growth is much less
+	   than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) double*
+	   The estimate of the reciprocal condition number of the matrix A
+	   after equilibration (if done). If rcond is less than the machine
+	   precision (in particular, if rcond = 0), the matrix is singular
+	   to working precision. This condition is indicated by a return
+	   code of info > 0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+	   Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+	     The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+	     The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+	     The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+	  Record the statistics on runtime and floating-point operation count.
+	  See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+	   > 0: if info = i, and i is
+		<= A->ncol: number of zero pivots. They are replaced by small
+		      entries due to options->ILU_FillTol.
+		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+		      precision, meaning that the matrix is singular to
+		      working precision. Nevertheless, the solution and
+		      error bounds are computed because there are a number
+		      of situations where the computed solution can be more
+		      accurate than the value of RCOND would suggest.
+		> A->ncol+1: number of bytes allocated when memory allocation
+		      failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="2fee39459dfac17529487ea539648cfb"></a><!-- doxytag: member="slu_zdefs.h::zgsitrf" ref="2fee39459dfac17529487ea539648cfb" args="(superlu_options_t *, SuperMatrix *, int, int, int *, void *, int, int *, int *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgsitrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> ZGSITRF computes an ILU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the ILU decomposition will be performed.</pre><p>
+<pre> A	    (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+	    (A->nrow, A->ncol). The type of A can be:
+	    Stype = SLU_NCP; Dtype = SLU_Z; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+	    To control degree of relaxing supernodes. If the number
+	    of nodes (columns) in a subtree of the elimination tree is less
+	    than relax, this subtree is considered as one supernode,
+	    regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+	    A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+	    Elimination tree of A'*A.
+	    Note: etree is a vector of parent pointers for a forest whose
+	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+	    On input, the columns of A should be permuted so that the
+	    etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+	    User-supplied work space and space for the output data structures.
+	    Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the
+	    permutation matrix Pc; perm_c[i] = j means column i of A is
+	    in position j in A*Pc.
+	    When searching for diagonal, perm_c[*] is applied to the
+	    row subscripts of A, so that diagonal threshold pivoting
+	    can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+	    Row permutation vector which defines the permutation matrix Pr,
+	    perm_r[i] = j means row i of A is in position j in Pr*A.
+	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	       will try to use the input perm_r, unless a certain threshold
+	       criterion is violated. In that case, perm_r is overwritten by
+	       a new permutation determined by partial pivoting or diagonal
+	       threshold pivoting.
+	    Otherwise, perm_r is output argument;</pre><p>
+<pre> L	    (output) SuperMatrix*
+	    The factor L from the factorization Pr*A=L*U; use compressed row
+	    subscripts storage for supernodes, i.e., L has type:
+	    Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre> U	    (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+	    storage scheme, i.e., U has types: Stype = SLU_NC,
+	    Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+	    Record the statistics on runtime and floating-point operation count.
+	    See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+	    = 0: successful exit
+	    < 0: if info = -i, the i-th argument had an illegal value
+	    > 0: if info = i, and i is
+	       <= A->ncol: number of zero pivots. They are replaced by small
+		  entries according to options->ILU_FillTol.
+	       > A->ncol: number of bytes allocated when memory allocation
+		  failure occurred, plus A->ncol. If lwork = -1, it is
+		  the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays:
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 4 of them:
+	      marker/marker1 are used for panel dfs, see (ilu_)<a class="el" href="dpanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">dpanel_dfs.c</a>;
+	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+	      marker_relax(has its own space) is used for relaxed supernodes.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+	Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the
+	last column of a supernode.
+	The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+	supernodal representative r, repfnz[r] is the location of the first
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+	the panel diagonal. These are filled in during <a class="el" href="dpanel__dfs_8c.html#2a809488b87d2c1a9b2a574b726e8517">dpanel_dfs()</a>, and are
+	used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+		   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a>.
+	It is also used by the dropping routine <a class="el" href="ilu__ddrop__row_8c.html#380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="7675aa04369725f7f65c74249388f5a5"></a><!-- doxytag: member="slu_zdefs.h::zgsrfs" ref="7675aa04369725f7f65c74249388f5a5" args="(trans_t, SuperMatrix *, SuperMatrix *, SuperMatrix *, int *, int *, char *, double *, double *, SuperMatrix *, SuperMatrix *, double *, double *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgsrfs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   ZGSRFS improves the computed solution to a system of linear   
+   equations and provides error bounds and backward error estimates for 
+   the solution.</pre><p>
+<pre>   If equilibration was performed, the system becomes:
+           (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The original matrix A in the system, or the scaled A if
+           equilibration was done. The type of A can be:
+           Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_GE.</pre><p>
+<pre>   L       (input) SuperMatrix*
+	     The factor L from the factorization Pr*A*Pc=L*U. Use
+           compressed row subscripts storage for supernodes, 
+           i.e., L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre>   U       (input) SuperMatrix*
+           The factor U from the factorization Pr*A*Pc=L*U as computed by
+           <a class="el" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">zgstrf()</a>. Use column-wise storage scheme, 
+           i.e., U has types: Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre>   perm_c  (input) int*, dimension (A->ncol)
+	     Column permutation vector, which defines the 
+           permutation matrix Pc; perm_c[i] = j means column i of A is 
+           in position j in A*Pc.</pre><p>
+<pre>   perm_r  (input) int*, dimension (A->nrow)
+           Row permutation vector, which defines the permutation matrix Pr;
+           perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>   equed   (input) Specifies the form of equilibration that was done.
+           = 'N': No equilibration.
+           = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+           = 'C': Column equilibration, i.e., A was postmultiplied by
+                  diag(C).
+           = 'B': Both row and column equilibration, i.e., A was replaced 
+                  by diag(R)*A*diag(C).</pre><p>
+<pre>   R       (input) double*, dimension (A->nrow)
+           The row scale factors for A.
+           If equed = 'R' or 'B', A is premultiplied by diag(R).
+           If equed = 'N' or 'C', R is not accessed.</pre><p>
+<pre>   C       (input) double*, dimension (A->ncol)
+           The column scale factors for A.
+           If equed = 'C' or 'B', A is postmultiplied by diag(C).
+           If equed = 'N' or 'R', C is not accessed.</pre><p>
+<pre>   B       (input) SuperMatrix*
+           B has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+           The right hand side matrix B.
+           if equed = 'R' or 'B', B is premultiplied by diag(R).</pre><p>
+<pre>   X       (input/output) SuperMatrix*
+           X has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+           On entry, the solution matrix X, as computed by <a class="el" href="slu__zdefs_8h.html#1b74304cd437572bbec487bc29422a90">zgstrs()</a>.
+           On exit, the improved solution matrix X.
+           if *equed = 'C' or 'B', X should be premultiplied by diag(C)
+               in order to obtain the solution to the original system.</pre><p>
+<pre>   FERR    (output) double*, dimension (B->ncol)   
+           The estimated forward error bound for each solution vector   
+           X(j) (the j-th column of the solution matrix X).   
+           If XTRUE is the true solution corresponding to X(j), FERR(j) 
+           is an estimated upper bound for the magnitude of the largest 
+           element in (X(j) - XTRUE) divided by the magnitude of the   
+           largest element in X(j).  The estimate is as reliable as   
+           the estimate for RCOND, and is almost always a slight   
+           overestimate of the true error.</pre><p>
+<pre>   BERR    (output) double*, dimension (B->ncol)   
+           The componentwise relative backward error of each solution   
+           vector X(j) (i.e., the smallest relative change in   
+           any element of A or B that makes X(j) an exact solution).</pre><p>
+<pre>   stat     (output) SuperLUStat_t*
+            Record the statistics on runtime and floating-point operation count.
+            See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre>   info    (output) int*   
+           = 0:  successful exit   
+            < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    Internal Parameters   
+    ===================</pre><p>
+<pre>    ITMAX is the maximum number of steps of iterative refinement.</pre><p>
+<pre> </pre> 
+</div>
+</div><p>
+<a class="anchor" name="f381e217f2aa7e57bcdebfc9e1e7b973"></a><!-- doxytag: member="slu_zdefs.h::zgssv" ref="f381e217f2aa7e57bcdebfc9e1e7b973" args="(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgssv           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> ZGSSV solves the system of linear equations A*X=B, using the
+ LU factorization from ZGSTRF. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. Permute the columns of A, forming A*Pc, where Pc
+           is a permutation matrix. For more details of this step, 
+           see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.2. Factor A as Pr*A*Pc=L*U with the permutation Pr determined
+           by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      1.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+      above algorithm to the transpose of A:</pre><p>
+<pre>      2.1. Permute columns of transpose(A) (rows of A),
+           forming transpose(A)*Pc, where Pc is a permutation matrix. 
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.2. Factor A as Pr*transpose(A)*Pc=L*U with the permutation Pr
+           determined by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      2.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR; Dtype = SLU_Z; Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre> perm_c  (input/output) int*
+         If A->Stype = SLU_NC, column permutation vector of size A->ncol
+         which defines the permutation matrix Pc; perm_c[i] = j means 
+         column i of A is in position j in A*Pc.
+         If A->Stype = SLU_NR, column permutation vector of size A->nrow
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre>         If options->ColPerm = MY_PERMC or options->Fact = SamePattern or
+            options->Fact = SamePattern_SameRowPerm, it is an input argument.
+            On exit, perm_c may be overwritten by the product of the input
+            perm_c and a permutation that postorders the elimination tree
+            of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+            is already in postorder.
+         Otherwise, it is an output argument.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined 
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.
+         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->RowPerm = MY_PERMR or
+            options->Fact = SamePattern_SameRowPerm, perm_r is an
+            input argument.
+         otherwise it is an output argument.</pre><p>
+<pre> L       (output) SuperMatrix*
+         The factor L from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+         > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                so the solution could not be computed.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="75f04171385eb89527fe10f871b2149a"></a><!-- doxytag: member="slu_zdefs.h::zgssvx" ref="75f04171385eb89527fe10f871b2149a" args="(superlu_options_t *, SuperMatrix *, int *, int *, int *, char *, double *, double *, SuperMatrix *, SuperMatrix *, void *, int, SuperMatrix *, SuperMatrix *, double *, double *, double *, double *, mem_usage_t *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgssvx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> ZGSSVX solves the system of linear equations A*X=B or A'*X=B, using
+ the LU factorization from <a class="el" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">zgstrf()</a>. Error bounds on the solution and
+ a condition estimate are also provided. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A is
+           overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+           (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+           = TRANS or CONJ).</pre><p>
+<pre>      1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+           matrix that usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the matrix A (after equilibration if options->Equil = YES)
+           as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>      1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form of 
+           A is used to estimate the condition number of the matrix A. If
+           the reciprocal of the condition number is less than machine
+           precision, info = A->ncol+1 is returned as a warning, but the
+           routine still goes on to solve for X and computes error bounds
+           as described below.</pre><p>
+<pre>      1.6. The system of equations is solved for X using the factored form
+           of A.</pre><p>
+<pre>      1.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      1.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R)
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+      to the transpose of A:</pre><p>
+<pre>      2.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A' is
+           overwritten by diag(R)*A'*diag(C) and B by diag(R)*B 
+           (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>      2.2. Permute columns of transpose(A) (rows of A), 
+           forming transpose(A)*Pc, where Pc is a permutation matrix that 
+           usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the transpose(A) (after equilibration if 
+           options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+           permutation Pr determined by partial pivoting.</pre><p>
+<pre>      2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form 
+           of transpose(A) is used to estimate the condition number of the
+           matrix A. If the reciprocal of the condition number
+           is less than machine precision, info = A->nrow+1 is returned as
+           a warning, but the routine still goes on to solve for X and
+           computes error bounds as described below.</pre><p>
+<pre>      2.6. The system of equations is solved for X using the factored form
+           of transpose(A).</pre><p>
+<pre>      2.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      2.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R) 
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input/output) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of the linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR, Dtype = SLU_D, Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre>         On entry, If options->Fact = FACTORED and equed is not 'N', 
+         then A must have been equilibrated by the scaling factors in
+         R and/or C.  
+         On exit, A is not modified if options->Equil = NO, or if 
+         options->Equil = YES but equed = 'N' on exit.
+         Otherwise, if options->Equil = YES and equed is not 'N',
+         A is scaled as follows:
+         If A->Stype = SLU_NC:
+           equed = 'R':  A := diag(R) * A
+           equed = 'C':  A := A * diag(C)
+           equed = 'B':  A := diag(R) * A * diag(C).
+         If A->Stype = SLU_NR:
+           equed = 'R':  transpose(A) := diag(R) * transpose(A)
+           equed = 'C':  transpose(A) := transpose(A) * diag(C)
+           equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+         which defines the permutation matrix Pc; perm_c[i] = j means
+         column i of A is in position j in A*Pc.
+         On exit, perm_c may be overwritten by the product of the input
+         perm_c and a permutation that postorders the elimination tree
+         of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+         is already in postorder.</pre><p>
+<pre>         If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.</pre><p>
+<pre>         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+         will try to use the input perm_r, unless a certain threshold
+         criterion is violated. In that case, perm_r is overwritten by a
+         new permutation determined by partial pivoting or diagonal
+         threshold pivoting.
+         Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+         Elimination tree of Pc'*A'*A*Pc.
+         If options->Fact != FACTORED and options->Fact != DOFACT,
+         etree is an input argument, otherwise it is an output argument.
+         Note: etree is a vector of parent pointers for a forest whose
+         vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+         Specifies the form of equilibration that was done.
+         = 'N': No equilibration.
+         = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+         = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+         = 'B': Both row and column equilibration, i.e., A was replaced 
+                by diag(R)*A*diag(C).
+         If options->Fact = FACTORED, equed is an input argument,
+         otherwise it is an output argument.</pre><p>
+<pre> R       (input/output) double*, dimension (A->nrow)
+         The row scale factors for A or transpose(A).
+         If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+         If equed = 'N' or 'C', R is not accessed.
+         If options->Fact = FACTORED, R is an input argument,
+             otherwise, R is output.
+         If options->zFact = FACTORED and equed = 'R' or 'B', each element
+             of R must be positive.</pre><p>
+<pre> C       (input/output) double*, dimension (A->ncol)
+         The column scale factors for A or transpose(A).
+         If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+         If equed = 'N' or 'R', C is not accessed.
+         If options->Fact = FACTORED, C is an input argument,
+             otherwise, C is output.
+         If options->Fact = FACTORED and equed = 'C' or 'B', each element
+             of C must be positive.</pre><p>
+<pre> L       (output) SuperMatrix*
+	   The factor L from the factorization
+             Pr*A*Pc=L*U              (if A->Stype SLU_= NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+         User supplied workspace, should be large enough
+         to hold data structures for factors L and U.
+         On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               mem_usage->total_needed; no other side effects.</pre><p>
+<pre>         See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         If B->ncol = 0, only LU decomposition is performed, the triangular
+                         solve is skipped.
+         On exit,
+            if equed = 'N', B is not modified; otherwise
+            if A->Stype = SLU_NC:
+               if options->Trans = NOTRANS and equed = 'R' or 'B',
+                  B is overwritten by diag(R)*B;
+               if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+                  B is overwritten by diag(C)*B;
+            if A->Stype = SLU_NR:
+               if options->Trans = NOTRANS and equed = 'C' or 'B',
+                  B is overwritten by diag(C)*B;
+               if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+                  B is overwritten by diag(R)*B.</pre><p>
+<pre> X       (output) SuperMatrix*
+         X has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE. 
+         If info = 0 or info = A->ncol+1, X contains the solution matrix
+         to the original system of equations. Note that A and B are modified
+         on exit if equed is not 'N', and the solution to the equilibrated
+         system is inv(diag(C))*X if options->Trans = NOTRANS and
+         equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+         and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) double*
+         The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+         The infinity norm is used. If recip_pivot_growth is much less
+         than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) double*
+         The estimate of the reciprocal condition number of the matrix A
+         after equilibration (if done). If rcond is less than the machine
+         precision (in particular, if rcond = 0), the matrix is singular
+         to working precision. This condition is indicated by a return
+         code of info > 0.</pre><p>
+<pre> FERR    (output) double*, dimension (B->ncol)   
+         The estimated forward error bound for each solution vector   
+         X(j) (the j-th column of the solution matrix X).   
+         If XTRUE is the true solution corresponding to X(j), FERR(j) 
+         is an estimated upper bound for the magnitude of the largest 
+         element in (X(j) - XTRUE) divided by the magnitude of the   
+         largest element in X(j).  The estimate is as reliable as   
+         the estimate for RCOND, and is almost always a slight   
+         overestimate of the true error.
+         If options->IterRefine = NOREFINE, ferr = 1.0.</pre><p>
+<pre> BERR    (output) double*, dimension (B->ncol)
+         The componentwise relative backward error of each solution   
+         vector X(j) (i.e., the smallest relative change in   
+         any element of A or B that makes X(j) an exact solution).
+         If options->IterRefine = NOREFINE, berr = 1.0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+         Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+           The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+           The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+           The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+         = 0: successful exit   
+         < 0: if info = -i, the i-th argument had an illegal value   
+         > 0: if info = i, and i is   
+              <= A->ncol: U(i,i) is exactly zero. The factorization has   
+                    been completed, but the factor U is exactly   
+                    singular, so the solution and error bounds   
+                    could not be computed.   
+              = A->ncol+1: U is nonsingular, but RCOND is less than machine
+                    precision, meaning that the matrix is singular to
+                    working precision. Nevertheless, the solution and
+                    error bounds are computed because there are a number
+                    of situations where the computed solution can be more
+                    accurate than the value of RCOND would suggest.   
+              > A->ncol+1: number of bytes allocated when memory allocation
+                    failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="58d722a16a6f114a94cb2f59c8b08df4"></a><!-- doxytag: member="slu_zdefs.h::zgstrf" ref="58d722a16a6f114a94cb2f59c8b08df4" args="(superlu_options_t *, SuperMatrix *, int, int, int *, void *, int, int *, int *, SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgstrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> ZGSTRF computes an LU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper 
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = SLU_NCP; Dtype = SLU_Z; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+          To control degree of relaxing supernodes. If the number
+          of nodes (columns) in a subtree of the elimination tree is less
+          than relax, this subtree is considered as one supernode,
+          regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+          A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+          Elimination tree of A'*A.
+          Note: etree is a vector of parent pointers for a forest whose
+          vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+          On input, the columns of A should be permuted so that the
+          etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+          User-supplied work space and space for the output data structures.
+          Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the 
+          permutation matrix Pc; perm_c[i] = j means column i of A is 
+          in position j in A*Pc.
+          When searching for diagonal, perm_c[*] is applied to the
+          row subscripts of A, so that diagonal threshold pivoting
+          can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+          Row permutation vector which defines the permutation matrix Pr,
+          perm_r[i] = j means row i of A is in position j in Pr*A.
+          If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+             will try to use the input perm_r, unless a certain threshold
+             criterion is violated. In that case, perm_r is overwritten by
+             a new permutation determined by partial pivoting or diagonal
+             threshold pivoting.
+          Otherwise, perm_r is output argument;</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = SLU_NC, 
+          Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+          = 0: successful exit
+          < 0: if info = -i, the i-th argument had an illegal value
+          > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                and division by zero will occur if it is used to solve a
+                system of equations.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol. If lwork = -1, it is
+                the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays: 
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   xprune[0:n-1]: xprune[*] points to locations in subscript 
+	vector lsub[*]. For column i, xprune[i] denotes the point where 
+	structural pruning begins. I.e. only xlsub[i],..,xprune[i]-1 need 
+	to be traversed for symbolic factorization.</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been 
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 3 of them: marker/marker1 are used for panel dfs, 
+	      see <a class="el" href="zpanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">zpanel_dfs.c</a>; marker2 is used for inner-factorization,
+            see <a class="el" href="zcolumn__dfs_8c.html" title="Performs a symbolic factorization.">zcolumn_dfs.c</a>.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+      Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs) 
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the 
+	last column of a supernode.
+      The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a 
+	supernodal representative r, repfnz[r] is the location of the first 
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below 
+      the panel diagonal. These are filled in during <a class="el" href="slu__zdefs_8h.html#ddc01b7cd28e5566177c284480a680f3">zpanel_dfs()</a>, and are
+      used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+	    	   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__zdefs_8h.html" title="Header file for real operations.">slu_zdefs.h</a>.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="1b74304cd437572bbec487bc29422a90"></a><!-- doxytag: member="slu_zdefs.h::zgstrs" ref="1b74304cd437572bbec487bc29422a90" args="(trans_t, SuperMatrix *, SuperMatrix *, int *, int *, SuperMatrix *, SuperLUStat_t *, int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgstrs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> ZGSTRS solves a system of linear equations A*X=B or A'*X=B
+ with A sparse and B dense, using the LU factorization computed by
+ ZGSTRF.</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre> L       (input) SuperMatrix*
+         The factor L from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">zgstrf()</a>. Use compressed row subscripts storage for supernodes,
+         i.e., L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (input) SuperMatrix*
+         The factor U from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">zgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre> perm_c  (input) int*, dimension (L->ncol)
+	   Column permutation vector, which defines the 
+         permutation matrix Pc; perm_c[i] = j means column i of A is 
+         in position j in A*Pc.</pre><p>
+<pre> perm_r  (input) int*, dimension (L->nrow)
+         Row permutation vector, which defines the permutation matrix Pr; 
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+ 	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="7b335e97d77b1adf81e383e5bcb58f3e"></a><!-- doxytag: member="slu_zdefs.h::zinf_norm_error" ref="7b335e97d77b1adf81e383e5bcb58f3e" args="(int, SuperMatrix *, doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zinf_norm_error           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a7f8e784fe805303d413a3dc684aa8a5"></a><!-- doxytag: member="slu_zdefs.h::zlaqgs" ref="a7f8e784fe805303d413a3dc684aa8a5" args="(SuperMatrix *, double *, double *, double, double, double, char *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zlaqgs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   ZLAQGS equilibrates a general sparse M by N matrix A using the row and   
+   scaling factors in the vectors R and C.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input/output) SuperMatrix*
+           On exit, the equilibrated matrix.  See EQUED for the form of 
+           the equilibrated matrix. The type of A can be:
+	    Stype = NC; Dtype = SLU_Z; Mtype = GE.</pre><p>
+<pre>   R       (input) double*, dimension (A->nrow)
+           The row scale factors for A.</pre><p>
+<pre>   C       (input) double*, dimension (A->ncol)
+           The column scale factors for A.</pre><p>
+<pre>   ROWCND  (input) double
+           Ratio of the smallest R(i) to the largest R(i).</pre><p>
+<pre>   COLCND  (input) double
+           Ratio of the smallest C(i) to the largest C(i).</pre><p>
+<pre>   AMAX    (input) double
+           Absolute value of largest matrix entry.</pre><p>
+<pre>   EQUED   (output) char*
+           Specifies the form of equilibration that was done.   
+           = 'N':  No equilibration   
+           = 'R':  Row equilibration, i.e., A has been premultiplied by  
+                   diag(R).   
+           = 'C':  Column equilibration, i.e., A has been postmultiplied  
+                   by diag(C).   
+           = 'B':  Both row and column equilibration, i.e., A has been
+                   replaced by diag(R) * A * diag(C).</pre><p>
+<pre>   Internal Parameters   
+   ===================</pre><p>
+<pre>   THRESH is a threshold value used to decide if row or column scaling   
+   should be done based on the ratio of the row or column scaling   
+   factors.  If ROWCND < THRESH, row scaling is done, and if   
+   COLCND < THRESH, column scaling is done.</pre><p>
+<pre>   LARGE and SMALL are threshold values used to decide if row scaling   
+   should be done based on the absolute size of the largest matrix   
+   element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="231c25a6f73e928d43ee8f3f4f291844"></a><!-- doxytag: member="slu_zdefs.h::zldperm" ref="231c25a6f73e928d43ee8f3f4f291844" args="(int, int, int, int[], int[], doublecomplex[], int[], double[], double[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zldperm           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0c3bf2c88bdda13cede034c6e9a407e5"></a><!-- doxytag: member="slu_zdefs.h::zLUMemInit" ref="0c3bf2c88bdda13cede034c6e9a407e5" args="(fact_t, void *, int, int, int, int, int, double, SuperMatrix *, SuperMatrix *, GlobalLU_t *, int **, doublecomplex **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zLUMemInit           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a> </td>
+          <td class="paramname"> <em>fact</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>annz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>fill_ratio</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>iwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname"> <em>dwork</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Memory-related.<p>
+<pre>
+ For those unpredictable size, estimate as fill_ratio * nnz(A).
+ Return value:
+     If lwork = -1, return the estimated amount of space required, plus n;
+     otherwise, return the amount of space actually allocated when
+     memory allocation failure occurred.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="399a28849bd52ce90c1cbc8e4cd85046"></a><!-- doxytag: member="slu_zdefs.h::zLUMemXpand" ref="399a28849bd52ce90c1cbc8e4cd85046" args="(int, int, MemType, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zLUMemXpand           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>next</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> </td>
+          <td class="paramname"> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>maxlen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="572914748b4f1aa544a61477095e7fe5"></a><!-- doxytag: member="slu_zdefs.h::zLUWorkFree" ref="572914748b4f1aa544a61477095e7fe5" args="(int *, doublecomplex *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zLUWorkFree           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5987692fb793ccc6122ff861261f1ca2"></a><!-- doxytag: member="slu_zdefs.h::zmemory_usage" ref="5987692fb793ccc6122ff861261f1ca2" args="(const int, const int, const int, const int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zmemory_usage           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="58b397fc5660a6a0638f2aba584abf64"></a><!-- doxytag: member="slu_zdefs.h::zpanel_bmod" ref="58b397fc5660a6a0638f2aba584abf64" args="(const int, const int, const int, const int, doublecomplex *, doublecomplex *, int *, int *, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zpanel_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>    Performs numeric block updates (sup-panel) in topological order.
+    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+    Special processing on the supernodal portion of L[*,j]</pre><p>
+<pre>    Before entering this routine, the original nonzeros in the panel 
+    were already copied into the spa[m,w].</pre><p>
+<pre>    Updated/Output parameters-
+    dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
+    collectively in the m-by-w vector dense[*]. 
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="ddc01b7cd28e5566177c284480a680f3"></a><!-- doxytag: member="slu_zdefs.h::zpanel_dfs" ref="ddc01b7cd28e5566177c284480a680f3" args="(const int, const int, const int, SuperMatrix *, int *, int *, doublecomplex *, int *, int *, int *, int *, int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zpanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel. 
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a 
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="87aab883e88a4ee7f6e19b7d9d5f690c"></a><!-- doxytag: member="slu_zdefs.h::zPivotGrowth" ref="87aab883e88a4ee7f6e19b7d9d5f690c" args="(int, SuperMatrix *, int *, SuperMatrix *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double zPivotGrowth           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> Compute the reciprocal pivot growth factor of the leading ncols columns
+ of the matrix, using the formula:
+     min_j ( max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>) / max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(U_ij)</a>) )</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> ncols    (input) int
+          The number of columns of matrices A, L and U.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = NC; Dtype = SLU_Z; Mtype = GE.</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SC; Dtype = SLU_Z; Mtype = TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = NC;
+          Dtype = SLU_Z; Mtype = TRU.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="dce57d338c03a6432064f295023ba976"></a><!-- doxytag: member="slu_zdefs.h::zpivotL" ref="dce57d338c03a6432064f295023ba976" args="(const int, const double, int *, int *, int *, int *, int *, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zpivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+           pivot row = k;
+       ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+           pivot row = j;
+       ELSE
+           pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0      success;
+                 i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="03a002c56d260744e0c73d90a28ca92e"></a><!-- doxytag: member="slu_zdefs.h::zPrint_CompCol_Matrix" ref="03a002c56d260744e0c73d90a28ca92e" args="(char *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zPrint_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4cf22ecc8aa6e20245d071b53f1a71c4"></a><!-- doxytag: member="slu_zdefs.h::zPrint_Dense_Matrix" ref="4cf22ecc8aa6e20245d071b53f1a71c4" args="(char *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zPrint_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3bdc4fd0a2bb9efd731dee5828ad64a9"></a><!-- doxytag: member="slu_zdefs.h::zprint_lu_col" ref="3bdc4fd0a2bb9efd731dee5828ad64a9" args="(char *, int, int, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zprint_lu_col           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fa07de3629132fd900f759166eef6f45"></a><!-- doxytag: member="slu_zdefs.h::zPrint_SuperNode_Matrix" ref="fa07de3629132fd900f759166eef6f45" args="(char *, SuperMatrix *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zPrint_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8a368adca5d498e86910b5371de3131d"></a><!-- doxytag: member="slu_zdefs.h::zpruneL" ref="8a368adca5d498e86910b5371de3131d" args="(const int, const int *, const int, const int, const int *, const int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zpruneL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Prunes the L-structure of supernodes whose L-structure
+   contains the current pivot row "pivrow"
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="711303a4bc043eb0b1bff72b32d52397"></a><!-- doxytag: member="slu_zdefs.h::zQuerySpace" ref="711303a4bc043eb0b1bff72b32d52397" args="(SuperMatrix *, SuperMatrix *, mem_usage_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="cc866ab1cbd2abcb56913ad79af5d0ea"></a><!-- doxytag: member="slu_zdefs.h::zreadhb" ref="cc866ab1cbd2abcb56913ad79af5d0ea" args="(int *, int *, int *, doublecomplex **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zreadhb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cd4ff4683d71e444e948fbcacb23e803"></a><!-- doxytag: member="slu_zdefs.h::zreadmt" ref="cd4ff4683d71e444e948fbcacb23e803" args="(int *, int *, int *, doublecomplex **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zreadmt           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e3c9645c921a407e41fdd5f98c4b1a80"></a><!-- doxytag: member="slu_zdefs.h::zreadrb" ref="e3c9645c921a407e41fdd5f98c4b1a80" args="(int *, int *, int *, doublecomplex **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zreadrb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="952c154abdfc9bda69b118d25c7e599f"></a><!-- doxytag: member="slu_zdefs.h::zreadtriple" ref="952c154abdfc9bda69b118d25c7e599f" args="(int *, int *, int *, doublecomplex **, int **, int **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zreadtriple           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a4e2012fe2ee4c2d1cd2a261bdb0455b"></a><!-- doxytag: member="slu_zdefs.h::zSetRWork" ref="a4e2012fe2ee4c2d1cd2a261bdb0455b" args="(int, int, doublecomplex *, doublecomplex **, doublecomplex **)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zSetRWork           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f416483e20a4ec79bf0d04d6e55c585b"></a><!-- doxytag: member="slu_zdefs.h::zsnode_bmod" ref="f416483e20a4ec79bf0d04d6e55c585b" args="(const int, const int, const int, doublecomplex *, doublecomplex *, GlobalLU_t *, SuperLUStat_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zsnode_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const  </td>
+          <td class="paramname"> <em>int</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f0e16dd7be5f8beaf0e445562995de49"></a><!-- doxytag: member="slu_zdefs.h::zsnode_dfs" ref="f0e16dd7be5f8beaf0e445562995de49" args="(const int, const int, const int *, const int *, const int *, int *, int *, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zsnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="slu__zdefs_8h.html#f0e16dd7be5f8beaf0e445562995de49">zsnode_dfs()</a> - Determine the union of the row structures of those 
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/smemory_8c.html b/DOC/html/smemory_8c.html
new file mode 100644
index 0000000..749b726
--- /dev/null
+++ b/DOC/html/smemory_8c.html
@@ -0,0 +1,976 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/smemory.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/smemory.c File Reference</h1>Memory details. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#1ef4d4db4d5e1fe0719416163e0e51ae">StackFull</a>(x)   ( x + Glu->stack.used >= Glu->stack.size )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#c11b1c3847a3d397e9675de40782134d">NotDoubleAlign</a>(addr)   ( (long int)addr & 7 )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#c8204d321846eb4b23d563eac7e5bfa7">DoubleAlign</a>(addr)   ( ((long int)addr + 7) & ~7L )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#70ca807c578a0c495f7ce5edb0215e2b">TempSpace</a>(m, w)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#7b2a35bfd2e6c9d03e2a6ccdba9fa847">Reduce</a>(alpha)   ((alpha + 1) / 2)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#a2862f14356be7d9f12bfdfc175137a1">sexpand</a> (int *prev_len,<a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> type,int len_to_copy,int keep_prev,<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Expand the existing storage to accommodate more fill-ins.  <a href="#a2862f14356be7d9f12bfdfc175137a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#bc603ef3859778fb5631cf3d3b951de6">sLUWorkInit</a> (int m, int n, int panel_size, int **iworkptr, float **dworkptr, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate known working storage. Returns 0 if success, otherwise returns the number of bytes allocated so far when failure occurred.  <a href="#bc603ef3859778fb5631cf3d3b951de6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#00d00daa40d07c16e3ae6bfd87c70e3d">copy_mem_float</a> (int, void *, void *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#abb6ccd3c62fa5284cd5de4fb4c7f533">sStackCompress</a> (<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Compress the work[] array to remove fragmentation.  <a href="#abb6ccd3c62fa5284cd5de4fb4c7f533"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#146216d4543e94e7ec4783eada50bf4c">sSetupSpace</a> (void *work, int lwork, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Setup the memory model to be used for factorization.  <a href="#146216d4543e94e7ec4783eada50bf4c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#d68adc1b6de3f821f9fb24cdcf24d281">suser_malloc</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#29f7485dd32f85e996e16f2a199b002d">suser_free</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#b59eea34474da95fb3dc125400a1287e">copy_mem_int</a> (int, void *, void *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#4c226087c09a94ff40b92b14fa46fc53">user_bcopy</a> (char *, char *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#ce83037d40e06fba28a0b787df4fbece">sQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *mem_usage)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#e057d714a4952330de0572fa2785b068">ilu_sQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *mem_usage)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#adb7d9338f2fd9700f84951708cd8064">sLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a> fact, void *work, int lwork, int m, int n, int annz, int panel_size, float fill_ratio, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html" [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for the data structures common to all factor routines.  <a href="#adb7d9338f2fd9700f84951708cd8064"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#da7e5387084d37939efddbcbf6a6eca1">sSetRWork</a> (int m, int panel_size, float *dworkptr, float **dense, float **tempv)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays.  <a href="#da7e5387084d37939efddbcbf6a6eca1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#0e837042fa6f4b27eb2cbfc2f80387fa">sLUWorkFree</a> (int *iwork, float *dwork, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines.  <a href="#0e837042fa6f4b27eb2cbfc2f80387fa"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#80077f82e6d512e415519daed9dc3345">sLUMemXpand</a> (int jcol, int next, <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> mem_type, int *maxlen, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization.  <a href="#80077f82e6d512e415519daed9dc3345"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#9754e5504550ae4ab763721ebcb7055b">sallocateA</a> (int n, int nnz, float **a, int **asub, int **xa)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A.  <a href="#9754e5504550ae4ab763721ebcb7055b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#4a866452c5dcba66083ef463662955ee">floatMalloc</a> (int n)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#b6dc7fd90a3d13e0c9a8ca8d62def27f">floatCalloc</a> (int n)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#658f955c5532813bd0490502efae563f">smemory_usage</a> (const int nzlmax, const int nzumax, const int nzlumax, const int n)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="c8204d321846eb4b23d563eac7e5bfa7"></a><!-- doxytag: member="smemory.c::DoubleAlign" ref="c8204d321846eb4b23d563eac7e5bfa7" args="(addr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DoubleAlign          </td>
+          <td>(</td>
+          <td class="paramtype">addr </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( ((long int)addr + 7) & ~7L )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c11b1c3847a3d397e9675de40782134d"></a><!-- doxytag: member="smemory.c::NotDoubleAlign" ref="c11b1c3847a3d397e9675de40782134d" args="(addr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NotDoubleAlign          </td>
+          <td>(</td>
+          <td class="paramtype">addr </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( (long int)addr & 7 )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7b2a35bfd2e6c9d03e2a6ccdba9fa847"></a><!-- doxytag: member="smemory.c::Reduce" ref="7b2a35bfd2e6c9d03e2a6ccdba9fa847" args="(alpha)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define Reduce          </td>
+          <td>(</td>
+          <td class="paramtype">alpha </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((alpha + 1) / 2)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1ef4d4db4d5e1fe0719416163e0e51ae"></a><!-- doxytag: member="smemory.c::StackFull" ref="1ef4d4db4d5e1fe0719416163e0e51ae" args="(x)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define StackFull          </td>
+          <td>(</td>
+          <td class="paramtype">x </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( x + Glu->stack.used >= Glu->stack.size )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="70ca807c578a0c495f7ce5edb0215e2b"></a><!-- doxytag: member="smemory.c::TempSpace" ref="70ca807c578a0c495f7ce5edb0215e2b" args="(m, w)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TempSpace          </td>
+          <td>(</td>
+          <td class="paramtype">m,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">w </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">( (2*w + 4 + <a class="code" href="slu__util_8h.html#9b7b2a5116ee487722b0967317ab6360">NO_MARKER</a>) * m * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) + \
+                              (w + 1) * m * <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) )
+</pre></div>
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="00d00daa40d07c16e3ae6bfd87c70e3d"></a><!-- doxytag: member="smemory.c::copy_mem_float" ref="00d00daa40d07c16e3ae6bfd87c70e3d" args="(int, void *, void *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void copy_mem_float           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>howmany</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>old</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>new</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b59eea34474da95fb3dc125400a1287e"></a><!-- doxytag: member="smemory.c::copy_mem_int" ref="b59eea34474da95fb3dc125400a1287e" args="(int, void *, void *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void copy_mem_int           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b6dc7fd90a3d13e0c9a8ca8d62def27f"></a><!-- doxytag: member="smemory.c::floatCalloc" ref="b6dc7fd90a3d13e0c9a8ca8d62def27f" args="(int n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float* floatCalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4a866452c5dcba66083ef463662955ee"></a><!-- doxytag: member="smemory.c::floatMalloc" ref="4a866452c5dcba66083ef463662955ee" args="(int n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float* floatMalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e057d714a4952330de0572fa2785b068"></a><!-- doxytag: member="smemory.c::ilu_sQuerySpace" ref="e057d714a4952330de0572fa2785b068" args="(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_sQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="9754e5504550ae4ab763721ebcb7055b"></a><!-- doxytag: member="smemory.c::sallocateA" ref="9754e5504550ae4ab763721ebcb7055b" args="(int n, int nnz, float **a, int **asub, int **xa)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sallocateA           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>xa</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a2862f14356be7d9f12bfdfc175137a1"></a><!-- doxytag: member="smemory.c::sexpand" ref="a2862f14356be7d9f12bfdfc175137a1" args="(int *prev_len,MemType type,int len_to_copy,int keep_prev,GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void * sexpand           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>prev_len</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> </td>
+          <td class="paramname"> <em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>len_to_copy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>keep_prev</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="adb7d9338f2fd9700f84951708cd8064"></a><!-- doxytag: member="smemory.c::sLUMemInit" ref="adb7d9338f2fd9700f84951708cd8064" args="(fact_t fact, void *work, int lwork, int m, int n, int annz, int panel_size, float fill_ratio, SuperMatrix *L, SuperMatrix *U, GlobalLU_t *Glu, int **iwork, float **dwork)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sLUMemInit           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a> </td>
+          <td class="paramname"> <em>fact</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>annz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>fill_ratio</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>iwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname"> <em>dwork</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Memory-related.<p>
+<pre>
+ For those unpredictable size, estimate as fill_ratio * nnz(A).
+ Return value:
+     If lwork = -1, return the estimated amount of space required, plus n;
+     otherwise, return the amount of space actually allocated when
+     memory allocation failure occurred.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="80077f82e6d512e415519daed9dc3345"></a><!-- doxytag: member="smemory.c::sLUMemXpand" ref="80077f82e6d512e415519daed9dc3345" args="(int jcol, int next, MemType mem_type, int *maxlen, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sLUMemXpand           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>next</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> </td>
+          <td class="paramname"> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>maxlen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="0e837042fa6f4b27eb2cbfc2f80387fa"></a><!-- doxytag: member="smemory.c::sLUWorkFree" ref="0e837042fa6f4b27eb2cbfc2f80387fa" args="(int *iwork, float *dwork, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sLUWorkFree           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>dwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="bc603ef3859778fb5631cf3d3b951de6"></a><!-- doxytag: member="smemory.c::sLUWorkInit" ref="bc603ef3859778fb5631cf3d3b951de6" args="(int m, int n, int panel_size, int **iworkptr, float **dworkptr, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sLUWorkInit           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>iworkptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname"> <em>dworkptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="658f955c5532813bd0490502efae563f"></a><!-- doxytag: member="smemory.c::smemory_usage" ref="658f955c5532813bd0490502efae563f" args="(const int nzlmax, const int nzumax, const int nzlumax, const int n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int smemory_usage           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nzlmax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nzumax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nzlumax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ce83037d40e06fba28a0b787df4fbece"></a><!-- doxytag: member="smemory.c::sQuerySpace" ref="ce83037d40e06fba28a0b787df4fbece" args="(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="da7e5387084d37939efddbcbf6a6eca1"></a><!-- doxytag: member="smemory.c::sSetRWork" ref="da7e5387084d37939efddbcbf6a6eca1" args="(int m, int panel_size, float *dworkptr, float **dense, float **tempv)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sSetRWork           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>dworkptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname"> <em>tempv</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="146216d4543e94e7ec4783eada50bf4c"></a><!-- doxytag: member="smemory.c::sSetupSpace" ref="146216d4543e94e7ec4783eada50bf4c" args="(void *work, int lwork, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sSetupSpace           </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+lwork = 0: use system malloc; lwork > 0: use user-supplied work[] space. 
+</div>
+</div><p>
+<a class="anchor" name="abb6ccd3c62fa5284cd5de4fb4c7f533"></a><!-- doxytag: member="smemory.c::sStackCompress" ref="abb6ccd3c62fa5284cd5de4fb4c7f533" args="(GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sStackCompress           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="29f7485dd32f85e996e16f2a199b002d"></a><!-- doxytag: member="smemory.c::suser_free" ref="29f7485dd32f85e996e16f2a199b002d" args="(int, int, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void suser_free           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>bytes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>which_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d68adc1b6de3f821f9fb24cdcf24d281"></a><!-- doxytag: member="smemory.c::suser_malloc" ref="d68adc1b6de3f821f9fb24cdcf24d281" args="(int, int, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void * suser_malloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>bytes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>which_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4c226087c09a94ff40b92b14fa46fc53"></a><!-- doxytag: member="smemory.c::user_bcopy" ref="4c226087c09a94ff40b92b14fa46fc53" args="(char *, char *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void user_bcopy           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/smyblas2_8c.html b/DOC/html/smyblas2_8c.html
new file mode 100644
index 0000000..7fdf26f
--- /dev/null
+++ b/DOC/html/smyblas2_8c.html
@@ -0,0 +1,180 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/smyblas2.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/smyblas2.c File Reference</h1>Level 2 Blas operations. <a href="#_details">More...</a>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smyblas2_8c.html#2c2e291d9f0825630425f05925633916">slsolve</a> (int ldm, int ncol, float *M, float *rhs)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#2c2e291d9f0825630425f05925633916"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smyblas2_8c.html#32cc084708387e72f8f7d269226237a0">susolve</a> (int ldm, int ncol, float *M, float *rhs)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#32cc084708387e72f8f7d269226237a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smyblas2_8c.html#3ba02ba32ea4e0eae40802c9c5d082e1">smatvec</a> (int ldm, int nrow, int ncol, float *M, float *vec, float *Mxvec)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#3ba02ba32ea4e0eae40802c9c5d082e1"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> Purpose: Level 2 BLAS operations: solves and matvec, written in C. Note: This is only used when the system lacks an efficient BLAS library.  <hr><h2>Function Documentation</h2>
+<a class="anchor" name="2c2e291d9f0825630425f05925633916"></a><!-- doxytag: member="smyblas2.c::slsolve" ref="2c2e291d9f0825630425f05925633916" args="(int ldm, int ncol, float *M, float *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void slsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="3ba02ba32ea4e0eae40802c9c5d082e1"></a><!-- doxytag: member="smyblas2.c::smatvec" ref="3ba02ba32ea4e0eae40802c9c5d082e1" args="(int ldm, int nrow, int ncol, float *M, float *vec, float *Mxvec)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void smatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="32cc084708387e72f8f7d269226237a0"></a><!-- doxytag: member="smyblas2.c::susolve" ref="32cc084708387e72f8f7d269226237a0" args="(int ldm, int ncol, float *M, float *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void susolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sp__coletree_8c.html b/DOC/html/sp__coletree_8c.html
new file mode 100644
index 0000000..8aaade5
--- /dev/null
+++ b/DOC/html/sp__coletree_8c.html
@@ -0,0 +1,460 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sp_coletree.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sp_coletree.c File Reference</h1>Tree layout and computation routines. <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int * </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#45fdfbf54106113728e1a036977ccf5b">mxCallocInt</a> (int n)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#679285dead1583f96db3c978735de380">initialize_disjoint_sets</a> (int n, int **pp)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#6ecd760efd6eec938f69c6d692d6ddae">make_set</a> (int i, int *pp)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#b7bc8447f8976dbb19c60dc2e1a12905">link</a> (int s, int t, int *pp)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#7cdfbecc1ca23ee1cc298897bd64a45c">find</a> (int i, int *pp)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#a34f31c4fe6ec2e5ee33f3d04ad9c209">finalize_disjoint_sets</a> (int *pp)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#a0494ba5c3e08e41a10ce8a2d96f8c49">sp_coletree</a> (int *acolst, int *acolend, int *arow, int nr, int nc, int *parent)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#9da0c72a7b8eaf7a2a69fb6c3340131a">etdfs</a> (int v, int first_kid[], int next_kid[], int post[], int *postnum)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#7fec305add1f9f4c611eacdb2b744bfd">nr_etdfs</a> (int n, int *parent, int *first_kid, int *next_kid, int *post, int postnum)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#8bf99818533bf5c192e1e4791b4700cc">TreePostorder</a> (int n, int *parent)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#657d6b291654432e815392c2a00d2b84">sp_symetree</a> (int *acolst, int *acolend, int *arow, int n, int *parent)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.1) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ August 1, 2008</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="9da0c72a7b8eaf7a2a69fb6c3340131a"></a><!-- doxytag: member="sp_coletree.c::etdfs" ref="9da0c72a7b8eaf7a2a69fb6c3340131a" args="(int v, int first_kid[], int next_kid[], int post[], int *postnum)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void etdfs           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>v</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>first_kid</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>next_kid</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>post</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>postnum</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a34f31c4fe6ec2e5ee33f3d04ad9c209"></a><!-- doxytag: member="sp_coletree.c::finalize_disjoint_sets" ref="a34f31c4fe6ec2e5ee33f3d04ad9c209" args="(int *pp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void finalize_disjoint_sets           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pp</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7cdfbecc1ca23ee1cc298897bd64a45c"></a><!-- doxytag: member="sp_coletree.c::find" ref="7cdfbecc1ca23ee1cc298897bd64a45c" args="(int i, int *pp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int find           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>i</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pp</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="679285dead1583f96db3c978735de380"></a><!-- doxytag: member="sp_coletree.c::initialize_disjoint_sets" ref="679285dead1583f96db3c978735de380" args="(int n, int **pp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void initialize_disjoint_sets           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>pp</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b7bc8447f8976dbb19c60dc2e1a12905"></a><!-- doxytag: member="sp_coletree.c::link" ref="b7bc8447f8976dbb19c60dc2e1a12905" args="(int s, int t, int *pp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int link           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>s</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>t</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pp</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6ecd760efd6eec938f69c6d692d6ddae"></a><!-- doxytag: member="sp_coletree.c::make_set" ref="6ecd760efd6eec938f69c6d692d6ddae" args="(int i, int *pp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int make_set           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>i</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pp</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="45fdfbf54106113728e1a036977ccf5b"></a><!-- doxytag: member="sp_coletree.c::mxCallocInt" ref="45fdfbf54106113728e1a036977ccf5b" args="(int n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int* mxCallocInt           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7fec305add1f9f4c611eacdb2b744bfd"></a><!-- doxytag: member="sp_coletree.c::nr_etdfs" ref="7fec305add1f9f4c611eacdb2b744bfd" args="(int n, int *parent, int *first_kid, int *next_kid, int *post, int postnum)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void nr_etdfs           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>first_kid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>next_kid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>post</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>postnum</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a0494ba5c3e08e41a10ce8a2d96f8c49"></a><!-- doxytag: member="sp_coletree.c::sp_coletree" ref="a0494ba5c3e08e41a10ce8a2d96f8c49" args="(int *acolst, int *acolend, int *arow, int nr, int nc, int *parent)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_coletree           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>acolst</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>acolend</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>arow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="657d6b291654432e815392c2a00d2b84"></a><!-- doxytag: member="sp_coletree.c::sp_symetree" ref="657d6b291654432e815392c2a00d2b84" args="(int *acolst, int *acolend, int *arow, int n, int *parent)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_symetree           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>acolst</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>acolend</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>arow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8bf99818533bf5c192e1e4791b4700cc"></a><!-- doxytag: member="sp_coletree.c::TreePostorder" ref="8bf99818533bf5c192e1e4791b4700cc" args="(int n, int *parent)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* TreePostorder           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sp__ienv_8c.html b/DOC/html/sp__ienv_8c.html
new file mode 100644
index 0000000..2fd57e1
--- /dev/null
+++ b/DOC/html/sp__ienv_8c.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sp_ienv.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sp_ienv.c File Reference</h1><code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="SRC_2sp__ienv_8c.html#21109476f1261abd6b256a393f5fd9e7">sp_ienv</a> (int ispec)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="21109476f1261abd6b256a393f5fd9e7"></a><!-- doxytag: member="sp_ienv.c::sp_ienv" ref="21109476f1261abd6b256a393f5fd9e7" args="(int ispec)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_ienv           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ispec</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+    Purpose   
+    =======</pre><p>
+<pre>    <a class="el" href="slu__util_8h.html#72be96e75e58564c4322ef9ef73ca65f">sp_ienv()</a> is inquired to choose machine-dependent parameters for the
+    local environment. See ISPEC for a description of the parameters.</pre><p>
+<pre>    This version provides a set of parameters which should give good,   
+    but not optimal, performance on many of the currently available   
+    computers.  Users are encouraged to modify this subroutine to set   
+    the tuning parameters for their particular machine using the option   
+    and problem size information in the arguments.</pre><p>
+<pre>    Arguments   
+    =========</pre><p>
+<pre>    ISPEC   (input) int
+            Specifies the parameter to be returned as the value of SP_IENV.   
+            = 1: the panel size w; a panel consists of w consecutive
+	         columns of matrix A in the process of Gaussian elimination.
+		 The best value depends on machine's cache characters.
+            = 2: the relaxation parameter relax; if the number of
+	         nodes (columns) in a subtree of the elimination tree is less
+		 than relax, this subtree is considered as one supernode,
+		 regardless of their row structures.
+            = 3: the maximum size for a supernode in complete LU;
+	    = 4: the minimum row dimension for 2-D blocking to be used;
+	    = 5: the minimum column dimension for 2-D blocking to be used;
+	    = 6: the estimated fills factor for L and U, compared with A;
+	    = 7: the maximum size for a supernode in ILU.</pre><p>
+<pre>   (SP_IENV) (output) int
+            >= 0: the value of the parameter specified by ISPEC   
+            < 0:  if SP_IENV = -k, the k-th argument had an illegal value.</pre><p>
+<pre>    ===================================================================== 
+</pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:41:02 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sp__preorder_8c.html b/DOC/html/sp__preorder_8c.html
new file mode 100644
index 0000000..0382aad
--- /dev/null
+++ b/DOC/html/sp__preorder_8c.html
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sp_preorder.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sp_preorder.c File Reference</h1>Permute and performs functions on columns of orginal matrix. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__preorder_8c.html#d3a9a45f02456022c7eba79e17e215bc">sp_preorder</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *etree, <a class="el" href="structS [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__preorder_8c.html#c79059104ae6abf212c41986820d358c">check_perm</a> (char *what, int n, int *perm)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="c79059104ae6abf212c41986820d358c"></a><!-- doxytag: member="sp_preorder.c::check_perm" ref="c79059104ae6abf212c41986820d358c" args="(char *what, int n, int *perm)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int check_perm           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d3a9a45f02456022c7eba79e17e215bc"></a><!-- doxytag: member="sp_preorder.c::sp_preorder" ref="d3a9a45f02456022c7eba79e17e215bc" args="(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *etree, SuperMatrix *AC)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sp_preorder           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>AC</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> <a class="el" href="slu__util_8h.html#df9c573cbfb4520a5ea820702d27cfa5">sp_preorder()</a> permutes the columns of the original matrix. It performs
+ the following steps:</pre><p>
+<pre>    1. Apply column permutation perm_c[] to A's column pointers to form AC;</pre><p>
+<pre>    2. If options->Fact = DOFACT, then
+       (1) Compute column elimination tree etree[] of AC'AC;
+       (2) Post order etree[] to get a postordered elimination tree etree[],
+           and a postorder permutation post[];
+       (3) Apply post[] permutation to columns of AC;
+       (4) Overwrite perm_c[] with the product perm_c * post.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         Specifies whether or not the elimination tree will be re-used.
+         If options->Fact == DOFACT, this means first time factor A, 
+         etree is computed, postered, and output.
+         Otherwise, re-factor A, etree is input, unchanged on exit.</pre><p>
+<pre> A       (input) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of the linear equations is A->nrow. Currently, the type of A can be:
+         Stype = NC or SLU_NCP; Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre> perm_c  (input/output) int*
+	   Column permutation vector of size A->ncol, which defines the 
+         permutation matrix Pc; perm_c[i] = j means column i of A is 
+         in position j in A*Pc.
+         If options->Fact == DOFACT, perm_c is both input and output.
+         On output, it is changed according to a postorder of etree.
+         Otherwise, perm_c is input.</pre><p>
+<pre> etree   (input/output) int*
+         Elimination tree of Pc'*A'*A*Pc, dimension A->ncol.
+         If options->Fact == DOFACT, etree is an output argument,
+         otherwise it is an input argument.
+         Note: etree is a vector of parent pointers for a forest whose
+         vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> AC      (output) SuperMatrix*
+         The resulting matrix after applied the column permutation
+         perm_c[] to matrix A. The type of AC can be:
+         Stype = SLU_NCP; Dtype = A->Dtype; Mtype = SLU_GE.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/spanel__bmod_8c.html b/DOC/html/spanel__bmod_8c.html
new file mode 100644
index 0000000..3315f11
--- /dev/null
+++ b/DOC/html/spanel__bmod_8c.html
@@ -0,0 +1,258 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/spanel_bmod.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/spanel_bmod.c File Reference</h1>Performs numeric block updates. <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="spanel__bmod_8c.html#a8bbeb2abbd5a10ac13fa9b48504691c">slsolve</a> (int, int, float *, float *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#a8bbeb2abbd5a10ac13fa9b48504691c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="spanel__bmod_8c.html#b452e957171a4d0d9cfe6abb3d8a950c">smatvec</a> (int, int, int, float *, float *, float *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#b452e957171a4d0d9cfe6abb3d8a950c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="spanel__bmod_8c.html#e6f7d2939a3b49f7b1022645be6dde4e">scheck_tempv</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="spanel__bmod_8c.html#1d0a6dc46d27416a6d5864dda1dba577">spanel_bmod</a> (const int m, const int w, const int jcol, const int nseg, float *dense, float *tempv, int *segrep, int *repfnz, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="e6f7d2939a3b49f7b1022645be6dde4e"></a><!-- doxytag: member="spanel_bmod.c::scheck_tempv" ref="e6f7d2939a3b49f7b1022645be6dde4e" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void scheck_tempv           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a8bbeb2abbd5a10ac13fa9b48504691c"></a><!-- doxytag: member="spanel_bmod.c::slsolve" ref="a8bbeb2abbd5a10ac13fa9b48504691c" args="(int, int, float *, float *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void slsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="b452e957171a4d0d9cfe6abb3d8a950c"></a><!-- doxytag: member="spanel_bmod.c::smatvec" ref="b452e957171a4d0d9cfe6abb3d8a950c" args="(int, int, int, float *, float *, float *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void smatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="1d0a6dc46d27416a6d5864dda1dba577"></a><!-- doxytag: member="spanel_bmod.c::spanel_bmod" ref="1d0a6dc46d27416a6d5864dda1dba577" args="(const int m, const int w, const int jcol, const int nseg, float *dense, float *tempv, int *segrep, int *repfnz, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void spanel_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>    Performs numeric block updates (sup-panel) in topological order.
+    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+    Special processing on the supernodal portion of L[*,j]</pre><p>
+<pre>    Before entering this routine, the original nonzeros in the panel 
+    were already copied into the spa[m,w].</pre><p>
+<pre>    Updated/Output parameters-
+    dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
+    collectively in the m-by-w vector dense[*]. 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/spanel__dfs_8c.html b/DOC/html/spanel__dfs_8c.html
new file mode 100644
index 0000000..7f3335a
--- /dev/null
+++ b/DOC/html/spanel__dfs_8c.html
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/spanel_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/spanel_dfs.c File Reference</h1>Peforms a symbolic factorization on a panel of symbols. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="spanel__dfs_8c.html#4d512383dafe1497b987e35d74eab9d8">spanel_dfs</a> (const int m, const int w, const int jcol, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, float *dense, int *panel_lsub, int *segrep, int *repfnz, int *xprune, in [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="4d512383dafe1497b987e35d74eab9d8"></a><!-- doxytag: member="spanel_dfs.c::spanel_dfs" ref="4d512383dafe1497b987e35d74eab9d8" args="(const int m, const int w, const int jcol, SuperMatrix *A, int *perm_r, int *nseg, float *dense, int *panel_lsub, int *segrep, int *repfnz, int *xprune, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void spanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel. 
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a 
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/spivotL_8c.html b/DOC/html/spivotL_8c.html
new file mode 100644
index 0000000..29ce26c
--- /dev/null
+++ b/DOC/html/spivotL_8c.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/spivotL.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/spivotL.c File Reference</h1>Performs numerical pivoting. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="spivotL_8c.html#6adadb830ad13360ce6656212f49fb29">spivotL</a> (const int jcol, const double u, int *usepr, int *perm_r, int *iperm_r, int *iperm_c, int *pivrow, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="6adadb830ad13360ce6656212f49fb29"></a><!-- doxytag: member="spivotL.c::spivotL" ref="6adadb830ad13360ce6656212f49fb29" args="(const int jcol, const double u, int *usepr, int *perm_r, int *iperm_r, int *iperm_c, int *pivrow, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int spivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+           pivot row = k;
+       ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+           pivot row = j;
+       ELSE
+           pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0      success;
+                 i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/spivotgrowth_8c.html b/DOC/html/spivotgrowth_8c.html
new file mode 100644
index 0000000..a920adb
--- /dev/null
+++ b/DOC/html/spivotgrowth_8c.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/spivotgrowth.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/spivotgrowth.c File Reference</h1>Computes the reciprocal pivot growth factor. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="spivotgrowth_8c.html#9079b4ce43557af65fee107bc8f8d66f">sPivotGrowth</a> (int ncols, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">Su [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="9079b4ce43557af65fee107bc8f8d66f"></a><!-- doxytag: member="spivotgrowth.c::sPivotGrowth" ref="9079b4ce43557af65fee107bc8f8d66f" args="(int ncols, SuperMatrix *A, int *perm_c, SuperMatrix *L, SuperMatrix *U)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float sPivotGrowth           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> Compute the reciprocal pivot growth factor of the leading ncols columns
+ of the matrix, using the formula:
+     min_j ( max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>) / max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(U_ij)</a>) )</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> ncols    (input) int
+          The number of columns of matrices A, L and U.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = NC; Dtype = SLU_S; Mtype = GE.</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SC; Dtype = SLU_S; Mtype = TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = NC;
+          Dtype = SLU_S; Mtype = TRU.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/spruneL_8c.html b/DOC/html/spruneL_8c.html
new file mode 100644
index 0000000..ca249bf
--- /dev/null
+++ b/DOC/html/spruneL_8c.html
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/spruneL.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/spruneL.c File Reference</h1>Prunes the L-structure. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="spruneL_8c.html#81686daf606ed26d55e3b441ed939f08">spruneL</a> (const int jcol, const int *perm_r, const int pivrow, const int nseg, const int *segrep, const int *repfnz, int *xprune, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ *</pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="81686daf606ed26d55e3b441ed939f08"></a><!-- doxytag: member="spruneL.c::spruneL" ref="81686daf606ed26d55e3b441ed939f08" args="(const int jcol, const int *perm_r, const int pivrow, const int nseg, const int *segrep, const int *repfnz, int *xprune, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void spruneL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Prunes the L-structure of supernodes whose L-structure
+   contains the current pivot row "pivrow"
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sreadhb_8c.html b/DOC/html/sreadhb_8c.html
new file mode 100644
index 0000000..f00b264
--- /dev/null
+++ b/DOC/html/sreadhb_8c.html
@@ -0,0 +1,344 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sreadhb.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sreadhb.c File Reference</h1>Read a matrix stored in Harwell-Boeing format. <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadhb_8c.html#752858dee322b95e4175c3f5d42ad6cd">sDumpLine</a> (FILE *fp)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line.  <a href="#752858dee322b95e4175c3f5d42ad6cd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadhb_8c.html#b0bd0cdb6d30a7cb74e401aa6ac3bce1">sParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadhb_8c.html#97275461fb2f2435189f35f5dd7c3fce">sParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadhb_8c.html#fbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadhb_8c.html#d90abece4b82f3f44fdefa92c28bda09">sReadValues</a> (FILE *fp, int n, float *destination, int perline, int persize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadhb_8c.html#ad3b24bf891015e699d67ed53fb3b21b">sreadhb</a> (int *nrow, int *ncol, int *nonz, float **nzval, int **rowind, int **colptr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines.  <a href="#ad3b24bf891015e699d67ed53fb3b21b"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Purpose
+ =======</pre><p>
+<pre> Read a FLOAT PRECISION matrix stored in Harwell-Boeing format 
+ as described below.</pre><p>
+<pre> Line 1 (A72,A8) 
+  	Col. 1 - 72   Title (TITLE) 
+	Col. 73 - 80  Key (KEY)</pre><p>
+<pre> Line 2 (5I14) 
+ 	Col. 1 - 14   Total number of lines excluding header (TOTCRD) 
+ 	Col. 15 - 28  Number of lines for pointers (PTRCRD) 
+ 	Col. 29 - 42  Number of lines for row (or variable) indices (INDCRD) 
+ 	Col. 43 - 56  Number of lines for numerical values (VALCRD) 
+	Col. 57 - 70  Number of lines for right-hand sides (RHSCRD) 
+                    (including starting guesses and solution vectors 
+		       if present) 
+           	      (zero indicates no right-hand side data is present)</pre><p>
+<pre> Line 3 (A3, 11X, 4I14) 
+   	Col. 1 - 3    Matrix type (see below) (MXTYPE) 
+ 	Col. 15 - 28  Number of rows (or variables) (NROW) 
+ 	Col. 29 - 42  Number of columns (or elements) (NCOL) 
+	Col. 43 - 56  Number of row (or variable) indices (NNZERO) 
+	              (equal to number of entries for assembled matrices) 
+ 	Col. 57 - 70  Number of elemental matrix entries (NELTVL) 
+	              (zero in the case of assembled matrices) 
+ Line 4 (2A16, 2A20) 
+ 	Col. 1 - 16   Format for pointers (PTRFMT) 
+	Col. 17 - 32  Format for row (or variable) indices (INDFMT) 
+	Col. 33 - 52  Format for numerical values of coefficient matrix (VALFMT) 
+ 	Col. 53 - 72 Format for numerical values of right-hand sides (RHSFMT)</pre><p>
+<pre> Line 5 (A3, 11X, 2I14) Only present if there are right-hand sides present 
+    	Col. 1 	      Right-hand side type: 
+	         	  F for full storage or M for same format as matrix 
+    	Col. 2        G if a starting vector(s) (Guess) is supplied. (RHSTYP) 
+    	Col. 3        X if an exact solution vector(s) is supplied. 
+	Col. 15 - 28  Number of right-hand sides (NRHS) 
+	Col. 29 - 42  Number of row indices (NRHSIX) 
+          	      (ignored in case of unassembled matrices)</pre><p>
+<pre> The three character type field on line 3 describes the matrix type. 
+ The following table lists the permitted values for each of the three 
+ characters. As an example of the type field, RSA denotes that the matrix 
+ is real, symmetric, and assembled.</pre><p>
+<pre> First Character: 
+	R Real matrix 
+	C Complex matrix 
+	P Pattern only (no numerical values supplied)</pre><p>
+<pre> Second Character: 
+	S Symmetric 
+	U Unsymmetric 
+	H Hermitian 
+	Z Skew symmetric 
+	R Rectangular</pre><p>
+<pre> Third Character: 
+	A Assembled 
+	E Elemental matrices (unassembled)</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="fbec2a501b92e7e7bb13af2e21520522"></a><!-- doxytag: member="sreadhb.c::ReadVector" ref="fbec2a501b92e7e7bb13af2e21520522" args="(FILE *fp, int n, int *where, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int ReadVector           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>where</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="752858dee322b95e4175c3f5d42ad6cd"></a><!-- doxytag: member="sreadhb.c::sDumpLine" ref="752858dee322b95e4175c3f5d42ad6cd" args="(FILE *fp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sDumpLine           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="97275461fb2f2435189f35f5dd7c3fce"></a><!-- doxytag: member="sreadhb.c::sParseFloatFormat" ref="97275461fb2f2435189f35f5dd7c3fce" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sParseFloatFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b0bd0cdb6d30a7cb74e401aa6ac3bce1"></a><!-- doxytag: member="sreadhb.c::sParseIntFormat" ref="b0bd0cdb6d30a7cb74e401aa6ac3bce1" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sParseIntFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ad3b24bf891015e699d67ed53fb3b21b"></a><!-- doxytag: member="sreadhb.c::sreadhb" ref="ad3b24bf891015e699d67ed53fb3b21b" args="(int *nrow, int *ncol, int *nonz, float **nzval, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sreadhb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nonz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d90abece4b82f3f44fdefa92c28bda09"></a><!-- doxytag: member="sreadhb.c::sReadValues" ref="d90abece4b82f3f44fdefa92c28bda09" args="(FILE *fp, int n, float *destination, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sReadValues           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>destination</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sreadrb_8c.html b/DOC/html/sreadrb_8c.html
new file mode 100644
index 0000000..3653273
--- /dev/null
+++ b/DOC/html/sreadrb_8c.html
@@ -0,0 +1,296 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sreadrb.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sreadrb.c File Reference</h1>Read a matrix stored in Rutherford-Boeing format. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadrb_8c.html#d40eef9e3223cc000a38a8fb326f1dd1">sDumpLine</a> (FILE *fp)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line.  <a href="#d40eef9e3223cc000a38a8fb326f1dd1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadrb_8c.html#3ff3c5edc1cf7301cff66260418cac52">sParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadrb_8c.html#40bcf62d1e9ac32095b5868b35cef780">sParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadrb_8c.html#fbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadrb_8c.html#43a5fc149958a15cd7e3a30b2a1411cf">sReadValues</a> (FILE *fp, int n, float *destination, int perline, int persize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadrb_8c.html#9db4e3af3f6d1037a275ebb516efe51c">sreadrb</a> (int *nrow, int *ncol, int *nonz, float **nzval, int **rowind, int **colptr)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre><p>
+Purpose =======<p>
+Read a FLOAT PRECISION matrix stored in Rutherford-Boeing format as described below.<p>
+Line 1 (A72, A8) Col. 1 - 72 Title (TITLE) Col. 73 - 80 Matrix name / identifier (MTRXID)<p>
+Line 2 (I14, 3(1X, I13)) Col. 1 - 14 Total number of lines excluding header (TOTCRD) Col. 16 - 28 Number of lines for pointers (PTRCRD) Col. 30 - 42 Number of lines for row (or variable) indices (INDCRD) Col. 44 - 56 Number of lines for numerical values (VALCRD)<p>
+Line 3 (A3, 11X, 4(1X, I13)) Col. 1 - 3 Matrix type (see below) (MXTYPE) Col. 15 - 28 Compressed Column: Number of rows (NROW) Elemental: Largest integer used to index variable (MVAR) Col. 30 - 42 Compressed Column: Number of columns (NCOL) Elemental: Number of element matrices (NELT) Col. 44 - 56 Compressed Column: Number of entries (NNZERO) Elemental: Number of variable indeces (NVARIX) Col. 58 - 70 Compressed Column: Unused, explicitly zero Elemental: Number of elemental matrix entrie [...]
+Line 4 (2A16, A20) Col. 1 - 16 Fortran format for pointers (PTRFMT) Col. 17 - 32 Fortran format for row (or variable) indices (INDFMT) Col. 33 - 52 Fortran format for numerical values of coefficient matrix (VALFMT) (blank in the case of matrix patterns)<p>
+The three character type field on line 3 describes the matrix type. The following table lists the permitted values for each of the three characters. As an example of the type field, RSA denotes that the matrix is real, symmetric, and assembled.<p>
+First Character: R Real matrix C Complex matrix I integer matrix P Pattern only (no numerical values supplied) Q Pattern only (numerical values supplied in associated auxiliary value file)<p>
+Second Character: S Symmetric U Unsymmetric H Hermitian Z Skew symmetric R Rectangular<p>
+Third Character: A Compressed column form E Elemental form<hr><h2>Function Documentation</h2>
+<a class="anchor" name="fbec2a501b92e7e7bb13af2e21520522"></a><!-- doxytag: member="sreadrb.c::ReadVector" ref="fbec2a501b92e7e7bb13af2e21520522" args="(FILE *fp, int n, int *where, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int ReadVector           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>where</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d40eef9e3223cc000a38a8fb326f1dd1"></a><!-- doxytag: member="sreadrb.c::sDumpLine" ref="d40eef9e3223cc000a38a8fb326f1dd1" args="(FILE *fp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int sDumpLine           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="40bcf62d1e9ac32095b5868b35cef780"></a><!-- doxytag: member="sreadrb.c::sParseFloatFormat" ref="40bcf62d1e9ac32095b5868b35cef780" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int sParseFloatFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3ff3c5edc1cf7301cff66260418cac52"></a><!-- doxytag: member="sreadrb.c::sParseIntFormat" ref="3ff3c5edc1cf7301cff66260418cac52" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int sParseIntFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9db4e3af3f6d1037a275ebb516efe51c"></a><!-- doxytag: member="sreadrb.c::sreadrb" ref="9db4e3af3f6d1037a275ebb516efe51c" args="(int *nrow, int *ncol, int *nonz, float **nzval, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sreadrb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nonz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="43a5fc149958a15cd7e3a30b2a1411cf"></a><!-- doxytag: member="sreadrb.c::sReadValues" ref="43a5fc149958a15cd7e3a30b2a1411cf" args="(FILE *fp, int n, float *destination, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int sReadValues           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>destination</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sreadtriple_8c.html b/DOC/html/sreadtriple_8c.html
new file mode 100644
index 0000000..75817c5
--- /dev/null
+++ b/DOC/html/sreadtriple_8c.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sreadtriple.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sreadtriple.c File Reference</h1>Read a matrix stored in triplet (coordinate) format. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadtriple_8c.html#408246d01d1879fa188dd4e28602795d">sreadtriple</a> (int *m, int *n, int *nonz, float **nzval, int **rowind, int **colptr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadtriple_8c.html#8d3e9341e80abc5aa02486a549621534">sreadrhs</a> (int m, float *b)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="8d3e9341e80abc5aa02486a549621534"></a><!-- doxytag: member="sreadtriple.c::sreadrhs" ref="8d3e9341e80abc5aa02486a549621534" args="(int m, float *b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sreadrhs           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>b</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="408246d01d1879fa188dd4e28602795d"></a><!-- doxytag: member="sreadtriple.c::sreadtriple" ref="408246d01d1879fa188dd4e28602795d" args="(int *m, int *n, int *nonz, float **nzval, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sreadtriple           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nonz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ssnode__bmod_8c.html b/DOC/html/ssnode__bmod_8c.html
new file mode 100644
index 0000000..5e4a9d1
--- /dev/null
+++ b/DOC/html/ssnode__bmod_8c.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ssnode_bmod.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ssnode_bmod.c File Reference</h1>Performs numeric block updates within the relaxed snode. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ssnode__bmod_8c.html#60492cc66830945bd7b3521c18312d4a">ssnode_bmod</a> (const int jcol, const int jsupno, const int fsupc, float *dense, float *tempv, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode.  <a href="#60492cc66830945bd7b3521c18312d4a"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="60492cc66830945bd7b3521c18312d4a"></a><!-- doxytag: member="ssnode_bmod.c::ssnode_bmod" ref="60492cc66830945bd7b3521c18312d4a" args="(const int jcol, const int jsupno, const int fsupc, float *dense, float *tempv, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ssnode_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jsupno</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>fsupc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ssnode__dfs_8c.html b/DOC/html/ssnode__dfs_8c.html
new file mode 100644
index 0000000..731882a
--- /dev/null
+++ b/DOC/html/ssnode__dfs_8c.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ssnode_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ssnode_dfs.c File Reference</h1>Determines the union of row structures of columns within the relaxed node. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ssnode__dfs_8c.html#5b66817c89ddf9f74e4773b49dc72872">ssnode_dfs</a> (const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *xprune, int *marker, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="5b66817c89ddf9f74e4773b49dc72872"></a><!-- doxytag: member="ssnode_dfs.c::ssnode_dfs" ref="5b66817c89ddf9f74e4773b49dc72872" args="(const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *xprune, int *marker, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ssnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="slu__sdefs_8h.html#d9d54c8dfc11f1e034b4b7175be60ffb">ssnode_dfs()</a> - Determine the union of the row structures of those 
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ssp__blas2_8c.html b/DOC/html/ssp__blas2_8c.html
new file mode 100644
index 0000000..1fdc120
--- /dev/null
+++ b/DOC/html/ssp__blas2_8c.html
@@ -0,0 +1,403 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ssp_blas2.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ssp_blas2.c File Reference</h1>Sparse BLAS 2, using some dense BLAS 2 operations. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ssp__blas2_8c.html#25ea48f4f948c68a423f5bd3929e3c1f">susolve</a> (int, int, float *, float *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#25ea48f4f948c68a423f5bd3929e3c1f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ssp__blas2_8c.html#a8bbeb2abbd5a10ac13fa9b48504691c">slsolve</a> (int, int, float *, float *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#a8bbeb2abbd5a10ac13fa9b48504691c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ssp__blas2_8c.html#b452e957171a4d0d9cfe6abb3d8a950c">smatvec</a> (int, int, int, float *, float *, float *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#b452e957171a4d0d9cfe6abb3d8a950c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ssp__blas2_8c.html#b9e8302d09840e67df27ddd4defaa621">sp_strsv</a> (char *uplo, char *trans, char *diag, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, float *x, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat, int *info)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b.  <a href="#b9e8302d09840e67df27ddd4defaa621"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ssp__blas2_8c.html#3a14fab0d3fc42c621199aed6962ab3e">sp_sgemv</a> (char *trans, float alpha, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, float *x, int incx, float beta, float *y, int incy)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y,.  <a href="#3a14fab0d3fc42c621199aed6962ab3e"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="a8bbeb2abbd5a10ac13fa9b48504691c"></a><!-- doxytag: member="ssp_blas2.c::slsolve" ref="a8bbeb2abbd5a10ac13fa9b48504691c" args="(int, int, float *, float *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void slsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="b452e957171a4d0d9cfe6abb3d8a950c"></a><!-- doxytag: member="ssp_blas2.c::smatvec" ref="b452e957171a4d0d9cfe6abb3d8a950c" args="(int, int, int, float *, float *, float *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void smatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="3a14fab0d3fc42c621199aed6962ab3e"></a><!-- doxytag: member="ssp_blas2.c::sp_sgemv" ref="3a14fab0d3fc42c621199aed6962ab3e" args="(char *trans, float alpha, SuperMatrix *A, float *x, int incx, float beta, float *y, int incy)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_sgemv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incy</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   <a class="el" href="slu__sdefs_8h.html#9e543b2d14781b56ef349114012b4fc9" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x...">sp_sgemv()</a>  performs one of the matrix-vector operations   
+      y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
+   where alpha and beta are scalars, x and y are vectors and A is a
+   sparse A->nrow by A->ncol matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANS  - (input) char*
+            On entry, TRANS specifies the operation to be performed as   
+            follows:   
+               TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
+               TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
+               TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.</pre><p>
+<pre>   ALPHA  - (input) float
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+            Currently, the type of A can be:
+                Stype = NC or NCP; Dtype = SLU_S; Mtype = GE. 
+            In the future, more general A can be handled.</pre><p>
+<pre>   X      - (input) float*, array of DIMENSION at least   
+            ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
+            and at least   
+            ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
+            Before entry, the incremented array X must contain the   
+            vector x.</pre><p>
+<pre>   INCX   - (input) int
+            On entry, INCX specifies the increment for the elements of   
+            X. INCX must not be zero.</pre><p>
+<pre>   BETA   - (input) float
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then Y need not be set on input.</pre><p>
+<pre>   Y      - (output) float*,  array of DIMENSION at least   
+            ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
+            and at least   
+            ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
+            Before entry with BETA non-zero, the incremented array Y   
+            must contain the vector y. On exit, Y is overwritten by the 
+            updated vector y.</pre><p>
+<pre>   INCY   - (input) int
+            On entry, INCY specifies the increment for the elements of   
+            Y. INCY must not be zero.</pre><p>
+<pre>   ==== Sparse Level 2 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="b9e8302d09840e67df27ddd4defaa621"></a><!-- doxytag: member="ssp_blas2.c::sp_strsv" ref="b9e8302d09840e67df27ddd4defaa621" args="(char *uplo, char *trans, char *diag, SuperMatrix *L, SuperMatrix *U, float *x, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_strsv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>uplo</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>diag</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose
+   =======</pre><p>
+<pre>   <a class="el" href="slu__sdefs_8h.html#a6d287b6b9bcaf72a692343e614c429c" title="Solves one of the systems of equations A*x = b, or A'*x = b.">sp_strsv()</a> solves one of the systems of equations   
+       A*x = b,   or   A'*x = b,
+   where b and x are n element vectors and A is a sparse unit , or   
+   non-unit, upper or lower triangular matrix.   
+   No test for singularity or near-singularity is included in this   
+   routine. Such tests must be performed before calling this routine.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   uplo   - (input) char*
+            On entry, uplo specifies whether the matrix is an upper or   
+             lower triangular matrix as follows:   
+                uplo = 'U' or 'u'   A is an upper triangular matrix.   
+                uplo = 'L' or 'l'   A is a lower triangular matrix.</pre><p>
+<pre>   trans  - (input) char*
+             On entry, trans specifies the equations to be solved as   
+             follows:   
+                trans = 'N' or 'n'   A*x = b.   
+                trans = 'T' or 't'   A'*x = b.
+                trans = 'C' or 'c'   A'*x = b.</pre><p>
+<pre>   diag   - (input) char*
+             On entry, diag specifies whether or not A is unit   
+             triangular as follows:   
+                diag = 'U' or 'u'   A is assumed to be unit triangular.   
+                diag = 'N' or 'n'   A is not assumed to be unit   
+                                    triangular.</pre><p>
+<pre>   L       - (input) SuperMatrix*
+	       The factor L from the factorization Pr*A*Pc=L*U. Use
+             compressed row subscripts storage for supernodes,
+             i.e., L has types: Stype = SC, Dtype = SLU_S, Mtype = TRLU.</pre><p>
+<pre>   U       - (input) SuperMatrix*
+	        The factor U from the factorization Pr*A*Pc=L*U.
+	        U has types: Stype = NC, Dtype = SLU_S, Mtype = TRU.</pre><p>
+<pre>   x       - (input/output) float*
+             Before entry, the incremented array X must contain the n   
+             element right-hand side vector b. On exit, X is overwritten 
+             with the solution vector x.</pre><p>
+<pre>   info    - (output) int*
+             If *info = -i, the i-th argument had an illegal value.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="25ea48f4f948c68a423f5bd3929e3c1f"></a><!-- doxytag: member="ssp_blas2.c::susolve" ref="25ea48f4f948c68a423f5bd3929e3c1f" args="(int, int, float *, float *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void susolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/ssp__blas3_8c.html b/DOC/html/ssp__blas3_8c.html
new file mode 100644
index 0000000..bcdb3a8
--- /dev/null
+++ b/DOC/html/ssp__blas3_8c.html
@@ -0,0 +1,199 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/ssp_blas3.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/ssp_blas3.c File Reference</h1>Sparse BLAS3, using some dense BLAS3 operations. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ssp__blas3_8c.html#4922193147765a6b36d753e5db65a268">sp_sgemm</a> (char *transa, char *transb, int m, int n, int k, float alpha, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, float *b, int ldb, float beta, float *c, int ldc)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="4922193147765a6b36d753e5db65a268"></a><!-- doxytag: member="ssp_blas3.c::sp_sgemm" ref="4922193147765a6b36d753e5db65a268" args="(char *transa, char *transb, int m, int n, int k, float alpha, SuperMatrix *A, float *b, int ldb, float beta, float *c, int ldc)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_sgemm           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transa</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   sp_s performs one of the matrix-matrix operations</pre><p>
+<pre>      C := alpha*op( A )*op( B ) + beta*C,</pre><p>
+<pre>   where  op( X ) is one of</pre><p>
+<pre>      op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),</pre><p>
+<pre>   alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
+   an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANSA - (input) char*
+            On entry, TRANSA specifies the form of op( A ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSA = 'N' or 'n',  op( A ) = A.   
+               TRANSA = 'T' or 't',  op( A ) = A'.   
+               TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
+            Unchanged on exit.</pre><p>
+<pre>   TRANSB - (input) char*
+            On entry, TRANSB specifies the form of op( B ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSB = 'N' or 'n',  op( B ) = B.   
+               TRANSB = 'T' or 't',  op( B ) = B'.   
+               TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
+            Unchanged on exit.</pre><p>
+<pre>   M      - (input) int   
+            On entry,  M  specifies  the number of rows of the matrix 
+	     op( A ) and of the matrix C.  M must be at least zero. 
+	     Unchanged on exit.</pre><p>
+<pre>   N      - (input) int
+            On entry,  N specifies the number of columns of the matrix 
+	     op( B ) and the number of columns of the matrix C. N must be 
+	     at least zero.
+	     Unchanged on exit.</pre><p>
+<pre>   K      - (input) int
+            On entry, K specifies the number of columns of the matrix 
+	     op( A ) and the number of rows of the matrix op( B ). K must 
+	     be at least  zero.   
+           Unchanged on exit.</pre><p>
+<pre>   ALPHA  - (input) float
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+            Currently, the type of A can be:
+                Stype = NC or NCP; Dtype = SLU_S; Mtype = GE. 
+            In the future, more general A can be handled.</pre><p>
+<pre>   B      - FLOAT PRECISION array of DIMENSION ( LDB, kb ), where kb is 
+            n when TRANSB = 'N' or 'n',  and is  k otherwise.   
+            Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
+            part of the array B must contain the matrix B, otherwise 
+            the leading n by k part of the array B must contain the 
+            matrix B.   
+            Unchanged on exit.</pre><p>
+<pre>   LDB    - (input) int
+            On entry, LDB specifies the first dimension of B as declared 
+            in the calling (sub) program. LDB must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max( 1, n )</a>.  
+            Unchanged on exit.</pre><p>
+<pre>   BETA   - (input) float
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then C need not be set on input.</pre><p>
+<pre>   C      - FLOAT PRECISION array of DIMENSION ( LDC, n ).   
+            Before entry, the leading m by n part of the array C must 
+            contain the matrix C,  except when beta is zero, in which 
+            case C need not be set on entry.   
+            On exit, the array C is overwritten by the m by n matrix 
+	     ( alpha*op( A )*B + beta*C ).</pre><p>
+<pre>   LDC    - (input) int
+            On entry, LDC specifies the first dimension of C as declared 
+            in the calling (sub)program. LDC must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max(1,m)</a>.   
+            Unchanged on exit.</pre><p>
+<pre>   ==== Sparse Level 3 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structColamd__Col__struct.html b/DOC/html/structColamd__Col__struct.html
new file mode 100644
index 0000000..7e763ca
--- /dev/null
+++ b/DOC/html/structColamd__Col__struct.html
@@ -0,0 +1,301 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Colamd_Col_struct Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>Colamd_Col_struct Struct Reference</h1><!-- doxytag: class="Colamd_Col_struct" --><code>#include <<a class="el" href="colamd_8h-source.html">colamd.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Col__struct.html#55c862b22c87023300b5ccb3044e0409">start</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Col__struct.html#c61e32f7e56a6673058c0d57cb170f22">length</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap>union {</td></tr>
+
+<tr><td class="memItemLeft" nowrap>   int   <a class="el" href="structColamd__Col__struct.html#a52760c0c184f617d10b9946618ebc9b">thickness</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap>   int   <a class="el" href="structColamd__Col__struct.html#abae0343baec2ef7f9681bf60a23bacf">parent</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Col__struct.html#54fd02e0751a496e05ed7f21a2b2a1f0">shared1</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap>union {</td></tr>
+
+<tr><td class="memItemLeft" nowrap>   int   <a class="el" href="structColamd__Col__struct.html#a3cc8f4e719f65ba6fead93f272d7237">score</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap>   int   <a class="el" href="structColamd__Col__struct.html#22ecb292b2471f0a09316656713bfe6e">order</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Col__struct.html#f228addd53ebe168293e7e5c3edd372e">shared2</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap>union {</td></tr>
+
+<tr><td class="memItemLeft" nowrap>   int   <a class="el" href="structColamd__Col__struct.html#16435510e5d93025bb7b9f5715a5ba1c">headhash</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap>   int   <a class="el" href="structColamd__Col__struct.html#babfe23e6edb41b345085470e52d7264">hash</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap>   int   <a class="el" href="structColamd__Col__struct.html#23aaabe8f73f1ae9016ea4bb24d494a7">prev</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Col__struct.html#5fc60d7e3cd5df5789a2999c08b47732">shared3</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap>union {</td></tr>
+
+<tr><td class="memItemLeft" nowrap>   int   <a class="el" href="structColamd__Col__struct.html#39ab48d1ea2a8f6d365b60886c9ac5a1">degree_next</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap>   int   <a class="el" href="structColamd__Col__struct.html#640f93b7885fb94b7dc0330041b53795">hash_next</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Col__struct.html#4ff41bc973d32218127f4922e4c7019a">shared4</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="55c862b22c87023300b5ccb3044e0409"></a><!-- doxytag: member="Colamd_Col_struct::start" ref="55c862b22c87023300b5ccb3044e0409" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Col__struct.html#55c862b22c87023300b5ccb3044e0409">Colamd_Col_struct::start</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c61e32f7e56a6673058c0d57cb170f22"></a><!-- doxytag: member="Colamd_Col_struct::length" ref="c61e32f7e56a6673058c0d57cb170f22" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Col__struct.html#c61e32f7e56a6673058c0d57cb170f22">Colamd_Col_struct::length</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a52760c0c184f617d10b9946618ebc9b"></a><!-- doxytag: member="Colamd_Col_struct::thickness" ref="a52760c0c184f617d10b9946618ebc9b" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Col__struct.html#a52760c0c184f617d10b9946618ebc9b">Colamd_Col_struct::thickness</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="abae0343baec2ef7f9681bf60a23bacf"></a><!-- doxytag: member="Colamd_Col_struct::parent" ref="abae0343baec2ef7f9681bf60a23bacf" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Col__struct.html#abae0343baec2ef7f9681bf60a23bacf">Colamd_Col_struct::parent</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="54fd02e0751a496e05ed7f21a2b2a1f0"></a><!-- doxytag: member="Colamd_Col_struct::shared1" ref="54fd02e0751a496e05ed7f21a2b2a1f0" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">union { ... }   <a class="el" href="structColamd__Col__struct.html#54fd02e0751a496e05ed7f21a2b2a1f0">Colamd_Col_struct::shared1</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a3cc8f4e719f65ba6fead93f272d7237"></a><!-- doxytag: member="Colamd_Col_struct::score" ref="a3cc8f4e719f65ba6fead93f272d7237" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Col__struct.html#a3cc8f4e719f65ba6fead93f272d7237">Colamd_Col_struct::score</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="22ecb292b2471f0a09316656713bfe6e"></a><!-- doxytag: member="Colamd_Col_struct::order" ref="22ecb292b2471f0a09316656713bfe6e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Col__struct.html#22ecb292b2471f0a09316656713bfe6e">Colamd_Col_struct::order</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f228addd53ebe168293e7e5c3edd372e"></a><!-- doxytag: member="Colamd_Col_struct::shared2" ref="f228addd53ebe168293e7e5c3edd372e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">union { ... }   <a class="el" href="structColamd__Col__struct.html#f228addd53ebe168293e7e5c3edd372e">Colamd_Col_struct::shared2</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="16435510e5d93025bb7b9f5715a5ba1c"></a><!-- doxytag: member="Colamd_Col_struct::headhash" ref="16435510e5d93025bb7b9f5715a5ba1c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Col__struct.html#16435510e5d93025bb7b9f5715a5ba1c">Colamd_Col_struct::headhash</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="babfe23e6edb41b345085470e52d7264"></a><!-- doxytag: member="Colamd_Col_struct::hash" ref="babfe23e6edb41b345085470e52d7264" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Col__struct.html#babfe23e6edb41b345085470e52d7264">Colamd_Col_struct::hash</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="23aaabe8f73f1ae9016ea4bb24d494a7"></a><!-- doxytag: member="Colamd_Col_struct::prev" ref="23aaabe8f73f1ae9016ea4bb24d494a7" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Col__struct.html#23aaabe8f73f1ae9016ea4bb24d494a7">Colamd_Col_struct::prev</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5fc60d7e3cd5df5789a2999c08b47732"></a><!-- doxytag: member="Colamd_Col_struct::shared3" ref="5fc60d7e3cd5df5789a2999c08b47732" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">union { ... }   <a class="el" href="structColamd__Col__struct.html#5fc60d7e3cd5df5789a2999c08b47732">Colamd_Col_struct::shared3</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="39ab48d1ea2a8f6d365b60886c9ac5a1"></a><!-- doxytag: member="Colamd_Col_struct::degree_next" ref="39ab48d1ea2a8f6d365b60886c9ac5a1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Col__struct.html#39ab48d1ea2a8f6d365b60886c9ac5a1">Colamd_Col_struct::degree_next</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="640f93b7885fb94b7dc0330041b53795"></a><!-- doxytag: member="Colamd_Col_struct::hash_next" ref="640f93b7885fb94b7dc0330041b53795" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Col__struct.html#640f93b7885fb94b7dc0330041b53795">Colamd_Col_struct::hash_next</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4ff41bc973d32218127f4922e4c7019a"></a><!-- doxytag: member="Colamd_Col_struct::shared4" ref="4ff41bc973d32218127f4922e4c7019a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">union { ... }   <a class="el" href="structColamd__Col__struct.html#4ff41bc973d32218127f4922e4c7019a">Colamd_Col_struct::shared4</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="colamd_8h-source.html">colamd.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structColamd__Row__struct.html b/DOC/html/structColamd__Row__struct.html
new file mode 100644
index 0000000..ba533f5
--- /dev/null
+++ b/DOC/html/structColamd__Row__struct.html
@@ -0,0 +1,178 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: Colamd_Row_struct Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>Colamd_Row_struct Struct Reference</h1><!-- doxytag: class="Colamd_Row_struct" --><code>#include <<a class="el" href="colamd_8h-source.html">colamd.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Row__struct.html#24285056395b1cf2e28ea3810d67d09d">start</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Row__struct.html#4cf6076c6aeab980aa2add1c24913c35">length</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap>union {</td></tr>
+
+<tr><td class="memItemLeft" nowrap>   int   <a class="el" href="structColamd__Row__struct.html#01e336d70f1cbe2ac615d4b23c480ecd">degree</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap>   int   <a class="el" href="structColamd__Row__struct.html#cb0d165350cbbdad8dc4260bd48b1f80">p</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Row__struct.html#2562d9df5820b202cd5e83696fc053f5">shared1</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap>union {</td></tr>
+
+<tr><td class="memItemLeft" nowrap>   int   <a class="el" href="structColamd__Row__struct.html#00b8bd69ce2b84d9b75c5503d80c5080">mark</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap>   int   <a class="el" href="structColamd__Row__struct.html#f7bf4c87b04e63e6b1abc2c86e8d1376">first_column</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Row__struct.html#eb2ca96dcadf6490c614ed559acef59a">shared2</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="24285056395b1cf2e28ea3810d67d09d"></a><!-- doxytag: member="Colamd_Row_struct::start" ref="24285056395b1cf2e28ea3810d67d09d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Row__struct.html#24285056395b1cf2e28ea3810d67d09d">Colamd_Row_struct::start</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4cf6076c6aeab980aa2add1c24913c35"></a><!-- doxytag: member="Colamd_Row_struct::length" ref="4cf6076c6aeab980aa2add1c24913c35" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Row__struct.html#4cf6076c6aeab980aa2add1c24913c35">Colamd_Row_struct::length</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="01e336d70f1cbe2ac615d4b23c480ecd"></a><!-- doxytag: member="Colamd_Row_struct::degree" ref="01e336d70f1cbe2ac615d4b23c480ecd" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Row__struct.html#01e336d70f1cbe2ac615d4b23c480ecd">Colamd_Row_struct::degree</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cb0d165350cbbdad8dc4260bd48b1f80"></a><!-- doxytag: member="Colamd_Row_struct::p" ref="cb0d165350cbbdad8dc4260bd48b1f80" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Row__struct.html#cb0d165350cbbdad8dc4260bd48b1f80">Colamd_Row_struct::p</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2562d9df5820b202cd5e83696fc053f5"></a><!-- doxytag: member="Colamd_Row_struct::shared1" ref="2562d9df5820b202cd5e83696fc053f5" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">union { ... }   <a class="el" href="structColamd__Row__struct.html#2562d9df5820b202cd5e83696fc053f5">Colamd_Row_struct::shared1</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="00b8bd69ce2b84d9b75c5503d80c5080"></a><!-- doxytag: member="Colamd_Row_struct::mark" ref="00b8bd69ce2b84d9b75c5503d80c5080" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Row__struct.html#00b8bd69ce2b84d9b75c5503d80c5080">Colamd_Row_struct::mark</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f7bf4c87b04e63e6b1abc2c86e8d1376"></a><!-- doxytag: member="Colamd_Row_struct::first_column" ref="f7bf4c87b04e63e6b1abc2c86e8d1376" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structColamd__Row__struct.html#f7bf4c87b04e63e6b1abc2c86e8d1376">Colamd_Row_struct::first_column</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="eb2ca96dcadf6490c614ed559acef59a"></a><!-- doxytag: member="Colamd_Row_struct::shared2" ref="eb2ca96dcadf6490c614ed559acef59a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">union { ... }   <a class="el" href="structColamd__Row__struct.html#eb2ca96dcadf6490c614ed559acef59a">Colamd_Row_struct::shared2</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="colamd_8h-source.html">colamd.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structDNformat.html b/DOC/html/structDNformat.html
new file mode 100644
index 0000000..add774d
--- /dev/null
+++ b/DOC/html/structDNformat.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: DNformat Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>DNformat Struct Reference</h1><!-- doxytag: class="DNformat" --><code>#include <<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structDNformat.html#6b584837b30f33849c6c3b070aade816">lda</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structDNformat.html#54a061275c52aa9e38f4cb65da46d48c">nzval</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="6b584837b30f33849c6c3b070aade816"></a><!-- doxytag: member="DNformat::lda" ref="6b584837b30f33849c6c3b070aade816" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> <a class="el" href="structDNformat.html#6b584837b30f33849c6c3b070aade816">DNformat::lda</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="54a061275c52aa9e38f4cb65da46d48c"></a><!-- doxytag: member="DNformat::nzval" ref="54a061275c52aa9e38f4cb65da46d48c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* <a class="el" href="structDNformat.html#54a061275c52aa9e38f4cb65da46d48c">DNformat::nzval</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structGlobalLU__t.html b/DOC/html/structGlobalLU__t.html
new file mode 100644
index 0000000..a24d1ea
--- /dev/null
+++ b/DOC/html/structGlobalLU__t.html
@@ -0,0 +1,837 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: GlobalLU_t Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>GlobalLU_t Struct Reference</h1><!-- doxytag: class="GlobalLU_t" --><code>#include <<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#94902a11c68912c2d456a58edd29f31d">xsup</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#fe003e9f68a924d5ba66c6f655bea55c">supno</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#4e7e8cd3ba09e252a04eaf0b8af5fccd">lsub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#c6f1655e303e2947524c29182d0f6a1e">xlsub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structcomplex.html">complex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#cc7533550bb4c3479635a704ebfa9eb1">lusup</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#aa63b1382a358278bd2775c921a84246">xlusup</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structcomplex.html">complex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#f9e46ab287726ab6be2c22cca773856d">ucol</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#96b0443ea47703100b9ecad92137dda9">usub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#4cbf4786dd6fc6541d5e097b27ab6835">xusub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#1f77873222d31cd15eb781fdbf18df18">nzlmax</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#5238cd65bea5ca45046238d908073982">nzumax</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#e67b1da1b096e92b7ddadf6e4a159481">nzlumax</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#48fcf5a7ff751514d92feeb40370fe5e">n</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f6">LU_space_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#9089591bf01db5135a9d52cb732b0f3c">MemModel</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#1923c63f76eab75f5022f025c25a82a7">num_expansions</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structe__node.html">ExpHeader</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#edd2ee950bd57f92d4aa9028738b9bdc">expanders</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structLU__stack__t.html">LU_stack_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#9c8f24b1d7ed85996df0ab869b472b0e">stack</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#94902a11c68912c2d456a58edd29f31d">xsup</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#fe003e9f68a924d5ba66c6f655bea55c">supno</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#4e7e8cd3ba09e252a04eaf0b8af5fccd">lsub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#c6f1655e303e2947524c29182d0f6a1e">xlsub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#726d0a12957a3de9a841b833b8451c09">lusup</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#aa63b1382a358278bd2775c921a84246">xlusup</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#7cfad10c14a658b4079b75c4d980bca8">ucol</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#96b0443ea47703100b9ecad92137dda9">usub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#4cbf4786dd6fc6541d5e097b27ab6835">xusub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structe__node.html">ExpHeader</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#edd2ee950bd57f92d4aa9028738b9bdc">expanders</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#94902a11c68912c2d456a58edd29f31d">xsup</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#fe003e9f68a924d5ba66c6f655bea55c">supno</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#4e7e8cd3ba09e252a04eaf0b8af5fccd">lsub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#c6f1655e303e2947524c29182d0f6a1e">xlsub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#2c939400d4e502551f9b64edd27f614a">lusup</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#aa63b1382a358278bd2775c921a84246">xlusup</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#2542f90c18839f310699cb3e4722626f">ucol</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#96b0443ea47703100b9ecad92137dda9">usub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#4cbf4786dd6fc6541d5e097b27ab6835">xusub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structe__node.html">ExpHeader</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#edd2ee950bd57f92d4aa9028738b9bdc">expanders</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#94902a11c68912c2d456a58edd29f31d">xsup</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#fe003e9f68a924d5ba66c6f655bea55c">supno</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#4e7e8cd3ba09e252a04eaf0b8af5fccd">lsub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#c6f1655e303e2947524c29182d0f6a1e">xlsub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#2a029c0f5964a535c8ec85911987b639">lusup</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#aa63b1382a358278bd2775c921a84246">xlusup</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#3fbdc21b78d160d4cbe9f4c435381586">ucol</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#96b0443ea47703100b9ecad92137dda9">usub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#4cbf4786dd6fc6541d5e097b27ab6835">xusub</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structe__node.html">ExpHeader</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#edd2ee950bd57f92d4aa9028738b9bdc">expanders</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="94902a11c68912c2d456a58edd29f31d"></a><!-- doxytag: member="GlobalLU_t::xsup" ref="94902a11c68912c2d456a58edd29f31d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#94902a11c68912c2d456a58edd29f31d">GlobalLU_t::xsup</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fe003e9f68a924d5ba66c6f655bea55c"></a><!-- doxytag: member="GlobalLU_t::supno" ref="fe003e9f68a924d5ba66c6f655bea55c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#fe003e9f68a924d5ba66c6f655bea55c">GlobalLU_t::supno</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4e7e8cd3ba09e252a04eaf0b8af5fccd"></a><!-- doxytag: member="GlobalLU_t::lsub" ref="4e7e8cd3ba09e252a04eaf0b8af5fccd" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#4e7e8cd3ba09e252a04eaf0b8af5fccd">GlobalLU_t::lsub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c6f1655e303e2947524c29182d0f6a1e"></a><!-- doxytag: member="GlobalLU_t::xlsub" ref="c6f1655e303e2947524c29182d0f6a1e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#c6f1655e303e2947524c29182d0f6a1e">GlobalLU_t::xlsub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cc7533550bb4c3479635a704ebfa9eb1"></a><!-- doxytag: member="GlobalLU_t::lusup" ref="cc7533550bb4c3479635a704ebfa9eb1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcomplex.html">complex</a>* <a class="el" href="structGlobalLU__t.html#cc7533550bb4c3479635a704ebfa9eb1">GlobalLU_t::lusup</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="aa63b1382a358278bd2775c921a84246"></a><!-- doxytag: member="GlobalLU_t::xlusup" ref="aa63b1382a358278bd2775c921a84246" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#aa63b1382a358278bd2775c921a84246">GlobalLU_t::xlusup</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f9e46ab287726ab6be2c22cca773856d"></a><!-- doxytag: member="GlobalLU_t::ucol" ref="f9e46ab287726ab6be2c22cca773856d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcomplex.html">complex</a>* <a class="el" href="structGlobalLU__t.html#f9e46ab287726ab6be2c22cca773856d">GlobalLU_t::ucol</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="96b0443ea47703100b9ecad92137dda9"></a><!-- doxytag: member="GlobalLU_t::usub" ref="96b0443ea47703100b9ecad92137dda9" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#96b0443ea47703100b9ecad92137dda9">GlobalLU_t::usub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4cbf4786dd6fc6541d5e097b27ab6835"></a><!-- doxytag: member="GlobalLU_t::xusub" ref="4cbf4786dd6fc6541d5e097b27ab6835" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#4cbf4786dd6fc6541d5e097b27ab6835">GlobalLU_t::xusub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1f77873222d31cd15eb781fdbf18df18"></a><!-- doxytag: member="GlobalLU_t::nzlmax" ref="1f77873222d31cd15eb781fdbf18df18" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structGlobalLU__t.html#1f77873222d31cd15eb781fdbf18df18">GlobalLU_t::nzlmax</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5238cd65bea5ca45046238d908073982"></a><!-- doxytag: member="GlobalLU_t::nzumax" ref="5238cd65bea5ca45046238d908073982" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structGlobalLU__t.html#5238cd65bea5ca45046238d908073982">GlobalLU_t::nzumax</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e67b1da1b096e92b7ddadf6e4a159481"></a><!-- doxytag: member="GlobalLU_t::nzlumax" ref="e67b1da1b096e92b7ddadf6e4a159481" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structGlobalLU__t.html#e67b1da1b096e92b7ddadf6e4a159481">GlobalLU_t::nzlumax</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="48fcf5a7ff751514d92feeb40370fe5e"></a><!-- doxytag: member="GlobalLU_t::n" ref="48fcf5a7ff751514d92feeb40370fe5e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structGlobalLU__t.html#48fcf5a7ff751514d92feeb40370fe5e">GlobalLU_t::n</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9089591bf01db5135a9d52cb732b0f3c"></a><!-- doxytag: member="GlobalLU_t::MemModel" ref="9089591bf01db5135a9d52cb732b0f3c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f6">LU_space_t</a> <a class="el" href="structGlobalLU__t.html#9089591bf01db5135a9d52cb732b0f3c">GlobalLU_t::MemModel</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1923c63f76eab75f5022f025c25a82a7"></a><!-- doxytag: member="GlobalLU_t::num_expansions" ref="1923c63f76eab75f5022f025c25a82a7" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structGlobalLU__t.html#1923c63f76eab75f5022f025c25a82a7">GlobalLU_t::num_expansions</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="edd2ee950bd57f92d4aa9028738b9bdc"></a><!-- doxytag: member="GlobalLU_t::expanders" ref="edd2ee950bd57f92d4aa9028738b9bdc" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structe__node.html">ExpHeader</a>* <a class="el" href="structGlobalLU__t.html#edd2ee950bd57f92d4aa9028738b9bdc">GlobalLU_t::expanders</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9c8f24b1d7ed85996df0ab869b472b0e"></a><!-- doxytag: member="GlobalLU_t::stack" ref="9c8f24b1d7ed85996df0ab869b472b0e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structLU__stack__t.html">LU_stack_t</a> <a class="el" href="structGlobalLU__t.html#9c8f24b1d7ed85996df0ab869b472b0e">GlobalLU_t::stack</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="94902a11c68912c2d456a58edd29f31d"></a><!-- doxytag: member="GlobalLU_t::xsup" ref="94902a11c68912c2d456a58edd29f31d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#94902a11c68912c2d456a58edd29f31d">GlobalLU_t::xsup</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fe003e9f68a924d5ba66c6f655bea55c"></a><!-- doxytag: member="GlobalLU_t::supno" ref="fe003e9f68a924d5ba66c6f655bea55c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#fe003e9f68a924d5ba66c6f655bea55c">GlobalLU_t::supno</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4e7e8cd3ba09e252a04eaf0b8af5fccd"></a><!-- doxytag: member="GlobalLU_t::lsub" ref="4e7e8cd3ba09e252a04eaf0b8af5fccd" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#4e7e8cd3ba09e252a04eaf0b8af5fccd">GlobalLU_t::lsub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c6f1655e303e2947524c29182d0f6a1e"></a><!-- doxytag: member="GlobalLU_t::xlsub" ref="c6f1655e303e2947524c29182d0f6a1e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#c6f1655e303e2947524c29182d0f6a1e">GlobalLU_t::xlsub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="726d0a12957a3de9a841b833b8451c09"></a><!-- doxytag: member="GlobalLU_t::lusup" ref="726d0a12957a3de9a841b833b8451c09" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* <a class="el" href="structGlobalLU__t.html#cc7533550bb4c3479635a704ebfa9eb1">GlobalLU_t::lusup</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="aa63b1382a358278bd2775c921a84246"></a><!-- doxytag: member="GlobalLU_t::xlusup" ref="aa63b1382a358278bd2775c921a84246" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#aa63b1382a358278bd2775c921a84246">GlobalLU_t::xlusup</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7cfad10c14a658b4079b75c4d980bca8"></a><!-- doxytag: member="GlobalLU_t::ucol" ref="7cfad10c14a658b4079b75c4d980bca8" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* <a class="el" href="structGlobalLU__t.html#f9e46ab287726ab6be2c22cca773856d">GlobalLU_t::ucol</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="96b0443ea47703100b9ecad92137dda9"></a><!-- doxytag: member="GlobalLU_t::usub" ref="96b0443ea47703100b9ecad92137dda9" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#96b0443ea47703100b9ecad92137dda9">GlobalLU_t::usub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4cbf4786dd6fc6541d5e097b27ab6835"></a><!-- doxytag: member="GlobalLU_t::xusub" ref="4cbf4786dd6fc6541d5e097b27ab6835" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#4cbf4786dd6fc6541d5e097b27ab6835">GlobalLU_t::xusub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="edd2ee950bd57f92d4aa9028738b9bdc"></a><!-- doxytag: member="GlobalLU_t::expanders" ref="edd2ee950bd57f92d4aa9028738b9bdc" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structe__node.html">ExpHeader</a>* <a class="el" href="structGlobalLU__t.html#edd2ee950bd57f92d4aa9028738b9bdc">GlobalLU_t::expanders</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="94902a11c68912c2d456a58edd29f31d"></a><!-- doxytag: member="GlobalLU_t::xsup" ref="94902a11c68912c2d456a58edd29f31d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#94902a11c68912c2d456a58edd29f31d">GlobalLU_t::xsup</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fe003e9f68a924d5ba66c6f655bea55c"></a><!-- doxytag: member="GlobalLU_t::supno" ref="fe003e9f68a924d5ba66c6f655bea55c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#fe003e9f68a924d5ba66c6f655bea55c">GlobalLU_t::supno</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4e7e8cd3ba09e252a04eaf0b8af5fccd"></a><!-- doxytag: member="GlobalLU_t::lsub" ref="4e7e8cd3ba09e252a04eaf0b8af5fccd" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#4e7e8cd3ba09e252a04eaf0b8af5fccd">GlobalLU_t::lsub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c6f1655e303e2947524c29182d0f6a1e"></a><!-- doxytag: member="GlobalLU_t::xlsub" ref="c6f1655e303e2947524c29182d0f6a1e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#c6f1655e303e2947524c29182d0f6a1e">GlobalLU_t::xlsub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2c939400d4e502551f9b64edd27f614a"></a><!-- doxytag: member="GlobalLU_t::lusup" ref="2c939400d4e502551f9b64edd27f614a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float* <a class="el" href="structGlobalLU__t.html#cc7533550bb4c3479635a704ebfa9eb1">GlobalLU_t::lusup</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="aa63b1382a358278bd2775c921a84246"></a><!-- doxytag: member="GlobalLU_t::xlusup" ref="aa63b1382a358278bd2775c921a84246" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#aa63b1382a358278bd2775c921a84246">GlobalLU_t::xlusup</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2542f90c18839f310699cb3e4722626f"></a><!-- doxytag: member="GlobalLU_t::ucol" ref="2542f90c18839f310699cb3e4722626f" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float* <a class="el" href="structGlobalLU__t.html#f9e46ab287726ab6be2c22cca773856d">GlobalLU_t::ucol</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="96b0443ea47703100b9ecad92137dda9"></a><!-- doxytag: member="GlobalLU_t::usub" ref="96b0443ea47703100b9ecad92137dda9" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#96b0443ea47703100b9ecad92137dda9">GlobalLU_t::usub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4cbf4786dd6fc6541d5e097b27ab6835"></a><!-- doxytag: member="GlobalLU_t::xusub" ref="4cbf4786dd6fc6541d5e097b27ab6835" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#4cbf4786dd6fc6541d5e097b27ab6835">GlobalLU_t::xusub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="edd2ee950bd57f92d4aa9028738b9bdc"></a><!-- doxytag: member="GlobalLU_t::expanders" ref="edd2ee950bd57f92d4aa9028738b9bdc" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structe__node.html">ExpHeader</a>* <a class="el" href="structGlobalLU__t.html#edd2ee950bd57f92d4aa9028738b9bdc">GlobalLU_t::expanders</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="94902a11c68912c2d456a58edd29f31d"></a><!-- doxytag: member="GlobalLU_t::xsup" ref="94902a11c68912c2d456a58edd29f31d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#94902a11c68912c2d456a58edd29f31d">GlobalLU_t::xsup</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fe003e9f68a924d5ba66c6f655bea55c"></a><!-- doxytag: member="GlobalLU_t::supno" ref="fe003e9f68a924d5ba66c6f655bea55c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#fe003e9f68a924d5ba66c6f655bea55c">GlobalLU_t::supno</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4e7e8cd3ba09e252a04eaf0b8af5fccd"></a><!-- doxytag: member="GlobalLU_t::lsub" ref="4e7e8cd3ba09e252a04eaf0b8af5fccd" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#4e7e8cd3ba09e252a04eaf0b8af5fccd">GlobalLU_t::lsub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c6f1655e303e2947524c29182d0f6a1e"></a><!-- doxytag: member="GlobalLU_t::xlsub" ref="c6f1655e303e2947524c29182d0f6a1e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#c6f1655e303e2947524c29182d0f6a1e">GlobalLU_t::xlsub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2a029c0f5964a535c8ec85911987b639"></a><!-- doxytag: member="GlobalLU_t::lusup" ref="2a029c0f5964a535c8ec85911987b639" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structdoublecomplex.html">doublecomplex</a>* <a class="el" href="structGlobalLU__t.html#cc7533550bb4c3479635a704ebfa9eb1">GlobalLU_t::lusup</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="aa63b1382a358278bd2775c921a84246"></a><!-- doxytag: member="GlobalLU_t::xlusup" ref="aa63b1382a358278bd2775c921a84246" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#aa63b1382a358278bd2775c921a84246">GlobalLU_t::xlusup</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3fbdc21b78d160d4cbe9f4c435381586"></a><!-- doxytag: member="GlobalLU_t::ucol" ref="3fbdc21b78d160d4cbe9f4c435381586" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structdoublecomplex.html">doublecomplex</a>* <a class="el" href="structGlobalLU__t.html#f9e46ab287726ab6be2c22cca773856d">GlobalLU_t::ucol</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="96b0443ea47703100b9ecad92137dda9"></a><!-- doxytag: member="GlobalLU_t::usub" ref="96b0443ea47703100b9ecad92137dda9" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#96b0443ea47703100b9ecad92137dda9">GlobalLU_t::usub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4cbf4786dd6fc6541d5e097b27ab6835"></a><!-- doxytag: member="GlobalLU_t::xusub" ref="4cbf4786dd6fc6541d5e097b27ab6835" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structGlobalLU__t.html#4cbf4786dd6fc6541d5e097b27ab6835">GlobalLU_t::xusub</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="edd2ee950bd57f92d4aa9028738b9bdc"></a><!-- doxytag: member="GlobalLU_t::expanders" ref="edd2ee950bd57f92d4aa9028738b9bdc" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structe__node.html">ExpHeader</a>* <a class="el" href="structGlobalLU__t.html#edd2ee950bd57f92d4aa9028738b9bdc">GlobalLU_t::expanders</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following files:<ul>
+<li>SRC/<a class="el" href="slu__cdefs_8h-source.html">slu_cdefs.h</a><li>SRC/<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a><li>SRC/<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a><li>SRC/<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structLU__stack__t.html b/DOC/html/structLU__stack__t.html
new file mode 100644
index 0000000..c150cca
--- /dev/null
+++ b/DOC/html/structLU__stack__t.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: LU_stack_t Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>LU_stack_t Struct Reference</h1><!-- doxytag: class="LU_stack_t" --><code>#include <<a class="el" href="slu__util_8h-source.html">slu_util.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structLU__stack__t.html#f05e6775b79809e7bcc0c92da24c12f5">size</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structLU__stack__t.html#78ad1773677b220bd843c9d84bbda869">used</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structLU__stack__t.html#3ba965e6621326c518c95d791afe6fef">top1</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structLU__stack__t.html#1ae2a485bc81409ceb05bce271363901">top2</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structLU__stack__t.html#c76a2713e4f4c516d7189303b6f82c8d">array</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="f05e6775b79809e7bcc0c92da24c12f5"></a><!-- doxytag: member="LU_stack_t::size" ref="f05e6775b79809e7bcc0c92da24c12f5" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structLU__stack__t.html#f05e6775b79809e7bcc0c92da24c12f5">LU_stack_t::size</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="78ad1773677b220bd843c9d84bbda869"></a><!-- doxytag: member="LU_stack_t::used" ref="78ad1773677b220bd843c9d84bbda869" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structLU__stack__t.html#78ad1773677b220bd843c9d84bbda869">LU_stack_t::used</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3ba965e6621326c518c95d791afe6fef"></a><!-- doxytag: member="LU_stack_t::top1" ref="3ba965e6621326c518c95d791afe6fef" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structLU__stack__t.html#3ba965e6621326c518c95d791afe6fef">LU_stack_t::top1</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1ae2a485bc81409ceb05bce271363901"></a><!-- doxytag: member="LU_stack_t::top2" ref="1ae2a485bc81409ceb05bce271363901" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structLU__stack__t.html#1ae2a485bc81409ceb05bce271363901">LU_stack_t::top2</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c76a2713e4f4c516d7189303b6f82c8d"></a><!-- doxytag: member="LU_stack_t::array" ref="c76a2713e4f4c516d7189303b6f82c8d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* <a class="el" href="structLU__stack__t.html#c76a2713e4f4c516d7189303b6f82c8d">LU_stack_t::array</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="slu__util_8h-source.html">slu_util.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structNCPformat.html b/DOC/html/structNCPformat.html
new file mode 100644
index 0000000..ae2d448
--- /dev/null
+++ b/DOC/html/structNCPformat.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: NCPformat Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>NCPformat Struct Reference</h1><!-- doxytag: class="NCPformat" --><code>#include <<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCPformat.html#c8c12ffc9edd0906608612727ad406ed">nnz</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCPformat.html#519ed66fdf9da30c76c079474503c764">nzval</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCPformat.html#8a27cd5a756bc313cc3c487a84e8ba30">rowind</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCPformat.html#2192334a0f76d4c18784caa1f8783f01">colbeg</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCPformat.html#86dcc41e83595a12ecd88d57748430c0">colend</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="c8c12ffc9edd0906608612727ad406ed"></a><!-- doxytag: member="NCPformat::nnz" ref="c8c12ffc9edd0906608612727ad406ed" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> <a class="el" href="structNCPformat.html#c8c12ffc9edd0906608612727ad406ed">NCPformat::nnz</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="519ed66fdf9da30c76c079474503c764"></a><!-- doxytag: member="NCPformat::nzval" ref="519ed66fdf9da30c76c079474503c764" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* <a class="el" href="structNCPformat.html#519ed66fdf9da30c76c079474503c764">NCPformat::nzval</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8a27cd5a756bc313cc3c487a84e8ba30"></a><!-- doxytag: member="NCPformat::rowind" ref="8a27cd5a756bc313cc3c487a84e8ba30" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structNCPformat.html#8a27cd5a756bc313cc3c487a84e8ba30">NCPformat::rowind</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2192334a0f76d4c18784caa1f8783f01"></a><!-- doxytag: member="NCPformat::colbeg" ref="2192334a0f76d4c18784caa1f8783f01" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structNCPformat.html#2192334a0f76d4c18784caa1f8783f01">NCPformat::colbeg</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="86dcc41e83595a12ecd88d57748430c0"></a><!-- doxytag: member="NCPformat::colend" ref="86dcc41e83595a12ecd88d57748430c0" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structNCPformat.html#86dcc41e83595a12ecd88d57748430c0">NCPformat::colend</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structNCformat.html b/DOC/html/structNCformat.html
new file mode 100644
index 0000000..128a678
--- /dev/null
+++ b/DOC/html/structNCformat.html
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: NCformat Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>NCformat Struct Reference</h1><!-- doxytag: class="NCformat" --><code>#include <<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCformat.html#ffa2566dd89ea8ce6422f788887b5b27">nnz</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCformat.html#a3e85810bb190b7359d8aaa956a64e64">nzval</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCformat.html#16eb8492bb5694035ef3e620ea8c77b1">rowind</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCformat.html#881f460e39f34bbbf70909b6b0629adc">colptr</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="ffa2566dd89ea8ce6422f788887b5b27"></a><!-- doxytag: member="NCformat::nnz" ref="ffa2566dd89ea8ce6422f788887b5b27" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> <a class="el" href="structNCformat.html#ffa2566dd89ea8ce6422f788887b5b27">NCformat::nnz</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a3e85810bb190b7359d8aaa956a64e64"></a><!-- doxytag: member="NCformat::nzval" ref="a3e85810bb190b7359d8aaa956a64e64" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* <a class="el" href="structNCformat.html#a3e85810bb190b7359d8aaa956a64e64">NCformat::nzval</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="16eb8492bb5694035ef3e620ea8c77b1"></a><!-- doxytag: member="NCformat::rowind" ref="16eb8492bb5694035ef3e620ea8c77b1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structNCformat.html#16eb8492bb5694035ef3e620ea8c77b1">NCformat::rowind</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="881f460e39f34bbbf70909b6b0629adc"></a><!-- doxytag: member="NCformat::colptr" ref="881f460e39f34bbbf70909b6b0629adc" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structNCformat.html#881f460e39f34bbbf70909b6b0629adc">NCformat::colptr</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structNRformat.html b/DOC/html/structNRformat.html
new file mode 100644
index 0000000..d8cd753
--- /dev/null
+++ b/DOC/html/structNRformat.html
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: NRformat Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>NRformat Struct Reference</h1><!-- doxytag: class="NRformat" --><code>#include <<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat.html#e3652d6a08cf47208db6abbd162bdee2">nnz</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat.html#3933d6611dc87efede947b08ea8d83f2">nzval</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat.html#25b76fc1f79b314a99c1e8f8522d77af">colind</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat.html#552302eb293088d4b7040f487b430ba7">rowptr</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="e3652d6a08cf47208db6abbd162bdee2"></a><!-- doxytag: member="NRformat::nnz" ref="e3652d6a08cf47208db6abbd162bdee2" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> <a class="el" href="structNRformat.html#e3652d6a08cf47208db6abbd162bdee2">NRformat::nnz</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3933d6611dc87efede947b08ea8d83f2"></a><!-- doxytag: member="NRformat::nzval" ref="3933d6611dc87efede947b08ea8d83f2" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* <a class="el" href="structNRformat.html#3933d6611dc87efede947b08ea8d83f2">NRformat::nzval</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="25b76fc1f79b314a99c1e8f8522d77af"></a><!-- doxytag: member="NRformat::colind" ref="25b76fc1f79b314a99c1e8f8522d77af" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structNRformat.html#25b76fc1f79b314a99c1e8f8522d77af">NRformat::colind</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="552302eb293088d4b7040f487b430ba7"></a><!-- doxytag: member="NRformat::rowptr" ref="552302eb293088d4b7040f487b430ba7" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structNRformat.html#552302eb293088d4b7040f487b430ba7">NRformat::rowptr</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structNRformat__loc.html b/DOC/html/structNRformat__loc.html
new file mode 100644
index 0000000..c83203c
--- /dev/null
+++ b/DOC/html/structNRformat__loc.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: NRformat_loc Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>NRformat_loc Struct Reference</h1><!-- doxytag: class="NRformat_loc" --><code>#include <<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat__loc.html#41c309cb83dedeaa82c0e4e137ea4785">nnz_loc</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat__loc.html#90413dc3eb197a83b70cc0d97e4c54af">m_loc</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat__loc.html#cab0ad4c74c4b4f0c68647f98b430cd9">fst_row</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat__loc.html#08b19d74f15e6475f43565035ae898ca">nzval</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat__loc.html#add0788ee704ffb7000b0485ee128061">rowptr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat__loc.html#5d192fc35ba0915afa42f36eca0e2d78">colind</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="41c309cb83dedeaa82c0e4e137ea4785"></a><!-- doxytag: member="NRformat_loc::nnz_loc" ref="41c309cb83dedeaa82c0e4e137ea4785" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> <a class="el" href="structNRformat__loc.html#41c309cb83dedeaa82c0e4e137ea4785">NRformat_loc::nnz_loc</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="90413dc3eb197a83b70cc0d97e4c54af"></a><!-- doxytag: member="NRformat_loc::m_loc" ref="90413dc3eb197a83b70cc0d97e4c54af" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> <a class="el" href="structNRformat__loc.html#90413dc3eb197a83b70cc0d97e4c54af">NRformat_loc::m_loc</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cab0ad4c74c4b4f0c68647f98b430cd9"></a><!-- doxytag: member="NRformat_loc::fst_row" ref="cab0ad4c74c4b4f0c68647f98b430cd9" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> <a class="el" href="structNRformat__loc.html#cab0ad4c74c4b4f0c68647f98b430cd9">NRformat_loc::fst_row</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="08b19d74f15e6475f43565035ae898ca"></a><!-- doxytag: member="NRformat_loc::nzval" ref="08b19d74f15e6475f43565035ae898ca" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* <a class="el" href="structNRformat__loc.html#08b19d74f15e6475f43565035ae898ca">NRformat_loc::nzval</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="add0788ee704ffb7000b0485ee128061"></a><!-- doxytag: member="NRformat_loc::rowptr" ref="add0788ee704ffb7000b0485ee128061" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structNRformat__loc.html#add0788ee704ffb7000b0485ee128061">NRformat_loc::rowptr</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5d192fc35ba0915afa42f36eca0e2d78"></a><!-- doxytag: member="NRformat_loc::colind" ref="5d192fc35ba0915afa42f36eca0e2d78" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structNRformat__loc.html#5d192fc35ba0915afa42f36eca0e2d78">NRformat_loc::colind</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structSCPformat.html b/DOC/html/structSCPformat.html
new file mode 100644
index 0000000..1bd5291
--- /dev/null
+++ b/DOC/html/structSCPformat.html
@@ -0,0 +1,225 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SCPformat Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SCPformat Struct Reference</h1><!-- doxytag: class="SCPformat" --><code>#include <<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#d4b6e7424269c3cbe9a368604433870e">nnz</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#20ee99d8cfb0cecad94373e2eb5abef8">nsuper</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#028e5f9ef15054302c1403969c37a0fb">nzval</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#a9bae5f483aa1a22aec18f5c2393f05e">nzval_colbeg</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#098e9a5c87e2c0b35c82852b1910334d">nzval_colend</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#5b4ccbb31fa3a7c2372b5a297453e200">rowind</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#1bd16ec6ab44636e56da09d65fbe8402">rowind_colbeg</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#09c1770c0baad3c1152d48587ad084b4">rowind_colend</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#ba16553c2896f7c88450621f18b54bae">col_to_sup</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#345ad774183c979674dd0960a930508e">sup_to_colbeg</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#8e470d085ca7b39645336943a1f2eae6">sup_to_colend</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="d4b6e7424269c3cbe9a368604433870e"></a><!-- doxytag: member="SCPformat::nnz" ref="d4b6e7424269c3cbe9a368604433870e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> <a class="el" href="structSCPformat.html#d4b6e7424269c3cbe9a368604433870e">SCPformat::nnz</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="20ee99d8cfb0cecad94373e2eb5abef8"></a><!-- doxytag: member="SCPformat::nsuper" ref="20ee99d8cfb0cecad94373e2eb5abef8" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> <a class="el" href="structSCPformat.html#20ee99d8cfb0cecad94373e2eb5abef8">SCPformat::nsuper</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="028e5f9ef15054302c1403969c37a0fb"></a><!-- doxytag: member="SCPformat::nzval" ref="028e5f9ef15054302c1403969c37a0fb" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* <a class="el" href="structSCPformat.html#028e5f9ef15054302c1403969c37a0fb">SCPformat::nzval</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a9bae5f483aa1a22aec18f5c2393f05e"></a><!-- doxytag: member="SCPformat::nzval_colbeg" ref="a9bae5f483aa1a22aec18f5c2393f05e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structSCPformat.html#a9bae5f483aa1a22aec18f5c2393f05e">SCPformat::nzval_colbeg</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="098e9a5c87e2c0b35c82852b1910334d"></a><!-- doxytag: member="SCPformat::nzval_colend" ref="098e9a5c87e2c0b35c82852b1910334d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structSCPformat.html#098e9a5c87e2c0b35c82852b1910334d">SCPformat::nzval_colend</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5b4ccbb31fa3a7c2372b5a297453e200"></a><!-- doxytag: member="SCPformat::rowind" ref="5b4ccbb31fa3a7c2372b5a297453e200" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structSCPformat.html#5b4ccbb31fa3a7c2372b5a297453e200">SCPformat::rowind</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1bd16ec6ab44636e56da09d65fbe8402"></a><!-- doxytag: member="SCPformat::rowind_colbeg" ref="1bd16ec6ab44636e56da09d65fbe8402" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structSCPformat.html#1bd16ec6ab44636e56da09d65fbe8402">SCPformat::rowind_colbeg</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="09c1770c0baad3c1152d48587ad084b4"></a><!-- doxytag: member="SCPformat::rowind_colend" ref="09c1770c0baad3c1152d48587ad084b4" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structSCPformat.html#09c1770c0baad3c1152d48587ad084b4">SCPformat::rowind_colend</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ba16553c2896f7c88450621f18b54bae"></a><!-- doxytag: member="SCPformat::col_to_sup" ref="ba16553c2896f7c88450621f18b54bae" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structSCPformat.html#ba16553c2896f7c88450621f18b54bae">SCPformat::col_to_sup</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="345ad774183c979674dd0960a930508e"></a><!-- doxytag: member="SCPformat::sup_to_colbeg" ref="345ad774183c979674dd0960a930508e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structSCPformat.html#345ad774183c979674dd0960a930508e">SCPformat::sup_to_colbeg</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8e470d085ca7b39645336943a1f2eae6"></a><!-- doxytag: member="SCPformat::sup_to_colend" ref="8e470d085ca7b39645336943a1f2eae6" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structSCPformat.html#8e470d085ca7b39645336943a1f2eae6">SCPformat::sup_to_colend</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structSCformat.html b/DOC/html/structSCformat.html
new file mode 100644
index 0000000..e18d7ca
--- /dev/null
+++ b/DOC/html/structSCformat.html
@@ -0,0 +1,174 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SCformat Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SCformat Struct Reference</h1><!-- doxytag: class="SCformat" --><code>#include <<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#3808f35bd097fbc0a39e3e65ee2a8d4a">nnz</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#afffc008b0b8e57b9cdf5689a527bd8c">nsuper</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#25011a4746e4cf0a6fbc38ba45a70e91">nzval</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#41e93b73c8bce9326f035e3647ee94ca">nzval_colptr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#ec8a46751f64a94238495838aaed7cd2">rowind</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#7683b1730b067ae2058004f0f18ad88d">rowind_colptr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#75a51eef4af5a906cde9a32eddcb2fc1">col_to_sup</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#d5cb1b2ae17c5fe554c3b70721718b08">sup_to_col</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="3808f35bd097fbc0a39e3e65ee2a8d4a"></a><!-- doxytag: member="SCformat::nnz" ref="3808f35bd097fbc0a39e3e65ee2a8d4a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> <a class="el" href="structSCformat.html#3808f35bd097fbc0a39e3e65ee2a8d4a">SCformat::nnz</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="afffc008b0b8e57b9cdf5689a527bd8c"></a><!-- doxytag: member="SCformat::nsuper" ref="afffc008b0b8e57b9cdf5689a527bd8c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> <a class="el" href="structSCformat.html#afffc008b0b8e57b9cdf5689a527bd8c">SCformat::nsuper</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="25011a4746e4cf0a6fbc38ba45a70e91"></a><!-- doxytag: member="SCformat::nzval" ref="25011a4746e4cf0a6fbc38ba45a70e91" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* <a class="el" href="structSCformat.html#25011a4746e4cf0a6fbc38ba45a70e91">SCformat::nzval</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="41e93b73c8bce9326f035e3647ee94ca"></a><!-- doxytag: member="SCformat::nzval_colptr" ref="41e93b73c8bce9326f035e3647ee94ca" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structSCformat.html#41e93b73c8bce9326f035e3647ee94ca">SCformat::nzval_colptr</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ec8a46751f64a94238495838aaed7cd2"></a><!-- doxytag: member="SCformat::rowind" ref="ec8a46751f64a94238495838aaed7cd2" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structSCformat.html#ec8a46751f64a94238495838aaed7cd2">SCformat::rowind</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7683b1730b067ae2058004f0f18ad88d"></a><!-- doxytag: member="SCformat::rowind_colptr" ref="7683b1730b067ae2058004f0f18ad88d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structSCformat.html#7683b1730b067ae2058004f0f18ad88d">SCformat::rowind_colptr</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="75a51eef4af5a906cde9a32eddcb2fc1"></a><!-- doxytag: member="SCformat::col_to_sup" ref="75a51eef4af5a906cde9a32eddcb2fc1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structSCformat.html#75a51eef4af5a906cde9a32eddcb2fc1">SCformat::col_to_sup</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d5cb1b2ae17c5fe554c3b70721718b08"></a><!-- doxytag: member="SCformat::sup_to_col" ref="d5cb1b2ae17c5fe554c3b70721718b08" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>* <a class="el" href="structSCformat.html#d5cb1b2ae17c5fe554c3b70721718b08">SCformat::sup_to_col</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structSuperLUStat__t.html b/DOC/html/structSuperLUStat__t.html
new file mode 100644
index 0000000..e0b6e24
--- /dev/null
+++ b/DOC/html/structSuperLUStat__t.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SuperLUStat_t Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SuperLUStat_t Struct Reference</h1><!-- doxytag: class="SuperLUStat_t" --><code>#include <<a class="el" href="slu__util_8h-source.html">slu_util.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperLUStat__t.html#9a15399d38ecaf731ec300977f268b75">panel_histo</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperLUStat__t.html#5eccc9eba32b749c87f7a97991cfdc18">utime</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__util_8h.html#aae6020bb33e780ff6edbd4e45ce08ac">flops_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperLUStat__t.html#ec6afa389e49ac9d04dc44e24805c99d">ops</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperLUStat__t.html#d752e80fc9fa85195ec9c0e9a17b481c">TinyPivots</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperLUStat__t.html#472eadaf612c983b8829ae40b09f411b">RefineSteps</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperLUStat__t.html#b0281af9350a75b2d4a3108b8bc0bf23">expansions</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="9a15399d38ecaf731ec300977f268b75"></a><!-- doxytag: member="SuperLUStat_t::panel_histo" ref="9a15399d38ecaf731ec300977f268b75" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="structSuperLUStat__t.html#9a15399d38ecaf731ec300977f268b75">SuperLUStat_t::panel_histo</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5eccc9eba32b749c87f7a97991cfdc18"></a><!-- doxytag: member="SuperLUStat_t::utime" ref="5eccc9eba32b749c87f7a97991cfdc18" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* <a class="el" href="structSuperLUStat__t.html#5eccc9eba32b749c87f7a97991cfdc18">SuperLUStat_t::utime</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ec6afa389e49ac9d04dc44e24805c99d"></a><!-- doxytag: member="SuperLUStat_t::ops" ref="ec6afa389e49ac9d04dc44e24805c99d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__util_8h.html#aae6020bb33e780ff6edbd4e45ce08ac">flops_t</a>* <a class="el" href="structSuperLUStat__t.html#ec6afa389e49ac9d04dc44e24805c99d">SuperLUStat_t::ops</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d752e80fc9fa85195ec9c0e9a17b481c"></a><!-- doxytag: member="SuperLUStat_t::TinyPivots" ref="d752e80fc9fa85195ec9c0e9a17b481c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structSuperLUStat__t.html#d752e80fc9fa85195ec9c0e9a17b481c">SuperLUStat_t::TinyPivots</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="472eadaf612c983b8829ae40b09f411b"></a><!-- doxytag: member="SuperLUStat_t::RefineSteps" ref="472eadaf612c983b8829ae40b09f411b" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structSuperLUStat__t.html#472eadaf612c983b8829ae40b09f411b">SuperLUStat_t::RefineSteps</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b0281af9350a75b2d4a3108b8bc0bf23"></a><!-- doxytag: member="SuperLUStat_t::expansions" ref="b0281af9350a75b2d4a3108b8bc0bf23" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structSuperLUStat__t.html#b0281af9350a75b2d4a3108b8bc0bf23">SuperLUStat_t::expansions</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="slu__util_8h-source.html">slu_util.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structSuperMatrix.html b/DOC/html/structSuperMatrix.html
new file mode 100644
index 0000000..aa66e19
--- /dev/null
+++ b/DOC/html/structSuperMatrix.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SuperMatrix Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SuperMatrix Struct Reference</h1><!-- doxytag: class="SuperMatrix" --><code>#include <<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperMatrix.html#b37e181824f50a405272451afc399952">Stype</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperMatrix.html#edd4bd451819549620b49076a62dfdcc">Dtype</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperMatrix.html#42877db0cfad1033374474f48e4b3fc4">Mtype</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperMatrix.html#b1d854b814f0757e7ff7e0da01c6ef43">nrow</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperMatrix.html#b8b85bf206c36ebc2223cc2ec6acbe8c">ncol</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperMatrix.html#73ebca1b46bb24536226b9378e01c5b5">Store</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="b37e181824f50a405272451afc399952"></a><!-- doxytag: member="SuperMatrix::Stype" ref="b37e181824f50a405272451afc399952" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> <a class="el" href="structSuperMatrix.html#b37e181824f50a405272451afc399952">SuperMatrix::Stype</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="edd4bd451819549620b49076a62dfdcc"></a><!-- doxytag: member="SuperMatrix::Dtype" ref="edd4bd451819549620b49076a62dfdcc" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> <a class="el" href="structSuperMatrix.html#edd4bd451819549620b49076a62dfdcc">SuperMatrix::Dtype</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="42877db0cfad1033374474f48e4b3fc4"></a><!-- doxytag: member="SuperMatrix::Mtype" ref="42877db0cfad1033374474f48e4b3fc4" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> <a class="el" href="structSuperMatrix.html#42877db0cfad1033374474f48e4b3fc4">SuperMatrix::Mtype</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b1d854b814f0757e7ff7e0da01c6ef43"></a><!-- doxytag: member="SuperMatrix::nrow" ref="b1d854b814f0757e7ff7e0da01c6ef43" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> <a class="el" href="structSuperMatrix.html#b1d854b814f0757e7ff7e0da01c6ef43">SuperMatrix::nrow</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b8b85bf206c36ebc2223cc2ec6acbe8c"></a><!-- doxytag: member="SuperMatrix::ncol" ref="b8b85bf206c36ebc2223cc2ec6acbe8c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> <a class="el" href="structSuperMatrix.html#b8b85bf206c36ebc2223cc2ec6acbe8c">SuperMatrix::ncol</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="73ebca1b46bb24536226b9378e01c5b5"></a><!-- doxytag: member="SuperMatrix::Store" ref="73ebca1b46bb24536226b9378e01c5b5" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* <a class="el" href="structSuperMatrix.html#73ebca1b46bb24536226b9378e01c5b5">SuperMatrix::Store</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="supermatrix_8h-source.html">supermatrix.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structcomplex.html b/DOC/html/structcomplex.html
new file mode 100644
index 0000000..0f09b88
--- /dev/null
+++ b/DOC/html/structcomplex.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: complex Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>complex Struct Reference</h1><!-- doxytag: class="complex" --><code>#include <<a class="el" href="slu__scomplex_8h-source.html">slu_scomplex.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="structcomplex.html#6b24d5cc84eef41dbe90b79e93de030f">r</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="structcomplex.html#5eefa12b02189d694af536bc7d8726be">i</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="6b24d5cc84eef41dbe90b79e93de030f"></a><!-- doxytag: member="complex::r" ref="6b24d5cc84eef41dbe90b79e93de030f" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float <a class="el" href="structcomplex.html#6b24d5cc84eef41dbe90b79e93de030f">complex::r</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5eefa12b02189d694af536bc7d8726be"></a><!-- doxytag: member="complex::i" ref="5eefa12b02189d694af536bc7d8726be" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float <a class="el" href="structcomplex.html#5eefa12b02189d694af536bc7d8726be">complex::i</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="slu__scomplex_8h-source.html">slu_scomplex.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structdoublecomplex.html b/DOC/html/structdoublecomplex.html
new file mode 100644
index 0000000..e3908e3
--- /dev/null
+++ b/DOC/html/structdoublecomplex.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: doublecomplex Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>doublecomplex Struct Reference</h1><!-- doxytag: class="doublecomplex" --><code>#include <<a class="el" href="slu__dcomplex_8h-source.html">slu_dcomplex.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structdoublecomplex.html#7b1a3f489cadc006bfe2fda973267af6">r</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structdoublecomplex.html#336ddbef83d1878426558d417a6ecfbb">i</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="7b1a3f489cadc006bfe2fda973267af6"></a><!-- doxytag: member="doublecomplex::r" ref="7b1a3f489cadc006bfe2fda973267af6" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double <a class="el" href="structdoublecomplex.html#7b1a3f489cadc006bfe2fda973267af6">doublecomplex::r</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="336ddbef83d1878426558d417a6ecfbb"></a><!-- doxytag: member="doublecomplex::i" ref="336ddbef83d1878426558d417a6ecfbb" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double <a class="el" href="structdoublecomplex.html#336ddbef83d1878426558d417a6ecfbb">doublecomplex::i</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="slu__dcomplex_8h-source.html">slu_dcomplex.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structe__node.html b/DOC/html/structe__node.html
new file mode 100644
index 0000000..b0ff553
--- /dev/null
+++ b/DOC/html/structe__node.html
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: e_node Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>e_node Struct Reference</h1><!-- doxytag: class="e_node" -->Headers for 4 types of dynamatically managed memory.  
+<a href="#_details"></a>
+<p>
+<code>#include <<a class="el" href="slu__util_8h-source.html">slu_util.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structe__node.html#2b5a49fe848fe66d1643a37ae2a842eb">size</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structe__node.html#6a040bdcee064559b0b480a96ccfac65">mem</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="2b5a49fe848fe66d1643a37ae2a842eb"></a><!-- doxytag: member="e_node::size" ref="2b5a49fe848fe66d1643a37ae2a842eb" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structe__node.html#2b5a49fe848fe66d1643a37ae2a842eb">e_node::size</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6a040bdcee064559b0b480a96ccfac65"></a><!-- doxytag: member="e_node::mem" ref="6a040bdcee064559b0b480a96ccfac65" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* <a class="el" href="structe__node.html#6a040bdcee064559b0b480a96ccfac65">e_node::mem</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="slu__util_8h-source.html">slu_util.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structmem__usage__t.html b/DOC/html/structmem__usage__t.html
new file mode 100644
index 0000000..68c9709
--- /dev/null
+++ b/DOC/html/structmem__usage__t.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: mem_usage_t Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>mem_usage_t Struct Reference</h1><!-- doxytag: class="mem_usage_t" --><code>#include <<a class="el" href="slu__util_8h-source.html">slu_util.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="structmem__usage__t.html#ea63300065ca81e5387c1706d7b3e705">for_lu</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="structmem__usage__t.html#7225324e3925e071e95a58d49367a88a">total_needed</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="ea63300065ca81e5387c1706d7b3e705"></a><!-- doxytag: member="mem_usage_t::for_lu" ref="ea63300065ca81e5387c1706d7b3e705" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float <a class="el" href="structmem__usage__t.html#ea63300065ca81e5387c1706d7b3e705">mem_usage_t::for_lu</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7225324e3925e071e95a58d49367a88a"></a><!-- doxytag: member="mem_usage_t::total_needed" ref="7225324e3925e071e95a58d49367a88a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float <a class="el" href="structmem__usage__t.html#7225324e3925e071e95a58d49367a88a">mem_usage_t::total_needed</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="slu__util_8h-source.html">slu_util.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/structsuperlu__options__t.html b/DOC/html/structsuperlu__options__t.html
new file mode 100644
index 0000000..8446a7b
--- /dev/null
+++ b/DOC/html/structsuperlu__options__t.html
@@ -0,0 +1,412 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: superlu_options_t Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>superlu_options_t Struct Reference</h1><!-- doxytag: class="superlu_options_t" --><code>#include <<a class="el" href="slu__util_8h-source.html">slu_util.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#cbd3cc1d27bbaf5bc168ebbbd6bf60fe">Fact</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#3fe998e3518ad90532072fa8929a1e2f">Equil</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c">colperm_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#f6e41a7d8ca989c5396f6edc67be0409">ColPerm</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#23fa8259c7091d82f10f0dfc7718dc36">Trans</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e37">IterRefine_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#3e40fb39641e0caf27feb6998d21d98a">IterRefine</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#e574f08a3f4094dae8f635690b71d944">DiagPivotThresh</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#ad1b52d0366ae8601e97fab5c470c45d">SymmetricMode</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#a75cfd534f156c78b7dc69e7e68596da">PivotGrowth</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#3394d6658ec588071a9fee24a728eb07">ConditionNumber</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adf">rowperm_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#d38e45769deca7564ea75caec2ad58e6">RowPerm</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#c0ca2f81f68ad7596f2ada5739acc4d5">ILU_DropRule</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#4f629bb593cb42f213887d521c8f2288">ILU_DropTol</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#cf43941c86c9f3d1b46a6655f97bac70">ILU_FillFactor</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2f">norm_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#d8ed1b7a0243a10193ff792053b281c9">ILU_Norm</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#8021fa436ad10dfdee734364bcd428c5">ILU_FillTol</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#74708fd3231a761394bed90da1eba63b">ILU_MILU</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#ba6edb00ac03655feb075bf9d6904d18">ILU_MILU_Dim</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#e2f1847e26bce58631ca5d58ad3d46ed">ParSymbFact</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#791051ffa3861ba7203b0a1da2e6bf4b">ReplaceTinyPivot</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#246344bda7ff7d5547101c2f01737ee7">SolveInitialized</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#6cfb6d3c0e8d5d2c8b4b813883e395b7">RefineInitialized</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#afe514c5a01fe24b70cc636621a86576">PrintStat</a></td></tr>
+
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="cbd3cc1d27bbaf5bc168ebbbd6bf60fe"></a><!-- doxytag: member="superlu_options_t::Fact" ref="cbd3cc1d27bbaf5bc168ebbbd6bf60fe" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a> <a class="el" href="structsuperlu__options__t.html#cbd3cc1d27bbaf5bc168ebbbd6bf60fe">superlu_options_t::Fact</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3fe998e3518ad90532072fa8929a1e2f"></a><!-- doxytag: member="superlu_options_t::Equil" ref="3fe998e3518ad90532072fa8929a1e2f" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> <a class="el" href="structsuperlu__options__t.html#3fe998e3518ad90532072fa8929a1e2f">superlu_options_t::Equil</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f6e41a7d8ca989c5396f6edc67be0409"></a><!-- doxytag: member="superlu_options_t::ColPerm" ref="f6e41a7d8ca989c5396f6edc67be0409" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c">colperm_t</a> <a class="el" href="structsuperlu__options__t.html#f6e41a7d8ca989c5396f6edc67be0409">superlu_options_t::ColPerm</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="23fa8259c7091d82f10f0dfc7718dc36"></a><!-- doxytag: member="superlu_options_t::Trans" ref="23fa8259c7091d82f10f0dfc7718dc36" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> <a class="el" href="structsuperlu__options__t.html#23fa8259c7091d82f10f0dfc7718dc36">superlu_options_t::Trans</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3e40fb39641e0caf27feb6998d21d98a"></a><!-- doxytag: member="superlu_options_t::IterRefine" ref="3e40fb39641e0caf27feb6998d21d98a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e37">IterRefine_t</a> <a class="el" href="structsuperlu__options__t.html#3e40fb39641e0caf27feb6998d21d98a">superlu_options_t::IterRefine</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e574f08a3f4094dae8f635690b71d944"></a><!-- doxytag: member="superlu_options_t::DiagPivotThresh" ref="e574f08a3f4094dae8f635690b71d944" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double <a class="el" href="structsuperlu__options__t.html#e574f08a3f4094dae8f635690b71d944">superlu_options_t::DiagPivotThresh</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ad1b52d0366ae8601e97fab5c470c45d"></a><!-- doxytag: member="superlu_options_t::SymmetricMode" ref="ad1b52d0366ae8601e97fab5c470c45d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> <a class="el" href="structsuperlu__options__t.html#ad1b52d0366ae8601e97fab5c470c45d">superlu_options_t::SymmetricMode</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a75cfd534f156c78b7dc69e7e68596da"></a><!-- doxytag: member="superlu_options_t::PivotGrowth" ref="a75cfd534f156c78b7dc69e7e68596da" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> <a class="el" href="structsuperlu__options__t.html#a75cfd534f156c78b7dc69e7e68596da">superlu_options_t::PivotGrowth</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3394d6658ec588071a9fee24a728eb07"></a><!-- doxytag: member="superlu_options_t::ConditionNumber" ref="3394d6658ec588071a9fee24a728eb07" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> <a class="el" href="structsuperlu__options__t.html#3394d6658ec588071a9fee24a728eb07">superlu_options_t::ConditionNumber</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d38e45769deca7564ea75caec2ad58e6"></a><!-- doxytag: member="superlu_options_t::RowPerm" ref="d38e45769deca7564ea75caec2ad58e6" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adf">rowperm_t</a> <a class="el" href="structsuperlu__options__t.html#d38e45769deca7564ea75caec2ad58e6">superlu_options_t::RowPerm</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c0ca2f81f68ad7596f2ada5739acc4d5"></a><!-- doxytag: member="superlu_options_t::ILU_DropRule" ref="c0ca2f81f68ad7596f2ada5739acc4d5" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="structsuperlu__options__t.html#c0ca2f81f68ad7596f2ada5739acc4d5">superlu_options_t::ILU_DropRule</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4f629bb593cb42f213887d521c8f2288"></a><!-- doxytag: member="superlu_options_t::ILU_DropTol" ref="4f629bb593cb42f213887d521c8f2288" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double <a class="el" href="structsuperlu__options__t.html#4f629bb593cb42f213887d521c8f2288">superlu_options_t::ILU_DropTol</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cf43941c86c9f3d1b46a6655f97bac70"></a><!-- doxytag: member="superlu_options_t::ILU_FillFactor" ref="cf43941c86c9f3d1b46a6655f97bac70" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double <a class="el" href="structsuperlu__options__t.html#cf43941c86c9f3d1b46a6655f97bac70">superlu_options_t::ILU_FillFactor</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d8ed1b7a0243a10193ff792053b281c9"></a><!-- doxytag: member="superlu_options_t::ILU_Norm" ref="d8ed1b7a0243a10193ff792053b281c9" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2f">norm_t</a> <a class="el" href="structsuperlu__options__t.html#d8ed1b7a0243a10193ff792053b281c9">superlu_options_t::ILU_Norm</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8021fa436ad10dfdee734364bcd428c5"></a><!-- doxytag: member="superlu_options_t::ILU_FillTol" ref="8021fa436ad10dfdee734364bcd428c5" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double <a class="el" href="structsuperlu__options__t.html#8021fa436ad10dfdee734364bcd428c5">superlu_options_t::ILU_FillTol</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="74708fd3231a761394bed90da1eba63b"></a><!-- doxytag: member="superlu_options_t::ILU_MILU" ref="74708fd3231a761394bed90da1eba63b" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> <a class="el" href="structsuperlu__options__t.html#74708fd3231a761394bed90da1eba63b">superlu_options_t::ILU_MILU</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ba6edb00ac03655feb075bf9d6904d18"></a><!-- doxytag: member="superlu_options_t::ILU_MILU_Dim" ref="ba6edb00ac03655feb075bf9d6904d18" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double <a class="el" href="structsuperlu__options__t.html#ba6edb00ac03655feb075bf9d6904d18">superlu_options_t::ILU_MILU_Dim</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e2f1847e26bce58631ca5d58ad3d46ed"></a><!-- doxytag: member="superlu_options_t::ParSymbFact" ref="e2f1847e26bce58631ca5d58ad3d46ed" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> <a class="el" href="structsuperlu__options__t.html#e2f1847e26bce58631ca5d58ad3d46ed">superlu_options_t::ParSymbFact</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="791051ffa3861ba7203b0a1da2e6bf4b"></a><!-- doxytag: member="superlu_options_t::ReplaceTinyPivot" ref="791051ffa3861ba7203b0a1da2e6bf4b" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> <a class="el" href="structsuperlu__options__t.html#791051ffa3861ba7203b0a1da2e6bf4b">superlu_options_t::ReplaceTinyPivot</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="246344bda7ff7d5547101c2f01737ee7"></a><!-- doxytag: member="superlu_options_t::SolveInitialized" ref="246344bda7ff7d5547101c2f01737ee7" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> <a class="el" href="structsuperlu__options__t.html#246344bda7ff7d5547101c2f01737ee7">superlu_options_t::SolveInitialized</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6cfb6d3c0e8d5d2c8b4b813883e395b7"></a><!-- doxytag: member="superlu_options_t::RefineInitialized" ref="6cfb6d3c0e8d5d2c8b4b813883e395b7" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> <a class="el" href="structsuperlu__options__t.html#6cfb6d3c0e8d5d2c8b4b813883e395b7">superlu_options_t::RefineInitialized</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="afe514c5a01fe24b70cc636621a86576"></a><!-- doxytag: member="superlu_options_t::PrintStat" ref="afe514c5a01fe24b70cc636621a86576" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> <a class="el" href="structsuperlu__options__t.html#afe514c5a01fe24b70cc636621a86576">superlu_options_t::PrintStat</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>SRC/<a class="el" href="slu__util_8h-source.html">slu_util.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/superlu_8c.html b/DOC/html/superlu_8c.html
new file mode 100644
index 0000000..e5d77b4
--- /dev/null
+++ b/DOC/html/superlu_8c.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/superlu.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/superlu.c File Reference</h1>a small 5x5 example <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu_8c.html#e0665038b72011f5c680c660fcb59459">main</a> (int argc, char *argv[])</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ * -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="e0665038b72011f5c680c660fcb59459"></a><!-- doxytag: member="superlu.c::main" ref="e0665038b72011f5c680c660fcb59459" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/superlu__enum__consts_8h-source.html b/DOC/html/superlu__enum__consts_8h-source.html
new file mode 100644
index 0000000..c71865a
--- /dev/null
+++ b/DOC/html/superlu__enum__consts_8h-source.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/superlu_enum_consts.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<h1>SRC/superlu_enum_consts.h</h1><a href="superlu__enum__consts_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00010"></a>00010 <span class="preprocessor">#ifndef __SUPERLU_ENUM_CONSTS </span><span class="comment">/* allow multiple inclusions */</span>
+<a name="l00011"></a>00011 <span class="preprocessor">#define __SUPERLU_ENUM_CONSTS</span>
+<a name="l00012"></a>00012 <span class="preprocessor"></span>
+<a name="l00013"></a>00013 <span class="comment">/***********************************************************************</span>
+<a name="l00014"></a>00014 <span class="comment"> * Enumerate types</span>
+<a name="l00015"></a>00015 <span class="comment"> ***********************************************************************/</span>
+<a name="l00016"></a><a class="code" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">00016</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {<a class="code" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f0d077f5b932ce05e5b9f30c6087a2f31">NO</a>, <a class="code" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f99f136a862ba5c7d16967231c29f09d6">YES</a>}                                          <a class= [...]
+<a name="l00017"></a><a class="code" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a8814b686fe49f5ccc165c04845e112e6">00017</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {<a class="code" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0ae0bd0c48044d1267a827ce526249e168">DOFACT</a>, <a class="code" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0ad57746dff8e73ad308739bc6cbee4c27">SamePattern</a>, <a cla [...]
+<a name="l00018"></a><a class="code" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adf">00018</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {<a class="code" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adf25895a1ae8a45131936a32274bd7cdde">NOROWPERM</a>, <a class="code" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adfe03251277f56e77cfc3989ed67adf932">LargeDiag</a>, <a class="code" href="superlu__enum__ [...]
+<a name="l00019"></a><a class="code" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c0425aaf673bebee34014367ea7c3deb1">00019</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {<a class="code" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c0425aaf673bebee34014367ea7c3deb1">NATURAL</a>, <a class="code" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c02f70b975e4d4fa6052812c09bdb7349">MMD_ATA</a>, <a class= [...]
+<a name="l00020"></a><a class="code" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89cbddc2b83ab41d07e8d180f52bcfb00ac">00020</a>               <a class="code" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c5a9874ccc7a94b949bdf71fd65b80061">METIS_AT_PLUS_A</a>, <a class="code" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89ca7108227cd043fe50972a89b34b6d20c">PARMETIS</a>, <a class="code" href="superlu__enum__consts_8h.html#bd17bb [...]
+<a name="l00021"></a><a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">00021</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {<a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d628ccffb9caebb7b4520a0653005b22f43">NOTRANS</a>, <a class="code" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d621f61e3015bfe0f0c2c3fda4c5a0cdf58">TRANS</a>, <a class="code" href="superlu__enum__consts [...]
+<a name="l00022"></a><a class="code" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30bf470e461303b909bf0dc58084ebafa0">00022</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {<a class="code" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30f1e3ee583cb194a25353b4ba7b4798cf">NOEQUIL</a>, <a class="code" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30bf470e461303b909bf0dc58084ebafa0">ROW</a>, <a class="cod [...]
+<a name="l00023"></a><a class="code" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e373388f7110f6f25a54e215eb75d5d7516">00023</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {<a class="code" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e375f3a3710645b9041f06dfe164fb336a3">NOREFINE</a>, <a class="code" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e373388f7110f6f25a54e215eb75d5d7516">SINGLE</a>=1, <a clas [...]
+<a name="l00024"></a><a class="code" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2ec445297f8e62e119a337ea2b5dd2b66">00024</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {<a class="code" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b29f159a8a95b7045670b14e7a521ac71e">LUSUP</a>, <a class="code" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b268eee86a440f07e5aeb1333af7c49968">UCOL</a>, <a class="code [...]
+<a name="l00025"></a><a class="code" href="superlu__enum__consts_8h.html#9c99a6c403d30f227aa91cf3b10f6aa44c28487b052a2b05f3db4dc5a722b1d7">00025</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {<a class="code" href="superlu__enum__consts_8h.html#9c99a6c403d30f227aa91cf3b10f6aa40b0955668575b21eb0ab2272aef49f76">HEAD</a>, <a class="code" href="superlu__enum__consts_8h.html#9c99a6c403d30f227aa91cf3b10f6aa44c28487b052a2b05f3db4dc5a722b1d7">TAIL</a>}                 [...]
+<a name="l00026"></a><a class="code" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f6e2d30a195cee6b2961cc2c23ea4b520b">00026</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {<a class="code" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f657cc238145ec1361c72c327674c0d754">SYSTEM</a>, <a class="code" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f6e2d30a195cee6b2961cc2c23ea4b520b">USER</a>}               [...]
+<a name="l00027"></a><a class="code" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2f0916434ec408d94e09a3db2f278fec83">00027</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {<a class="code" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2fde388e7d1af6bbb3be22c8e758d43d65">ONE_NORM</a>, <a class="code" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2f0916434ec408d94e09a3db2f278fec83">TWO_NORM</a>, <a clas [...]
+<a name="l00028"></a><a class="code" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff01e723dc87c76c9a21094300fc29e7274">00028</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {<a class="code" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0b9ad3d6f1e495ef4761e20b58cc77453">SILU</a>, <a class="code" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0183527dc1ee50ab34678f314925fdda0">SMILU_1</a>, <a class="co [...]
+<a name="l00029"></a>00029 <span class="preprocessor">#if 0</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keyword">enum</span> {<a class="code" href="slu__util_8h.html#aa1b4d4ec24548decf1f389060a7d878">NODROP</a>            = 0x0000,
+<a name="l00031"></a>00031               <a class="code" href="slu__util_8h.html#fb51a22d4d20fb9e39acd95129344997">DROP_BASIC</a>        = 0x0001, <span class="comment">/* ILU(tau) */</span>
+<a name="l00032"></a>00032               <a class="code" href="slu__util_8h.html#34a649fce94fb9a61524f3b18161aef8">DROP_PROWS</a>        = 0x0002, <span class="comment">/* ILUTP: keep p maximum rows */</span>
+<a name="l00033"></a>00033               <a class="code" href="slu__util_8h.html#741f1ee3e9529b1384492787d09a0c70">DROP_COLUMN</a>       = 0x0004, <span class="comment">/* ILUTP: for j-th column, </span>
+<a name="l00034"></a>00034 <span class="comment">                                             p = gamma * nnz(A(:,j)) */</span>
+<a name="l00035"></a>00035               <a class="code" href="slu__util_8h.html#e56780c0f0b5afa706231cbe2b1ee82f">DROP_AREA</a>         = 0x0008, <span class="comment">/* ILUTP: for j-th column, use</span>
+<a name="l00036"></a>00036 <span class="comment">                                             nnz(F(:,1:j)) / nnz(A(:,1:j))</span>
+<a name="l00037"></a>00037 <span class="comment">                                             to limit memory growth  */</span>
+<a name="l00038"></a>00038               <a class="code" href="slu__util_8h.html#72349305248ecb540ca43f404884bef5">DROP_SECONDARY</a>    = 0x000E, <span class="comment">/* PROWS | COLUMN | AREA */</span>
+<a name="l00039"></a>00039               <a class="code" href="slu__util_8h.html#c6089af2caea8fef6aa343cb16fd1646">DROP_DYNAMIC</a>      = 0x0010,
+<a name="l00040"></a>00040               <a class="code" href="slu__util_8h.html#ea78484190db0dd61d91743797bf6bfe">DROP_INTERP</a>       = 0x0100}                       rule_t;
+<a name="l00041"></a>00041 <span class="preprocessor">#endif</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span>
+<a name="l00043"></a>00043 
+<a name="l00044"></a>00044 <span class="comment">/* </span>
+<a name="l00045"></a>00045 <span class="comment"> * The following enumerate type is used by the statistics variable </span>
+<a name="l00046"></a>00046 <span class="comment"> * to keep track of flop count and time spent at various stages.</span>
+<a name="l00047"></a>00047 <span class="comment"> *</span>
+<a name="l00048"></a>00048 <span class="comment"> * Note that not all of the fields are disjoint.</span>
+<a name="l00049"></a>00049 <span class="comment"> */</span>
+<a name="l00050"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72">00050</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00051"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72ed701176980ed77fa7e65315bdae5dc5">00051</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72ed701176980ed77fa7e65315bdae5dc5">COLPERM</a>, <span class="comment">/* find a column ordering that minimizes fills */</span>
+<a name="l00052"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72e860478cf9b6cf3eb0785958149b676e">00052</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72e860478cf9b6cf3eb0785958149b676e">ROWPERM</a>, <span class="comment">/* find a row ordering maximizes diagonal. */</span>
+<a name="l00053"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e728abca54580953356d3e1548ddd04a97b">00053</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e728abca54580953356d3e1548ddd04a97b">RELAX</a>,   <span class="comment">/* find artificial supernodes */</span>
+<a name="l00054"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72837b4404052bca5280c1c918540bc003">00054</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72837b4404052bca5280c1c918540bc003">ETREE</a>,   <span class="comment">/* compute column etree */</span>
+<a name="l00055"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72a48ad2d4b3120ba615e725d16ec7bf29">00055</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72a48ad2d4b3120ba615e725d16ec7bf29">EQUIL</a>,   <span class="comment">/* equilibrate the original matrix */</span>
+<a name="l00056"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e722b4b71567fe3767853886bdfbc9df681">00056</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e722b4b71567fe3767853886bdfbc9df681">SYMBFAC</a>, <span class="comment">/* symbolic factorization. */</span>
+<a name="l00057"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72c04fbbdf0d80a4ad25e565541deeebd7">00057</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72c04fbbdf0d80a4ad25e565541deeebd7">DIST</a>,    <span class="comment">/* distribute matrix. */</span>
+<a name="l00058"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e721b6692b56d378abb85bd49063721d034">00058</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e721b6692b56d378abb85bd49063721d034">FACT</a>,    <span class="comment">/* perform LU factorization */</span>
+<a name="l00059"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e726f451ba8ea6ae9cd569eb91e2126376b">00059</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e726f451ba8ea6ae9cd569eb91e2126376b">COMM</a>,    <span class="comment">/* communication for factorization */</span>
+<a name="l00060"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e7231560b869ae176dae4e9160656d5b9eb">00060</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e7231560b869ae176dae4e9160656d5b9eb">SOL_COMM</a>,<span class="comment">/* communication for solve */</span>
+<a name="l00061"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e729b5c151728d8512307565994c89919d5">00061</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e729b5c151728d8512307565994c89919d5">RCOND</a>,   <span class="comment">/* estimate reciprocal condition number */</span>
+<a name="l00062"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72b9fc7975179c642bbac2b6ffd8fa3579">00062</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72b9fc7975179c642bbac2b6ffd8fa3579">SOLVE</a>,   <span class="comment">/* forward and back solves */</span>
+<a name="l00063"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72bb218bd1ec12fd54eaada97721a82be7">00063</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72bb218bd1ec12fd54eaada97721a82be7">REFINE</a>,  <span class="comment">/* perform iterative refinement */</span>
+<a name="l00064"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e729cf4a0866224b0bb4a7a895da27c9c4c">00064</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e729cf4a0866224b0bb4a7a895da27c9c4c">FLOAT</a>,   <span class="comment">/* time spent in floating-point operations */</span>
+<a name="l00065"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72be6640d5e5560662c8a729e54e770ecf">00065</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72be6640d5e5560662c8a729e54e770ecf">TRSV</a>,    <span class="comment">/* fraction of FACT spent in xTRSV */</span>
+<a name="l00066"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72ad1464db9e9e33f25ab0a3b82c6bd0c4">00066</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72ad1464db9e9e33f25ab0a3b82c6bd0c4">GEMV</a>,    <span class="comment">/* fraction of FACT spent in xGEMV */</span>
+<a name="l00067"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e7278fd14d7abebae04095cfbe02928f153">00067</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e7278fd14d7abebae04095cfbe02928f153">FERR</a>,    <span class="comment">/* estimate error bounds after iterative refinement */</span>
+<a name="l00068"></a><a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e722b9cc65b188ff2b2b764a5f8160c4bfc">00068</a>     <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e722b9cc65b188ff2b2b764a5f8160c4bfc">NPHASES</a>  <span class="comment">/* total number of phases */</span>
+<a name="l00069"></a>00069 } <a class="code" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72">PhaseType</a>;
+<a name="l00070"></a>00070 
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072 <span class="preprocessor">#endif </span><span class="comment">/* __SUPERLU_ENUM_CONSTS */</span>
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/superlu__enum__consts_8h.html b/DOC/html/superlu__enum__consts_8h.html
new file mode 100644
index 0000000..1c77bba
--- /dev/null
+++ b/DOC/html/superlu__enum__consts_8h.html
@@ -0,0 +1,507 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/superlu_enum_consts.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/superlu_enum_consts.h File Reference</h1>enum constants header file <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="superlu__enum__consts_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> { <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f0d077f5b932ce05e5b9f30c6087a2f31">NO</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f99f136a862ba5c7d16967231c29f09d6">YES</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a> { <a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0ae0bd0c48044d1267a827ce526249e168">DOFACT</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0ad57746dff8e73ad308739bc6cbee4c27">SamePattern</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a8814b686fe49f5ccc165c04845e112e6">SamePattern_SameRowPerm</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a86901392b6879fba18090792fe8db804">FACTORED</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adf">rowperm_t</a> { <a class="el" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adf25895a1ae8a45131936a32274bd7cdde">NOROWPERM</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adfe03251277f56e77cfc3989ed67adf932">LargeDiag</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adf19f710e8ebccae9025757e877b6c87aa">MY_PERMR</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c">colperm_t</a> { <br>
+  <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c0425aaf673bebee34014367ea7c3deb1">NATURAL</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c02f70b975e4d4fa6052812c09bdb7349">MMD_ATA</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89cef4136af63900170017e1edb479e2f14">MMD_AT_PLUS_A</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89cfc08a15679354a375b679f7d907867c3">COLAMD</a>, 
+<br>
+  <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c5a9874ccc7a94b949bdf71fd65b80061">METIS_AT_PLUS_A</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89ca7108227cd043fe50972a89b34b6d20c">PARMETIS</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89cbddc2b83ab41d07e8d180f52bcfb00ac">ZOLTAN</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c7475651fbfee514ff59d61da9e101682">MY_PERMC</a>
+<br>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> { <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d628ccffb9caebb7b4520a0653005b22f43">NOTRANS</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d621f61e3015bfe0f0c2c3fda4c5a0cdf58">TRANS</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d6226a53d2d0576982e73a770a90087a619">CONJ</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30">DiagScale_t</a> { <a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30f1e3ee583cb194a25353b4ba7b4798cf">NOEQUIL</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30bf470e461303b909bf0dc58084ebafa0">ROW</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e303e66f07732b51f2cb52e13d598f8abda">COL</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30627abe5a430420baf29ebe1940a7f2fb">BOTH</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e37">IterRefine_t</a> { <a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e375f3a3710645b9041f06dfe164fb336a3">NOREFINE</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e373388f7110f6f25a54e215eb75d5d7516">SINGLE</a> = 1, 
+<a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e3733465d1d419b1074fb259ef444609e92">DOUBLE</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e37ffb2fb86309c5c698e319b5b6dd8ab3a">EXTRA</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> { <br>
+  <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b29f159a8a95b7045670b14e7a521ac71e">LUSUP</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b268eee86a440f07e5aeb1333af7c49968">UCOL</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2383f412552e65152b50013e6c5397baa">LSUB</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2ec445297f8e62e119a337ea2b5dd2b66">USUB</a>, 
+<br>
+  <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b28456acdeff4ebe8827f33f18599d3137">LLVL</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2307244b6de1926249c921821989702db">ULVL</a>
+<br>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#9c99a6c403d30f227aa91cf3b10f6aa4">stack_end_t</a> { <a class="el" href="superlu__enum__consts_8h.html#9c99a6c403d30f227aa91cf3b10f6aa40b0955668575b21eb0ab2272aef49f76">HEAD</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#9c99a6c403d30f227aa91cf3b10f6aa44c28487b052a2b05f3db4dc5a722b1d7">TAIL</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f6">LU_space_t</a> { <a class="el" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f657cc238145ec1361c72c327674c0d754">SYSTEM</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f6e2d30a195cee6b2961cc2c23ea4b520b">USER</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2f">norm_t</a> { <a class="el" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2fde388e7d1af6bbb3be22c8e758d43d65">ONE_NORM</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2f0916434ec408d94e09a3db2f278fec83">TWO_NORM</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2ff60f12ba71e3a0c889595249955d6cf8">INF_NORM</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> { <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0b9ad3d6f1e495ef4761e20b58cc77453">SILU</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0183527dc1ee50ab34678f314925fdda0">SMILU_1</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff032a052178fd394b8110900fcb5702c13">SMILU_2</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff01e723dc87c76c9a21094300fc29e7274">SMILU_3</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72">PhaseType</a> { <br>
+  <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72ed701176980ed77fa7e65315bdae5dc5">COLPERM</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72e860478cf9b6cf3eb0785958149b676e">ROWPERM</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e728abca54580953356d3e1548ddd04a97b">RELAX</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72837b4404052bca5280c1c918540bc003">ETREE</a>, 
+<br>
+  <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72a48ad2d4b3120ba615e725d16ec7bf29">EQUIL</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e722b4b71567fe3767853886bdfbc9df681">SYMBFAC</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72c04fbbdf0d80a4ad25e565541deeebd7">DIST</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e721b6692b56d378abb85bd49063721d034">FACT</a>, 
+<br>
+  <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e726f451ba8ea6ae9cd569eb91e2126376b">COMM</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e7231560b869ae176dae4e9160656d5b9eb">SOL_COMM</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e729b5c151728d8512307565994c89919d5">RCOND</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72b9fc7975179c642bbac2b6ffd8fa3579">SOLVE</a>, 
+<br>
+  <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72bb218bd1ec12fd54eaada97721a82be7">REFINE</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e729cf4a0866224b0bb4a7a895da27c9c4c">FLOAT</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72be6640d5e5560662c8a729e54e770ecf">TRSV</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72ad1464db9e9e33f25ab0a3b82c6bd0c4">GEMV</a>, 
+<br>
+  <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e7278fd14d7abebae04095cfbe02928f153">FERR</a>, 
+<a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e722b9cc65b188ff2b2b764a5f8160c4bfc">NPHASES</a>
+<br>
+ }</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+-- SuperLU routine (version 4.1) -- Lawrence Berkeley National Lab, Univ. of California Berkeley, October 1, 2010 <hr><h2>Enumeration Type Documentation</h2>
+<a class="anchor" name="bd17bbb14f57694750d96639e738e89c"></a><!-- doxytag: member="superlu_enum_consts.h::colperm_t" ref="bd17bbb14f57694750d96639e738e89c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#bd17bbb14f57694750d96639e738e89c">colperm_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="bd17bbb14f57694750d96639e738e89c0425aaf673bebee34014367ea7c3deb1"></a><!-- doxytag: member="NATURAL" ref="bd17bbb14f57694750d96639e738e89c0425aaf673bebee34014367ea7c3deb1" args="" -->NATURAL</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="bd17bbb14f57694750d96639e738e89c02f70b975e4d4fa6052812c09bdb7349"></a><!-- doxytag: member="MMD_ATA" ref="bd17bbb14f57694750d96639e738e89c02f70b975e4d4fa6052812c09bdb7349" args="" -->MMD_ATA</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="bd17bbb14f57694750d96639e738e89cef4136af63900170017e1edb479e2f14"></a><!-- doxytag: member="MMD_AT_PLUS_A" ref="bd17bbb14f57694750d96639e738e89cef4136af63900170017e1edb479e2f14" args="" -->MMD_AT_PLUS_A</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="bd17bbb14f57694750d96639e738e89cfc08a15679354a375b679f7d907867c3"></a><!-- doxytag: member="COLAMD" ref="bd17bbb14f57694750d96639e738e89cfc08a15679354a375b679f7d907867c3" args="" -->COLAMD</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="bd17bbb14f57694750d96639e738e89c5a9874ccc7a94b949bdf71fd65b80061"></a><!-- doxytag: member="METIS_AT_PLUS_A" ref="bd17bbb14f57694750d96639e738e89c5a9874ccc7a94b949bdf71fd65b80061" args="" -->METIS_AT_PLUS_A</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="bd17bbb14f57694750d96639e738e89ca7108227cd043fe50972a89b34b6d20c"></a><!-- doxytag: member="PARMETIS" ref="bd17bbb14f57694750d96639e738e89ca7108227cd043fe50972a89b34b6d20c" args="" -->PARMETIS</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="bd17bbb14f57694750d96639e738e89cbddc2b83ab41d07e8d180f52bcfb00ac"></a><!-- doxytag: member="ZOLTAN" ref="bd17bbb14f57694750d96639e738e89cbddc2b83ab41d07e8d180f52bcfb00ac" args="" -->ZOLTAN</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="bd17bbb14f57694750d96639e738e89c7475651fbfee514ff59d61da9e101682"></a><!-- doxytag: member="MY_PERMC" ref="bd17bbb14f57694750d96639e738e89c7475651fbfee514ff59d61da9e101682" args="" -->MY_PERMC</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="4d92d07523ba751afadecd63d3479e30"></a><!-- doxytag: member="superlu_enum_consts.h::DiagScale_t" ref="4d92d07523ba751afadecd63d3479e30" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#4d92d07523ba751afadecd63d3479e30">DiagScale_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="4d92d07523ba751afadecd63d3479e30f1e3ee583cb194a25353b4ba7b4798cf"></a><!-- doxytag: member="NOEQUIL" ref="4d92d07523ba751afadecd63d3479e30f1e3ee583cb194a25353b4ba7b4798cf" args="" -->NOEQUIL</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="4d92d07523ba751afadecd63d3479e30bf470e461303b909bf0dc58084ebafa0"></a><!-- doxytag: member="ROW" ref="4d92d07523ba751afadecd63d3479e30bf470e461303b909bf0dc58084ebafa0" args="" -->ROW</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="4d92d07523ba751afadecd63d3479e303e66f07732b51f2cb52e13d598f8abda"></a><!-- doxytag: member="COL" ref="4d92d07523ba751afadecd63d3479e303e66f07732b51f2cb52e13d598f8abda" args="" -->COL</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="4d92d07523ba751afadecd63d3479e30627abe5a430420baf29ebe1940a7f2fb"></a><!-- doxytag: member="BOTH" ref="4d92d07523ba751afadecd63d3479e30627abe5a430420baf29ebe1940a7f2fb" args="" -->BOTH</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="c785c8235480e5cfef9848d89c047c0a"></a><!-- doxytag: member="superlu_enum_consts.h::fact_t" ref="c785c8235480e5cfef9848d89c047c0a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="c785c8235480e5cfef9848d89c047c0ae0bd0c48044d1267a827ce526249e168"></a><!-- doxytag: member="DOFACT" ref="c785c8235480e5cfef9848d89c047c0ae0bd0c48044d1267a827ce526249e168" args="" -->DOFACT</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="c785c8235480e5cfef9848d89c047c0ad57746dff8e73ad308739bc6cbee4c27"></a><!-- doxytag: member="SamePattern" ref="c785c8235480e5cfef9848d89c047c0ad57746dff8e73ad308739bc6cbee4c27" args="" -->SamePattern</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="c785c8235480e5cfef9848d89c047c0a8814b686fe49f5ccc165c04845e112e6"></a><!-- doxytag: member="SamePattern_SameRowPerm" ref="c785c8235480e5cfef9848d89c047c0a8814b686fe49f5ccc165c04845e112e6" args="" -->SamePattern_SameRowPerm</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="c785c8235480e5cfef9848d89c047c0a86901392b6879fba18090792fe8db804"></a><!-- doxytag: member="FACTORED" ref="c785c8235480e5cfef9848d89c047c0a86901392b6879fba18090792fe8db804" args="" -->FACTORED</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="7e73e9d3a9caeec3586c03e01c494e37"></a><!-- doxytag: member="superlu_enum_consts.h::IterRefine_t" ref="7e73e9d3a9caeec3586c03e01c494e37" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#7e73e9d3a9caeec3586c03e01c494e37">IterRefine_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="7e73e9d3a9caeec3586c03e01c494e375f3a3710645b9041f06dfe164fb336a3"></a><!-- doxytag: member="NOREFINE" ref="7e73e9d3a9caeec3586c03e01c494e375f3a3710645b9041f06dfe164fb336a3" args="" -->NOREFINE</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="7e73e9d3a9caeec3586c03e01c494e373388f7110f6f25a54e215eb75d5d7516"></a><!-- doxytag: member="SINGLE" ref="7e73e9d3a9caeec3586c03e01c494e373388f7110f6f25a54e215eb75d5d7516" args="" -->SINGLE</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="7e73e9d3a9caeec3586c03e01c494e3733465d1d419b1074fb259ef444609e92"></a><!-- doxytag: member="DOUBLE" ref="7e73e9d3a9caeec3586c03e01c494e3733465d1d419b1074fb259ef444609e92" args="" -->DOUBLE</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="7e73e9d3a9caeec3586c03e01c494e37ffb2fb86309c5c698e319b5b6dd8ab3a"></a><!-- doxytag: member="EXTRA" ref="7e73e9d3a9caeec3586c03e01c494e37ffb2fb86309c5c698e319b5b6dd8ab3a" args="" -->EXTRA</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="494fe72ce954689dd95399ea9f1d87f6"></a><!-- doxytag: member="superlu_enum_consts.h::LU_space_t" ref="494fe72ce954689dd95399ea9f1d87f6" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#494fe72ce954689dd95399ea9f1d87f6">LU_space_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="494fe72ce954689dd95399ea9f1d87f657cc238145ec1361c72c327674c0d754"></a><!-- doxytag: member="SYSTEM" ref="494fe72ce954689dd95399ea9f1d87f657cc238145ec1361c72c327674c0d754" args="" -->SYSTEM</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="494fe72ce954689dd95399ea9f1d87f6e2d30a195cee6b2961cc2c23ea4b520b"></a><!-- doxytag: member="USER" ref="494fe72ce954689dd95399ea9f1d87f6e2d30a195cee6b2961cc2c23ea4b520b" args="" -->USER</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="bd31f838aefffa46191d0d7dc36a96b2"></a><!-- doxytag: member="superlu_enum_consts.h::MemType" ref="bd31f838aefffa46191d0d7dc36a96b2" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="bd31f838aefffa46191d0d7dc36a96b29f159a8a95b7045670b14e7a521ac71e"></a><!-- doxytag: member="LUSUP" ref="bd31f838aefffa46191d0d7dc36a96b29f159a8a95b7045670b14e7a521ac71e" args="" -->LUSUP</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="bd31f838aefffa46191d0d7dc36a96b268eee86a440f07e5aeb1333af7c49968"></a><!-- doxytag: member="UCOL" ref="bd31f838aefffa46191d0d7dc36a96b268eee86a440f07e5aeb1333af7c49968" args="" -->UCOL</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="bd31f838aefffa46191d0d7dc36a96b2383f412552e65152b50013e6c5397baa"></a><!-- doxytag: member="LSUB" ref="bd31f838aefffa46191d0d7dc36a96b2383f412552e65152b50013e6c5397baa" args="" -->LSUB</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="bd31f838aefffa46191d0d7dc36a96b2ec445297f8e62e119a337ea2b5dd2b66"></a><!-- doxytag: member="USUB" ref="bd31f838aefffa46191d0d7dc36a96b2ec445297f8e62e119a337ea2b5dd2b66" args="" -->USUB</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="bd31f838aefffa46191d0d7dc36a96b28456acdeff4ebe8827f33f18599d3137"></a><!-- doxytag: member="LLVL" ref="bd31f838aefffa46191d0d7dc36a96b28456acdeff4ebe8827f33f18599d3137" args="" -->LLVL</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="bd31f838aefffa46191d0d7dc36a96b2307244b6de1926249c921821989702db"></a><!-- doxytag: member="ULVL" ref="bd31f838aefffa46191d0d7dc36a96b2307244b6de1926249c921821989702db" args="" -->ULVL</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="0cb73c13a7c2390c3a9a0a8913477ff0"></a><!-- doxytag: member="superlu_enum_consts.h::milu_t" ref="0cb73c13a7c2390c3a9a0a8913477ff0" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="0cb73c13a7c2390c3a9a0a8913477ff0b9ad3d6f1e495ef4761e20b58cc77453"></a><!-- doxytag: member="SILU" ref="0cb73c13a7c2390c3a9a0a8913477ff0b9ad3d6f1e495ef4761e20b58cc77453" args="" -->SILU</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="0cb73c13a7c2390c3a9a0a8913477ff0183527dc1ee50ab34678f314925fdda0"></a><!-- doxytag: member="SMILU_1" ref="0cb73c13a7c2390c3a9a0a8913477ff0183527dc1ee50ab34678f314925fdda0" args="" -->SMILU_1</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="0cb73c13a7c2390c3a9a0a8913477ff032a052178fd394b8110900fcb5702c13"></a><!-- doxytag: member="SMILU_2" ref="0cb73c13a7c2390c3a9a0a8913477ff032a052178fd394b8110900fcb5702c13" args="" -->SMILU_2</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="0cb73c13a7c2390c3a9a0a8913477ff01e723dc87c76c9a21094300fc29e7274"></a><!-- doxytag: member="SMILU_3" ref="0cb73c13a7c2390c3a9a0a8913477ff01e723dc87c76c9a21094300fc29e7274" args="" -->SMILU_3</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="e1770bc6f4ac445d81ad521683a57a2f"></a><!-- doxytag: member="superlu_enum_consts.h::norm_t" ref="e1770bc6f4ac445d81ad521683a57a2f" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#e1770bc6f4ac445d81ad521683a57a2f">norm_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="e1770bc6f4ac445d81ad521683a57a2fde388e7d1af6bbb3be22c8e758d43d65"></a><!-- doxytag: member="ONE_NORM" ref="e1770bc6f4ac445d81ad521683a57a2fde388e7d1af6bbb3be22c8e758d43d65" args="" -->ONE_NORM</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="e1770bc6f4ac445d81ad521683a57a2f0916434ec408d94e09a3db2f278fec83"></a><!-- doxytag: member="TWO_NORM" ref="e1770bc6f4ac445d81ad521683a57a2f0916434ec408d94e09a3db2f278fec83" args="" -->TWO_NORM</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="e1770bc6f4ac445d81ad521683a57a2ff60f12ba71e3a0c889595249955d6cf8"></a><!-- doxytag: member="INF_NORM" ref="e1770bc6f4ac445d81ad521683a57a2ff60f12ba71e3a0c889595249955d6cf8" args="" -->INF_NORM</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e72"></a><!-- doxytag: member="superlu_enum_consts.h::PhaseType" ref="f00a42ecad444bbda75cde1b64bd7e72" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#f00a42ecad444bbda75cde1b64bd7e72">PhaseType</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e72ed701176980ed77fa7e65315bdae5dc5"></a><!-- doxytag: member="COLPERM" ref="f00a42ecad444bbda75cde1b64bd7e72ed701176980ed77fa7e65315bdae5dc5" args="" -->COLPERM</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e72e860478cf9b6cf3eb0785958149b676e"></a><!-- doxytag: member="ROWPERM" ref="f00a42ecad444bbda75cde1b64bd7e72e860478cf9b6cf3eb0785958149b676e" args="" -->ROWPERM</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e728abca54580953356d3e1548ddd04a97b"></a><!-- doxytag: member="RELAX" ref="f00a42ecad444bbda75cde1b64bd7e728abca54580953356d3e1548ddd04a97b" args="" -->RELAX</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e72837b4404052bca5280c1c918540bc003"></a><!-- doxytag: member="ETREE" ref="f00a42ecad444bbda75cde1b64bd7e72837b4404052bca5280c1c918540bc003" args="" -->ETREE</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e72a48ad2d4b3120ba615e725d16ec7bf29"></a><!-- doxytag: member="EQUIL" ref="f00a42ecad444bbda75cde1b64bd7e72a48ad2d4b3120ba615e725d16ec7bf29" args="" -->EQUIL</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e722b4b71567fe3767853886bdfbc9df681"></a><!-- doxytag: member="SYMBFAC" ref="f00a42ecad444bbda75cde1b64bd7e722b4b71567fe3767853886bdfbc9df681" args="" -->SYMBFAC</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e72c04fbbdf0d80a4ad25e565541deeebd7"></a><!-- doxytag: member="DIST" ref="f00a42ecad444bbda75cde1b64bd7e72c04fbbdf0d80a4ad25e565541deeebd7" args="" -->DIST</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e721b6692b56d378abb85bd49063721d034"></a><!-- doxytag: member="FACT" ref="f00a42ecad444bbda75cde1b64bd7e721b6692b56d378abb85bd49063721d034" args="" -->FACT</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e726f451ba8ea6ae9cd569eb91e2126376b"></a><!-- doxytag: member="COMM" ref="f00a42ecad444bbda75cde1b64bd7e726f451ba8ea6ae9cd569eb91e2126376b" args="" -->COMM</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e7231560b869ae176dae4e9160656d5b9eb"></a><!-- doxytag: member="SOL_COMM" ref="f00a42ecad444bbda75cde1b64bd7e7231560b869ae176dae4e9160656d5b9eb" args="" -->SOL_COMM</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e729b5c151728d8512307565994c89919d5"></a><!-- doxytag: member="RCOND" ref="f00a42ecad444bbda75cde1b64bd7e729b5c151728d8512307565994c89919d5" args="" -->RCOND</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e72b9fc7975179c642bbac2b6ffd8fa3579"></a><!-- doxytag: member="SOLVE" ref="f00a42ecad444bbda75cde1b64bd7e72b9fc7975179c642bbac2b6ffd8fa3579" args="" -->SOLVE</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e72bb218bd1ec12fd54eaada97721a82be7"></a><!-- doxytag: member="REFINE" ref="f00a42ecad444bbda75cde1b64bd7e72bb218bd1ec12fd54eaada97721a82be7" args="" -->REFINE</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e729cf4a0866224b0bb4a7a895da27c9c4c"></a><!-- doxytag: member="FLOAT" ref="f00a42ecad444bbda75cde1b64bd7e729cf4a0866224b0bb4a7a895da27c9c4c" args="" -->FLOAT</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e72be6640d5e5560662c8a729e54e770ecf"></a><!-- doxytag: member="TRSV" ref="f00a42ecad444bbda75cde1b64bd7e72be6640d5e5560662c8a729e54e770ecf" args="" -->TRSV</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e72ad1464db9e9e33f25ab0a3b82c6bd0c4"></a><!-- doxytag: member="GEMV" ref="f00a42ecad444bbda75cde1b64bd7e72ad1464db9e9e33f25ab0a3b82c6bd0c4" args="" -->GEMV</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e7278fd14d7abebae04095cfbe02928f153"></a><!-- doxytag: member="FERR" ref="f00a42ecad444bbda75cde1b64bd7e7278fd14d7abebae04095cfbe02928f153" args="" -->FERR</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="f00a42ecad444bbda75cde1b64bd7e722b9cc65b188ff2b2b764a5f8160c4bfc"></a><!-- doxytag: member="NPHASES" ref="f00a42ecad444bbda75cde1b64bd7e722b9cc65b188ff2b2b764a5f8160c4bfc" args="" -->NPHASES</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="a38fa2e7f17b86333ca49e4b8a151adf"></a><!-- doxytag: member="superlu_enum_consts.h::rowperm_t" ref="a38fa2e7f17b86333ca49e4b8a151adf" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#a38fa2e7f17b86333ca49e4b8a151adf">rowperm_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="a38fa2e7f17b86333ca49e4b8a151adf25895a1ae8a45131936a32274bd7cdde"></a><!-- doxytag: member="NOROWPERM" ref="a38fa2e7f17b86333ca49e4b8a151adf25895a1ae8a45131936a32274bd7cdde" args="" -->NOROWPERM</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a38fa2e7f17b86333ca49e4b8a151adfe03251277f56e77cfc3989ed67adf932"></a><!-- doxytag: member="LargeDiag" ref="a38fa2e7f17b86333ca49e4b8a151adfe03251277f56e77cfc3989ed67adf932" args="" -->LargeDiag</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a38fa2e7f17b86333ca49e4b8a151adf19f710e8ebccae9025757e877b6c87aa"></a><!-- doxytag: member="MY_PERMR" ref="a38fa2e7f17b86333ca49e4b8a151adf19f710e8ebccae9025757e877b6c87aa" args="" -->MY_PERMR</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="9c99a6c403d30f227aa91cf3b10f6aa4"></a><!-- doxytag: member="superlu_enum_consts.h::stack_end_t" ref="9c99a6c403d30f227aa91cf3b10f6aa4" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#9c99a6c403d30f227aa91cf3b10f6aa4">stack_end_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="9c99a6c403d30f227aa91cf3b10f6aa40b0955668575b21eb0ab2272aef49f76"></a><!-- doxytag: member="HEAD" ref="9c99a6c403d30f227aa91cf3b10f6aa40b0955668575b21eb0ab2272aef49f76" args="" -->HEAD</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="9c99a6c403d30f227aa91cf3b10f6aa44c28487b052a2b05f3db4dc5a722b1d7"></a><!-- doxytag: member="TAIL" ref="9c99a6c403d30f227aa91cf3b10f6aa44c28487b052a2b05f3db4dc5a722b1d7" args="" -->TAIL</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="0c4e17b2d5cea33f9991ccc6a6678d62"></a><!-- doxytag: member="superlu_enum_consts.h::trans_t" ref="0c4e17b2d5cea33f9991ccc6a6678d62" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="0c4e17b2d5cea33f9991ccc6a6678d628ccffb9caebb7b4520a0653005b22f43"></a><!-- doxytag: member="NOTRANS" ref="0c4e17b2d5cea33f9991ccc6a6678d628ccffb9caebb7b4520a0653005b22f43" args="" -->NOTRANS</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="0c4e17b2d5cea33f9991ccc6a6678d621f61e3015bfe0f0c2c3fda4c5a0cdf58"></a><!-- doxytag: member="TRANS" ref="0c4e17b2d5cea33f9991ccc6a6678d621f61e3015bfe0f0c2c3fda4c5a0cdf58" args="" -->TRANS</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="0c4e17b2d5cea33f9991ccc6a6678d6226a53d2d0576982e73a770a90087a619"></a><!-- doxytag: member="CONJ" ref="0c4e17b2d5cea33f9991ccc6a6678d6226a53d2d0576982e73a770a90087a619" args="" -->CONJ</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="e6553118ce91b9c08f9376941ae1536f"></a><!-- doxytag: member="superlu_enum_consts.h::yes_no_t" ref="e6553118ce91b9c08f9376941ae1536f" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="e6553118ce91b9c08f9376941ae1536f0d077f5b932ce05e5b9f30c6087a2f31"></a><!-- doxytag: member="NO" ref="e6553118ce91b9c08f9376941ae1536f0d077f5b932ce05e5b9f30c6087a2f31" args="" -->NO</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="e6553118ce91b9c08f9376941ae1536f99f136a862ba5c7d16967231c29f09d6"></a><!-- doxytag: member="YES" ref="e6553118ce91b9c08f9376941ae1536f99f136a862ba5c7d16967231c29f09d6" args="" -->YES</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/superlu__timer_8c.html b/DOC/html/superlu__timer_8c.html
new file mode 100644
index 0000000..ec96ce1
--- /dev/null
+++ b/DOC/html/superlu__timer_8c.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/superlu_timer.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/superlu_timer.c File Reference</h1>Returns the time used. <a href="#_details">More...</a>
+<p>
+<code>#include <sys/types.h></code><br>
+<code>#include <sys/times.h></code><br>
+<code>#include <sys/time.h></code><br>
+<code>#include <unistd.h></code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__timer_8c.html#0c6777573bbfe81917cd381e0090d355">SuperLU_timer_</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Timer function.  <a href="#0c6777573bbfe81917cd381e0090d355"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> Returns the time in seconds used by the process.</pre><p>
+<pre> Note: the timer function call is machine dependent. Use conditional
+       compilation to choose the appropriate function.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="0c6777573bbfe81917cd381e0090d355"></a><!-- doxytag: member="superlu_timer.c::SuperLU_timer_" ref="0c6777573bbfe81917cd381e0090d355" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double SuperLU_timer_           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/supermatrix_8h-source.html b/DOC/html/supermatrix_8h-source.html
new file mode 100644
index 0000000..8658e58
--- /dev/null
+++ b/DOC/html/supermatrix_8h-source.html
@@ -0,0 +1,199 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/supermatrix.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<h1>SRC/supermatrix.h</h1><a href="supermatrix_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00004"></a>00004 <span class="preprocessor">#ifndef __SUPERLU_SUPERMATRIX </span><span class="comment">/* allow multiple inclusions */</span>
+<a name="l00005"></a>00005 <span class="preprocessor">#define __SUPERLU_SUPERMATRIX</span>
+<a name="l00006"></a>00006 <span class="preprocessor"></span>
+<a name="l00007"></a>00007 
+<a name="l00008"></a>00008 <span class="comment">/********************************************</span>
+<a name="l00009"></a>00009 <span class="comment"> * The matrix types are defined as follows. *</span>
+<a name="l00010"></a>00010 <span class="comment"> ********************************************/</span>
+<a name="l00011"></a><a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">00011</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00012"></a><a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b87960993c31a9ba98c523bfab0d759c1a628">00012</a>     <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b87960993c31a9ba98c523bfab0d759c1a628">SLU_NC</a>,    <span class="comment">/* column-wise, no supernode */</span>
+<a name="l00013"></a><a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b879625e4eb65ac258dadb9abccd65337cfe4">00013</a>     <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b879625e4eb65ac258dadb9abccd65337cfe4">SLU_NCP</a>,   <span class="comment">/* column-wise, column-permuted, no supernode </span>
+<a name="l00014"></a>00014 <span class="comment">                  (The consecutive columns of nonzeros, after permutation,</span>
+<a name="l00015"></a>00015 <span class="comment">                   may not be stored  contiguously.) */</span>
+<a name="l00016"></a><a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796ac74fbf90a105db9be6795b5be9221ca">00016</a>     <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796ac74fbf90a105db9be6795b5be9221ca">SLU_NR</a>,    <span class="comment">/* row-wize, no supernode */</span>
+<a name="l00017"></a><a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b879679d0f76e80f9b57ebdab6a0c76720462">00017</a>     <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b879679d0f76e80f9b57ebdab6a0c76720462">SLU_SC</a>,    <span class="comment">/* column-wise, supernode */</span>
+<a name="l00018"></a><a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b879635ab293720f39593ceff43e8989f4de6">00018</a>     <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b879635ab293720f39593ceff43e8989f4de6">SLU_SCP</a>,   <span class="comment">/* supernode, column-wise, permuted */</span>    
+<a name="l00019"></a><a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b87969677060bfc0641fb53defdb70caa8cf5">00019</a>     <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b87969677060bfc0641fb53defdb70caa8cf5">SLU_SR</a>,    <span class="comment">/* row-wise, supernode */</span>
+<a name="l00020"></a><a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796a59ca236b51fe0c7bd7c80c70e345768">00020</a>     <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796a59ca236b51fe0c7bd7c80c70e345768">SLU_DN</a>,     <span class="comment">/* Fortran style column-wise storage for dense matrix */</span>
+<a name="l00021"></a><a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796b96ddd65efd6342d0ac532bb47eb39a0">00021</a>     <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796b96ddd65efd6342d0ac532bb47eb39a0">SLU_NR_loc</a>  <span class="comment">/* distributed compressed row format  */</span> 
+<a name="l00022"></a>00022 } <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>;
+<a name="l00023"></a>00023 
+<a name="l00024"></a><a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">00024</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00025"></a><a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e291900da7fdd394e36c76e7aa215d6a79162d">00025</a>     <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e291900da7fdd394e36c76e7aa215d6a79162d">SLU_S</a>,     <span class="comment">/* single */</span>
+<a name="l00026"></a><a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190b5c3b3a455e3b3a64d805d76f19ac6dc">00026</a>     <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190b5c3b3a455e3b3a64d805d76f19ac6dc">SLU_D</a>,     <span class="comment">/* double */</span>
+<a name="l00027"></a><a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e291901b589b5f96dbc8619450aacc22d0bf39">00027</a>     <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e291901b589b5f96dbc8619450aacc22d0bf39">SLU_C</a>,     <span class="comment">/* single complex */</span>
+<a name="l00028"></a><a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e291901ace1e51c238b13622aaa733ef3b2a47">00028</a>     <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e291901ace1e51c238b13622aaa733ef3b2a47">SLU_Z</a>      <span class="comment">/* double complex */</span>
+<a name="l00029"></a>00029 } <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>;
+<a name="l00030"></a>00030 
+<a name="l00031"></a><a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">00031</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00032"></a><a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60ea9ef3cae331a60a4bcc353bb57ad5db">00032</a>     <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60ea9ef3cae331a60a4bcc353bb57ad5db">SLU_GE</a>,    <span class="comment">/* general */</span>
+<a name="l00033"></a><a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60fee10f9836531b012b1b80cf36355b67">00033</a>     <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60fee10f9836531b012b1b80cf36355b67">SLU_TRLU</a>,  <span class="comment">/* lower triangular, unit diagonal */</span>
+<a name="l00034"></a><a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d600c7113548d3d5a292cb2265477436ad7">00034</a>     <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d600c7113548d3d5a292cb2265477436ad7">SLU_TRUU</a>,  <span class="comment">/* upper triangular, unit diagonal */</span>
+<a name="l00035"></a><a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d604defa99d9ff8ed4af7a92547b3faf9fb">00035</a>     <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d604defa99d9ff8ed4af7a92547b3faf9fb">SLU_TRL</a>,   <span class="comment">/* lower triangular */</span>
+<a name="l00036"></a><a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60a9aea83e745716e0da54d738feb19cba">00036</a>     <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60a9aea83e745716e0da54d738feb19cba">SLU_TRU</a>,   <span class="comment">/* upper triangular */</span>
+<a name="l00037"></a><a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d6091b9ee4e608cb7c7cf7572703fbd3506">00037</a>     <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d6091b9ee4e608cb7c7cf7572703fbd3506">SLU_SYL</a>,   <span class="comment">/* symmetric, store lower half */</span>
+<a name="l00038"></a><a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d600d509f1e8285653c36f81b10626fb747">00038</a>     <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d600d509f1e8285653c36f81b10626fb747">SLU_SYU</a>,   <span class="comment">/* symmetric, store upper half */</span>
+<a name="l00039"></a><a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60bba0b28718f648302d6f710d7d66d1fb">00039</a>     <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60bba0b28718f648302d6f710d7d66d1fb">SLU_HEL</a>,   <span class="comment">/* Hermitian, store lower half */</span>
+<a name="l00040"></a><a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60bada9d0add93fd4fbe17b9d6758d38f8">00040</a>     <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60bada9d0add93fd4fbe17b9d6758d38f8">SLU_HEU</a>    <span class="comment">/* Hermitian, store upper half */</span>
+<a name="l00041"></a>00041 } <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>;
+<a name="l00042"></a>00042 
+<a name="l00043"></a><a class="code" href="structSuperMatrix.html">00043</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00044"></a><a class="code" href="structSuperMatrix.html#b37e181824f50a405272451afc399952">00044</a>         <a class="code" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> Stype; <span class="comment">/* Storage type: interprets the storage structure </span>
+<a name="l00045"></a>00045 <span class="comment">                          pointed to by *Store. */</span>
+<a name="l00046"></a><a class="code" href="structSuperMatrix.html#edd4bd451819549620b49076a62dfdcc">00046</a>         <a class="code" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> Dtype; <span class="comment">/* Data type. */</span>
+<a name="l00047"></a><a class="code" href="structSuperMatrix.html#42877db0cfad1033374474f48e4b3fc4">00047</a>         <a class="code" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> Mtype; <span class="comment">/* Matrix type: describes the mathematical property of </span>
+<a name="l00048"></a>00048 <span class="comment">                          the matrix. */</span>
+<a name="l00049"></a><a class="code" href="structSuperMatrix.html#b1d854b814f0757e7ff7e0da01c6ef43">00049</a>         <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>  nrow;   <span class="comment">/* number of rows */</span>
+<a name="l00050"></a><a class="code" href="structSuperMatrix.html#b8b85bf206c36ebc2223cc2ec6acbe8c">00050</a>         <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>  ncol;   <span class="comment">/* number of columns */</span>
+<a name="l00051"></a><a class="code" href="structSuperMatrix.html#73ebca1b46bb24536226b9378e01c5b5">00051</a>         <span class="keywordtype">void</span> *Store;   <span class="comment">/* pointer to the actual storage of the matrix */</span>
+<a name="l00052"></a>00052 } <a class="code" href="structSuperMatrix.html">SuperMatrix</a>;
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054 <span class="comment">/***********************************************</span>
+<a name="l00055"></a>00055 <span class="comment"> * The storage schemes are defined as follows. *</span>
+<a name="l00056"></a>00056 <span class="comment"> ***********************************************/</span>
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058 <span class="comment">/* Stype == SLU_NC (Also known as Harwell-Boeing sparse matrix format) */</span>
+<a name="l00059"></a><a class="code" href="structNCformat.html">00059</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00060"></a><a class="code" href="structNCformat.html#ffa2566dd89ea8ce6422f788887b5b27">00060</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>  nnz;     <span class="comment">/* number of nonzeros in the matrix */</span>
+<a name="l00061"></a><a class="code" href="structNCformat.html#a3e85810bb190b7359d8aaa956a64e64">00061</a>     <span class="keywordtype">void</span> *nzval;    <span class="comment">/* pointer to array of nonzero values, packed by column */</span>
+<a name="l00062"></a><a class="code" href="structNCformat.html#16eb8492bb5694035ef3e620ea8c77b1">00062</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>  *rowind; <span class="comment">/* pointer to array of row indices of the nonzeros */</span>
+<a name="l00063"></a><a class="code" href="structNCformat.html#881f460e39f34bbbf70909b6b0629adc">00063</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>  *colptr; <span class="comment">/* pointer to array of beginning of columns in nzval[] </span>
+<a name="l00064"></a>00064 <span class="comment">                       and rowind[]  */</span>
+<a name="l00065"></a>00065                     <span class="comment">/* Note:</span>
+<a name="l00066"></a>00066 <span class="comment">                       Zero-based indexing is used;</span>
+<a name="l00067"></a>00067 <span class="comment">                       colptr[] has ncol+1 entries, the last one pointing</span>
+<a name="l00068"></a>00068 <span class="comment">                       beyond the last column, so that colptr[ncol] = nnz. */</span>
+<a name="l00069"></a>00069 } <a class="code" href="structNCformat.html">NCformat</a>;
+<a name="l00070"></a>00070 
+<a name="l00071"></a>00071 <span class="comment">/* Stype == SLU_NR */</span>
+<a name="l00072"></a><a class="code" href="structNRformat.html">00072</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00073"></a><a class="code" href="structNRformat.html#e3652d6a08cf47208db6abbd162bdee2">00073</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>  nnz;     <span class="comment">/* number of nonzeros in the matrix */</span>
+<a name="l00074"></a><a class="code" href="structNRformat.html#3933d6611dc87efede947b08ea8d83f2">00074</a>     <span class="keywordtype">void</span> *nzval;    <span class="comment">/* pointer to array of nonzero values, packed by raw */</span>
+<a name="l00075"></a><a class="code" href="structNRformat.html#25b76fc1f79b314a99c1e8f8522d77af">00075</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>  *colind; <span class="comment">/* pointer to array of columns indices of the nonzeros */</span>
+<a name="l00076"></a><a class="code" href="structNRformat.html#552302eb293088d4b7040f487b430ba7">00076</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>  *rowptr; <span class="comment">/* pointer to array of beginning of rows in nzval[] </span>
+<a name="l00077"></a>00077 <span class="comment">                       and colind[]  */</span>
+<a name="l00078"></a>00078                     <span class="comment">/* Note:</span>
+<a name="l00079"></a>00079 <span class="comment">                       Zero-based indexing is used;</span>
+<a name="l00080"></a>00080 <span class="comment">                       rowptr[] has nrow+1 entries, the last one pointing</span>
+<a name="l00081"></a>00081 <span class="comment">                       beyond the last row, so that rowptr[nrow] = nnz. */</span>
+<a name="l00082"></a>00082 } <a class="code" href="structNRformat.html">NRformat</a>;
+<a name="l00083"></a>00083 
+<a name="l00084"></a>00084 <span class="comment">/* Stype == SLU_SC */</span>
+<a name="l00085"></a><a class="code" href="structSCformat.html">00085</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00086"></a><a class="code" href="structSCformat.html#3808f35bd097fbc0a39e3e65ee2a8d4a">00086</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>  nnz;        <span class="comment">/* number of nonzeros in the matrix */</span>
+<a name="l00087"></a><a class="code" href="structSCformat.html#afffc008b0b8e57b9cdf5689a527bd8c">00087</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>  nsuper;     <span class="comment">/* number of supernodes, minus 1 */</span>
+<a name="l00088"></a><a class="code" href="structSCformat.html#25011a4746e4cf0a6fbc38ba45a70e91">00088</a>   <span class="keywordtype">void</span> *nzval;       <span class="comment">/* pointer to array of nonzero values, packed by column */</span>
+<a name="l00089"></a><a class="code" href="structSCformat.html#41e93b73c8bce9326f035e3647ee94ca">00089</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *nzval_colptr;<span class="comment">/* pointer to array of beginning of columns in nzval[] */</span>
+<a name="l00090"></a><a class="code" href="structSCformat.html#ec8a46751f64a94238495838aaed7cd2">00090</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *rowind;     <span class="comment">/* pointer to array of compressed row indices of </span>
+<a name="l00091"></a>00091 <span class="comment">                        rectangular supernodes */</span>
+<a name="l00092"></a><a class="code" href="structSCformat.html#7683b1730b067ae2058004f0f18ad88d">00092</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *rowind_colptr;<span class="comment">/* pointer to array of beginning of columns in rowind[] */</span>
+<a name="l00093"></a><a class="code" href="structSCformat.html#75a51eef4af5a906cde9a32eddcb2fc1">00093</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *col_to_sup;   <span class="comment">/* col_to_sup[j] is the supernode number to which column </span>
+<a name="l00094"></a>00094 <span class="comment">                        j belongs; mapping from column to supernode number. */</span>
+<a name="l00095"></a><a class="code" href="structSCformat.html#d5cb1b2ae17c5fe554c3b70721718b08">00095</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *sup_to_col;   <span class="comment">/* sup_to_col[s] points to the start of the s-th </span>
+<a name="l00096"></a>00096 <span class="comment">                        supernode; mapping from supernode number to column.</span>
+<a name="l00097"></a>00097 <span class="comment">                        e.g.: col_to_sup: 0 1 2 2 3 3 3 4 4 4 4 4 4 (ncol=12)</span>
+<a name="l00098"></a>00098 <span class="comment">                              sup_to_col: 0 1 2 4 7 12           (nsuper=4) */</span>
+<a name="l00099"></a>00099                      <span class="comment">/* Note:</span>
+<a name="l00100"></a>00100 <span class="comment">                        Zero-based indexing is used;</span>
+<a name="l00101"></a>00101 <span class="comment">                        nzval_colptr[], rowind_colptr[], col_to_sup and</span>
+<a name="l00102"></a>00102 <span class="comment">                        sup_to_col[] have ncol+1 entries, the last one</span>
+<a name="l00103"></a>00103 <span class="comment">                        pointing beyond the last column.</span>
+<a name="l00104"></a>00104 <span class="comment">                        For col_to_sup[], only the first ncol entries are</span>
+<a name="l00105"></a>00105 <span class="comment">                        defined. For sup_to_col[], only the first nsuper+2</span>
+<a name="l00106"></a>00106 <span class="comment">                        entries are defined. */</span>
+<a name="l00107"></a>00107 } <a class="code" href="structSCformat.html">SCformat</a>;
+<a name="l00108"></a>00108 
+<a name="l00109"></a>00109 <span class="comment">/* Stype == SLU_SCP */</span>
+<a name="l00110"></a><a class="code" href="structSCPformat.html">00110</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00111"></a><a class="code" href="structSCPformat.html#d4b6e7424269c3cbe9a368604433870e">00111</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>  nnz;        <span class="comment">/* number of nonzeros in the matrix */</span>
+<a name="l00112"></a><a class="code" href="structSCPformat.html#20ee99d8cfb0cecad94373e2eb5abef8">00112</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>  nsuper;     <span class="comment">/* number of supernodes */</span>
+<a name="l00113"></a><a class="code" href="structSCPformat.html#028e5f9ef15054302c1403969c37a0fb">00113</a>   <span class="keywordtype">void</span> *nzval;       <span class="comment">/* pointer to array of nonzero values, packed by column */</span>
+<a name="l00114"></a><a class="code" href="structSCPformat.html#a9bae5f483aa1a22aec18f5c2393f05e">00114</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>  *nzval_colbeg;<span class="comment">/* nzval_colbeg[j] points to beginning of column j</span>
+<a name="l00115"></a>00115 <span class="comment">                          in nzval[] */</span>
+<a name="l00116"></a><a class="code" href="structSCPformat.html#098e9a5c87e2c0b35c82852b1910334d">00116</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>  *nzval_colend;<span class="comment">/* nzval_colend[j] points to one past the last element</span>
+<a name="l00117"></a>00117 <span class="comment">                          of column j in nzval[] */</span>
+<a name="l00118"></a><a class="code" href="structSCPformat.html#5b4ccbb31fa3a7c2372b5a297453e200">00118</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a>  *rowind;      <span class="comment">/* pointer to array of compressed row indices of </span>
+<a name="l00119"></a>00119 <span class="comment">                          rectangular supernodes */</span>
+<a name="l00120"></a><a class="code" href="structSCPformat.html#1bd16ec6ab44636e56da09d65fbe8402">00120</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *rowind_colbeg;<span class="comment">/* rowind_colbeg[j] points to beginning of column j</span>
+<a name="l00121"></a>00121 <span class="comment">                          in rowind[] */</span>
+<a name="l00122"></a><a class="code" href="structSCPformat.html#09c1770c0baad3c1152d48587ad084b4">00122</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *rowind_colend;<span class="comment">/* rowind_colend[j] points to one past the last element</span>
+<a name="l00123"></a>00123 <span class="comment">                          of column j in rowind[] */</span>
+<a name="l00124"></a><a class="code" href="structSCPformat.html#ba16553c2896f7c88450621f18b54bae">00124</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *col_to_sup;   <span class="comment">/* col_to_sup[j] is the supernode number to which column</span>
+<a name="l00125"></a>00125 <span class="comment">                          j belongs; mapping from column to supernode. */</span>
+<a name="l00126"></a><a class="code" href="structSCPformat.html#345ad774183c979674dd0960a930508e">00126</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *sup_to_colbeg; <span class="comment">/* sup_to_colbeg[s] points to the start of the s-th </span>
+<a name="l00127"></a>00127 <span class="comment">                           supernode; mapping from supernode to column.*/</span>
+<a name="l00128"></a><a class="code" href="structSCPformat.html#8e470d085ca7b39645336943a1f2eae6">00128</a>   <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *sup_to_colend; <span class="comment">/* sup_to_colend[s] points to one past the end of the</span>
+<a name="l00129"></a>00129 <span class="comment">                           s-th supernode; mapping from supernode number to</span>
+<a name="l00130"></a>00130 <span class="comment">                           column.</span>
+<a name="l00131"></a>00131 <span class="comment">                        e.g.: col_to_sup: 0 1 2 2 3 3 3 4 4 4 4 4 4 (ncol=12)</span>
+<a name="l00132"></a>00132 <span class="comment">                              sup_to_colbeg: 0 1 2 4 7              (nsuper=4)</span>
+<a name="l00133"></a>00133 <span class="comment">                              sup_to_colend: 1 2 4 7 12                    */</span>
+<a name="l00134"></a>00134                      <span class="comment">/* Note:</span>
+<a name="l00135"></a>00135 <span class="comment">                        Zero-based indexing is used;</span>
+<a name="l00136"></a>00136 <span class="comment">                        nzval_colptr[], rowind_colptr[], col_to_sup and</span>
+<a name="l00137"></a>00137 <span class="comment">                        sup_to_col[] have ncol+1 entries, the last one</span>
+<a name="l00138"></a>00138 <span class="comment">                        pointing beyond the last column.         */</span>
+<a name="l00139"></a>00139 } <a class="code" href="structSCPformat.html">SCPformat</a>;
+<a name="l00140"></a>00140 
+<a name="l00141"></a>00141 <span class="comment">/* Stype == SLU_NCP */</span>
+<a name="l00142"></a><a class="code" href="structNCPformat.html">00142</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00143"></a><a class="code" href="structNCPformat.html#c8c12ffc9edd0906608612727ad406ed">00143</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> nnz;    <span class="comment">/* number of nonzeros in the matrix */</span>
+<a name="l00144"></a><a class="code" href="structNCPformat.html#519ed66fdf9da30c76c079474503c764">00144</a>     <span class="keywordtype">void</span> *nzval;  <span class="comment">/* pointer to array of nonzero values, packed by column */</span>
+<a name="l00145"></a><a class="code" href="structNCPformat.html#8a27cd5a756bc313cc3c487a84e8ba30">00145</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *rowind;<span class="comment">/* pointer to array of row indices of the nonzeros */</span>
+<a name="l00146"></a>00146                   <span class="comment">/* Note: nzval[]/rowind[] always have the same length */</span>
+<a name="l00147"></a><a class="code" href="structNCPformat.html#2192334a0f76d4c18784caa1f8783f01">00147</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *colbeg;<span class="comment">/* colbeg[j] points to the beginning of column j in nzval[] </span>
+<a name="l00148"></a>00148 <span class="comment">                     and rowind[]  */</span>
+<a name="l00149"></a><a class="code" href="structNCPformat.html#86dcc41e83595a12ecd88d57748430c0">00149</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *colend;<span class="comment">/* colend[j] points to one past the last element of column</span>
+<a name="l00150"></a>00150 <span class="comment">                     j in nzval[] and rowind[]  */</span>
+<a name="l00151"></a>00151                   <span class="comment">/* Note:</span>
+<a name="l00152"></a>00152 <span class="comment">                     Zero-based indexing is used;</span>
+<a name="l00153"></a>00153 <span class="comment">                     The consecutive columns of the nonzeros may not be </span>
+<a name="l00154"></a>00154 <span class="comment">                     contiguous in storage, because the matrix has been </span>
+<a name="l00155"></a>00155 <span class="comment">                     postmultiplied by a column permutation matrix. */</span>
+<a name="l00156"></a>00156 } <a class="code" href="structNCPformat.html">NCPformat</a>;
+<a name="l00157"></a>00157 
+<a name="l00158"></a>00158 <span class="comment">/* Stype == SLU_DN */</span>
+<a name="l00159"></a><a class="code" href="structDNformat.html">00159</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00160"></a><a class="code" href="structDNformat.html#6b584837b30f33849c6c3b070aade816">00160</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> lda;    <span class="comment">/* leading dimension */</span>
+<a name="l00161"></a><a class="code" href="structDNformat.html#54a061275c52aa9e38f4cb65da46d48c">00161</a>     <span class="keywordtype">void</span> *nzval;  <span class="comment">/* array of size lda*ncol to represent a dense matrix */</span>
+<a name="l00162"></a>00162 } <a class="code" href="structDNformat.html">DNformat</a>;
+<a name="l00163"></a>00163 
+<a name="l00164"></a>00164 <span class="comment">/* Stype == SLU_NR_loc (Distributed Compressed Row Format) */</span>
+<a name="l00165"></a><a class="code" href="structNRformat__loc.html">00165</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00166"></a><a class="code" href="structNRformat__loc.html#41c309cb83dedeaa82c0e4e137ea4785">00166</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> nnz_loc;   <span class="comment">/* number of nonzeros in the local submatrix */</span>
+<a name="l00167"></a><a class="code" href="structNRformat__loc.html#90413dc3eb197a83b70cc0d97e4c54af">00167</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> m_loc;     <span class="comment">/* number of rows local to this processor */</span>
+<a name="l00168"></a><a class="code" href="structNRformat__loc.html#cab0ad4c74c4b4f0c68647f98b430cd9">00168</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> fst_row;   <span class="comment">/* global index of the first row */</span>
+<a name="l00169"></a><a class="code" href="structNRformat__loc.html#08b19d74f15e6475f43565035ae898ca">00169</a>     <span class="keywordtype">void</span>  *nzval;    <span class="comment">/* pointer to array of nonzero values, packed by row */</span>
+<a name="l00170"></a><a class="code" href="structNRformat__loc.html#add0788ee704ffb7000b0485ee128061">00170</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *rowptr;   <span class="comment">/* pointer to array of beginning of rows in nzval[] </span>
+<a name="l00171"></a>00171 <span class="comment">                        and colind[]  */</span>
+<a name="l00172"></a><a class="code" href="structNRformat__loc.html#5d192fc35ba0915afa42f36eca0e2d78">00172</a>     <a class="code" href="slu__cdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *colind;   <span class="comment">/* pointer to array of column indices of the nonzeros */</span>
+<a name="l00173"></a>00173                      <span class="comment">/* Note:</span>
+<a name="l00174"></a>00174 <span class="comment">                        Zero-based indexing is used;</span>
+<a name="l00175"></a>00175 <span class="comment">                        rowptr[] has n_loc + 1 entries, the last one pointing</span>
+<a name="l00176"></a>00176 <span class="comment">                        beyond the last row, so that rowptr[n_loc] = nnz_loc.*/</span>
+<a name="l00177"></a>00177 } <a class="code" href="structNRformat__loc.html">NRformat_loc</a>;
+<a name="l00178"></a>00178 
+<a name="l00179"></a>00179 
+<a name="l00180"></a>00180 <span class="preprocessor">#endif  </span><span class="comment">/* __SUPERLU_SUPERMATRIX */</span>
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/supermatrix_8h.html b/DOC/html/supermatrix_8h.html
new file mode 100644
index 0000000..2936a96
--- /dev/null
+++ b/DOC/html/supermatrix_8h.html
@@ -0,0 +1,183 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/supermatrix.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/supermatrix.h File Reference</h1>Defines matrix types. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="supermatrix_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperMatrix.html">SuperMatrix</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCformat.html">NCformat</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat.html">NRformat</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html">SCformat</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html">SCPformat</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCPformat.html">NCPformat</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structDNformat.html">DNformat</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat__loc.html">NRformat_loc</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> { <br>
+  <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b87960993c31a9ba98c523bfab0d759c1a628">SLU_NC</a>, 
+<a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b879625e4eb65ac258dadb9abccd65337cfe4">SLU_NCP</a>, 
+<a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796ac74fbf90a105db9be6795b5be9221ca">SLU_NR</a>, 
+<a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b879679d0f76e80f9b57ebdab6a0c76720462">SLU_SC</a>, 
+<br>
+  <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b879635ab293720f39593ceff43e8989f4de6">SLU_SCP</a>, 
+<a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b87969677060bfc0641fb53defdb70caa8cf5">SLU_SR</a>, 
+<a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796a59ca236b51fe0c7bd7c80c70e345768">SLU_DN</a>, 
+<a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796b96ddd65efd6342d0ac532bb47eb39a0">SLU_NR_loc</a>
+<br>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> { <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e291900da7fdd394e36c76e7aa215d6a79162d">SLU_S</a>, 
+<a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190b5c3b3a455e3b3a64d805d76f19ac6dc">SLU_D</a>, 
+<a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e291901b589b5f96dbc8619450aacc22d0bf39">SLU_C</a>, 
+<a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e291901ace1e51c238b13622aaa733ef3b2a47">SLU_Z</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> { <br>
+  <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60ea9ef3cae331a60a4bcc353bb57ad5db">SLU_GE</a>, 
+<a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60fee10f9836531b012b1b80cf36355b67">SLU_TRLU</a>, 
+<a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d600c7113548d3d5a292cb2265477436ad7">SLU_TRUU</a>, 
+<a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d604defa99d9ff8ed4af7a92547b3faf9fb">SLU_TRL</a>, 
+<br>
+  <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60a9aea83e745716e0da54d738feb19cba">SLU_TRU</a>, 
+<a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d6091b9ee4e608cb7c7cf7572703fbd3506">SLU_SYL</a>, 
+<a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d600d509f1e8285653c36f81b10626fb747">SLU_SYU</a>, 
+<a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60bba0b28718f648302d6f710d7d66d1fb">SLU_HEL</a>, 
+<br>
+  <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60bada9d0add93fd4fbe17b9d6758d38f8">SLU_HEU</a>
+<br>
+ }</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<hr><h2>Enumeration Type Documentation</h2>
+<a class="anchor" name="7987cb2a28ec879b39a90e9e48e29190"></a><!-- doxytag: member="supermatrix.h::Dtype_t" ref="7987cb2a28ec879b39a90e9e48e29190" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="7987cb2a28ec879b39a90e9e48e291900da7fdd394e36c76e7aa215d6a79162d"></a><!-- doxytag: member="SLU_S" ref="7987cb2a28ec879b39a90e9e48e291900da7fdd394e36c76e7aa215d6a79162d" args="" -->SLU_S</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="7987cb2a28ec879b39a90e9e48e29190b5c3b3a455e3b3a64d805d76f19ac6dc"></a><!-- doxytag: member="SLU_D" ref="7987cb2a28ec879b39a90e9e48e29190b5c3b3a455e3b3a64d805d76f19ac6dc" args="" -->SLU_D</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="7987cb2a28ec879b39a90e9e48e291901b589b5f96dbc8619450aacc22d0bf39"></a><!-- doxytag: member="SLU_C" ref="7987cb2a28ec879b39a90e9e48e291901b589b5f96dbc8619450aacc22d0bf39" args="" -->SLU_C</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="7987cb2a28ec879b39a90e9e48e291901ace1e51c238b13622aaa733ef3b2a47"></a><!-- doxytag: member="SLU_Z" ref="7987cb2a28ec879b39a90e9e48e291901ace1e51c238b13622aaa733ef3b2a47" args="" -->SLU_Z</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="5962adac634f3feebe487ad443802d60"></a><!-- doxytag: member="supermatrix.h::Mtype_t" ref="5962adac634f3feebe487ad443802d60" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="5962adac634f3feebe487ad443802d60ea9ef3cae331a60a4bcc353bb57ad5db"></a><!-- doxytag: member="SLU_GE" ref="5962adac634f3feebe487ad443802d60ea9ef3cae331a60a4bcc353bb57ad5db" args="" -->SLU_GE</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="5962adac634f3feebe487ad443802d60fee10f9836531b012b1b80cf36355b67"></a><!-- doxytag: member="SLU_TRLU" ref="5962adac634f3feebe487ad443802d60fee10f9836531b012b1b80cf36355b67" args="" -->SLU_TRLU</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="5962adac634f3feebe487ad443802d600c7113548d3d5a292cb2265477436ad7"></a><!-- doxytag: member="SLU_TRUU" ref="5962adac634f3feebe487ad443802d600c7113548d3d5a292cb2265477436ad7" args="" -->SLU_TRUU</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="5962adac634f3feebe487ad443802d604defa99d9ff8ed4af7a92547b3faf9fb"></a><!-- doxytag: member="SLU_TRL" ref="5962adac634f3feebe487ad443802d604defa99d9ff8ed4af7a92547b3faf9fb" args="" -->SLU_TRL</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="5962adac634f3feebe487ad443802d60a9aea83e745716e0da54d738feb19cba"></a><!-- doxytag: member="SLU_TRU" ref="5962adac634f3feebe487ad443802d60a9aea83e745716e0da54d738feb19cba" args="" -->SLU_TRU</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="5962adac634f3feebe487ad443802d6091b9ee4e608cb7c7cf7572703fbd3506"></a><!-- doxytag: member="SLU_SYL" ref="5962adac634f3feebe487ad443802d6091b9ee4e608cb7c7cf7572703fbd3506" args="" -->SLU_SYL</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="5962adac634f3feebe487ad443802d600d509f1e8285653c36f81b10626fb747"></a><!-- doxytag: member="SLU_SYU" ref="5962adac634f3feebe487ad443802d600d509f1e8285653c36f81b10626fb747" args="" -->SLU_SYU</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="5962adac634f3feebe487ad443802d60bba0b28718f648302d6f710d7d66d1fb"></a><!-- doxytag: member="SLU_HEL" ref="5962adac634f3feebe487ad443802d60bba0b28718f648302d6f710d7d66d1fb" args="" -->SLU_HEL</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="5962adac634f3feebe487ad443802d60bada9d0add93fd4fbe17b9d6758d38f8"></a><!-- doxytag: member="SLU_HEU" ref="5962adac634f3feebe487ad443802d60bada9d0add93fd4fbe17b9d6758d38f8" args="" -->SLU_HEU</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="9d2ddedeb2a3d92e950811c61d0b8796"></a><!-- doxytag: member="supermatrix.h::Stype_t" ref="9d2ddedeb2a3d92e950811c61d0b8796" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="9d2ddedeb2a3d92e950811c61d0b87960993c31a9ba98c523bfab0d759c1a628"></a><!-- doxytag: member="SLU_NC" ref="9d2ddedeb2a3d92e950811c61d0b87960993c31a9ba98c523bfab0d759c1a628" args="" -->SLU_NC</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="9d2ddedeb2a3d92e950811c61d0b879625e4eb65ac258dadb9abccd65337cfe4"></a><!-- doxytag: member="SLU_NCP" ref="9d2ddedeb2a3d92e950811c61d0b879625e4eb65ac258dadb9abccd65337cfe4" args="" -->SLU_NCP</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="9d2ddedeb2a3d92e950811c61d0b8796ac74fbf90a105db9be6795b5be9221ca"></a><!-- doxytag: member="SLU_NR" ref="9d2ddedeb2a3d92e950811c61d0b8796ac74fbf90a105db9be6795b5be9221ca" args="" -->SLU_NR</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="9d2ddedeb2a3d92e950811c61d0b879679d0f76e80f9b57ebdab6a0c76720462"></a><!-- doxytag: member="SLU_SC" ref="9d2ddedeb2a3d92e950811c61d0b879679d0f76e80f9b57ebdab6a0c76720462" args="" -->SLU_SC</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="9d2ddedeb2a3d92e950811c61d0b879635ab293720f39593ceff43e8989f4de6"></a><!-- doxytag: member="SLU_SCP" ref="9d2ddedeb2a3d92e950811c61d0b879635ab293720f39593ceff43e8989f4de6" args="" -->SLU_SCP</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="9d2ddedeb2a3d92e950811c61d0b87969677060bfc0641fb53defdb70caa8cf5"></a><!-- doxytag: member="SLU_SR" ref="9d2ddedeb2a3d92e950811c61d0b87969677060bfc0641fb53defdb70caa8cf5" args="" -->SLU_SR</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="9d2ddedeb2a3d92e950811c61d0b8796a59ca236b51fe0c7bd7c80c70e345768"></a><!-- doxytag: member="SLU_DN" ref="9d2ddedeb2a3d92e950811c61d0b8796a59ca236b51fe0c7bd7c80c70e345768" args="" -->SLU_DN</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="9d2ddedeb2a3d92e950811c61d0b8796b96ddd65efd6342d0ac532bb47eb39a0"></a><!-- doxytag: member="SLU_NR_loc" ref="9d2ddedeb2a3d92e950811c61d0b8796b96ddd65efd6342d0ac532bb47eb39a0" args="" -->SLU_NR_loc</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/sutil_8c.html b/DOC/html/sutil_8c.html
new file mode 100644
index 0000000..3ad08c7
--- /dev/null
+++ b/DOC/html/sutil_8c.html
@@ -0,0 +1,994 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/sutil.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/sutil.c File Reference</h1>Matrix utility functions. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__sdefs_8h-source.html">slu_sdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#579e4609791c29f1b5f118e8fad589a1">sCreate_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, float *nzval, int *rowind, int *colptr, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8 [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related.  <a href="#579e4609791c29f1b5f118e8fad589a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#24a4f9ba12c52c73a132b0b3b374603e">sCreate_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, float *nzval, int *colind, int *rowptr, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8 [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#a5ed0ac7636b53f6004de03ac6ee5fa2">sCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *B)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B.  <a href="#a5ed0ac7636b53f6004de03ac6ee5fa2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#f67168ae9d7920841831576f6298158b">sCreate_Dense_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *X, int m, int n, float *x, int ldx, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> stype, <a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> dtyp [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#cab5fbd47a16ac4dcdfb20a557e77861">sCopy_Dense_Matrix</a> (int M, int N, float *X, int ldx, float *Y, int ldy)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#cd3569a74da2e6a7d634675014fea82f">sCreate_SuperNode_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, int m, int n, int nnz, float *nzval, int *nzval_colptr, int *rowind, int *rowind_colptr, int *col_to_sup, int *sup_to_col, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> sty [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#beab98ddf4ff7a83f39132f00df707a3">sCompRow_to_CompCol</a> (int m, int n, int nnz, float *a, int *colind, int *rowptr, float **at, int **rowind, int **colptr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage.  <a href="#beab98ddf4ff7a83f39132f00df707a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#dc7fea2acb7f41b9818b189720b297a5">sPrint_CompCol_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging.  <a href="#dc7fea2acb7f41b9818b189720b297a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#2dfd96c3fba192a18a95e89735f8dedf">sPrint_SuperNode_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#dac44427ccc5c67f7f00744d1fc8501e">sPrint_Dense_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#3b1baccb0a743b085244b5c9c58616d8">sprint_lu_col</a> (char *msg, int jcol, int pivrow, int *xprune, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor.  <a href="#3b1baccb0a743b085244b5c9c58616d8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#12365f7c1a88d3c18e0ce06383f0e78d">scheck_tempv</a> (int n, float *tempv)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check whether tempv[] == 0. This should be true before and after calling any numeric routines, i.e., "panel_bmod" and "column_bmod".  <a href="#12365f7c1a88d3c18e0ce06383f0e78d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#ae1faea15add2d01572b7ce6d037ac47">sGenXtrue</a> (int n, int nrhs, float *x, int ldx)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#51d71bcf7e5497c9e64a6dcecc9fe30b">sFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, int nrhs, float *x, int ldx, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el"  [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's.  <a href="#51d71bcf7e5497c9e64a6dcecc9fe30b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#cbd3b859941f0ed660ddb178b9f898f9">sfill</a> (float *a, int alen, float dval)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fills a float precision array with a given value.  <a href="#cbd3b859941f0ed660ddb178b9f898f9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#e25fa2d7b1de8cb8bb2297c42b72727a">sinf_norm_error</a> (int nrhs, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *X, float *xtrue)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector.  <a href="#e25fa2d7b1de8cb8bb2297c42b72727a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#e654ed8c97398a81ad9cf2bac09bbdce">sPrintPerf</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *mem_usage, float rpg, float rcond, float *ferr, float *berr, char *equed, <a class="el" href="struc [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Print performance of the code.  <a href="#e654ed8c97398a81ad9cf2bac09bbdce"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#75e7f70be5afd936daa4ad0e2ae91300">print_float_vec</a> (char *what, int n, float *vec)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.1) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ August 1, 2008</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="75e7f70be5afd936daa4ad0e2ae91300"></a><!-- doxytag: member="sutil.c::print_float_vec" ref="75e7f70be5afd936daa4ad0e2ae91300" args="(char *what, int n, float *vec)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">print_float_vec           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>vec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="12365f7c1a88d3c18e0ce06383f0e78d"></a><!-- doxytag: member="sutil.c::scheck_tempv" ref="12365f7c1a88d3c18e0ce06383f0e78d" args="(int n, float *tempv)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void scheck_tempv           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>tempv</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="beab98ddf4ff7a83f39132f00df707a3"></a><!-- doxytag: member="sutil.c::sCompRow_to_CompCol" ref="beab98ddf4ff7a83f39132f00df707a3" args="(int m, int n, int nnz, float *a, int *colind, int *rowptr, float **at, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sCompRow_to_CompCol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>colind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname"> <em>at</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a5ed0ac7636b53f6004de03ac6ee5fa2"></a><!-- doxytag: member="sutil.c::sCopy_CompCol_Matrix" ref="a5ed0ac7636b53f6004de03ac6ee5fa2" args="(SuperMatrix *A, SuperMatrix *B)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sCopy_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cab5fbd47a16ac4dcdfb20a557e77861"></a><!-- doxytag: member="sutil.c::sCopy_Dense_Matrix" ref="cab5fbd47a16ac4dcdfb20a557e77861" args="(int M, int N, float *X, int ldx, float *Y, int ldy)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sCopy_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>Y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldy</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Copies a two-dimensional matrix X to another matrix Y. 
+</div>
+</div><p>
+<a class="anchor" name="579e4609791c29f1b5f118e8fad589a1"></a><!-- doxytag: member="sutil.c::sCreate_CompCol_Matrix" ref="579e4609791c29f1b5f118e8fad589a1" args="(SuperMatrix *A, int m, int n, int nnz, float *nzval, int *rowind, int *colptr, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sCreate_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="24a4f9ba12c52c73a132b0b3b374603e"></a><!-- doxytag: member="sutil.c::sCreate_CompRow_Matrix" ref="24a4f9ba12c52c73a132b0b3b374603e" args="(SuperMatrix *A, int m, int n, int nnz, float *nzval, int *colind, int *rowptr, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sCreate_CompRow_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>colind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f67168ae9d7920841831576f6298158b"></a><!-- doxytag: member="sutil.c::sCreate_Dense_Matrix" ref="f67168ae9d7920841831576f6298158b" args="(SuperMatrix *X, int m, int n, float *x, int ldx, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sCreate_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cd3569a74da2e6a7d634675014fea82f"></a><!-- doxytag: member="sutil.c::sCreate_SuperNode_Matrix" ref="cd3569a74da2e6a7d634675014fea82f" args="(SuperMatrix *L, int m, int n, int nnz, float *nzval, int *nzval_colptr, int *rowind, int *rowind_colptr, int *col_to_sup, int *sup_to_col, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sCreate_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nzval_colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowind_colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>col_to_sup</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>sup_to_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cbd3b859941f0ed660ddb178b9f898f9"></a><!-- doxytag: member="sutil.c::sfill" ref="cbd3b859941f0ed660ddb178b9f898f9" args="(float *a, int alen, float dval)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sfill           </td>
+          <td>(</td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>alen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>dval</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="51d71bcf7e5497c9e64a6dcecc9fe30b"></a><!-- doxytag: member="sutil.c::sFillRHS" ref="51d71bcf7e5497c9e64a6dcecc9fe30b" args="(trans_t trans, int nrhs, float *x, int ldx, SuperMatrix *A, SuperMatrix *B)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sFillRHS           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ae1faea15add2d01572b7ce6d037ac47"></a><!-- doxytag: member="sutil.c::sGenXtrue" ref="ae1faea15add2d01572b7ce6d037ac47" args="(int n, int nrhs, float *x, int ldx)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sGenXtrue           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e25fa2d7b1de8cb8bb2297c42b72727a"></a><!-- doxytag: member="sutil.c::sinf_norm_error" ref="e25fa2d7b1de8cb8bb2297c42b72727a" args="(int nrhs, SuperMatrix *X, float *xtrue)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sinf_norm_error           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>xtrue</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="dc7fea2acb7f41b9818b189720b297a5"></a><!-- doxytag: member="sutil.c::sPrint_CompCol_Matrix" ref="dc7fea2acb7f41b9818b189720b297a5" args="(char *what, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sPrint_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="dac44427ccc5c67f7f00744d1fc8501e"></a><!-- doxytag: member="sutil.c::sPrint_Dense_Matrix" ref="dac44427ccc5c67f7f00744d1fc8501e" args="(char *what, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sPrint_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3b1baccb0a743b085244b5c9c58616d8"></a><!-- doxytag: member="sutil.c::sprint_lu_col" ref="3b1baccb0a743b085244b5c9c58616d8" args="(char *msg, int jcol, int pivrow, int *xprune, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sprint_lu_col           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>msg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2dfd96c3fba192a18a95e89735f8dedf"></a><!-- doxytag: member="sutil.c::sPrint_SuperNode_Matrix" ref="2dfd96c3fba192a18a95e89735f8dedf" args="(char *what, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sPrint_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e654ed8c97398a81ad9cf2bac09bbdce"></a><!-- doxytag: member="sutil.c::sPrintPerf" ref="e654ed8c97398a81ad9cf2bac09bbdce" args="(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage, float rpg, float rcond, float *ferr, float *berr, char *equed, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sPrintPerf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>rpg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/tab_b.gif b/DOC/html/tab_b.gif
new file mode 100644
index 0000000..0d62348
Binary files /dev/null and b/DOC/html/tab_b.gif differ
diff --git a/DOC/html/tab_l.gif b/DOC/html/tab_l.gif
new file mode 100644
index 0000000..9b1e633
Binary files /dev/null and b/DOC/html/tab_l.gif differ
diff --git a/DOC/html/tab_r.gif b/DOC/html/tab_r.gif
new file mode 100644
index 0000000..ce9dd9f
Binary files /dev/null and b/DOC/html/tab_r.gif differ
diff --git a/DOC/html/tabs.css b/DOC/html/tabs.css
new file mode 100644
index 0000000..95f00a9
--- /dev/null
+++ b/DOC/html/tabs.css
@@ -0,0 +1,102 @@
+/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
+
+DIV.tabs
+{
+   float            : left;
+   width            : 100%;
+   background       : url("tab_b.gif") repeat-x bottom;
+   margin-bottom    : 4px;
+}
+
+DIV.tabs UL
+{
+   margin           : 0px;
+   padding-left     : 10px;
+   list-style       : none;
+}
+
+DIV.tabs LI, DIV.tabs FORM
+{
+   display          : inline;
+   margin           : 0px;
+   padding          : 0px;
+}
+
+DIV.tabs FORM
+{
+   float            : right;
+}
+
+DIV.tabs A
+{
+   float            : left;
+   background       : url("tab_r.gif") no-repeat right top;
+   border-bottom    : 1px solid #84B0C7;
+   font-size        : x-small;
+   font-weight      : bold;
+   text-decoration  : none;
+}
+
+DIV.tabs A:hover
+{
+   background-position: 100% -150px;
+}
+
+DIV.tabs A:link, DIV.tabs A:visited,
+DIV.tabs A:active, DIV.tabs A:hover
+{
+       color: #1A419D;
+}
+
+DIV.tabs SPAN
+{
+   float            : left;
+   display          : block;
+   background       : url("tab_l.gif") no-repeat left top;
+   padding          : 5px 9px;
+   white-space      : nowrap;
+}
+
+DIV.tabs INPUT
+{
+   float            : right;
+   display          : inline;
+   font-size        : 1em;
+}
+
+DIV.tabs TD
+{
+   font-size        : x-small;
+   font-weight      : bold;
+   text-decoration  : none;
+}
+
+
+
+/* Commented Backslash Hack hides rule from IE5-Mac \*/
+DIV.tabs SPAN {float : none;}
+/* End IE5-Mac hack */
+
+DIV.tabs A:hover SPAN
+{
+   background-position: 0% -150px;
+}
+
+DIV.tabs LI.current A
+{
+   background-position: 100% -150px;
+   border-width     : 0px;
+}
+
+DIV.tabs LI.current SPAN
+{
+   background-position: 0% -150px;
+   padding-bottom   : 6px;
+}
+
+DIV.navpath
+{
+   background       : none;
+   border           : none;
+   border-bottom    : 1px solid #84B0C7;
+}
diff --git a/DOC/html/util_8c.html b/DOC/html/util_8c.html
new file mode 100644
index 0000000..6182cad
--- /dev/null
+++ b/DOC/html/util_8c.html
@@ -0,0 +1,970 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/util.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/util.c File Reference</h1>Utility functions. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__ddefs_8h-source.html">slu_ddefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#70f31d2c4d8d0802751120e07028bd3a">NBUCKS</a>   10</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the statistics of the supernodes.  <a href="#70f31d2c4d8d0802751120e07028bd3a"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#060bded38730c2e58fa7f7e19c43ba08">superlu_abort_and_exit</a> (char *msg)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Global statistics variale.  <a href="#060bded38730c2e58fa7f7e19c43ba08"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#4792687285a879f7955029421ba99795">set_default_options</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the default values for the options argument.  <a href="#4792687285a879f7955029421ba99795"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#fce6cba2b855a4b046f6521d5dd1beb4">ilu_set_default_options</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the default values for the options argument for ILU.  <a href="#fce6cba2b855a4b046f6521d5dd1beb4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#3a041511849362ed44688698c86a9039">print_options</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Print the options setting.  <a href="#3a041511849362ed44688698c86a9039"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#f68d6594a77880eedb6c7b35aef237ac">print_ilu_options</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Print the options setting.  <a href="#f68d6594a77880eedb6c7b35aef237ac"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#c16a0aea75cf99b4d38ec4ede6f13eb4">Destroy_SuperMatrix_Store</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Deallocate the structure pointing to the actual storage of the matrix.  <a href="#c16a0aea75cf99b4d38ec4ede6f13eb4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#27491a8171a480d6c98e6d1e535e1973">Destroy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#6292e6a8f2b75101294f2e99927b5d2a">Destroy_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#ea724a390aed4ef00a4b8ed783c60014">Destroy_SuperNode_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#7285ca16a0b84b4333d71efeb65c0126">Destroy_CompCol_Permuted</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A is of type Stype==NCP.  <a href="#7285ca16a0b84b4333d71efeb65c0126"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#301f89dc9483e5bcdc47fc96e8645cf7">Destroy_Dense_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A is of type Stype==DN.  <a href="#301f89dc9483e5bcdc47fc96e8645cf7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#67bce8b2142b3be41583de4fbea02cb0">resetrep_col</a> (const int nseg, const int *segrep, int *repfnz)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reset repfnz[] for the current column.  <a href="#67bce8b2142b3be41583de4fbea02cb0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#cac794ae60517b94cb755975b51b9538">countnz</a> (const int n, int *xprune, int *nnzL, int *nnzU, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Count the total number of nonzeros in factors L and U, and in the symmetrically reduced L.  <a href="#cac794ae60517b94cb755975b51b9538"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#45274d2d42e1a1305101bbe11e47ed65">ilu_countnz</a> (const int n, int *nnzL, int *nnzU, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Count the total number of nonzeros in factors L and U.  <a href="#45274d2d42e1a1305101bbe11e47ed65"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#4b97838714471334eba3f4de948d6e7a">fixupL</a> (const int n, const int *perm_r, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fix up the data storage lsub for L-subscripts. It removes the subscript sets for structural pruning, and applies permuation to the remaining subscripts.  <a href="#4b97838714471334eba3f4de948d6e7a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#9e2ebe03503cdfc4ab20306d028ca312">print_panel_seg</a> (int n, int w, int jcol, int nseg, int *segrep, int *repfnz)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of segment info after panel_dfs().  <a href="#9e2ebe03503cdfc4ab20306d028ca312"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#9b8745daf1fd22070364570977fe1ccc">StatInit</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#ef88fef229bf26ba82b50d99c20ad915">StatPrint</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#7d50e009f6f1f4ba8a63cdd912a0d31d">StatFree</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__util_8h.html#aae6020bb33e780ff6edbd4e45ce08ac">flops_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#60256c1cabadcd15f555ed6e9d7eedef">LUFactFlops</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__util_8h.html#aae6020bb33e780ff6edbd4e45ce08ac">flops_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#fdfc4cfea288d5639fb7321929550b8a">LUSolveFlops</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#e289773c377a566a2f77c88b21d7f4ae">ifill</a> (int *a, int alen, int ival)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fills an integer array with a given value.  <a href="#e289773c377a566a2f77c88b21d7f4ae"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#1040b7d1545dbf58b7af05d48621ed0a">super_stats</a> (int nsuper, int *xsup)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#5789a3d7549a127e955680283ecfe44e">SpaSize</a> (int n, int np, float sum_npw)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#9daf07581bce8c0f5c879c5899ce419c">DenseSize</a> (int n, float sum_nw)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#f27aecac055064fa7581c854848f7e7b">check_repfnz</a> (int n, int w, int jcol, int *repfnz)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check whether repfnz[] == EMPTY after reset.  <a href="#f27aecac055064fa7581c854848f7e7b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a88c72f09a077ee18043edff386f4a2c">PrintSumm</a> (char *type, int nfail, int nrun, int nerrs)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Print a summary of the testing results.  <a href="#a88c72f09a077ee18043edff386f4a2c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#ac67c35b47f2aa92a3202769d3eebdeb">print_int_vec</a> (char *what, int n, int *vec)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#52adbcf3d0b17d26fa9fc133c911993d">slu_PrintInt10</a> (char *name, int len, int *x)</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#17dfd68739139149a72dfcbd88bcdf24">max_sup_size</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.1) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November, 2010</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="70f31d2c4d8d0802751120e07028bd3a"></a><!-- doxytag: member="util.c::NBUCKS" ref="70f31d2c4d8d0802751120e07028bd3a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NBUCKS   10          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="f27aecac055064fa7581c854848f7e7b"></a><!-- doxytag: member="util.c::check_repfnz" ref="f27aecac055064fa7581c854848f7e7b" args="(int n, int w, int jcol, int *repfnz)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void check_repfnz           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cac794ae60517b94cb755975b51b9538"></a><!-- doxytag: member="util.c::countnz" ref="cac794ae60517b94cb755975b51b9538" args="(const int n, int *xprune, int *nnzL, int *nnzU, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void countnz           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nnzL</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nnzU</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9daf07581bce8c0f5c879c5899ce419c"></a><!-- doxytag: member="util.c::DenseSize" ref="9daf07581bce8c0f5c879c5899ce419c" args="(int n, float sum_nw)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float DenseSize           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>sum_nw</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="27491a8171a480d6c98e6d1e535e1973"></a><!-- doxytag: member="util.c::Destroy_CompCol_Matrix" ref="27491a8171a480d6c98e6d1e535e1973" args="(SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Destroy_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7285ca16a0b84b4333d71efeb65c0126"></a><!-- doxytag: member="util.c::Destroy_CompCol_Permuted" ref="7285ca16a0b84b4333d71efeb65c0126" args="(SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Destroy_CompCol_Permuted           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6292e6a8f2b75101294f2e99927b5d2a"></a><!-- doxytag: member="util.c::Destroy_CompRow_Matrix" ref="6292e6a8f2b75101294f2e99927b5d2a" args="(SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Destroy_CompRow_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="301f89dc9483e5bcdc47fc96e8645cf7"></a><!-- doxytag: member="util.c::Destroy_Dense_Matrix" ref="301f89dc9483e5bcdc47fc96e8645cf7" args="(SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Destroy_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c16a0aea75cf99b4d38ec4ede6f13eb4"></a><!-- doxytag: member="util.c::Destroy_SuperMatrix_Store" ref="c16a0aea75cf99b4d38ec4ede6f13eb4" args="(SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Destroy_SuperMatrix_Store           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ea724a390aed4ef00a4b8ed783c60014"></a><!-- doxytag: member="util.c::Destroy_SuperNode_Matrix" ref="ea724a390aed4ef00a4b8ed783c60014" args="(SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Destroy_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4b97838714471334eba3f4de948d6e7a"></a><!-- doxytag: member="util.c::fixupL" ref="4b97838714471334eba3f4de948d6e7a" args="(const int n, const int *perm_r, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fixupL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e289773c377a566a2f77c88b21d7f4ae"></a><!-- doxytag: member="util.c::ifill" ref="e289773c377a566a2f77c88b21d7f4ae" args="(int *a, int alen, int ival)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ifill           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>alen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ival</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="45274d2d42e1a1305101bbe11e47ed65"></a><!-- doxytag: member="util.c::ilu_countnz" ref="45274d2d42e1a1305101bbe11e47ed65" args="(const int n, int *nnzL, int *nnzU, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_countnz           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nnzL</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nnzU</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fce6cba2b855a4b046f6521d5dd1beb4"></a><!-- doxytag: member="util.c::ilu_set_default_options" ref="fce6cba2b855a4b046f6521d5dd1beb4" args="(superlu_options_t *options)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ilu_set_default_options           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="60256c1cabadcd15f555ed6e9d7eedef"></a><!-- doxytag: member="util.c::LUFactFlops" ref="60256c1cabadcd15f555ed6e9d7eedef" args="(SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__util_8h.html#aae6020bb33e780ff6edbd4e45ce08ac">flops_t</a> LUFactFlops           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fdfc4cfea288d5639fb7321929550b8a"></a><!-- doxytag: member="util.c::LUSolveFlops" ref="fdfc4cfea288d5639fb7321929550b8a" args="(SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__util_8h.html#aae6020bb33e780ff6edbd4e45ce08ac">flops_t</a> LUSolveFlops           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f68d6594a77880eedb6c7b35aef237ac"></a><!-- doxytag: member="util.c::print_ilu_options" ref="f68d6594a77880eedb6c7b35aef237ac" args="(superlu_options_t *options)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void print_ilu_options           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ac67c35b47f2aa92a3202769d3eebdeb"></a><!-- doxytag: member="util.c::print_int_vec" ref="ac67c35b47f2aa92a3202769d3eebdeb" args="(char *what, int n, int *vec)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int print_int_vec           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>vec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3a041511849362ed44688698c86a9039"></a><!-- doxytag: member="util.c::print_options" ref="3a041511849362ed44688698c86a9039" args="(superlu_options_t *options)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void print_options           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9e2ebe03503cdfc4ab20306d028ca312"></a><!-- doxytag: member="util.c::print_panel_seg" ref="9e2ebe03503cdfc4ab20306d028ca312" args="(int n, int w, int jcol, int nseg, int *segrep, int *repfnz)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void print_panel_seg           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a88c72f09a077ee18043edff386f4a2c"></a><!-- doxytag: member="util.c::PrintSumm" ref="a88c72f09a077ee18043edff386f4a2c" args="(char *type, int nfail, int nrun, int nerrs)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PrintSumm           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nfail</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrun</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nerrs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="67bce8b2142b3be41583de4fbea02cb0"></a><!-- doxytag: member="util.c::resetrep_col" ref="67bce8b2142b3be41583de4fbea02cb0" args="(const int nseg, const int *segrep, int *repfnz)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void resetrep_col           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4792687285a879f7955029421ba99795"></a><!-- doxytag: member="util.c::set_default_options" ref="4792687285a879f7955029421ba99795" args="(superlu_options_t *options)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void set_default_options           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="52adbcf3d0b17d26fa9fc133c911993d"></a><!-- doxytag: member="util.c::slu_PrintInt10" ref="52adbcf3d0b17d26fa9fc133c911993d" args="(char *name, int len, int *x)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int slu_PrintInt10           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>len</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>x</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5789a3d7549a127e955680283ecfe44e"></a><!-- doxytag: member="util.c::SpaSize" ref="5789a3d7549a127e955680283ecfe44e" args="(int n, int np, float sum_npw)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float SpaSize           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>np</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float </td>
+          <td class="paramname"> <em>sum_npw</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7d50e009f6f1f4ba8a63cdd912a0d31d"></a><!-- doxytag: member="util.c::StatFree" ref="7d50e009f6f1f4ba8a63cdd912a0d31d" args="(SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void StatFree           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9b8745daf1fd22070364570977fe1ccc"></a><!-- doxytag: member="util.c::StatInit" ref="9b8745daf1fd22070364570977fe1ccc" args="(SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void StatInit           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ef88fef229bf26ba82b50d99c20ad915"></a><!-- doxytag: member="util.c::StatPrint" ref="ef88fef229bf26ba82b50d99c20ad915" args="(SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void StatPrint           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1040b7d1545dbf58b7af05d48621ed0a"></a><!-- doxytag: member="util.c::super_stats" ref="1040b7d1545dbf58b7af05d48621ed0a" args="(int nsuper, int *xsup)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void super_stats           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nsuper</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xsup</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="060bded38730c2e58fa7f7e19c43ba08"></a><!-- doxytag: member="util.c::superlu_abort_and_exit" ref="060bded38730c2e58fa7f7e19c43ba08" args="(char *msg)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void superlu_abort_and_exit           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>msg</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="17dfd68739139149a72dfcbd88bcdf24"></a><!-- doxytag: member="util.c::max_sup_size" ref="17dfd68739139149a72dfcbd88bcdf24" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int <a class="el" href="util_8c.html#17dfd68739139149a72dfcbd88bcdf24">max_sup_size</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/xerbla_8c.html b/DOC/html/xerbla_8c.html
new file mode 100644
index 0000000..af10a12
--- /dev/null
+++ b/DOC/html/xerbla_8c.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/xerbla.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/xerbla.c File Reference</h1><code>#include <stdio.h></code><br>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xerbla_8c.html#eba2ad2b99fd4707175a2b9f42597e50">xerbla_</a> (char *srname, int *info)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="eba2ad2b99fd4707175a2b9f42597e50"></a><!-- doxytag: member="xerbla.c::xerbla_" ref="eba2ad2b99fd4707175a2b9f42597e50" args="(char *srname, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int xerbla_           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>srname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zcolumn__bmod_8c.html b/DOC/html/zcolumn__bmod_8c.html
new file mode 100644
index 0000000..ee1c107
--- /dev/null
+++ b/DOC/html/zcolumn__bmod_8c.html
@@ -0,0 +1,272 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zcolumn_bmod.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zcolumn_bmod.c File Reference</h1>performs numeric block updates <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zcolumn__bmod_8c.html#c9798dda11fa387039351d70fa59ce3b">zusolve</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#c9798dda11fa387039351d70fa59ce3b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zcolumn__bmod_8c.html#fb6f65890b5348dc1692d01b087be35d">zlsolve</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#fb6f65890b5348dc1692d01b087be35d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zcolumn__bmod_8c.html#1165292a4e2a6c282638868bd503fb7a">zmatvec</a> (int, int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#1165292a4e2a6c282638868bd503fb7a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zcolumn__bmod_8c.html#a84a3714b3d55eb721a7a47eb0bcc110">zcolumn_bmod</a> (const int jcol, const int nseg, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *dense, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *tempv, int *segrep, int *repfnz, int fpanelc, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, < [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre>  Permission is hereby granted to use or copy this program for any
+  purpose, provided the above notices are retained on all copies.
+  Permission to modify the code and to distribute modified code is
+  granted, provided the above notices are retained, and a notice that
+  the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="a84a3714b3d55eb721a7a47eb0bcc110"></a><!-- doxytag: member="zcolumn_bmod.c::zcolumn_bmod" ref="a84a3714b3d55eb721a7a47eb0bcc110" args="(const int jcol, const int nseg, doublecomplex *dense, doublecomplex *tempv, int *segrep, int *repfnz, int fpanelc, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zcolumn_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>fpanelc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose:
+ ========
+ Performs numeric block updates (sup-col) in topological order.
+ It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ Special processing on the supernodal portion of L[*,j]
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="fb6f65890b5348dc1692d01b087be35d"></a><!-- doxytag: member="zcolumn_bmod.c::zlsolve" ref="fb6f65890b5348dc1692d01b087be35d" args="(int, int, doublecomplex *, doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zlsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="1165292a4e2a6c282638868bd503fb7a"></a><!-- doxytag: member="zcolumn_bmod.c::zmatvec" ref="1165292a4e2a6c282638868bd503fb7a" args="(int, int, int, doublecomplex *, doublecomplex *, doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zmatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="c9798dda11fa387039351d70fa59ce3b"></a><!-- doxytag: member="zcolumn_bmod.c::zusolve" ref="c9798dda11fa387039351d70fa59ce3b" args="(int, int, doublecomplex *, doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zusolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zcolumn__dfs_8c.html b/DOC/html/zcolumn__dfs_8c.html
new file mode 100644
index 0000000..af519f5
--- /dev/null
+++ b/DOC/html/zcolumn__dfs_8c.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zcolumn_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zcolumn_dfs.c File Reference</h1>Performs a symbolic factorization. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zcolumn__dfs_8c.html#5fd0635776cafb1d697263a0db693b9e">T2_SUPER</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">What type of supernodes we want.  <a href="#5fd0635776cafb1d697263a0db693b9e"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zcolumn__dfs_8c.html#c677cb46a7e96e45e93c9af1e8297314">zcolumn_dfs</a> (const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *xprune, int *marker, int *parent, int *xplore, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="5fd0635776cafb1d697263a0db693b9e"></a><!-- doxytag: member="zcolumn_dfs.c::T2_SUPER" ref="5fd0635776cafb1d697263a0db693b9e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define T2_SUPER          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="c677cb46a7e96e45e93c9af1e8297314"></a><!-- doxytag: member="zcolumn_dfs.c::zcolumn_dfs" ref="c677cb46a7e96e45e93c9af1e8297314" args="(const int m, const int jcol, int *perm_r, int *nseg, int *lsub_col, int *segrep, int *repfnz, int *xprune, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zcolumn_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lsub_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   ZCOLUMN_DFS performs a symbolic factorization on column jcol, and
+   decide the supernode boundary.</pre><p>
+<pre>   This routine does not use numeric values, but only use the RHS 
+   row indices to start the dfs.</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives. The routine returns a list of such supernodal 
+   representatives in topological order of the dfs that generates them.
+   The location of the first nonzero in each such supernodal segment
+   (supernodal entry location) is also returned.</pre><p>
+<pre> Local parameters
+ ================
+   nseg: no of segments in current U[*,j]
+   jsuper: jsuper=EMPTY if column j does not belong to the same
+	supernode as j-1. Otherwise, jsuper=nsuper.</pre><p>
+<pre>   marker2: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure</pre><p>
+<pre> Return value
+ ============
+     0  success;
+   > 0  number of bytes allocated when run out of space.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zcopy__to__ucol_8c.html b/DOC/html/zcopy__to__ucol_8c.html
new file mode 100644
index 0000000..494b3a0
--- /dev/null
+++ b/DOC/html/zcopy__to__ucol_8c.html
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zcopy_to_ucol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zcopy_to_ucol.c File Reference</h1>Copy a computed column of U to the compressed data structure. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zcopy__to__ucol_8c.html#587a2ae921e7de3276cd0c4fc8a3aadb">zcopy_to_ucol</a> (int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *dense, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="587a2ae921e7de3276cd0c4fc8a3aadb"></a><!-- doxytag: member="zcopy_to_ucol.c::zcopy_to_ucol" ref="587a2ae921e7de3276cd0c4fc8a3aadb" args="(int jcol, int nseg, int *segrep, int *repfnz, int *perm_r, doublecomplex *dense, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zcopy_to_ucol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zdiagonal_8c.html b/DOC/html/zdiagonal_8c.html
new file mode 100644
index 0000000..c0ca8cf
--- /dev/null
+++ b/DOC/html/zdiagonal_8c.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zdiagonal.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zdiagonal.c File Reference</h1>Auxiliary routines to work with diagonal elements. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zdiagonal_8c.html#0509095ae31fa257de9d3463926d7d37">zfill_diag</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zdiagonal_8c.html#430ade01a0921d8a35ec42c2bfef03bd">zdominate</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="430ade01a0921d8a35ec42c2bfef03bd"></a><!-- doxytag: member="zdiagonal.c::zdominate" ref="430ade01a0921d8a35ec42c2bfef03bd" args="(int n, NCformat *Astore)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zdominate           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structNCformat.html">NCformat</a> * </td>
+          <td class="paramname"> <em>Astore</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0509095ae31fa257de9d3463926d7d37"></a><!-- doxytag: member="zdiagonal.c::zfill_diag" ref="0509095ae31fa257de9d3463926d7d37" args="(int n, NCformat *Astore)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zfill_diag           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structNCformat.html">NCformat</a> * </td>
+          <td class="paramname"> <em>Astore</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zfgmr_8c.html b/DOC/html/zfgmr_8c.html
new file mode 100644
index 0000000..4e7f9dc
--- /dev/null
+++ b/DOC/html/zfgmr_8c.html
@@ -0,0 +1,216 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/zfgmr.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/zfgmr.c File Reference</h1>flexible GMRES from ITSOL developed by Yousef Saad. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zfgmr_8c.html#70fac857a29f956523d4c8c05e13f177">epsmac</a>   1.0e-16</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zfgmr_8c.html#c30d3185c0f6f847e371366e55e28fb6">zdotc_</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="zfgmr_8c.html#4b8d5195d541b1c827f61e05b5da13a9">dznrm2_</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zfgmr_8c.html#bffb8ceaa53b9b883ea0851a99033759">zfgmr</a> (int n, void(*zmatvec)(<a class="el" href="structdoublecomplex.html">doublecomplex</a>, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], <a class="el" href="structdoublecomplex.html">doublecomplex</a>, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[]), void(*zps [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="70fac857a29f956523d4c8c05e13f177"></a><!-- doxytag: member="zfgmr.c::epsmac" ref="70fac857a29f956523d4c8c05e13f177" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define epsmac   1.0e-16          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="4b8d5195d541b1c827f61e05b5da13a9"></a><!-- doxytag: member="zfgmr.c::dznrm2_" ref="4b8d5195d541b1c827f61e05b5da13a9" args="(int *, doublecomplex[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double dznrm2_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c30d3185c0f6f847e371366e55e28fb6"></a><!-- doxytag: member="zfgmr.c::zdotc_" ref="c30d3185c0f6f847e371366e55e28fb6" args="(doublecomplex *, int *, doublecomplex[], int *, doublecomplex[], int *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zdotc_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="bffb8ceaa53b9b883ea0851a99033759"></a><!-- doxytag: member="zfgmr.c::zfgmr" ref="bffb8ceaa53b9b883ea0851a99033759" args="(int n, void(*zmatvec)(doublecomplex, doublecomplex[], doublecomplex, doublecomplex[]), void(*zpsolve)(int, doublecomplex[], doublecomplex[]), doublecomplex *rhs, doublecomplex *sol, double tol, int im, int *itmax, FILE *fits)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zfgmr           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(<a class="el" href="structdoublecomplex.html">doublecomplex</a>, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], <a class="el" href="structdoublecomplex.html">doublecomplex</a>, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[]) </td>
+          <td class="paramname"> <em>zmatvec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(int, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], <a class="el" href="structdoublecomplex.html">doublecomplex</a>[]) </td>
+          <td class="paramname"> <em>zpsolve</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>rhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>sol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>tol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>im</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>itmax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fits</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zgscon_8c.html b/DOC/html/zgscon_8c.html
new file mode 100644
index 0000000..c58b4dd
--- /dev/null
+++ b/DOC/html/zgscon_8c.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zgscon.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zgscon.c File Reference</h1>Estimates reciprocal of the condition number of a general matrix. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgscon_8c.html#6be8d109849b5406d8256de2419caf2e">zgscon</a> (char *norm, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, double anorm, double *rcond, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat, int *info)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Modified from lapack routines ZGECON.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="6be8d109849b5406d8256de2419caf2e"></a><!-- doxytag: member="zgscon.c::zgscon" ref="6be8d109849b5406d8256de2419caf2e" args="(char *norm, SuperMatrix *L, SuperMatrix *U, double anorm, double *rcond, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgscon           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>norm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>anorm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   ZGSCON estimates the reciprocal of the condition number of a general 
+   real matrix A, in either the 1-norm or the infinity-norm, using   
+   the LU factorization computed by ZGETRF.   *</pre><p>
+<pre>   An estimate is obtained for norm(inv(A)), and the reciprocal of the   
+   condition number is computed as   
+      RCOND = 1 / ( norm(A) * norm(inv(A)) ).</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>    NORM    (input) char*
+            Specifies whether the 1-norm condition number or the   
+            infinity-norm condition number is required:   
+            = '1' or 'O':  1-norm;   
+            = 'I':         Infinity-norm.</pre><p>
+<pre>    L       (input) SuperMatrix*
+            The factor L from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">zgstrf()</a>. Use compressed row subscripts storage for supernodes,
+            i.e., L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre>    U       (input) SuperMatrix*
+            The factor U from the factorization Pr*A*Pc=L*U as computed by
+            <a class="el" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">zgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+            Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre>    ANORM   (input) double
+            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
+            If NORM = 'I', the infinity-norm of the original matrix A.</pre><p>
+<pre>    RCOND   (output) double*
+           The reciprocal of the condition number of the matrix A,   
+           computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><p>
+<pre>    INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zgsequ_8c.html b/DOC/html/zgsequ_8c.html
new file mode 100644
index 0000000..b9d31f1
--- /dev/null
+++ b/DOC/html/zgsequ_8c.html
@@ -0,0 +1,145 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zgsequ.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zgsequ.c File Reference</h1>Computes row and column scalings. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgsequ_8c.html#55aa9c7e1576dc4bd1e5d3155f35598c">zgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, double *r, double *c, double *rowcnd, double *colcnd, double *amax, int *info)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver related.  <a href="#55aa9c7e1576dc4bd1e5d3155f35598c"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Modified from LAPACK routine ZGEEQU
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="55aa9c7e1576dc4bd1e5d3155f35598c"></a><!-- doxytag: member="zgsequ.c::zgsequ" ref="55aa9c7e1576dc4bd1e5d3155f35598c" args="(SuperMatrix *A, double *r, double *c, double *rowcnd, double *colcnd, double *amax, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgsequ           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   ZGSEQU computes row and column scalings intended to equilibrate an   
+   M-by-N sparse matrix A and reduce its condition number. R returns the row
+   scale factors and C the column scale factors, chosen to try to make   
+   the largest element in each row and column of the matrix B with   
+   elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.</pre><p>
+<pre>   R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
+   number and BIGNUM = largest safe number.  Use of these scaling   
+   factors is not guaranteed to reduce the condition number of A but   
+   works well in practice.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The matrix of dimension (A->nrow, A->ncol) whose equilibration
+           factors are to be computed. The type of A can be:
+           Stype = SLU_NC; Dtype = SLU_Z; Mtype = SLU_GE.</pre><p>
+<pre>   R       (output) double*, size A->nrow
+           If INFO = 0 or INFO > M, R contains the row scale factors   
+           for A.</pre><p>
+<pre>   C       (output) double*, size A->ncol
+           If INFO = 0,  C contains the column scale factors for A.</pre><p>
+<pre>   ROWCND  (output) double*
+           If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
+           smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
+           AMAX is neither too large nor too small, it is not worth   
+           scaling by R.</pre><p>
+<pre>   COLCND  (output) double*
+           If INFO = 0, COLCND contains the ratio of the smallest   
+           C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
+           worth scaling by C.</pre><p>
+<pre>   AMAX    (output) double*
+           Absolute value of largest matrix element.  If AMAX is very   
+           close to overflow or very close to underflow, the matrix   
+           should be scaled.</pre><p>
+<pre>   INFO    (output) int*
+           = 0:  successful exit   
+           < 0:  if INFO = -i, the i-th argument had an illegal value   
+           > 0:  if INFO = i,  and i is   
+                 <= A->nrow:  the i-th row of A is exactly zero   
+                 >  A->ncol:  the (i-M)-th column of A is exactly zero</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zgsisx_8c.html b/DOC/html/zgsisx_8c.html
new file mode 100644
index 0000000..f062576
--- /dev/null
+++ b/DOC/html/zgsisx_8c.html
@@ -0,0 +1,495 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zgsisx.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zgsisx.c File Reference</h1>Computes an approximate solutions of linear equations A*X=B or A'*X=B. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgsisx_8c.html#2757feaa11de219577144d87b69e9ca9">zgsisx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *perm_r, int *etree, char *equed, double *R, d [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.2) --
+ Lawrence Berkeley National Laboratory.
+ November, 2010
+ August, 2011
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="2757feaa11de219577144d87b69e9ca9"></a><!-- doxytag: member="zgsisx.c::zgsisx" ref="2757feaa11de219577144d87b69e9ca9" args="(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r, int *etree, char *equed, double *R, double *C, SuperMatrix *L, SuperMatrix *U, void *work, int lwork, SuperMatrix *B, SuperMatrix *X, double *recip_pivot_growth, double *rcond, mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgsisx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> ZGSISX computes an approximate solutions of linear equations
+ A*X=B or A'*X=B, using the ILU factorization from <a class="el" href="slu__zdefs_8h.html#2fee39459dfac17529487ea539648cfb">zgsitrf()</a>.
+ An estimation of the condition number is provided. 
+ The routine performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A is
+	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+	     = TRANS or CONJ).</pre><p>
+<pre>	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+	     matrix that usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the matrix A (after equilibration if options->Equil = YES)
+	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>	1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+	     and info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	1.6. The system of equations is solved for X using the factored form
+	     of A.</pre><p>
+<pre>	1.7. options->IterRefine is not used</pre><p>
+<pre>	1.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>	1.9. options for ILU only
+	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+		entries of modulus 1 on the diagonal and off-diagonal entries
+		of modulus at most 1. If MC64 fails, <a class="el" href="dgsequ_8c.html#af22b247cc134fb0ba90285e84ccebb4" title="Driver related.">dgsequ()</a> is used to
+		equilibrate the system.
+              ( Default: LargeDiag )
+	     2) options->ILU_DropTol = tau is the threshold for dropping.
+		For L, it is used directly (for the whole row in a supernode);
+		For U, ||A(:,i)||_oo * tau is used as the threshold
+	        for the	i-th column.
+		If a secondary dropping rule is required, tau will
+	        also be used to compute the second threshold.
+              ( Default: 1e-4 )
+	     3) options->ILU_FillFactor = gamma, used as the initial guess
+		of memory growth.
+		If a secondary dropping rule is required, it will also
+              be used as an upper bound of the memory.
+              ( Default: 10 )
+	     4) options->ILU_DropRule specifies the dropping rule.
+		Option	      Meaning
+		======	      ===========
+		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+			      p = gamma * nnz(A(:,j)).
+		DROP_AREA:    Variation of ILUTP, for j-th column, use
+			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+			      Otherwise
+				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+			      tau_U(j) uses the similar rule.
+			      NOTE: the thresholds used by L and U are separate.
+		DROP_INTERP:  Compute the second dropping threshold by
+			      interpolation instead of sorting (default).
+			      In this case, the actual fill ratio is not
+			      guaranteed smaller than gamma.
+		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+		( Default: DROP_BASIC | DROP_AREA )
+	     5) options->ILU_Norm is the criterion of measuring the magnitude
+		of a row in a supernode of L. ( Default is INF_NORM )
+		options->ILU_Norm	RowSize(x[1:n])
+		=================	===============
+		ONE_NORM		||x||_1 / n
+		TWO_NORM		||x||_2 / sqrt(n)
+		INF_NORM		max{|x[i]|}
+	     6) options->ILU_MILU specifies the type of MILU's variation.
+		= SILU: do not perform Modified ILU;
+		= SMILU_1 (not recommended):
+		    U(i,i) := U(i,i) + sum(dropped entries);
+		= SMILU_2:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+		= SMILU_3:
+		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+		NOTE: Even SMILU_1 does not preserve the column sum because of
+		late dropping.
+              ( Default: SILU )
+	     7) options->ILU_FillTol is used as the perturbation when
+		encountering zero pivots. If some U(i,i) = 0, so that U is
+		exactly singular, then
+		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+              ( Default: 1e-2 )</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+	to the transpose of A:</pre><p>
+<pre>	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+	     factors are computed to equilibrate the system:
+	     options->Trans = NOTRANS:
+		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+	     options->Trans = TRANS:
+		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+	     options->Trans = CONJ:
+		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+	     Whether or not the system will be equilibrated depends on the
+	     scaling of the matrix A, but if equilibration is used, A' is
+	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>	2.2. Permute columns of transpose(A) (rows of A),
+	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+	     usually preserves sparsity.
+	     For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+	     factor the transpose(A) (after equilibration if
+	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+	     permutation Pr determined by partial pivoting.</pre><p>
+<pre>	2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+	     routine fills a small number on the diagonal entry, that is
+		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+	     And info will be increased by 1. The factored form of A is used
+	     to estimate the condition number of the preconditioner. If the
+	     reciprocal of the condition number is less than machine precision,
+	     info = A->ncol+1 is returned as a warning, but the routine still
+	     goes on to solve for X.</pre><p>
+<pre>	2.6. The system of equations is solved for X using the factored form
+	     of transpose(A).</pre><p>
+<pre>	2.7. If options->IterRefine is not used.</pre><p>
+<pre>	2.8. If equilibration was used, the matrix X is premultiplied by
+	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+	     (if options->Trans = TRANS or CONJ) so that it solves the
+	     original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the LU decomposition will be performed and how the
+	   system will be solved.</pre><p>
+<pre> A	   (input/output) SuperMatrix*
+	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+	   of the linear equations is A->nrow. Currently, the type of A can be:
+	   Stype = SLU_NC or SLU_NR, Dtype = SLU_Z, Mtype = SLU_GE.
+	   In the future, more general A may be handled.</pre><p>
+<pre>	   On entry, If options->Fact = FACTORED and equed is not 'N',
+	   then A must have been equilibrated by the scaling factors in
+	   R and/or C.
+	   On exit, A is not modified
+         if options->Equil = NO, or
+         if options->Equil = YES but equed = 'N' on exit, or
+         if options->RowPerm = NO.</pre><p>
+<pre>	   Otherwise, if options->Equil = YES and equed is not 'N',
+	   A is scaled as follows:
+	   If A->Stype = SLU_NC:
+	     equed = 'R':  A := diag(R) * A
+	     equed = 'C':  A := A * diag(C)
+	     equed = 'B':  A := diag(R) * A * diag(C).
+	   If A->Stype = SLU_NR:
+	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre>         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+            the matrix to an I-matrix, that is A is modified as follows:
+            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+            off-diagonal entries of modulus at most 1. P is a permutation
+            obtained from MC64.
+            If MC64 fails, <a class="el" href="slu__zdefs_8h.html#e112ddfff2798b7e4c090d96d2a8d80a" title="Driver related.">zgsequ()</a> is used to equilibrate the system,
+            and A is scaled as above, but no permutation is involved.
+            On exit, A is restored to the orginal row numbering, so
+            Dr*A*Dc is returned.</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+	   which defines the permutation matrix Pc; perm_c[i] = j means
+	   column i of A is in position j in A*Pc.
+	   On exit, perm_c may be overwritten by the product of the input
+	   perm_c and a permutation that postorders the elimination tree
+	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+	   is already in postorder.</pre><p>
+<pre>	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+	   which describes permutation of columns of transpose(A) 
+	   (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+	   which defines the permutation matrix Pr, and is determined
+	   by MC64 first then followed by partial pivoting.
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+	   determines permutation of rows of transpose(A)
+	   (columns of A) as described above.</pre><p>
+<pre>	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	   will try to use the input perm_r, unless a certain threshold
+	   criterion is violated. In that case, perm_r is overwritten by a
+	   new permutation determined by partial pivoting or diagonal
+	   threshold pivoting.
+	   Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+	   Elimination tree of Pc'*A'*A*Pc.
+	   If options->Fact != FACTORED and options->Fact != DOFACT,
+	   etree is an input argument, otherwise it is an output argument.
+	   Note: etree is a vector of parent pointers for a forest whose
+	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+	   Specifies the form of equilibration that was done.
+	   = 'N': No equilibration.
+	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+	   = 'B': Both row and column equilibration, i.e., A was replaced 
+		  by diag(R)*A*diag(C).
+	   If options->Fact = FACTORED, equed is an input argument,
+	   otherwise it is an output argument.</pre><p>
+<pre> R	   (input/output) double*, dimension (A->nrow)
+	   The row scale factors for A or transpose(A).
+	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+	   If equed = 'N' or 'C', R is not accessed.
+	   If options->Fact = FACTORED, R is an input argument,
+	       otherwise, R is output.
+	   If options->Fact = FACTORED and equed = 'R' or 'B', each element
+	       of R must be positive.</pre><p>
+<pre> C	   (input/output) double*, dimension (A->ncol)
+	   The column scale factors for A or transpose(A).
+	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+	   If equed = 'N' or 'R', C is not accessed.
+	   If options->Fact = FACTORED, C is an input argument,
+	       otherwise, C is output.
+	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+	       of C must be positive.</pre><p>
+<pre> L	   (output) SuperMatrix*
+	   The factor L from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses compressed row subscripts storage for supernodes, i.e.,
+	   L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre> U	   (output) SuperMatrix*
+	   The factor U from the factorization
+	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+	   Uses column-wise storage scheme, i.e., U has types:
+	   Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+	   User supplied workspace, should be large enough
+	   to hold data structures for factors L and U.
+	   On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 mem_usage->total_needed; no other side effects.</pre><p>
+<pre>	   See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B	   (input/output) SuperMatrix*
+	   B has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+	   On entry, the right hand side matrix.
+	   If B->ncol = 0, only LU decomposition is performed, the triangular
+			   solve is skipped.
+	   On exit,
+	      if equed = 'N', B is not modified; otherwise
+	      if A->Stype = SLU_NC:
+		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+		    B is overwritten by diag(R)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+		    B is overwritten by diag(C)*B;
+	      if A->Stype = SLU_NR:
+		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+		    B is overwritten by diag(C)*B;
+		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+		    B is overwritten by diag(R)*B.</pre><p>
+<pre> X	   (output) SuperMatrix*
+	   X has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+	   to the original system of equations. Note that A and B are modified
+	   on exit if equed is not 'N', and the solution to the equilibrated
+	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+	   and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) double*
+	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+	   The infinity norm is used. If recip_pivot_growth is much less
+	   than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) double*
+	   The estimate of the reciprocal condition number of the matrix A
+	   after equilibration (if done). If rcond is less than the machine
+	   precision (in particular, if rcond = 0), the matrix is singular
+	   to working precision. This condition is indicated by a return
+	   code of info > 0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+	   Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+	     The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+	     The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+	     The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+	  Record the statistics on runtime and floating-point operation count.
+	  See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+	   > 0: if info = i, and i is
+		<= A->ncol: number of zero pivots. They are replaced by small
+		      entries due to options->ILU_FillTol.
+		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+		      precision, meaning that the matrix is singular to
+		      working precision. Nevertheless, the solution and
+		      error bounds are computed because there are a number
+		      of situations where the computed solution can be more
+		      accurate than the value of RCOND would suggest.
+		> A->ncol+1: number of bytes allocated when memory allocation
+		      failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zgsitrf_8c.html b/DOC/html/zgsitrf_8c.html
new file mode 100644
index 0000000..528fbea
--- /dev/null
+++ b/DOC/html/zgsitrf_8c.html
@@ -0,0 +1,248 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zgsitrf.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zgsitrf.c File Reference</h1>Computes an ILU factorization of a general sparse matrix. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgsitrf_8c.html#8b8106aaa938c48c4276bece6a82d04c">zgsitrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int panel_size, int *etree, void *work, int lwork, [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.1) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="8b8106aaa938c48c4276bece6a82d04c"></a><!-- doxytag: member="zgsitrf.c::zgsitrf" ref="8b8106aaa938c48c4276bece6a82d04c" args="(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size, int *etree, void *work, int lwork, int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgsitrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> ZGSITRF computes an ILU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+	   The structure defines the input parameters to control
+	   how the ILU decomposition will be performed.</pre><p>
+<pre> A	    (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+	    (A->nrow, A->ncol). The type of A can be:
+	    Stype = SLU_NCP; Dtype = SLU_Z; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+	    To control degree of relaxing supernodes. If the number
+	    of nodes (columns) in a subtree of the elimination tree is less
+	    than relax, this subtree is considered as one supernode,
+	    regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+	    A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+	    Elimination tree of A'*A.
+	    Note: etree is a vector of parent pointers for a forest whose
+	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+	    On input, the columns of A should be permuted so that the
+	    etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+	    User-supplied work space and space for the output data structures.
+	    Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+	   Specifies the size of work array in bytes.
+	   = 0:  allocate space internally by system malloc;
+	   > 0:  use user-supplied work array of length lwork in bytes,
+		 returns error if space runs out.
+	   = -1: the routine guesses the amount of space needed without
+		 performing the factorization, and returns it in
+		 *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the
+	    permutation matrix Pc; perm_c[i] = j means column i of A is
+	    in position j in A*Pc.
+	    When searching for diagonal, perm_c[*] is applied to the
+	    row subscripts of A, so that diagonal threshold pivoting
+	    can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+	    Row permutation vector which defines the permutation matrix Pr,
+	    perm_r[i] = j means row i of A is in position j in Pr*A.
+	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+	       will try to use the input perm_r, unless a certain threshold
+	       criterion is violated. In that case, perm_r is overwritten by
+	       a new permutation determined by partial pivoting or diagonal
+	       threshold pivoting.
+	    Otherwise, perm_r is output argument;</pre><p>
+<pre> L	    (output) SuperMatrix*
+	    The factor L from the factorization Pr*A=L*U; use compressed row
+	    subscripts storage for supernodes, i.e., L has type:
+	    Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre> U	    (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+	    storage scheme, i.e., U has types: Stype = SLU_NC,
+	    Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+	    Record the statistics on runtime and floating-point operation count.
+	    See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+	    = 0: successful exit
+	    < 0: if info = -i, the i-th argument had an illegal value
+	    > 0: if info = i, and i is
+	       <= A->ncol: number of zero pivots. They are replaced by small
+		  entries according to options->ILU_FillTol.
+	       > A->ncol: number of bytes allocated when memory allocation
+		  failure occurred, plus A->ncol. If lwork = -1, it is
+		  the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays:
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 4 of them:
+	      marker/marker1 are used for panel dfs, see (ilu_)<a class="el" href="dpanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">dpanel_dfs.c</a>;
+	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+	      marker_relax(has its own space) is used for relaxed supernodes.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+	Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the
+	last column of a supernode.
+	The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+	supernodal representative r, repfnz[r] is the location of the first
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+	the panel diagonal. These are filled in during <a class="el" href="dpanel__dfs_8c.html#2a809488b87d2c1a9b2a574b726e8517">dpanel_dfs()</a>, and are
+	used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+		   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a>.
+	It is also used by the dropping routine <a class="el" href="ilu__ddrop__row_8c.html#380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zgsrfs_8c.html b/DOC/html/zgsrfs_8c.html
new file mode 100644
index 0000000..63bc7a5
--- /dev/null
+++ b/DOC/html/zgsrfs_8c.html
@@ -0,0 +1,249 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zgsrfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zgsrfs.c File Reference</h1>Improves computed solution to a system of inear equations. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zgsrfs_8c.html#3641b6d4c21b7a852dbb32c2b693302e">ITMAX</a>   5</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgsrfs_8c.html#c21acad54459e74738cbca9f7f20a73b">zgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="structSuperMatrix.html"> [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Modified from lapack routine ZGERFS
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="3641b6d4c21b7a852dbb32c2b693302e"></a><!-- doxytag: member="zgsrfs.c::ITMAX" ref="3641b6d4c21b7a852dbb32c2b693302e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ITMAX   5          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="c21acad54459e74738cbca9f7f20a73b"></a><!-- doxytag: member="zgsrfs.c::zgsrfs" ref="c21acad54459e74738cbca9f7f20a73b" args="(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U, int *perm_c, int *perm_r, char *equed, double *R, double *C, SuperMatrix *B, SuperMatrix *X, double *ferr, double *berr, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgsrfs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   ZGSRFS improves the computed solution to a system of linear   
+   equations and provides error bounds and backward error estimates for 
+   the solution.</pre><p>
+<pre>   If equilibration was performed, the system becomes:
+           (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre>   A       (input) SuperMatrix*
+           The original matrix A in the system, or the scaled A if
+           equilibration was done. The type of A can be:
+           Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_GE.</pre><p>
+<pre>   L       (input) SuperMatrix*
+	     The factor L from the factorization Pr*A*Pc=L*U. Use
+           compressed row subscripts storage for supernodes, 
+           i.e., L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre>   U       (input) SuperMatrix*
+           The factor U from the factorization Pr*A*Pc=L*U as computed by
+           <a class="el" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">zgstrf()</a>. Use column-wise storage scheme, 
+           i.e., U has types: Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre>   perm_c  (input) int*, dimension (A->ncol)
+	     Column permutation vector, which defines the 
+           permutation matrix Pc; perm_c[i] = j means column i of A is 
+           in position j in A*Pc.</pre><p>
+<pre>   perm_r  (input) int*, dimension (A->nrow)
+           Row permutation vector, which defines the permutation matrix Pr;
+           perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre>   equed   (input) Specifies the form of equilibration that was done.
+           = 'N': No equilibration.
+           = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+           = 'C': Column equilibration, i.e., A was postmultiplied by
+                  diag(C).
+           = 'B': Both row and column equilibration, i.e., A was replaced 
+                  by diag(R)*A*diag(C).</pre><p>
+<pre>   R       (input) double*, dimension (A->nrow)
+           The row scale factors for A.
+           If equed = 'R' or 'B', A is premultiplied by diag(R).
+           If equed = 'N' or 'C', R is not accessed.</pre><p>
+<pre>   C       (input) double*, dimension (A->ncol)
+           The column scale factors for A.
+           If equed = 'C' or 'B', A is postmultiplied by diag(C).
+           If equed = 'N' or 'R', C is not accessed.</pre><p>
+<pre>   B       (input) SuperMatrix*
+           B has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+           The right hand side matrix B.
+           if equed = 'R' or 'B', B is premultiplied by diag(R).</pre><p>
+<pre>   X       (input/output) SuperMatrix*
+           X has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+           On entry, the solution matrix X, as computed by <a class="el" href="slu__zdefs_8h.html#1b74304cd437572bbec487bc29422a90">zgstrs()</a>.
+           On exit, the improved solution matrix X.
+           if *equed = 'C' or 'B', X should be premultiplied by diag(C)
+               in order to obtain the solution to the original system.</pre><p>
+<pre>   FERR    (output) double*, dimension (B->ncol)   
+           The estimated forward error bound for each solution vector   
+           X(j) (the j-th column of the solution matrix X).   
+           If XTRUE is the true solution corresponding to X(j), FERR(j) 
+           is an estimated upper bound for the magnitude of the largest 
+           element in (X(j) - XTRUE) divided by the magnitude of the   
+           largest element in X(j).  The estimate is as reliable as   
+           the estimate for RCOND, and is almost always a slight   
+           overestimate of the true error.</pre><p>
+<pre>   BERR    (output) double*, dimension (B->ncol)   
+           The componentwise relative backward error of each solution   
+           vector X(j) (i.e., the smallest relative change in   
+           any element of A or B that makes X(j) an exact solution).</pre><p>
+<pre>   stat     (output) SuperLUStat_t*
+            Record the statistics on runtime and floating-point operation count.
+            See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre>   info    (output) int*   
+           = 0:  successful exit   
+            < 0:  if INFO = -i, the i-th argument had an illegal value</pre><p>
+<pre>    Internal Parameters   
+    ===================</pre><p>
+<pre>    ITMAX is the maximum number of steps of iterative refinement.</pre><p>
+<pre> </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zgssv_8c.html b/DOC/html/zgssv_8c.html
new file mode 100644
index 0000000..da69703
--- /dev/null
+++ b/DOC/html/zgssv_8c.html
@@ -0,0 +1,202 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zgssv.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zgssv.c File Reference</h1>Solves the system of linear equations A*X=B. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgssv_8c.html#b87f9fe7f59ed6d2e53f4d49fa78ad1f">zgssv</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *perm_r, <a class="el" href="structSuperMatrix.h [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Driver routines.  <a href="#b87f9fe7f59ed6d2e53f4d49fa78ad1f"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="b87f9fe7f59ed6d2e53f4d49fa78ad1f"></a><!-- doxytag: member="zgssv.c::zgssv" ref="b87f9fe7f59ed6d2e53f4d49fa78ad1f" args="(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U, SuperMatrix *B, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgssv           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> ZGSSV solves the system of linear equations A*X=B, using the
+ LU factorization from ZGSTRF. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. Permute the columns of A, forming A*Pc, where Pc
+           is a permutation matrix. For more details of this step, 
+           see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.2. Factor A as Pr*A*Pc=L*U with the permutation Pr determined
+           by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      1.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+      above algorithm to the transpose of A:</pre><p>
+<pre>      2.1. Permute columns of transpose(A) (rows of A),
+           forming transpose(A)*Pc, where Pc is a permutation matrix. 
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.2. Factor A as Pr*transpose(A)*Pc=L*U with the permutation Pr
+           determined by Gaussian elimination with partial pivoting.
+           L is unit lower triangular with offdiagonal entries
+           bounded by 1 in magnitude, and U is upper triangular.</pre><p>
+<pre>      2.3. Solve the system of equations A*X=B using the factored
+           form of A.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR; Dtype = SLU_Z; Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre> perm_c  (input/output) int*
+         If A->Stype = SLU_NC, column permutation vector of size A->ncol
+         which defines the permutation matrix Pc; perm_c[i] = j means 
+         column i of A is in position j in A*Pc.
+         If A->Stype = SLU_NR, column permutation vector of size A->nrow
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre>         If options->ColPerm = MY_PERMC or options->Fact = SamePattern or
+            options->Fact = SamePattern_SameRowPerm, it is an input argument.
+            On exit, perm_c may be overwritten by the product of the input
+            perm_c and a permutation that postorders the elimination tree
+            of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+            is already in postorder.
+         Otherwise, it is an output argument.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined 
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.
+         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->RowPerm = MY_PERMR or
+            options->Fact = SamePattern_SameRowPerm, perm_r is an
+            input argument.
+         otherwise it is an output argument.</pre><p>
+<pre> L       (output) SuperMatrix*
+         The factor L from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization 
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+	   = 0: successful exit
+         > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                so the solution could not be computed.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zgssvx_8c.html b/DOC/html/zgssvx_8c.html
new file mode 100644
index 0000000..4972025
--- /dev/null
+++ b/DOC/html/zgssvx_8c.html
@@ -0,0 +1,450 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zgssvx.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zgssvx.c File Reference</h1>Solves the system of linear equations A*X=B or A'*X=B. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgssvx_8c.html#c2e779425ce37b373b93fc2a7d3fa8e4">zgssvx</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *perm_r, int *etree, char *equed, double *R, d [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="c2e779425ce37b373b93fc2a7d3fa8e4"></a><!-- doxytag: member="zgssvx.c::zgssvx" ref="c2e779425ce37b373b93fc2a7d3fa8e4" args="(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r, int *etree, char *equed, double *R, double *C, SuperMatrix *L, SuperMatrix *U, void *work, int lwork, SuperMatrix *B, SuperMatrix *X, double *recip_pivot_growth, double *rcond, double *ferr, double *berr, mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgssvx           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>recip_pivot_growth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> ZGSSVX solves the system of linear equations A*X=B or A'*X=B, using
+ the LU factorization from <a class="el" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">zgstrf()</a>. Error bounds on the solution and
+ a condition estimate are also provided. It performs the following steps:</pre><p>
+<pre>   1. If A is stored column-wise (A->Stype = SLU_NC):</pre><p>
+<pre>      1.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A is
+           overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+           (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+           = TRANS or CONJ).</pre><p>
+<pre>      1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+           matrix that usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      1.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the matrix A (after equilibration if options->Equil = YES)
+           as Pr*A*Pc = L*U, with Pr determined by partial pivoting.</pre><p>
+<pre>      1.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form of 
+           A is used to estimate the condition number of the matrix A. If
+           the reciprocal of the condition number is less than machine
+           precision, info = A->ncol+1 is returned as a warning, but the
+           routine still goes on to solve for X and computes error bounds
+           as described below.</pre><p>
+<pre>      1.6. The system of equations is solved for X using the factored form
+           of A.</pre><p>
+<pre>      1.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      1.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R)
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+      to the transpose of A:</pre><p>
+<pre>      2.1. If options->Equil = YES, scaling factors are computed to
+           equilibrate the system:
+           options->Trans = NOTRANS:
+               diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+           options->Trans = TRANS:
+               (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+           options->Trans = CONJ:
+               (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+           Whether or not the system will be equilibrated depends on the
+           scaling of the matrix A, but if equilibration is used, A' is
+           overwritten by diag(R)*A'*diag(C) and B by diag(R)*B 
+           (if trans='N') or diag(C)*B (if trans = 'T' or 'C').</pre><p>
+<pre>      2.2. Permute columns of transpose(A) (rows of A), 
+           forming transpose(A)*Pc, where Pc is a permutation matrix that 
+           usually preserves sparsity.
+           For more details of this step, see <a class="el" href="sp__preorder_8c.html" title="Permute and performs functions on columns of orginal matrix.">sp_preorder.c</a>.</pre><p>
+<pre>      2.3. If options->Fact != FACTORED, the LU decomposition is used to
+           factor the transpose(A) (after equilibration if 
+           options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+           permutation Pr determined by partial pivoting.</pre><p>
+<pre>      2.4. Compute the reciprocal pivot growth factor.</pre><p>
+<pre>      2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+           routine returns with info = i. Otherwise, the factored form 
+           of transpose(A) is used to estimate the condition number of the
+           matrix A. If the reciprocal of the condition number
+           is less than machine precision, info = A->nrow+1 is returned as
+           a warning, but the routine still goes on to solve for X and
+           computes error bounds as described below.</pre><p>
+<pre>      2.6. The system of equations is solved for X using the factored form
+           of transpose(A).</pre><p>
+<pre>      2.7. If options->IterRefine != NOREFINE, iterative refinement is
+           applied to improve the computed solution matrix and calculate
+           error bounds and backward error estimates for it.</pre><p>
+<pre>      2.8. If equilibration was used, the matrix X is premultiplied by
+           diag(C) (if options->Trans = NOTRANS) or diag(R) 
+           (if options->Trans = TRANS or CONJ) so that it solves the
+           original system before equilibration.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed and how the
+         system will be solved.</pre><p>
+<pre> A       (input/output) SuperMatrix*
+         Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+         of the linear equations is A->nrow. Currently, the type of A can be:
+         Stype = SLU_NC or SLU_NR, Dtype = SLU_D, Mtype = SLU_GE.
+         In the future, more general A may be handled.</pre><p>
+<pre>         On entry, If options->Fact = FACTORED and equed is not 'N', 
+         then A must have been equilibrated by the scaling factors in
+         R and/or C.  
+         On exit, A is not modified if options->Equil = NO, or if 
+         options->Equil = YES but equed = 'N' on exit.
+         Otherwise, if options->Equil = YES and equed is not 'N',
+         A is scaled as follows:
+         If A->Stype = SLU_NC:
+           equed = 'R':  A := diag(R) * A
+           equed = 'C':  A := A * diag(C)
+           equed = 'B':  A := diag(R) * A * diag(C).
+         If A->Stype = SLU_NR:
+           equed = 'R':  transpose(A) := diag(R) * transpose(A)
+           equed = 'C':  transpose(A) := transpose(A) * diag(C)
+           equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).</pre><p>
+<pre> perm_c  (input/output) int*
+	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+         which defines the permutation matrix Pc; perm_c[i] = j means
+         column i of A is in position j in A*Pc.
+         On exit, perm_c may be overwritten by the product of the input
+         perm_c and a permutation that postorders the elimination tree
+         of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+         is already in postorder.</pre><p>
+<pre>         If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+         which describes permutation of columns of transpose(A) 
+         (rows of A) as described above.</pre><p>
+<pre> perm_r  (input/output) int*
+         If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+         which defines the permutation matrix Pr, and is determined
+         by partial pivoting.  perm_r[i] = j means row i of A is in 
+         position j in Pr*A.</pre><p>
+<pre>         If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+         determines permutation of rows of transpose(A)
+         (columns of A) as described above.</pre><p>
+<pre>         If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+         will try to use the input perm_r, unless a certain threshold
+         criterion is violated. In that case, perm_r is overwritten by a
+         new permutation determined by partial pivoting or diagonal
+         threshold pivoting.
+         Otherwise, perm_r is output argument.</pre><p>
+<pre> etree   (input/output) int*,  dimension (A->ncol)
+         Elimination tree of Pc'*A'*A*Pc.
+         If options->Fact != FACTORED and options->Fact != DOFACT,
+         etree is an input argument, otherwise it is an output argument.
+         Note: etree is a vector of parent pointers for a forest whose
+         vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.</pre><p>
+<pre> equed   (input/output) char*
+         Specifies the form of equilibration that was done.
+         = 'N': No equilibration.
+         = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+         = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+         = 'B': Both row and column equilibration, i.e., A was replaced 
+                by diag(R)*A*diag(C).
+         If options->Fact = FACTORED, equed is an input argument,
+         otherwise it is an output argument.</pre><p>
+<pre> R       (input/output) double*, dimension (A->nrow)
+         The row scale factors for A or transpose(A).
+         If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+         If equed = 'N' or 'C', R is not accessed.
+         If options->Fact = FACTORED, R is an input argument,
+             otherwise, R is output.
+         If options->zFact = FACTORED and equed = 'R' or 'B', each element
+             of R must be positive.</pre><p>
+<pre> C       (input/output) double*, dimension (A->ncol)
+         The column scale factors for A or transpose(A).
+         If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+             (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+         If equed = 'N' or 'R', C is not accessed.
+         If options->Fact = FACTORED, C is an input argument,
+             otherwise, C is output.
+         If options->Fact = FACTORED and equed = 'C' or 'B', each element
+             of C must be positive.</pre><p>
+<pre> L       (output) SuperMatrix*
+	   The factor L from the factorization
+             Pr*A*Pc=L*U              (if A->Stype SLU_= NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses compressed row subscripts storage for supernodes, i.e.,
+         L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (output) SuperMatrix*
+	   The factor U from the factorization
+             Pr*A*Pc=L*U              (if A->Stype = SLU_NC) or
+             Pr*transpose(A)*Pc=L*U   (if A->Stype = SLU_NR).
+         Uses column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre> work    (workspace/output) void*, size (lwork) (in bytes)
+         User supplied workspace, should be large enough
+         to hold data structures for factors L and U.
+         On exit, if fact is not 'F', L and U point to this array.</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               mem_usage->total_needed; no other side effects.</pre><p>
+<pre>         See argument 'mem_usage' for memory usage statistics.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         If B->ncol = 0, only LU decomposition is performed, the triangular
+                         solve is skipped.
+         On exit,
+            if equed = 'N', B is not modified; otherwise
+            if A->Stype = SLU_NC:
+               if options->Trans = NOTRANS and equed = 'R' or 'B',
+                  B is overwritten by diag(R)*B;
+               if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+                  B is overwritten by diag(C)*B;
+            if A->Stype = SLU_NR:
+               if options->Trans = NOTRANS and equed = 'C' or 'B',
+                  B is overwritten by diag(C)*B;
+               if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+                  B is overwritten by diag(R)*B.</pre><p>
+<pre> X       (output) SuperMatrix*
+         X has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE. 
+         If info = 0 or info = A->ncol+1, X contains the solution matrix
+         to the original system of equations. Note that A and B are modified
+         on exit if equed is not 'N', and the solution to the equilibrated
+         system is inv(diag(C))*X if options->Trans = NOTRANS and
+         equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+         and equed = 'R' or 'B'.</pre><p>
+<pre> recip_pivot_growth (output) double*
+         The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+         The infinity norm is used. If recip_pivot_growth is much less
+         than 1, the stability of the LU factorization could be poor.</pre><p>
+<pre> rcond   (output) double*
+         The estimate of the reciprocal condition number of the matrix A
+         after equilibration (if done). If rcond is less than the machine
+         precision (in particular, if rcond = 0), the matrix is singular
+         to working precision. This condition is indicated by a return
+         code of info > 0.</pre><p>
+<pre> FERR    (output) double*, dimension (B->ncol)   
+         The estimated forward error bound for each solution vector   
+         X(j) (the j-th column of the solution matrix X).   
+         If XTRUE is the true solution corresponding to X(j), FERR(j) 
+         is an estimated upper bound for the magnitude of the largest 
+         element in (X(j) - XTRUE) divided by the magnitude of the   
+         largest element in X(j).  The estimate is as reliable as   
+         the estimate for RCOND, and is almost always a slight   
+         overestimate of the true error.
+         If options->IterRefine = NOREFINE, ferr = 1.0.</pre><p>
+<pre> BERR    (output) double*, dimension (B->ncol)
+         The componentwise relative backward error of each solution   
+         vector X(j) (i.e., the smallest relative change in   
+         any element of A or B that makes X(j) an exact solution).
+         If options->IterRefine = NOREFINE, berr = 1.0.</pre><p>
+<pre> mem_usage (output) mem_usage_t*
+         Record the memory usage statistics, consisting of following fields:<ul>
+<li>for_lu (float)
+           The amount of space used in bytes for L data structures.</li><li>total_needed (float)
+           The amount of space needed in bytes to perform factorization.</li><li>expansions (int)
+           The number of memory expansions during the LU factorization.</li></ul>
+</pre><p>
+<pre> stat   (output) SuperLUStat_t*
+        Record the statistics on runtime and floating-point operation count.
+        See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+         = 0: successful exit   
+         < 0: if info = -i, the i-th argument had an illegal value   
+         > 0: if info = i, and i is   
+              <= A->ncol: U(i,i) is exactly zero. The factorization has   
+                    been completed, but the factor U is exactly   
+                    singular, so the solution and error bounds   
+                    could not be computed.   
+              = A->ncol+1: U is nonsingular, but RCOND is less than machine
+                    precision, meaning that the matrix is singular to
+                    working precision. Nevertheless, the solution and
+                    error bounds are computed because there are a number
+                    of situations where the computed solution can be more
+                    accurate than the value of RCOND would suggest.   
+              > A->ncol+1: number of bytes allocated when memory allocation
+                    failure occurred, plus A->ncol.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zgstrf_8c.html b/DOC/html/zgstrf_8c.html
new file mode 100644
index 0000000..8de72cd
--- /dev/null
+++ b/DOC/html/zgstrf_8c.html
@@ -0,0 +1,261 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zgstrf.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zgstrf.c File Reference</h1>Computes an LU factorization of a general sparse matrix. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgstrf_8c.html#a551561ebd43f4b873979c28adb6a41c">zgstrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int panel_size, int *etree, void *work, int lwork, i [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="a551561ebd43f4b873979c28adb6a41c"></a><!-- doxytag: member="zgstrf.c::zgstrf" ref="a551561ebd43f4b873979c28adb6a41c" args="(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size, int *etree, void *work, int lwork, int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgstrf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td>
+          <td class="paramname"> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>relax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>etree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> ZGSTRF computes an LU factorization of a general sparse m-by-n
+ matrix A using partial pivoting with row interchanges.
+ The factorization has the form
+     Pr * A = L * U
+ where Pr is a row permutation matrix, L is lower triangular with unit
+ diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper 
+ triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> options (input) superlu_options_t*
+         The structure defines the input parameters to control
+         how the LU decomposition will be performed.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = SLU_NCP; Dtype = SLU_Z; Mtype = SLU_GE.</pre><p>
+<pre> relax    (input) int
+          To control degree of relaxing supernodes. If the number
+          of nodes (columns) in a subtree of the elimination tree is less
+          than relax, this subtree is considered as one supernode,
+          regardless of the row structures of those columns.</pre><p>
+<pre> panel_size (input) int
+          A panel consists of at most panel_size consecutive columns.</pre><p>
+<pre> etree    (input) int*, dimension (A->ncol)
+          Elimination tree of A'*A.
+          Note: etree is a vector of parent pointers for a forest whose
+          vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+          On input, the columns of A should be permuted so that the
+          etree is in a certain postorder.</pre><p>
+<pre> work     (input/output) void*, size (lwork) (in bytes)
+          User-supplied work space and space for the output data structures.
+          Not referenced if lwork = 0;</pre><p>
+<pre> lwork   (input) int
+         Specifies the size of work array in bytes.
+         = 0:  allocate space internally by system malloc;
+         > 0:  use user-supplied work array of length lwork in bytes,
+               returns error if space runs out.
+         = -1: the routine guesses the amount of space needed without
+               performing the factorization, and returns it in
+               *info; no other side effects.</pre><p>
+<pre> perm_c   (input) int*, dimension (A->ncol)
+	    Column permutation vector, which defines the 
+          permutation matrix Pc; perm_c[i] = j means column i of A is 
+          in position j in A*Pc.
+          When searching for diagonal, perm_c[*] is applied to the
+          row subscripts of A, so that diagonal threshold pivoting
+          can find the diagonal of A, rather than that of A*Pc.</pre><p>
+<pre> perm_r   (input/output) int*, dimension (A->nrow)
+          Row permutation vector which defines the permutation matrix Pr,
+          perm_r[i] = j means row i of A is in position j in Pr*A.
+          If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+             will try to use the input perm_r, unless a certain threshold
+             criterion is violated. In that case, perm_r is overwritten by
+             a new permutation determined by partial pivoting or diagonal
+             threshold pivoting.
+          Otherwise, perm_r is output argument;</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = SLU_NC, 
+          Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info     (output) int*
+          = 0: successful exit
+          < 0: if info = -i, the i-th argument had an illegal value
+          > 0: if info = i, and i is
+             <= A->ncol: U(i,i) is exactly zero. The factorization has
+                been completed, but the factor U is exactly singular,
+                and division by zero will occur if it is used to solve a
+                system of equations.
+             > A->ncol: number of bytes allocated when memory allocation
+                failure occurred, plus A->ncol. If lwork = -1, it is
+                the estimated amount of space needed, plus A->ncol.</pre><p>
+<pre> ======================================================================</pre><p>
+<pre> Local Working Arrays: 
+ ======================
+   m = number of rows in the matrix
+   n = number of columns in the matrix</pre><p>
+<pre>   xprune[0:n-1]: xprune[*] points to locations in subscript 
+	vector lsub[*]. For column i, xprune[i] denotes the point where 
+	structural pruning begins. I.e. only xlsub[i],..,xprune[i]-1 need 
+	to be traversed for symbolic factorization.</pre><p>
+<pre>   marker[0:3*m-1]: marker[i] = j means that node i has been 
+	reached when working on column j.
+	Storage: relative to original row subscripts
+	NOTE: There are 3 of them: marker/marker1 are used for panel dfs, 
+	      see <a class="el" href="zpanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">zpanel_dfs.c</a>; marker2 is used for inner-factorization,
+            see <a class="el" href="zcolumn__dfs_8c.html" title="Performs a symbolic factorization.">zcolumn_dfs.c</a>.</pre><p>
+<pre>   parent[0:m-1]: parent vector used during dfs
+      Storage: relative to new row subscripts</pre><p>
+<pre>   xplore[0:m-1]: xplore[i] gives the location of the next (dfs) 
+	unexplored neighbor of i in lsub[*]</pre><p>
+<pre>   segrep[0:nseg-1]: contains the list of supernodal representatives
+	in topological order of the dfs. A supernode representative is the 
+	last column of a supernode.
+      The maximum size of segrep[] is n.</pre><p>
+<pre>   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a 
+	supernodal representative r, repfnz[r] is the location of the first 
+	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+	indicates the supernode r has been explored.
+	NOTE: There are W of them, each used for one column of a panel.</pre><p>
+<pre>   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below 
+      the panel diagonal. These are filled in during <a class="el" href="slu__zdefs_8h.html#ddc01b7cd28e5566177c284480a680f3">zpanel_dfs()</a>, and are
+      used later in the inner LU factorization within the panel.
+	panel_lsub[]/dense[] pair forms the SPA data structure.
+	NOTE: There are W of them.</pre><p>
+<pre>   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+	    	   NOTE: there are W of them.</pre><p>
+<pre>   tempv[0:*]: real temporary used for dense numeric kernels;
+	The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__zdefs_8h.html" title="Header file for real operations.">slu_zdefs.h</a>.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zgstrs_8c.html b/DOC/html/zgstrs_8c.html
new file mode 100644
index 0000000..10b97c7
--- /dev/null
+++ b/DOC/html/zgstrs_8c.html
@@ -0,0 +1,332 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zgstrs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zgstrs.c File Reference</h1>Solves a system using LU factorization. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgstrs_8c.html#c9798dda11fa387039351d70fa59ce3b">zusolve</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#c9798dda11fa387039351d70fa59ce3b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgstrs_8c.html#fb6f65890b5348dc1692d01b087be35d">zlsolve</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#fb6f65890b5348dc1692d01b087be35d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgstrs_8c.html#1165292a4e2a6c282638868bd503fb7a">zmatvec</a> (int, int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#1165292a4e2a6c282638868bd503fb7a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgstrs_8c.html#7ddda3f91ee65762d0589d5d613f2795">zgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, int *perm_c, int *perm_r, <a class="el" href="structSuperMatri [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgstrs_8c.html#afcbead526e1e4f1b7895d3c5abfe4ab">zprint_soln</a> (int n, int nrhs, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *soln)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="7ddda3f91ee65762d0589d5d613f2795"></a><!-- doxytag: member="zgstrs.c::zgstrs" ref="7ddda3f91ee65762d0589d5d613f2795" args="(trans_t trans, SuperMatrix *L, SuperMatrix *U, int *perm_c, int *perm_r, SuperMatrix *B, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zgstrs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> ZGSTRS solves a system of linear equations A*X=B or A'*X=B
+ with A sparse and B dense, using the LU factorization computed by
+ ZGSTRF.</pre><p>
+<pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> trans   (input) trans_t
+          Specifies the form of the system of equations:
+          = NOTRANS: A * X = B  (No transpose)
+          = TRANS:   A'* X = B  (Transpose)
+          = CONJ:    A**H * X = B  (Conjugate transpose)</pre><p>
+<pre> L       (input) SuperMatrix*
+         The factor L from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">zgstrf()</a>. Use compressed row subscripts storage for supernodes,
+         i.e., L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p>
+<pre> U       (input) SuperMatrix*
+         The factor U from the factorization Pr*A*Pc=L*U as computed by
+         <a class="el" href="slu__zdefs_8h.html#58d722a16a6f114a94cb2f59c8b08df4">zgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+         Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p>
+<pre> perm_c  (input) int*, dimension (L->ncol)
+	   Column permutation vector, which defines the 
+         permutation matrix Pc; perm_c[i] = j means column i of A is 
+         in position j in A*Pc.</pre><p>
+<pre> perm_r  (input) int*, dimension (L->nrow)
+         Row permutation vector, which defines the permutation matrix Pr; 
+         perm_r[i] = j means row i of A is in position j in Pr*A.</pre><p>
+<pre> B       (input/output) SuperMatrix*
+         B has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+         On entry, the right hand side matrix.
+         On exit, the solution matrix if info = 0;</pre><p>
+<pre> stat     (output) SuperLUStat_t*
+          Record the statistics on runtime and floating-point operation count.
+          See util.h for the definition of 'SuperLUStat_t'.</pre><p>
+<pre> info    (output) int*
+ 	   = 0: successful exit
+	   < 0: if info = -i, the i-th argument had an illegal value
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="fb6f65890b5348dc1692d01b087be35d"></a><!-- doxytag: member="zgstrs.c::zlsolve" ref="fb6f65890b5348dc1692d01b087be35d" args="(int, int, doublecomplex *, doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zlsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="1165292a4e2a6c282638868bd503fb7a"></a><!-- doxytag: member="zgstrs.c::zmatvec" ref="1165292a4e2a6c282638868bd503fb7a" args="(int, int, int, doublecomplex *, doublecomplex *, doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zmatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="afcbead526e1e4f1b7895d3c5abfe4ab"></a><!-- doxytag: member="zgstrs.c::zprint_soln" ref="afcbead526e1e4f1b7895d3c5abfe4ab" args="(int n, int nrhs, doublecomplex *soln)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zprint_soln           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>soln</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c9798dda11fa387039351d70fa59ce3b"></a><!-- doxytag: member="zgstrs.c::zusolve" ref="c9798dda11fa387039351d70fa59ce3b" args="(int, int, doublecomplex *, doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zusolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zitersol1_8c.html b/DOC/html/zitersol1_8c.html
new file mode 100644
index 0000000..62b5716
--- /dev/null
+++ b/DOC/html/zitersol1_8c.html
@@ -0,0 +1,367 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/zitersol1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/zitersol1.c File Reference</h1>Example #2 showing how to use ILU to precondition GMRES. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#e970280d13c1a6f41e71834f00776082">zpsolve</a> (int n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> x[], <a class="el" href="structdoublecomplex.html">doublecomplex</a> y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#4e1543e740b505ad649e15bddd2c60ca">zmatvec_mult</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> alpha, <a class="el" href="structdoublecomplex.html">doublecomplex</a> x[], <a class="el" href="structdoublecomplex.html">doublecomplex</a> beta, <a class="el" href="structdoublecomplex.html">doublecomplex</a> y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">GLOBAL_EQUED</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">GLOBAL_A_ORIG</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.2) --
+ Lawrence Berkeley National Laboratory
+ November, 2010
+ August, 2011</pre><p>
+<pre> This example shows that ILU is computed from the equilibrated matrix,
+ but the preconditioned GMRES is applied to the original system.
+ The driver routine ZGSISX is called twice to perform factorization
+ and apply preconditioner separately.</pre><p>
+<pre> Note that ZGSISX performs the following factorization:
+     Pr*Dr*A*Dc*Pc^T ~= LU
+ with Pr being obtained from MC64 statically then partial pivoting
+ dybamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><p>
+<pre> We need to save a copy of the original matrix A, then solve
+ the original system, A*x = B, using FGMRES.
+ Each GMRES step requires requires 2 procedures:
+   1) Apply preconditioner M^{-1} = Dc*Pc^T*U^{-1}*L^{-1}*Pr*Dr
+   2) Matrix-vector multiplication: w = A*v</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="zitersol1.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4e1543e740b505ad649e15bddd2c60ca"></a><!-- doxytag: member="zitersol1.c::zmatvec_mult" ref="4e1543e740b505ad649e15bddd2c60ca" args="(doublecomplex alpha, doublecomplex x[], doublecomplex beta, doublecomplex y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zmatvec_mult           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e970280d13c1a6f41e71834f00776082"></a><!-- doxytag: member="zitersol1.c::zpsolve" ref="e970280d13c1a6f41e71834f00776082" args="(int n, doublecomplex x[], doublecomplex y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zpsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="d42e5c3013507184841cdfee652a0c18"></a><!-- doxytag: member="zitersol1.c::GLOBAL_A" ref="d42e5c3013507184841cdfee652a0c18" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* <a class="el" href="zitersol1_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f1beb2a8fb47df4eb505addfef02814c"></a><!-- doxytag: member="zitersol1.c::GLOBAL_A_ORIG" ref="f1beb2a8fb47df4eb505addfef02814c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#f1beb2a8fb47df4eb505addfef02814c">GLOBAL_A_ORIG</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c5dce1561e620f6a6f6b6f17d82df4e8"></a><!-- doxytag: member="zitersol1.c::GLOBAL_C" ref="c5dce1561e620f6a6f6b6f17d82df4e8" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double * <a class="el" href="zitersol1_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="869338b25a186a486edd0cf1850a7fbb"></a><!-- doxytag: member="zitersol1.c::GLOBAL_EQUED" ref="869338b25a186a486edd0cf1850a7fbb" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* <a class="el" href="zitersol1_8c.html#869338b25a186a486edd0cf1850a7fbb">GLOBAL_EQUED</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0f5cf27b325ef2874c953290f74c9d0a"></a><!-- doxytag: member="zitersol1.c::GLOBAL_L" ref="0f5cf27b325ef2874c953290f74c9d0a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="19718c440adb41fbebcb4bafedbf932c"></a><!-- doxytag: member="zitersol1.c::GLOBAL_MEM_USAGE" ref="19718c440adb41fbebcb4bafedbf932c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structmem__usage__t.html">mem_usage_t</a>* <a class="el" href="zitersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="64b516645b16ef03c6fd0d692e6eb277"></a><!-- doxytag: member="zitersol1.c::GLOBAL_OPTIONS" ref="64b516645b16ef03c6fd0d692e6eb277" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a>* <a class="el" href="zitersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fbcb1904a71d92b04c1aef1cede6c4b1"></a><!-- doxytag: member="zitersol1.c::GLOBAL_PERM_C" ref="fbcb1904a71d92b04c1aef1cede6c4b1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="zitersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5a42ee721355f1c852f770661834be93"></a><!-- doxytag: member="zitersol1.c::GLOBAL_PERM_R" ref="5a42ee721355f1c852f770661834be93" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int * <a class="el" href="zitersol1_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8cb83de814c7fbf89011ba08bb602ce0"></a><!-- doxytag: member="zitersol1.c::GLOBAL_R" ref="8cb83de814c7fbf89011ba08bb602ce0" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* <a class="el" href="zitersol1_8c.html#8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="96a062252c26544370e8feae987c6d16"></a><!-- doxytag: member="zitersol1.c::GLOBAL_STAT" ref="96a062252c26544370e8feae987c6d16" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* <a class="el" href="zitersol1_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="000ad5c2198e4309802b4478ed08a98c"></a><!-- doxytag: member="zitersol1.c::GLOBAL_U" ref="000ad5c2198e4309802b4478ed08a98c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zitersol_8c.html b/DOC/html/zitersol_8c.html
new file mode 100644
index 0000000..d6ffed7
--- /dev/null
+++ b/DOC/html/zitersol_8c.html
@@ -0,0 +1,333 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/zitersol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/zitersol.c File Reference</h1>Example #1 showing how to use ILU to precondition GMRES. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#e970280d13c1a6f41e71834f00776082">zpsolve</a> (int n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> x[], <a class="el" href="structdoublecomplex.html">doublecomplex</a> y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#4e1543e740b505ad649e15bddd2c60ca">zmatvec_mult</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> alpha, <a class="el" href="structdoublecomplex.html">doublecomplex</a> x[], <a class="el" href="structdoublecomplex.html">doublecomplex</a> beta, <a class="el" href="structdoublecomplex.html">doublecomplex</a> y[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.2) --
+ Lawrence Berkeley National Laboratory
+ November, 2010
+ August, 2011</pre><p>
+<pre> This example shows that ILU is computed from the equilibrated matrix,
+ and the preconditioned GMRES is applied to the equilibrated system.
+ The driver routine ZGSISX is called twice to perform factorization
+ and apply preconditioner separately.</pre><p>
+<pre> Note that ZGSISX performs the following factorization:
+     Pr*Dr*A*Dc*Pc^T ~= LU
+ with Pr being obtained from MC64 statically then partial pivoting
+ dybamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><p>
+<pre> We can solve the transformed system, A1*y = Dr*B, using FGMRES.
+ B is first overwritten as Dr*B.
+ Then GMRES step requires requires 2 procedures:
+   1) Apply preconditioner M^{-1} = Pc^T*U^{-1}*L^{-1}*Pr
+   2) Matrix-vector multiplication: w = A1*v</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="zitersol.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4e1543e740b505ad649e15bddd2c60ca"></a><!-- doxytag: member="zitersol.c::zmatvec_mult" ref="4e1543e740b505ad649e15bddd2c60ca" args="(doublecomplex alpha, doublecomplex x[], doublecomplex beta, doublecomplex y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zmatvec_mult           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e970280d13c1a6f41e71834f00776082"></a><!-- doxytag: member="zitersol.c::zpsolve" ref="e970280d13c1a6f41e71834f00776082" args="(int n, doublecomplex x[], doublecomplex y[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zpsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>y</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="d42e5c3013507184841cdfee652a0c18"></a><!-- doxytag: member="zitersol.c::GLOBAL_A" ref="d42e5c3013507184841cdfee652a0c18" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* <a class="el" href="zitersol1_8c.html#d42e5c3013507184841cdfee652a0c18">GLOBAL_A</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c5dce1561e620f6a6f6b6f17d82df4e8"></a><!-- doxytag: member="zitersol.c::GLOBAL_C" ref="c5dce1561e620f6a6f6b6f17d82df4e8" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double * <a class="el" href="zitersol1_8c.html#c5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0f5cf27b325ef2874c953290f74c9d0a"></a><!-- doxytag: member="zitersol.c::GLOBAL_L" ref="0f5cf27b325ef2874c953290f74c9d0a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="19718c440adb41fbebcb4bafedbf932c"></a><!-- doxytag: member="zitersol.c::GLOBAL_MEM_USAGE" ref="19718c440adb41fbebcb4bafedbf932c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structmem__usage__t.html">mem_usage_t</a>* <a class="el" href="zitersol1_8c.html#19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="64b516645b16ef03c6fd0d692e6eb277"></a><!-- doxytag: member="zitersol.c::GLOBAL_OPTIONS" ref="64b516645b16ef03c6fd0d692e6eb277" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a>* <a class="el" href="zitersol1_8c.html#64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fbcb1904a71d92b04c1aef1cede6c4b1"></a><!-- doxytag: member="zitersol.c::GLOBAL_PERM_C" ref="fbcb1904a71d92b04c1aef1cede6c4b1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int* <a class="el" href="zitersol1_8c.html#fbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5a42ee721355f1c852f770661834be93"></a><!-- doxytag: member="zitersol.c::GLOBAL_PERM_R" ref="5a42ee721355f1c852f770661834be93" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int * <a class="el" href="zitersol1_8c.html#5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8cb83de814c7fbf89011ba08bb602ce0"></a><!-- doxytag: member="zitersol.c::GLOBAL_R" ref="8cb83de814c7fbf89011ba08bb602ce0" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* <a class="el" href="zitersol1_8c.html#8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="96a062252c26544370e8feae987c6d16"></a><!-- doxytag: member="zitersol.c::GLOBAL_STAT" ref="96a062252c26544370e8feae987c6d16" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* <a class="el" href="zitersol1_8c.html#96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="000ad5c2198e4309802b4478ed08a98c"></a><!-- doxytag: member="zitersol.c::GLOBAL_U" ref="000ad5c2198e4309802b4478ed08a98c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * <a class="el" href="zitersol1_8c.html#000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zlacon_8c.html b/DOC/html/zlacon_8c.html
new file mode 100644
index 0000000..3d5f87d
--- /dev/null
+++ b/DOC/html/zlacon_8c.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zlacon.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zlacon.c File Reference</h1>Estimates the 1-norm. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__Cnames_8h-source.html">slu_Cnames.h</a>"</code><br>
+<code>#include "<a class="el" href="slu__dcomplex_8h-source.html">slu_dcomplex.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zlacon_8c.html#529146a8706bcc149050e70f7e56da07">zlacon_</a> (int *n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *v, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *x, double *est, int *kase)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="529146a8706bcc149050e70f7e56da07"></a><!-- doxytag: member="zlacon.c::zlacon_" ref="529146a8706bcc149050e70f7e56da07" args="(int *n, doublecomplex *v, doublecomplex *x, double *est, int *kase)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zlacon_           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>v</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>est</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>kase</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   ZLACON estimates the 1-norm of a square matrix A.   
+   Reverse communication is used for evaluating matrix-vector products.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   N      (input) INT
+          The order of the matrix.  N >= 1.</pre><p>
+<pre>   V      (workspace) DOUBLE COMPLEX PRECISION array, dimension (N)   
+          On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
+          (W is not returned).</pre><p>
+<pre>   X      (input/output) DOUBLE COMPLEX PRECISION array, dimension (N)   
+          On an intermediate return, X should be overwritten by   
+                A * X,   if KASE=1,   
+                A' * X,  if KASE=2,
+          where A' is the conjugate transpose of A,
+         and ZLACON must be re-called with all the other parameters   
+          unchanged.</pre><p>
+<pre>   EST    (output) DOUBLE PRECISION   
+          An estimate (a lower bound) for norm(A).</pre><p>
+<pre>   KASE   (input/output) INT
+          On the initial call to ZLACON, KASE should be 0.   
+          On an intermediate return, KASE will be 1 or 2, indicating   
+          whether X should be overwritten by A * X  or A' * X.   
+          On the final return from ZLACON, KASE will again be 0.</pre><p>
+<pre>   Further Details   
+   ======= =======</pre><p>
+<pre>   Contributed by Nick Higham, University of Manchester.   
+   Originally named CONEST, dated March 16, 1988.</pre><p>
+<pre>   Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
+   a real or <a class="el" href="structcomplex.html">complex</a> matrix, with applications to condition estimation", 
+   ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
+   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zlangs_8c.html b/DOC/html/zlangs_8c.html
new file mode 100644
index 0000000..0ef23a2
--- /dev/null
+++ b/DOC/html/zlangs_8c.html
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zlangs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zlangs.c File Reference</h1>Returns the value of the one norm. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="zlangs_8c.html#37d1ec3ddab88e8c46872c5795ea5ada">zlangs</a> (char *norm, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Modified from lapack routine ZLANGE 
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="37d1ec3ddab88e8c46872c5795ea5ada"></a><!-- doxytag: member="zlangs.c::zlangs" ref="37d1ec3ddab88e8c46872c5795ea5ada" args="(char *norm, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double zlangs           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>norm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   ZLANGS returns the value of the one norm, or the Frobenius norm, or 
+   the infinity norm, or the element of largest absolute value of a 
+   real matrix A.</pre><p>
+<pre>   Description   
+   ===========</pre><p>
+<pre>   ZLANGE returns the value</pre><p>
+<pre>      ZLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm'   
+               (   
+               ( norm1(A),         NORM = '1', 'O' or 'o'   
+               (   
+               ( normI(A),         NORM = 'I' or 'i'   
+               (   
+               ( normF(A),         NORM = 'F', 'f', 'E' or 'e'</pre><p>
+<pre>   where  norm1  denotes the  one norm of a matrix (maximum column sum), 
+   normI  denotes the  infinity norm  of a matrix  (maximum row sum) and 
+   normF  denotes the  Frobenius norm of a matrix (square root of sum of 
+   squares).  Note that  max(abs(A(i,j)))  is not a  matrix norm.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   NORM    (input) CHARACTER*1   
+           Specifies the value to be returned in ZLANGE as described above.   
+   A       (input) SuperMatrix*
+           The M by N sparse matrix A.</pre><p>
+<pre>  =====================================================================
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zlaqgs_8c.html b/DOC/html/zlaqgs_8c.html
new file mode 100644
index 0000000..eb1d1c3
--- /dev/null
+++ b/DOC/html/zlaqgs_8c.html
@@ -0,0 +1,160 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zlaqgs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zlaqgs.c File Reference</h1>Equlibrates a general sprase matrix. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zlaqgs_8c.html#0656018abfc9fa2821827415f5d5ea57">THRESH</a>   (0.1)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zlaqgs_8c.html#46f8eefc33139578d9b4f6d1444a993c">zlaqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, double *r, double *c, double rowcnd, double colcnd, double amax, char *equed)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Modified from LAPACK routine ZLAQGE
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="0656018abfc9fa2821827415f5d5ea57"></a><!-- doxytag: member="zlaqgs.c::THRESH" ref="0656018abfc9fa2821827415f5d5ea57" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define THRESH   (0.1)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="46f8eefc33139578d9b4f6d1444a993c"></a><!-- doxytag: member="zlaqgs.c::zlaqgs" ref="46f8eefc33139578d9b4f6d1444a993c" args="(SuperMatrix *A, double *r, double *c, double rowcnd, double colcnd, double amax, char *equed)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zlaqgs           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>rowcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>colcnd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>amax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose   
+   =======</pre><p>
+<pre>   ZLAQGS equilibrates a general sparse M by N matrix A using the row and   
+   scaling factors in the vectors R and C.</pre><p>
+<pre>   See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p>
+<pre>   Arguments   
+   =========</pre><p>
+<pre>   A       (input/output) SuperMatrix*
+           On exit, the equilibrated matrix.  See EQUED for the form of 
+           the equilibrated matrix. The type of A can be:
+	    Stype = NC; Dtype = SLU_Z; Mtype = GE.</pre><p>
+<pre>   R       (input) double*, dimension (A->nrow)
+           The row scale factors for A.</pre><p>
+<pre>   C       (input) double*, dimension (A->ncol)
+           The column scale factors for A.</pre><p>
+<pre>   ROWCND  (input) double
+           Ratio of the smallest R(i) to the largest R(i).</pre><p>
+<pre>   COLCND  (input) double
+           Ratio of the smallest C(i) to the largest C(i).</pre><p>
+<pre>   AMAX    (input) double
+           Absolute value of largest matrix entry.</pre><p>
+<pre>   EQUED   (output) char*
+           Specifies the form of equilibration that was done.   
+           = 'N':  No equilibration   
+           = 'R':  Row equilibration, i.e., A has been premultiplied by  
+                   diag(R).   
+           = 'C':  Column equilibration, i.e., A has been postmultiplied  
+                   by diag(C).   
+           = 'B':  Both row and column equilibration, i.e., A has been
+                   replaced by diag(R) * A * diag(C).</pre><p>
+<pre>   Internal Parameters   
+   ===================</pre><p>
+<pre>   THRESH is a threshold value used to decide if row or column scaling   
+   should be done based on the ratio of the row or column scaling   
+   factors.  If ROWCND < THRESH, row scaling is done, and if   
+   COLCND < THRESH, column scaling is done.</pre><p>
+<pre>   LARGE and SMALL are threshold values used to decide if row scaling   
+   should be done based on the absolute size of the largest matrix   
+   element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.</pre><p>
+<pre>   ===================================================================== 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zldperm_8c.html b/DOC/html/zldperm_8c.html
new file mode 100644
index 0000000..ba9507e
--- /dev/null
+++ b/DOC/html/zldperm_8c.html
@@ -0,0 +1,283 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zldperm.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zldperm.c File Reference</h1>Finds a row permutation so that the matrix has large entries on the diagonal. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="zldperm_8c.html#1e6fb0c8dd36aef071ef165136ece781">mc64id_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="zldperm_8c.html#1bf33c16a135cdc671242aed1705e1cd">mc64ad_</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> *, <a class="el" href="slu__zdefs_8h.html#b6 [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zldperm_8c.html#6eac8c5b79a07db190086129b0a02901">zldperm</a> (<a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> job, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> n, <a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> nnz, <a class="el" href="slu__zdefs [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="1bf33c16a135cdc671242aed1705e1cd"></a><!-- doxytag: member="zldperm.c::mc64ad_" ref="1bf33c16a135cdc671242aed1705e1cd" args="(int_t *, int_t *, int_t *, int_t[], int_t[], double[], int_t *, int_t[], int_t *, int_t[], int_t *, double[], int_t[], int_t[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64ad_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname">[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1e6fb0c8dd36aef071ef165136ece781"></a><!-- doxytag: member="zldperm.c::mc64id_" ref="1e6fb0c8dd36aef071ef165136ece781" args="(int_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64id_           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6eac8c5b79a07db190086129b0a02901"></a><!-- doxytag: member="zldperm.c::zldperm" ref="6eac8c5b79a07db190086129b0a02901" args="(int_t job, int_t n, int_t nnz, int_t colptr[], int_t adjncy[], doublecomplex nzval[], int_t *perm, double u[], double v[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zldperm           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>job</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>colptr</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+          <td class="paramname"> <em>adjncy</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>nzval</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="slu__zdefs_8h.html#b6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+          <td class="paramname"> <em>perm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>u</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>v</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   ZLDPERM finds a row permutation so that the matrix has large
+   entries on the diagonal.</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> job    (input) int
+        Control the action. Possible values for JOB are:
+        = 1 : Compute a row permutation of the matrix so that the
+              permuted matrix has as many entries on its diagonal as
+              possible. The values on the diagonal are of arbitrary size.
+              HSL subroutine MC21A/AD is used for this.
+        = 2 : Compute a row permutation of the matrix so that the smallest 
+              value on the diagonal of the permuted matrix is maximized.
+        = 3 : Compute a row permutation of the matrix so that the smallest
+              value on the diagonal of the permuted matrix is maximized.
+              The algorithm differs from the one used for JOB = 2 and may
+              have quite a different performance.
+        = 4 : Compute a row permutation of the matrix so that the sum
+              of the diagonal entries of the permuted matrix is maximized.
+        = 5 : Compute a row permutation of the matrix so that the product
+              of the diagonal entries of the permuted matrix is maximized
+              and vectors to scale the matrix so that the nonzero diagonal 
+              entries of the permuted matrix are one in absolute value and 
+              all the off-diagonal entries are less than or equal to one in 
+              absolute value.
+        Restriction: 1 <= JOB <= 5.</pre><p>
+<pre> n      (input) int
+        The order of the matrix.</pre><p>
+<pre> nnz    (input) int
+        The number of nonzeros in the matrix.</pre><p>
+<pre> adjncy (input) int*, of size nnz
+        The adjacency structure of the matrix, which contains the row
+        indices of the nonzeros.</pre><p>
+<pre> colptr (input) int*, of size n+1
+        The pointers to the beginning of each column in ADJNCY.</pre><p>
+<pre> nzval  (input) doublecomplex*, of size nnz
+        The nonzero values of the matrix. nzval[k] is the value of
+        the entry corresponding to adjncy[k].
+        It is not used if job = 1.</pre><p>
+<pre> perm   (output) int*, of size n
+        The permutation vector. perm[i] = j means row i in the
+        original matrix is in row j of the permuted matrix.</pre><p>
+<pre> u      (output) double*, of size n
+        If job = 5, the natural logarithms of the row scaling factors.</pre><p>
+<pre> v      (output) double*, of size n
+        If job = 5, the natural logarithms of the column scaling factors. 
+        The scaled matrix B has entries b_ij = a_ij * exp(u_i + v_j).
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zlinsol1_8c.html b/DOC/html/zlinsol1_8c.html
new file mode 100644
index 0000000..c4269e4
--- /dev/null
+++ b/DOC/html/zlinsol1_8c.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/zlinsol1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/zlinsol1.c File Reference</h1><code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsol1_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="zlinsol1.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zlinsol_8c.html b/DOC/html/zlinsol_8c.html
new file mode 100644
index 0000000..56b94e6
--- /dev/null
+++ b/DOC/html/zlinsol_8c.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/zlinsol.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/zlinsol.c File Reference</h1><code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsol_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="zlinsol.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zlinsolx1_8c.html b/DOC/html/zlinsolx1_8c.html
new file mode 100644
index 0000000..677ae45
--- /dev/null
+++ b/DOC/html/zlinsolx1_8c.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/zlinsolx1.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/zlinsolx1.c File Reference</h1><code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsolx1_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsolx1_8c.html#693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> *trans)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="zlinsolx1.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="693ba86aac49435e82cf3a57a4412744"></a><!-- doxytag: member="zlinsolx1.c::parse_command_line" ref="693ba86aac49435e82cf3a57a4412744" args="(int argc, char *argv[], int *lwork, double *u, yes_no_t *equil, trans_t *trans)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void parse_command_line           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> * </td>
+          <td class="paramname"> <em>equil</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+          <td class="paramname"> <em>trans</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zlinsolx2_8c.html b/DOC/html/zlinsolx2_8c.html
new file mode 100644
index 0000000..c48a763
--- /dev/null
+++ b/DOC/html/zlinsolx2_8c.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/zlinsolx2.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/zlinsolx2.c File Reference</h1><code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsolx2_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsolx2_8c.html#693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> *trans)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="zlinsolx2.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="693ba86aac49435e82cf3a57a4412744"></a><!-- doxytag: member="zlinsolx2.c::parse_command_line" ref="693ba86aac49435e82cf3a57a4412744" args="(int argc, char *argv[], int *lwork, double *u, yes_no_t *equil, trans_t *trans)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void parse_command_line           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> * </td>
+          <td class="paramname"> <em>equil</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+          <td class="paramname"> <em>trans</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zlinsolx_8c.html b/DOC/html/zlinsolx_8c.html
new file mode 100644
index 0000000..3463316
--- /dev/null
+++ b/DOC/html/zlinsolx_8c.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: EXAMPLE/zlinsolx.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>EXAMPLE/zlinsolx.c File Reference</h1><code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsolx_8c.html#0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsolx_8c.html#693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> *trans)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="zlinsolx.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[]</td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="693ba86aac49435e82cf3a57a4412744"></a><!-- doxytag: member="zlinsolx.c::parse_command_line" ref="693ba86aac49435e82cf3a57a4412744" args="(int argc, char *argv[], int *lwork, double *u, yes_no_t *equil, trans_t *trans)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void parse_command_line           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#e6553118ce91b9c08f9376941ae1536f">yes_no_t</a> * </td>
+          <td class="paramname"> <em>equil</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+          <td class="paramname"> <em>trans</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:49 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zmemory_8c.html b/DOC/html/zmemory_8c.html
new file mode 100644
index 0000000..a300f98
--- /dev/null
+++ b/DOC/html/zmemory_8c.html
@@ -0,0 +1,976 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zmemory.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zmemory.c File Reference</h1>Memory details. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#1ef4d4db4d5e1fe0719416163e0e51ae">StackFull</a>(x)   ( x + Glu->stack.used >= Glu->stack.size )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#c11b1c3847a3d397e9675de40782134d">NotDoubleAlign</a>(addr)   ( (long int)addr & 7 )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#c8204d321846eb4b23d563eac7e5bfa7">DoubleAlign</a>(addr)   ( ((long int)addr + 7) & ~7L )</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#70ca807c578a0c495f7ce5edb0215e2b">TempSpace</a>(m, w)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#7b2a35bfd2e6c9d03e2a6ccdba9fa847">Reduce</a>(alpha)   ((alpha + 1) / 2)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#67833ee9526cec0b31d0f26e527b97df">zexpand</a> (int *prev_len,<a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> type,int len_to_copy,int keep_prev,<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Expand the existing storage to accommodate more fill-ins.  <a href="#67833ee9526cec0b31d0f26e527b97df"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#882c0544ebe2e000b982820ac583c180">zLUWorkInit</a> (int m, int n, int panel_size, int **iworkptr, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **dworkptr, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate known working storage. Returns 0 if success, otherwise returns the number of bytes allocated so far when failure occurred.  <a href="#882c0544ebe2e000b982820ac583c180"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a0ef433984e57ac0dacc29c5e3b53ecf">copy_mem_doublecomplex</a> (int, void *, void *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#607a863b6fcdf1adb1931dd4c8277ee0">zStackCompress</a> (<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Compress the work[] array to remove fragmentation.  <a href="#607a863b6fcdf1adb1931dd4c8277ee0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#0edfb761a3a551bce967037b3e1aa9e2">zSetupSpace</a> (void *work, int lwork, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Setup the memory model to be used for factorization.  <a href="#0edfb761a3a551bce967037b3e1aa9e2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#0546ac846872bb77841c8502590dc3e2">zuser_malloc</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#9568d77c3e1f50a9b000f50a9941300a">zuser_free</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#b59eea34474da95fb3dc125400a1287e">copy_mem_int</a> (int, void *, void *)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#4c226087c09a94ff40b92b14fa46fc53">user_bcopy</a> (char *, char *, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#286bf5eff2472576ba5fafe9d1daf835">zQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *mem_usage)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#dcf560b50ada29ab0807eb50f16c434d">ilu_zQuerySpace</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *mem_usage)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#2401dcedab9db9b72801239bcb0dd85d">zLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a> fact, void *work, int lwork, int m, int n, int annz, int panel_size, double fill_ratio, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for the data structures common to all factor routines.  <a href="#2401dcedab9db9b72801239bcb0dd85d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#2d983454dded23484688350acd60d453">zSetRWork</a> (int m, int panel_size, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *dworkptr, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **dense, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **tempv)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays.  <a href="#2d983454dded23484688350acd60d453"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#077a37f8ac3dd3f11b78b70ead445a4a">zLUWorkFree</a> (int *iwork, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *dwork, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines.  <a href="#077a37f8ac3dd3f11b78b70ead445a4a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#f10c27072006d8936e0b135a0d0e03ee">zLUMemXpand</a> (int jcol, int next, <a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> mem_type, int *maxlen, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization.  <a href="#f10c27072006d8936e0b135a0d0e03ee"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#46bbbd9396593820fd01a6d3dea08d31">zallocateA</a> (int n, int nnz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **a, int **asub, int **xa)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A.  <a href="#46bbbd9396593820fd01a6d3dea08d31"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#d681359ed37ac809cc0e456e05655823">doublecomplexMalloc</a> (int n)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#7c839d769dd079aab4bf852533d96933">doublecomplexCalloc</a> (int n)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#17416eb78c42063624b6859d9f88820b">zmemory_usage</a> (const int nzlmax, const int nzumax, const int nzlumax, const int n)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Define Documentation</h2>
+<a class="anchor" name="c8204d321846eb4b23d563eac7e5bfa7"></a><!-- doxytag: member="zmemory.c::DoubleAlign" ref="c8204d321846eb4b23d563eac7e5bfa7" args="(addr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DoubleAlign          </td>
+          <td>(</td>
+          <td class="paramtype">addr </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( ((long int)addr + 7) & ~7L )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c11b1c3847a3d397e9675de40782134d"></a><!-- doxytag: member="zmemory.c::NotDoubleAlign" ref="c11b1c3847a3d397e9675de40782134d" args="(addr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NotDoubleAlign          </td>
+          <td>(</td>
+          <td class="paramtype">addr </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( (long int)addr & 7 )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7b2a35bfd2e6c9d03e2a6ccdba9fa847"></a><!-- doxytag: member="zmemory.c::Reduce" ref="7b2a35bfd2e6c9d03e2a6ccdba9fa847" args="(alpha)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define Reduce          </td>
+          <td>(</td>
+          <td class="paramtype">alpha </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ((alpha + 1) / 2)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1ef4d4db4d5e1fe0719416163e0e51ae"></a><!-- doxytag: member="zmemory.c::StackFull" ref="1ef4d4db4d5e1fe0719416163e0e51ae" args="(x)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define StackFull          </td>
+          <td>(</td>
+          <td class="paramtype">x </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">   ( x + Glu->stack.used >= Glu->stack.size )</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="70ca807c578a0c495f7ce5edb0215e2b"></a><!-- doxytag: member="zmemory.c::TempSpace" ref="70ca807c578a0c495f7ce5edb0215e2b" args="(m, w)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TempSpace          </td>
+          <td>(</td>
+          <td class="paramtype">m,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">w </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment">( (2*w + 4 + <a class="code" href="slu__util_8h.html#9b7b2a5116ee487722b0967317ab6360">NO_MARKER</a>) * m * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) + \
+                              (w + 1) * m * <span class="keyword">sizeof</span>(<a class="code" href="structdoublecomplex.html">doublecomplex</a>) )
+</pre></div>
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="a0ef433984e57ac0dacc29c5e3b53ecf"></a><!-- doxytag: member="zmemory.c::copy_mem_doublecomplex" ref="a0ef433984e57ac0dacc29c5e3b53ecf" args="(int, void *, void *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void copy_mem_doublecomplex           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>howmany</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>old</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>new</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b59eea34474da95fb3dc125400a1287e"></a><!-- doxytag: member="zmemory.c::copy_mem_int" ref="b59eea34474da95fb3dc125400a1287e" args="(int, void *, void *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void copy_mem_int           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7c839d769dd079aab4bf852533d96933"></a><!-- doxytag: member="zmemory.c::doublecomplexCalloc" ref="7c839d769dd079aab4bf852533d96933" args="(int n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structdoublecomplex.html">doublecomplex</a>* doublecomplexCalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d681359ed37ac809cc0e456e05655823"></a><!-- doxytag: member="zmemory.c::doublecomplexMalloc" ref="d681359ed37ac809cc0e456e05655823" args="(int n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structdoublecomplex.html">doublecomplex</a>* doublecomplexMalloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="dcf560b50ada29ab0807eb50f16c434d"></a><!-- doxytag: member="zmemory.c::ilu_zQuerySpace" ref="dcf560b50ada29ab0807eb50f16c434d" args="(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ilu_zQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="4c226087c09a94ff40b92b14fa46fc53"></a><!-- doxytag: member="zmemory.c::user_bcopy" ref="4c226087c09a94ff40b92b14fa46fc53" args="(char *, char *, int)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void user_bcopy           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="46bbbd9396593820fd01a6d3dea08d31"></a><!-- doxytag: member="zmemory.c::zallocateA" ref="46bbbd9396593820fd01a6d3dea08d31" args="(int n, int nnz, doublecomplex **a, int **asub, int **xa)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zallocateA           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>xa</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="67833ee9526cec0b31d0f26e527b97df"></a><!-- doxytag: member="zmemory.c::zexpand" ref="67833ee9526cec0b31d0f26e527b97df" args="(int *prev_len,MemType type,int len_to_copy,int keep_prev,GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void * zexpand           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>prev_len</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> </td>
+          <td class="paramname"> <em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>len_to_copy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>keep_prev</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2401dcedab9db9b72801239bcb0dd85d"></a><!-- doxytag: member="zmemory.c::zLUMemInit" ref="2401dcedab9db9b72801239bcb0dd85d" args="(fact_t fact, void *work, int lwork, int m, int n, int annz, int panel_size, double fill_ratio, SuperMatrix *L, SuperMatrix *U, GlobalLU_t *Glu, int **iwork, doublecomplex **dwork)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zLUMemInit           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#c785c8235480e5cfef9848d89c047c0a">fact_t</a> </td>
+          <td class="paramname"> <em>fact</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>annz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>fill_ratio</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>iwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname"> <em>dwork</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Memory-related.<p>
+<pre>
+ For those unpredictable size, estimate as fill_ratio * nnz(A).
+ Return value:
+     If lwork = -1, return the estimated amount of space required, plus n;
+     otherwise, return the amount of space actually allocated when
+     memory allocation failure occurred.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="f10c27072006d8936e0b135a0d0e03ee"></a><!-- doxytag: member="zmemory.c::zLUMemXpand" ref="f10c27072006d8936e0b135a0d0e03ee" args="(int jcol, int next, MemType mem_type, int *maxlen, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zLUMemXpand           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>next</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#bd31f838aefffa46191d0d7dc36a96b2">MemType</a> </td>
+          <td class="paramname"> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>maxlen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Return value:   0 - successful return
+               > 0 - number of bytes allocated when run out of space
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="077a37f8ac3dd3f11b78b70ead445a4a"></a><!-- doxytag: member="zmemory.c::zLUWorkFree" ref="077a37f8ac3dd3f11b78b70ead445a4a" args="(int *iwork, doublecomplex *dwork, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zLUWorkFree           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>dwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="882c0544ebe2e000b982820ac583c180"></a><!-- doxytag: member="zmemory.c::zLUWorkInit" ref="882c0544ebe2e000b982820ac583c180" args="(int m, int n, int panel_size, int **iworkptr, doublecomplex **dworkptr, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zLUWorkInit           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>iworkptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname"> <em>dworkptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="17416eb78c42063624b6859d9f88820b"></a><!-- doxytag: member="zmemory.c::zmemory_usage" ref="17416eb78c42063624b6859d9f88820b" args="(const int nzlmax, const int nzumax, const int nzlumax, const int n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zmemory_usage           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nzlmax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nzumax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nzlumax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>n</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="286bf5eff2472576ba5fafe9d1daf835"></a><!-- doxytag: member="zmemory.c::zQuerySpace" ref="286bf5eff2472576ba5fafe9d1daf835" args="(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zQuerySpace           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ mem_usage consists of the following fields:<ul>
+<li>for_lu (float)
+      The amount of space used in bytes for the L data structures.</li><li>total_needed (float)
+      The amount of space needed in bytes to perform factorization.
+ 
+</li></ul>
+</pre>
+</div>
+</div><p>
+<a class="anchor" name="2d983454dded23484688350acd60d453"></a><!-- doxytag: member="zmemory.c::zSetRWork" ref="2d983454dded23484688350acd60d453" args="(int m, int panel_size, doublecomplex *dworkptr, doublecomplex **dense, doublecomplex **tempv)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zSetRWork           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>panel_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>dworkptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname"> <em>tempv</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0edfb761a3a551bce967037b3e1aa9e2"></a><!-- doxytag: member="zmemory.c::zSetupSpace" ref="0edfb761a3a551bce967037b3e1aa9e2" args="(void *work, int lwork, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zSetupSpace           </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>work</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>lwork</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+lwork = 0: use system malloc; lwork > 0: use user-supplied work[] space. 
+</div>
+</div><p>
+<a class="anchor" name="607a863b6fcdf1adb1931dd4c8277ee0"></a><!-- doxytag: member="zmemory.c::zStackCompress" ref="607a863b6fcdf1adb1931dd4c8277ee0" args="(GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zStackCompress           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9568d77c3e1f50a9b000f50a9941300a"></a><!-- doxytag: member="zmemory.c::zuser_free" ref="9568d77c3e1f50a9b000f50a9941300a" args="(int, int, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zuser_free           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>bytes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>which_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0546ac846872bb77841c8502590dc3e2"></a><!-- doxytag: member="zmemory.c::zuser_malloc" ref="0546ac846872bb77841c8502590dc3e2" args="(int, int, GlobalLU_t *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void * zuser_malloc           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>bytes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>which_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zmyblas2_8c.html b/DOC/html/zmyblas2_8c.html
new file mode 100644
index 0000000..8819205
--- /dev/null
+++ b/DOC/html/zmyblas2_8c.html
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zmyblas2.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zmyblas2.c File Reference</h1>Level 2 Blas operations. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__dcomplex_8h-source.html">slu_dcomplex.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmyblas2_8c.html#3aa665de6b6103328267f26f160447ae">zlsolve</a> (int ldm, int ncol, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *M, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *rhs)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#3aa665de6b6103328267f26f160447ae"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmyblas2_8c.html#0b0f90cd6fb38a0827eb67b22c8523cb">zusolve</a> (int ldm, int ncol, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *M, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *rhs)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#0b0f90cd6fb38a0827eb67b22c8523cb"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmyblas2_8c.html#b1eac084fbf4960e20cf730d091699c8">zmatvec</a> (int ldm, int nrow, int ncol, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *M, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *vec, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *Mxvec)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#b1eac084fbf4960e20cf730d091699c8"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> Purpose: Level 2 BLAS operations: solves and matvec, written in C. Note: This is only used when the system lacks an efficient BLAS library.  <hr><h2>Function Documentation</h2>
+<a class="anchor" name="3aa665de6b6103328267f26f160447ae"></a><!-- doxytag: member="zmyblas2.c::zlsolve" ref="3aa665de6b6103328267f26f160447ae" args="(int ldm, int ncol, doublecomplex *M, doublecomplex *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zlsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="b1eac084fbf4960e20cf730d091699c8"></a><!-- doxytag: member="zmyblas2.c::zmatvec" ref="b1eac084fbf4960e20cf730d091699c8" args="(int ldm, int nrow, int ncol, doublecomplex *M, doublecomplex *vec, doublecomplex *Mxvec)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zmatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="0b0f90cd6fb38a0827eb67b22c8523cb"></a><!-- doxytag: member="zmyblas2.c::zusolve" ref="0b0f90cd6fb38a0827eb67b22c8523cb" args="(int ldm, int ncol, doublecomplex *M, doublecomplex *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zusolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zpanel__bmod_8c.html b/DOC/html/zpanel__bmod_8c.html
new file mode 100644
index 0000000..62f4b94
--- /dev/null
+++ b/DOC/html/zpanel__bmod_8c.html
@@ -0,0 +1,258 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zpanel_bmod.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zpanel_bmod.c File Reference</h1>Performs numeric block updates. <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zpanel__bmod_8c.html#fb6f65890b5348dc1692d01b087be35d">zlsolve</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#fb6f65890b5348dc1692d01b087be35d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zpanel__bmod_8c.html#1165292a4e2a6c282638868bd503fb7a">zmatvec</a> (int, int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#1165292a4e2a6c282638868bd503fb7a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zpanel__bmod_8c.html#8673fc0ac301b4cf35788245fe0cdbcd">zcheck_tempv</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zpanel__bmod_8c.html#6c1aae0b0c84fef3b9feb5362bf2e047">zpanel_bmod</a> (const int m, const int w, const int jcol, const int nseg, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *dense, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *tempv, int *segrep, int *repfnz, <a class="el" href="structGlobalLU__t.html">GlobalLU_t [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="8673fc0ac301b4cf35788245fe0cdbcd"></a><!-- doxytag: member="zpanel_bmod.c::zcheck_tempv" ref="8673fc0ac301b4cf35788245fe0cdbcd" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zcheck_tempv           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fb6f65890b5348dc1692d01b087be35d"></a><!-- doxytag: member="zpanel_bmod.c::zlsolve" ref="fb6f65890b5348dc1692d01b087be35d" args="(int, int, doublecomplex *, doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zlsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="1165292a4e2a6c282638868bd503fb7a"></a><!-- doxytag: member="zpanel_bmod.c::zmatvec" ref="1165292a4e2a6c282638868bd503fb7a" args="(int, int, int, doublecomplex *, doublecomplex *, doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zmatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="6c1aae0b0c84fef3b9feb5362bf2e047"></a><!-- doxytag: member="zpanel_bmod.c::zpanel_bmod" ref="6c1aae0b0c84fef3b9feb5362bf2e047" args="(const int m, const int w, const int jcol, const int nseg, doublecomplex *dense, doublecomplex *tempv, int *segrep, int *repfnz, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zpanel_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>    Performs numeric block updates (sup-panel) in topological order.
+    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+    Special processing on the supernodal portion of L[*,j]</pre><p>
+<pre>    Before entering this routine, the original nonzeros in the panel 
+    were already copied into the spa[m,w].</pre><p>
+<pre>    Updated/Output parameters-
+    dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
+    collectively in the m-by-w vector dense[*]. 
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zpanel__dfs_8c.html b/DOC/html/zpanel__dfs_8c.html
new file mode 100644
index 0000000..d02ba36
--- /dev/null
+++ b/DOC/html/zpanel__dfs_8c.html
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zpanel_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zpanel_dfs.c File Reference</h1>Peforms a symbolic factorization on a panel of symbols. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zpanel__dfs_8c.html#2dfc62f0d77e7b112075276b06542f87">zpanel_dfs</a> (const int m, const int w, const int jcol, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *dense,  [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="2dfc62f0d77e7b112075276b06542f87"></a><!-- doxytag: member="zpanel_dfs.c::zpanel_dfs" ref="2dfc62f0d77e7b112075276b06542f87" args="(const int m, const int w, const int jcol, SuperMatrix *A, int *perm_r, int *nseg, doublecomplex *dense, int *panel_lsub, int *segrep, int *repfnz, int *xprune, int *marker, int *parent, int *xplore, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zpanel_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>panel_lsub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xplore</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre>   Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><p>
+<pre>   A supernode representative is the last column of a supernode.
+   The nonzeros in U[*,j] are segments that end at supernodal
+   representatives.</pre><p>
+<pre>   The routine returns one list of the supernodal representatives
+   in topological order of the dfs that generates them. This list is
+   a superset of the topological order of each individual column within
+   the panel. 
+   The location of the first nonzero in each supernodal segment
+   (supernodal entry location) is also returned. Each column has a 
+   separate list for this purpose.</pre><p>
+<pre>   Two marker arrays are used for dfs:
+     marker[i] == jj, if i was visited during dfs of current column jj;
+     marker1[i] >= jcol, if i was visited by earlier columns in this panel;</pre><p>
+<pre>   marker: A-row --> A-row/col (0/1)
+   repfnz: SuperA-col --> PA-row
+   parent: SuperA-col --> SuperA-col
+   xplore: SuperA-col --> index to L-structure
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zpivotL_8c.html b/DOC/html/zpivotL_8c.html
new file mode 100644
index 0000000..eb516e8
--- /dev/null
+++ b/DOC/html/zpivotL_8c.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zpivotL.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zpivotL.c File Reference</h1>Performs numerical pivoting. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zpivotL_8c.html#06029dacc576a26c1495317264d00fcc">zpivotL</a> (const int jcol, const double u, int *usepr, int *perm_r, int *iperm_r, int *iperm_c, int *pivrow, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="06029dacc576a26c1495317264d00fcc"></a><!-- doxytag: member="zpivotL.c::zpivotL" ref="06029dacc576a26c1495317264d00fcc" args="(const int jcol, const double u, int *usepr, int *perm_r, int *iperm_r, int *iperm_c, int *pivrow, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zpivotL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"> <em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>usepr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>iperm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Performs the numerical pivoting on the current column of L,
+   and the CDIV operation.</pre><p>
+<pre>   Pivot policy:
+   (1) Compute thresh = u * max_(i>=j) <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>;
+   (2) IF user specifies pivot row k and <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_kj)</a> >= thresh THEN
+           pivot row = k;
+       ELSE IF <a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_jj)</a> >= thresh THEN
+           pivot row = j;
+       ELSE
+           pivot row = m;</pre><p>
+<pre>   Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><p>
+<pre>   Return value: 0      success;
+                 i > 0  U(i,i) is exactly zero.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zpivotgrowth_8c.html b/DOC/html/zpivotgrowth_8c.html
new file mode 100644
index 0000000..b1f1b4c
--- /dev/null
+++ b/DOC/html/zpivotgrowth_8c.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zpivotgrowth.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zpivotgrowth.c File Reference</h1>Computes the reciprocal pivot growth factor. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="zpivotgrowth_8c.html#713bc716e136b32dfad757a3fd7d3005">zPivotGrowth</a> (int ncols, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">S [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="713bc716e136b32dfad757a3fd7d3005"></a><!-- doxytag: member="zpivotgrowth.c::zPivotGrowth" ref="713bc716e136b32dfad757a3fd7d3005" args="(int ncols, SuperMatrix *A, int *perm_c, SuperMatrix *L, SuperMatrix *U)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double zPivotGrowth           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>perm_c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======</pre><p>
+<pre> Compute the reciprocal pivot growth factor of the leading ncols columns
+ of the matrix, using the formula:
+     min_j ( max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(A_ij)</a>) / max_i(<a class="el" href="slamch_8c.html#3aa069ac3980707dae1e0530f50d59e4">abs(U_ij)</a>) )</pre><p>
+<pre> Arguments
+ =========</pre><p>
+<pre> ncols    (input) int
+          The number of columns of matrices A, L and U.</pre><p>
+<pre> A        (input) SuperMatrix*
+	    Original matrix A, permuted by columns, of dimension
+          (A->nrow, A->ncol). The type of A can be:
+          Stype = NC; Dtype = SLU_Z; Mtype = GE.</pre><p>
+<pre> L        (output) SuperMatrix*
+          The factor L from the factorization Pr*A=L*U; use compressed row 
+          subscripts storage for supernodes, i.e., L has type: 
+          Stype = SC; Dtype = SLU_Z; Mtype = TRLU.</pre><p>
+<pre> U        (output) SuperMatrix*
+	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+          storage scheme, i.e., U has types: Stype = NC;
+          Dtype = SLU_Z; Mtype = TRU.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zpruneL_8c.html b/DOC/html/zpruneL_8c.html
new file mode 100644
index 0000000..32c4d36
--- /dev/null
+++ b/DOC/html/zpruneL_8c.html
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zpruneL.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zpruneL.c File Reference</h1>Prunes the L-structure. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zpruneL_8c.html#b91a986738634178968bfab08ed42b06">zpruneL</a> (const int jcol, const int *perm_r, const int pivrow, const int nseg, const int *segrep, const int *repfnz, int *xprune, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ *</pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="b91a986738634178968bfab08ed42b06"></a><!-- doxytag: member="zpruneL.c::zpruneL" ref="b91a986738634178968bfab08ed42b06" args="(const int jcol, const int *perm_r, const int pivrow, const int nseg, const int *segrep, const int *repfnz, int *xprune, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zpruneL           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>perm_r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>nseg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>segrep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>repfnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+   Prunes the L-structure of supernodes whose L-structure
+   contains the current pivot row "pivrow"
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zreadhb_8c.html b/DOC/html/zreadhb_8c.html
new file mode 100644
index 0000000..cb6cd5e
--- /dev/null
+++ b/DOC/html/zreadhb_8c.html
@@ -0,0 +1,345 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zreadhb.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zreadhb.c File Reference</h1>Read a matrix stored in Harwell-Boeing format. <a href="#_details">More...</a>
+<p>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadhb_8c.html#4c9a9a1484351dcc1ae1a756a18081e7">zDumpLine</a> (FILE *fp)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line.  <a href="#4c9a9a1484351dcc1ae1a756a18081e7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadhb_8c.html#b753ef9c907b1298d163150b6e658247">zParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadhb_8c.html#fb86c617e31fa765098b83fd74539b9b">zParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadhb_8c.html#fbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadhb_8c.html#321d6efeb00f45e3e4c961dcc3aa0fcc">zReadValues</a> (FILE *fp, int n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *destination, int perline, int persize)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Read <a class="el" href="structcomplex.html">complex</a> numbers as pairs of (real, imaginary).  <a href="#321d6efeb00f45e3e4c961dcc3aa0fcc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadhb_8c.html#ff0805af5c8155100799532d3a9613fb">zreadhb</a> (int *nrow, int *ncol, int *nonz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **nzval, int **rowind, int **colptr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines.  <a href="#ff0805af5c8155100799532d3a9613fb"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Purpose
+ =======</pre><p>
+<pre> Read a DOUBLE COMPLEX PRECISION matrix stored in Harwell-Boeing format 
+ as described below.</pre><p>
+<pre> Line 1 (A72,A8) 
+  	Col. 1 - 72   Title (TITLE) 
+	Col. 73 - 80  Key (KEY)</pre><p>
+<pre> Line 2 (5I14) 
+ 	Col. 1 - 14   Total number of lines excluding header (TOTCRD) 
+ 	Col. 15 - 28  Number of lines for pointers (PTRCRD) 
+ 	Col. 29 - 42  Number of lines for row (or variable) indices (INDCRD) 
+ 	Col. 43 - 56  Number of lines for numerical values (VALCRD) 
+	Col. 57 - 70  Number of lines for right-hand sides (RHSCRD) 
+                    (including starting guesses and solution vectors 
+		       if present) 
+           	      (zero indicates no right-hand side data is present)</pre><p>
+<pre> Line 3 (A3, 11X, 4I14) 
+   	Col. 1 - 3    Matrix type (see below) (MXTYPE) 
+ 	Col. 15 - 28  Number of rows (or variables) (NROW) 
+ 	Col. 29 - 42  Number of columns (or elements) (NCOL) 
+	Col. 43 - 56  Number of row (or variable) indices (NNZERO) 
+	              (equal to number of entries for assembled matrices) 
+ 	Col. 57 - 70  Number of elemental matrix entries (NELTVL) 
+	              (zero in the case of assembled matrices) 
+ Line 4 (2A16, 2A20) 
+ 	Col. 1 - 16   Format for pointers (PTRFMT) 
+	Col. 17 - 32  Format for row (or variable) indices (INDFMT) 
+	Col. 33 - 52  Format for numerical values of coefficient matrix (VALFMT) 
+ 	Col. 53 - 72 Format for numerical values of right-hand sides (RHSFMT)</pre><p>
+<pre> Line 5 (A3, 11X, 2I14) Only present if there are right-hand sides present 
+    	Col. 1 	      Right-hand side type: 
+	         	  F for full storage or M for same format as matrix 
+    	Col. 2        G if a starting vector(s) (Guess) is supplied. (RHSTYP) 
+    	Col. 3        X if an exact solution vector(s) is supplied. 
+	Col. 15 - 28  Number of right-hand sides (NRHS) 
+	Col. 29 - 42  Number of row indices (NRHSIX) 
+          	      (ignored in case of unassembled matrices)</pre><p>
+<pre> The three character type field on line 3 describes the matrix type. 
+ The following table lists the permitted values for each of the three 
+ characters. As an example of the type field, RSA denotes that the matrix 
+ is real, symmetric, and assembled.</pre><p>
+<pre> First Character: 
+	R Real matrix 
+	C Complex matrix 
+	P Pattern only (no numerical values supplied)</pre><p>
+<pre> Second Character: 
+	S Symmetric 
+	U Unsymmetric 
+	H Hermitian 
+	Z Skew symmetric 
+	R Rectangular</pre><p>
+<pre> Third Character: 
+	A Assembled 
+	E Elemental matrices (unassembled)</pre><p>
+<pre> </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="fbec2a501b92e7e7bb13af2e21520522"></a><!-- doxytag: member="zreadhb.c::ReadVector" ref="fbec2a501b92e7e7bb13af2e21520522" args="(FILE *fp, int n, int *where, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int ReadVector           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>where</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="4c9a9a1484351dcc1ae1a756a18081e7"></a><!-- doxytag: member="zreadhb.c::zDumpLine" ref="4c9a9a1484351dcc1ae1a756a18081e7" args="(FILE *fp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zDumpLine           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="fb86c617e31fa765098b83fd74539b9b"></a><!-- doxytag: member="zreadhb.c::zParseFloatFormat" ref="fb86c617e31fa765098b83fd74539b9b" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zParseFloatFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="b753ef9c907b1298d163150b6e658247"></a><!-- doxytag: member="zreadhb.c::zParseIntFormat" ref="b753ef9c907b1298d163150b6e658247" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zParseIntFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ff0805af5c8155100799532d3a9613fb"></a><!-- doxytag: member="zreadhb.c::zreadhb" ref="ff0805af5c8155100799532d3a9613fb" args="(int *nrow, int *ncol, int *nonz, doublecomplex **nzval, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zreadhb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nonz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="321d6efeb00f45e3e4c961dcc3aa0fcc"></a><!-- doxytag: member="zreadhb.c::zReadValues" ref="321d6efeb00f45e3e4c961dcc3aa0fcc" args="(FILE *fp, int n, doublecomplex *destination, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zReadValues           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>destination</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zreadrb_8c.html b/DOC/html/zreadrb_8c.html
new file mode 100644
index 0000000..c9a440b
--- /dev/null
+++ b/DOC/html/zreadrb_8c.html
@@ -0,0 +1,297 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zreadrb.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zreadrb.c File Reference</h1>Read a matrix stored in Rutherford-Boeing format. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadrb_8c.html#efd047e091d4564a958a3d6bd0119eec">zDumpLine</a> (FILE *fp)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line.  <a href="#efd047e091d4564a958a3d6bd0119eec"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadrb_8c.html#a097366cbacd16b824248c34e8b1efa9">zParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadrb_8c.html#307d3abcf9f61c651e454e0876736288">zParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadrb_8c.html#fbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadrb_8c.html#eec396507b7780d0b2da753e8bfca5f4">zReadValues</a> (FILE *fp, int n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *destination, int perline, int persize)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Read <a class="el" href="structcomplex.html">complex</a> numbers as pairs of (real, imaginary).  <a href="#eec396507b7780d0b2da753e8bfca5f4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadrb_8c.html#6cc83af309b56ffac83144d77effc249">zreadrb</a> (int *nrow, int *ncol, int *nonz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **nzval, int **rowind, int **colptr)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre><p>
+Purpose =======<p>
+Read a DOUBLE COMPLEX PRECISION matrix stored in Rutherford-Boeing format as described below.<p>
+Line 1 (A72, A8) Col. 1 - 72 Title (TITLE) Col. 73 - 80 Matrix name / identifier (MTRXID)<p>
+Line 2 (I14, 3(1X, I13)) Col. 1 - 14 Total number of lines excluding header (TOTCRD) Col. 16 - 28 Number of lines for pointers (PTRCRD) Col. 30 - 42 Number of lines for row (or variable) indices (INDCRD) Col. 44 - 56 Number of lines for numerical values (VALCRD)<p>
+Line 3 (A3, 11X, 4(1X, I13)) Col. 1 - 3 Matrix type (see below) (MXTYPE) Col. 15 - 28 Compressed Column: Number of rows (NROW) Elemental: Largest integer used to index variable (MVAR) Col. 30 - 42 Compressed Column: Number of columns (NCOL) Elemental: Number of element matrices (NELT) Col. 44 - 56 Compressed Column: Number of entries (NNZERO) Elemental: Number of variable indeces (NVARIX) Col. 58 - 70 Compressed Column: Unused, explicitly zero Elemental: Number of elemental matrix entrie [...]
+Line 4 (2A16, A20) Col. 1 - 16 Fortran format for pointers (PTRFMT) Col. 17 - 32 Fortran format for row (or variable) indices (INDFMT) Col. 33 - 52 Fortran format for numerical values of coefficient matrix (VALFMT) (blank in the case of matrix patterns)<p>
+The three character type field on line 3 describes the matrix type. The following table lists the permitted values for each of the three characters. As an example of the type field, RSA denotes that the matrix is real, symmetric, and assembled.<p>
+First Character: R Real matrix C Complex matrix I integer matrix P Pattern only (no numerical values supplied) Q Pattern only (numerical values supplied in associated auxiliary value file)<p>
+Second Character: S Symmetric U Unsymmetric H Hermitian Z Skew symmetric R Rectangular<p>
+Third Character: A Compressed column form E Elemental form<hr><h2>Function Documentation</h2>
+<a class="anchor" name="fbec2a501b92e7e7bb13af2e21520522"></a><!-- doxytag: member="zreadrb.c::ReadVector" ref="fbec2a501b92e7e7bb13af2e21520522" args="(FILE *fp, int n, int *where, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int ReadVector           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>where</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="efd047e091d4564a958a3d6bd0119eec"></a><!-- doxytag: member="zreadrb.c::zDumpLine" ref="efd047e091d4564a958a3d6bd0119eec" args="(FILE *fp)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int zDumpLine           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="307d3abcf9f61c651e454e0876736288"></a><!-- doxytag: member="zreadrb.c::zParseFloatFormat" ref="307d3abcf9f61c651e454e0876736288" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int zParseFloatFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a097366cbacd16b824248c34e8b1efa9"></a><!-- doxytag: member="zreadrb.c::zParseIntFormat" ref="a097366cbacd16b824248c34e8b1efa9" args="(char *buf, int *num, int *size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int zParseIntFormat           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6cc83af309b56ffac83144d77effc249"></a><!-- doxytag: member="zreadrb.c::zreadrb" ref="6cc83af309b56ffac83144d77effc249" args="(int *nrow, int *ncol, int *nonz, doublecomplex **nzval, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zreadrb           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nonz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="eec396507b7780d0b2da753e8bfca5f4"></a><!-- doxytag: member="zreadrb.c::zReadValues" ref="eec396507b7780d0b2da753e8bfca5f4" args="(FILE *fp, int n, doublecomplex *destination, int perline, int persize)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int zReadValues           </td>
+          <td>(</td>
+          <td class="paramtype">FILE * </td>
+          <td class="paramname"> <em>fp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>destination</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>perline</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>persize</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zreadtriple_8c.html b/DOC/html/zreadtriple_8c.html
new file mode 100644
index 0000000..c5c0f17
--- /dev/null
+++ b/DOC/html/zreadtriple_8c.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zreadtriple.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zreadtriple.c File Reference</h1>Read a matrix stored in triplet (coordinate) format. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadtriple_8c.html#ae3562688014d408faee4f6dc8c9647b">zreadtriple</a> (int *m, int *n, int *nonz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **nzval, int **rowind, int **colptr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadtriple_8c.html#99021adc7c4e9405035663452ff651dc">zreadrhs</a> (int m, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *b)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 4.0) --
+ Lawrence Berkeley National Laboratory.
+ June 30, 2009
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="99021adc7c4e9405035663452ff651dc"></a><!-- doxytag: member="zreadtriple.c::zreadrhs" ref="99021adc7c4e9405035663452ff651dc" args="(int m, doublecomplex *b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zreadrhs           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>b</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ae3562688014d408faee4f6dc8c9647b"></a><!-- doxytag: member="zreadtriple.c::zreadtriple" ref="ae3562688014d408faee4f6dc8c9647b" args="(int *m, int *n, int *nonz, doublecomplex **nzval, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zreadtriple           </td>
+          <td>(</td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nonz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zsnode__bmod_8c.html b/DOC/html/zsnode__bmod_8c.html
new file mode 100644
index 0000000..f70584f
--- /dev/null
+++ b/DOC/html/zsnode__bmod_8c.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zsnode_bmod.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zsnode_bmod.c File Reference</h1>Performs numeric block updates within the relaxed snode. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zsnode__bmod_8c.html#e4edaac25125ac0e6e309858b4b3b4d0">zsnode_bmod</a> (const int jcol, const int jsupno, const int fsupc, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *dense, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *tempv, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu, <a class="el" href="str [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode.  <a href="#e4edaac25125ac0e6e309858b4b3b4d0"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="e4edaac25125ac0e6e309858b4b3b4d0"></a><!-- doxytag: member="zsnode_bmod.c::zsnode_bmod" ref="e4edaac25125ac0e6e309858b4b3b4d0" args="(const int jcol, const int jsupno, const int fsupc, doublecomplex *dense, doublecomplex *tempv, GlobalLU_t *Glu, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zsnode_bmod           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jsupno</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>fsupc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>dense</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>tempv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zsnode__dfs_8c.html b/DOC/html/zsnode__dfs_8c.html
new file mode 100644
index 0000000..2a72fef
--- /dev/null
+++ b/DOC/html/zsnode__dfs_8c.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zsnode_dfs.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zsnode_dfs.c File Reference</h1>Determines the union of row structures of columns within the relaxed node. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zsnode__dfs_8c.html#30b52c07431f048048b8bf3e8c03087a">zsnode_dfs</a> (const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *xprune, int *marker, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="30b52c07431f048048b8bf3e8c03087a"></a><!-- doxytag: member="zsnode_dfs.c::zsnode_dfs" ref="30b52c07431f048048b8bf3e8c03087a" args="(const int jcol, const int kcol, const int *asub, const int *xa_begin, const int *xa_end, int *xprune, int *marker, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int zsnode_dfs           </td>
+          <td>(</td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"> <em>kcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>asub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int * </td>
+          <td class="paramname"> <em>xa_end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>marker</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose
+ =======
+    <a class="el" href="slu__zdefs_8h.html#f0e16dd7be5f8beaf0e445562995de49">zsnode_dfs()</a> - Determine the union of the row structures of those 
+    columns within the relaxed snode.
+    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
+    the portion outside the rectangular supernode must be zero.</pre><p>
+<pre> Return value
+ ============
+     0   success;
+    >0   number of bytes allocated when run out of memory.
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zsp__blas2_8c.html b/DOC/html/zsp__blas2_8c.html
new file mode 100644
index 0000000..ebed2df
--- /dev/null
+++ b/DOC/html/zsp__blas2_8c.html
@@ -0,0 +1,401 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zsp_blas2.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zsp_blas2.c File Reference</h1>Sparse BLAS 2, using some dense BLAS 2 operations. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zsp__blas2_8c.html#c9798dda11fa387039351d70fa59ce3b">zusolve</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system.  <a href="#c9798dda11fa387039351d70fa59ce3b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zsp__blas2_8c.html#fb6f65890b5348dc1692d01b087be35d">zlsolve</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system.  <a href="#fb6f65890b5348dc1692d01b087be35d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zsp__blas2_8c.html#1165292a4e2a6c282638868bd503fb7a">zmatvec</a> (int, int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.  <a href="#1165292a4e2a6c282638868bd503fb7a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zsp__blas2_8c.html#070a51d222072a18d8d6ac91381b4859">sp_ztrsv</a> (char *uplo, char *trans, char *diag, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *x, <a class="el" href="structSuperLUStat__t.html">SuperLUS [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b.  <a href="#070a51d222072a18d8d6ac91381b4859"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zsp__blas2_8c.html#9ea39731f07b4c2ab20e44c97ffd773c">sp_zgemv</a> (char *trans, <a class="el" href="structdoublecomplex.html">doublecomplex</a> alpha, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="structdoublecomplex.html">doublecomple [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y.  <a href="#9ea39731f07b4c2ab20e44c97ffd773c"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ October 15, 2003
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="9ea39731f07b4c2ab20e44c97ffd773c"></a><!-- doxytag: member="zsp_blas2.c::sp_zgemv" ref="9ea39731f07b4c2ab20e44c97ffd773c" args="(char *trans, doublecomplex alpha, SuperMatrix *A, doublecomplex *x, int incx, doublecomplex beta, doublecomplex *y, int incy)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_zgemv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>incy</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>  
+   Purpose   
+   =======</pre><p>
+<pre>   <a class="el" href="slu__zdefs_8h.html#295a004dbce1f1b0aa48e7cb319da461" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x...">sp_zgemv()</a>  performs one of the matrix-vector operations   
+      y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
+   where alpha and beta are scalars, x and y are vectors and A is a
+   sparse A->nrow by A->ncol matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANS  - (input) char*
+            On entry, TRANS specifies the operation to be performed as   
+            follows:   
+               TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
+               TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
+               TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.</pre><p>
+<pre>   ALPHA  - (input) <a class="el" href="structdoublecomplex.html">doublecomplex</a>
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Before entry, the leading m by n part of the array A must   
+            contain the matrix of coefficients.</pre><p>
+<pre>   X      - (input) doublecomplex*, array of DIMENSION at least   
+            ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
+           and at least   
+            ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
+            Before entry, the incremented array X must contain the   
+            vector x.</pre><p>
+<pre>   INCX   - (input) int
+            On entry, INCX specifies the increment for the elements of   
+            X. INCX must not be zero.</pre><p>
+<pre>   BETA   - (input) <a class="el" href="structdoublecomplex.html">doublecomplex</a>
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then Y need not be set on input.</pre><p>
+<pre>   Y      - (output) doublecomplex*,  array of DIMENSION at least   
+            ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
+            and at least   
+            ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
+            Before entry with BETA non-zero, the incremented array Y   
+            must contain the vector y. On exit, Y is overwritten by the 
+            updated vector y.</pre><p>
+<pre>   INCY   - (input) int
+            On entry, INCY specifies the increment for the elements of   
+            Y. INCY must not be zero.</pre><p>
+<pre>    ==== Sparse Level 2 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="070a51d222072a18d8d6ac91381b4859"></a><!-- doxytag: member="zsp_blas2.c::sp_ztrsv" ref="070a51d222072a18d8d6ac91381b4859" args="(char *uplo, char *trans, char *diag, SuperMatrix *L, SuperMatrix *U, doublecomplex *x, SuperLUStat_t *stat, int *info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_ztrsv           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>uplo</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>diag</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>info</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+   Purpose
+   =======</pre><p>
+<pre>   <a class="el" href="slu__zdefs_8h.html#4f8e25c2e20af0219ad6719db052f3d7" title="Solves one of the systems of equations A*x = b, or A'*x = b.">sp_ztrsv()</a> solves one of the systems of equations   
+       A*x = b,   or   A'*x = b,
+   where b and x are n element vectors and A is a sparse unit , or   
+   non-unit, upper or lower triangular matrix.   
+   No test for singularity or near-singularity is included in this   
+   routine. Such tests must be performed before calling this routine.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   uplo   - (input) char*
+            On entry, uplo specifies whether the matrix is an upper or   
+             lower triangular matrix as follows:   
+                uplo = 'U' or 'u'   A is an upper triangular matrix.   
+                uplo = 'L' or 'l'   A is a lower triangular matrix.</pre><p>
+<pre>   trans  - (input) char*
+             On entry, trans specifies the equations to be solved as   
+             follows:   
+                trans = 'N' or 'n'   A*x = b.   
+                trans = 'T' or 't'   A'*x = b.
+                trans = 'C' or 'c'   A^H*x = b.</pre><p>
+<pre>   diag   - (input) char*
+             On entry, diag specifies whether or not A is unit   
+             triangular as follows:   
+                diag = 'U' or 'u'   A is assumed to be unit triangular.   
+                diag = 'N' or 'n'   A is not assumed to be unit   
+                                    triangular.</pre><p>
+<pre>   L       - (input) SuperMatrix*
+	       The factor L from the factorization Pr*A*Pc=L*U. Use
+             compressed row subscripts storage for supernodes,
+             i.e., L has types: Stype = SC, Dtype = SLU_Z, Mtype = TRLU.</pre><p>
+<pre>   U       - (input) SuperMatrix*
+	        The factor U from the factorization Pr*A*Pc=L*U.
+	        U has types: Stype = NC, Dtype = SLU_Z, Mtype = TRU.</pre><p>
+<pre>   x       - (input/output) doublecomplex*
+             Before entry, the incremented array X must contain the n   
+             element right-hand side vector b. On exit, X is overwritten 
+             with the solution vector x.</pre><p>
+<pre>   info    - (output) int*
+             If *info = -i, the i-th argument had an illegal value.
+ </pre> 
+</div>
+</div><p>
+<a class="anchor" name="fb6f65890b5348dc1692d01b087be35d"></a><!-- doxytag: member="zsp_blas2.c::zlsolve" ref="fb6f65890b5348dc1692d01b087be35d" args="(int, int, doublecomplex *, doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zlsolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The unit lower triangular matrix is stored in a 2D array M(1:nrow,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+<a class="anchor" name="1165292a4e2a6c282638868bd503fb7a"></a><!-- doxytag: member="zsp_blas2.c::zmatvec" ref="1165292a4e2a6c282638868bd503fb7a" args="(int, int, int, doublecomplex *, doublecomplex *, doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zmatvec           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>Mxvec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. 
+</div>
+</div><p>
+<a class="anchor" name="c9798dda11fa387039351d70fa59ce3b"></a><!-- doxytag: member="zsp_blas2.c::zusolve" ref="c9798dda11fa387039351d70fa59ce3b" args="(int, int, doublecomplex *, doublecomplex *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zusolve           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ncol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>rhs</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The upper triangular matrix is stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned in the rhs vector. 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zsp__blas3_8c.html b/DOC/html/zsp__blas3_8c.html
new file mode 100644
index 0000000..a241a71
--- /dev/null
+++ b/DOC/html/zsp__blas3_8c.html
@@ -0,0 +1,199 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zsp_blas3.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zsp_blas3.c File Reference</h1>Sparse BLAS3, using some dense BLAS3 operations. <a href="#_details">More...</a>
+<p>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zsp__blas3_8c.html#2648905c9e6009b63d3bf0bb4d673e8e">sp_zgemm</a> (char *transa, char *transb, int m, int n, int k, <a class="el" href="structdoublecomplex.html">doublecomplex</a> alpha, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="st [...]
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 2.0) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="2648905c9e6009b63d3bf0bb4d673e8e"></a><!-- doxytag: member="zsp_blas3.c::sp_zgemm" ref="2648905c9e6009b63d3bf0bb4d673e8e" args="(char *transa, char *transb, int m, int n, int k, doublecomplex alpha, SuperMatrix *A, doublecomplex *b, int ldb, doublecomplex beta, doublecomplex *c, int ldc)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sp_zgemm           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transa</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>transb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldc</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<pre>
+ Purpose   
+   =======</pre><p>
+<pre>   sp_z performs one of the matrix-matrix operations</pre><p>
+<pre>      C := alpha*op( A )*op( B ) + beta*C,</pre><p>
+<pre>   where  op( X ) is one of</pre><p>
+<pre>      op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),</pre><p>
+<pre>   alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
+   an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix.</pre><p>
+<pre>   Parameters   
+   ==========</pre><p>
+<pre>   TRANSA - (input) char*
+            On entry, TRANSA specifies the form of op( A ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSA = 'N' or 'n',  op( A ) = A.   
+               TRANSA = 'T' or 't',  op( A ) = A'.   
+               TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
+            Unchanged on exit.</pre><p>
+<pre>   TRANSB - (input) char*
+            On entry, TRANSB specifies the form of op( B ) to be used in 
+            the matrix multiplication as follows:   
+               TRANSB = 'N' or 'n',  op( B ) = B.   
+               TRANSB = 'T' or 't',  op( B ) = B'.   
+               TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
+            Unchanged on exit.</pre><p>
+<pre>   M      - (input) int   
+            On entry,  M  specifies  the number of rows of the matrix 
+	     op( A ) and of the matrix C.  M must be at least zero. 
+	     Unchanged on exit.</pre><p>
+<pre>   N      - (input) int
+            On entry,  N specifies the number of columns of the matrix 
+	     op( B ) and the number of columns of the matrix C. N must be 
+	     at least zero.
+	     Unchanged on exit.</pre><p>
+<pre>   K      - (input) int
+            On entry, K specifies the number of columns of the matrix 
+	     op( A ) and the number of rows of the matrix op( B ). K must 
+	     be at least  zero.   
+           Unchanged on exit.</pre><p>
+<pre>   ALPHA  - (input) <a class="el" href="structdoublecomplex.html">doublecomplex</a>
+            On entry, ALPHA specifies the scalar alpha.</pre><p>
+<pre>   A      - (input) SuperMatrix*
+            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+            Currently, the type of A can be:
+                Stype = NC or NCP; Dtype = SLU_Z; Mtype = GE. 
+            In the future, more general A can be handled.</pre><p>
+<pre>   B      - DOUBLE COMPLEX PRECISION array of DIMENSION ( LDB, kb ), where kb is 
+            n when TRANSB = 'N' or 'n',  and is  k otherwise.   
+            Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
+            part of the array B must contain the matrix B, otherwise 
+            the leading n by k part of the array B must contain the 
+            matrix B.   
+            Unchanged on exit.</pre><p>
+<pre>   LDB    - (input) int
+            On entry, LDB specifies the first dimension of B as declared 
+            in the calling (sub) program. LDB must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max( 1, n )</a>.  
+            Unchanged on exit.</pre><p>
+<pre>   BETA   - (input) <a class="el" href="structdoublecomplex.html">doublecomplex</a>
+            On entry, BETA specifies the scalar beta. When BETA is   
+            supplied as zero then C need not be set on input.</pre><p>
+<pre>   C      - DOUBLE COMPLEX PRECISION array of DIMENSION ( LDC, n ).   
+            Before entry, the leading m by n part of the array C must 
+            contain the matrix C,  except when beta is zero, in which 
+            case C need not be set on entry.   
+            On exit, the array C is overwritten by the m by n matrix 
+	     ( alpha*op( A )*B + beta*C ).</pre><p>
+<pre>   LDC    - (input) int
+            On entry, LDC specifies the first dimension of C as declared 
+            in the calling (sub)program. LDC must be at least <a class="el" href="slamch_8c.html#ffe776513b24d84b39af8ab0930fef7f">max(1,m)</a>.   
+            Unchanged on exit.</pre><p>
+<pre>   ==== Sparse Level 3 Blas routine.   
+ </pre> 
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DOC/html/zutil_8c.html b/DOC/html/zutil_8c.html
new file mode 100644
index 0000000..5a884d9
--- /dev/null
+++ b/DOC/html/zutil_8c.html
@@ -0,0 +1,994 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>SuperLU: SRC/zutil.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.5 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>SRC/zutil.c File Reference</h1>Matrix utility functions. <a href="#_details">More...</a>
+<p>
+<code>#include <math.h></code><br>
+<code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#349f23fdb4e958cc6da8e890554b9868">zCreate_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *nzval, int *rowind, int *colptr, <a class="e [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related.  <a href="#349f23fdb4e958cc6da8e890554b9868"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#bbb9f38872629121898fe588e5cf9c46">zCreate_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *nzval, int *colind, int *rowptr, <a class="e [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#6d326511607c3cb8c0b654b675bd3700">zCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *B)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B.  <a href="#6d326511607c3cb8c0b654b675bd3700"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#8316b5e4832ca200a14d14f5ed164695">zCreate_Dense_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *X, int m, int n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *x, int ldx, <a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> stype, <a class="el" href="supermatrix_ [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#6632ad6334d30a38c9e8b026a3983b65">zCopy_Dense_Matrix</a> (int M, int N, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *X, int ldx, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *Y, int ldy)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#43150b5d7a29eebba2f8de5c2a35d645">zCreate_SuperNode_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, int m, int n, int nnz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *nzval, int *nzval_colptr, int *rowind, int *rowind_colptr, int *col_to_sup, int *sup_to_col, <a class="el" href="supermatrix [...]
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#ee4cad234e4df121da5386a86754dd4d">zCompRow_to_CompCol</a> (int m, int n, int nnz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *a, int *colind, int *rowptr, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **at, int **rowind, int **colptr)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage.  <a href="#ee4cad234e4df121da5386a86754dd4d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#7f3c67eba79f4d63a7ef19781935985d">zPrint_CompCol_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging.  <a href="#7f3c67eba79f4d63a7ef19781935985d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#12d2264eb0e17728142e651de7cc8f9c">zPrint_SuperNode_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#d665640e89334e9f7a57355e030ff63d">zPrint_Dense_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#8083f641fd96ede2f54db44d18f984e9">zprint_lu_col</a> (char *msg, int jcol, int pivrow, int *xprune, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor.  <a href="#8083f641fd96ede2f54db44d18f984e9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#bbfe87885f0f664d31b4f6fcf2180127">zcheck_tempv</a> (int n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *tempv)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check whether tempv[] == 0. This should be true before and after calling any numeric routines, i.e., "panel_bmod" and "column_bmod".  <a href="#bbfe87885f0f664d31b4f6fcf2180127"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#a81fbc4bdd835def817191d94fb8b208">zGenXtrue</a> (int n, int nrhs, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *x, int ldx)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#cf2b404121b9a70942631f50b85fd8a1">zFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, int nrhs, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *x, int ldx, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.ht [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's.  <a href="#cf2b404121b9a70942631f50b85fd8a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#c1c222f7cb3253d97408d9395d6919d4">zfill</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *a, int alen, <a class="el" href="structdoublecomplex.html">doublecomplex</a> dval)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fills a <a class="el" href="structdoublecomplex.html">doublecomplex</a> precision array with a given value.  <a href="#c1c222f7cb3253d97408d9395d6919d4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#0c645d9e2d757c5f5fa1ecd67f0c2a07">zinf_norm_error</a> (int nrhs, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *X, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *xtrue)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector.  <a href="#0c645d9e2d757c5f5fa1ecd67f0c2a07"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#0807017bff32a20ff59820583a9e038d">zPrintPerf</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, <a class="el" href="structmem__usage__t.html">mem_usage_t</a> *mem_usage, double rpg, double rcond, double *ferr, double *berr, char *equed, <a class="el" href="s [...]
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Print performance of the code.  <a href="#0807017bff32a20ff59820583a9e038d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#d40a765de4b05c0ab07d3299aa93b6da">print_doublecomplex_vec</a> (char *what, int n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *vec)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<pre>
+ -- SuperLU routine (version 3.1) --
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ August 1, 2008</pre><p>
+<pre> Copyright (c) 1994 by Xerox Corporation.  All rights reserved.</pre><p>
+<pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.</pre><p>
+<pre> Permission is hereby granted to use or copy this program for any
+ purpose, provided the above notices are retained on all copies.
+ Permission to modify the code and to distribute modified code is
+ granted, provided the above notices are retained, and a notice that
+ the code was modified is included with the above copyright notice.
+ </pre> <hr><h2>Function Documentation</h2>
+<a class="anchor" name="d40a765de4b05c0ab07d3299aa93b6da"></a><!-- doxytag: member="zutil.c::print_doublecomplex_vec" ref="d40a765de4b05c0ab07d3299aa93b6da" args="(char *what, int n, doublecomplex *vec)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">print_doublecomplex_vec           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>vec</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="bbfe87885f0f664d31b4f6fcf2180127"></a><!-- doxytag: member="zutil.c::zcheck_tempv" ref="bbfe87885f0f664d31b4f6fcf2180127" args="(int n, doublecomplex *tempv)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zcheck_tempv           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>tempv</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ee4cad234e4df121da5386a86754dd4d"></a><!-- doxytag: member="zutil.c::zCompRow_to_CompCol" ref="ee4cad234e4df121da5386a86754dd4d" args="(int m, int n, int nnz, doublecomplex *a, int *colind, int *rowptr, doublecomplex **at, int **rowind, int **colptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zCompRow_to_CompCol           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>colind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> ** </td>
+          <td class="paramname"> <em>at</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int ** </td>
+          <td class="paramname"> <em>colptr</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6d326511607c3cb8c0b654b675bd3700"></a><!-- doxytag: member="zutil.c::zCopy_CompCol_Matrix" ref="6d326511607c3cb8c0b654b675bd3700" args="(SuperMatrix *A, SuperMatrix *B)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zCopy_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6632ad6334d30a38c9e8b026a3983b65"></a><!-- doxytag: member="zutil.c::zCopy_Dense_Matrix" ref="6632ad6334d30a38c9e8b026a3983b65" args="(int M, int N, doublecomplex *X, int ldx, doublecomplex *Y, int ldy)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zCopy_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>Y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldy</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Copies a two-dimensional matrix X to another matrix Y. 
+</div>
+</div><p>
+<a class="anchor" name="349f23fdb4e958cc6da8e890554b9868"></a><!-- doxytag: member="zutil.c::zCreate_CompCol_Matrix" ref="349f23fdb4e958cc6da8e890554b9868" args="(SuperMatrix *A, int m, int n, int nnz, doublecomplex *nzval, int *rowind, int *colptr, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zCreate_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="bbb9f38872629121898fe588e5cf9c46"></a><!-- doxytag: member="zutil.c::zCreate_CompRow_Matrix" ref="bbb9f38872629121898fe588e5cf9c46" args="(SuperMatrix *A, int m, int n, int nnz, doublecomplex *nzval, int *colind, int *rowptr, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zCreate_CompRow_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>colind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8316b5e4832ca200a14d14f5ed164695"></a><!-- doxytag: member="zutil.c::zCreate_Dense_Matrix" ref="8316b5e4832ca200a14d14f5ed164695" args="(SuperMatrix *X, int m, int n, doublecomplex *x, int ldx, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zCreate_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="43150b5d7a29eebba2f8de5c2a35d645"></a><!-- doxytag: member="zutil.c::zCreate_SuperNode_Matrix" ref="43150b5d7a29eebba2f8de5c2a35d645" args="(SuperMatrix *L, int m, int n, int nnz, doublecomplex *nzval, int *nzval_colptr, int *rowind, int *rowind_colptr, int *col_to_sup, int *sup_to_col, Stype_t stype, Dtype_t dtype, Mtype_t mtype)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zCreate_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>nzval</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>nzval_colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>rowind_colptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>col_to_sup</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>sup_to_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td>
+          <td class="paramname"> <em>stype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td>
+          <td class="paramname"> <em>dtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="supermatrix_8h.html#5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+          <td class="paramname"> <em>mtype</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c1c222f7cb3253d97408d9395d6919d4"></a><!-- doxytag: member="zutil.c::zfill" ref="c1c222f7cb3253d97408d9395d6919d4" args="(doublecomplex *a, int alen, doublecomplex dval)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zfill           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>alen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> </td>
+          <td class="paramname"> <em>dval</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="cf2b404121b9a70942631f50b85fd8a1"></a><!-- doxytag: member="zutil.c::zFillRHS" ref="cf2b404121b9a70942631f50b85fd8a1" args="(trans_t trans, int nrhs, doublecomplex *x, int ldx, SuperMatrix *A, SuperMatrix *B)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zFillRHS           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="superlu__enum__consts_8h.html#0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td>
+          <td class="paramname"> <em>trans</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>B</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="a81fbc4bdd835def817191d94fb8b208"></a><!-- doxytag: member="zutil.c::zGenXtrue" ref="a81fbc4bdd835def817191d94fb8b208" args="(int n, int nrhs, doublecomplex *x, int ldx)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zGenXtrue           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>ldx</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0c645d9e2d757c5f5fa1ecd67f0c2a07"></a><!-- doxytag: member="zutil.c::zinf_norm_error" ref="0c645d9e2d757c5f5fa1ecd67f0c2a07" args="(int nrhs, SuperMatrix *X, doublecomplex *xtrue)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zinf_norm_error           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>nrhs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+          <td class="paramname"> <em>xtrue</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7f3c67eba79f4d63a7ef19781935985d"></a><!-- doxytag: member="zutil.c::zPrint_CompCol_Matrix" ref="7f3c67eba79f4d63a7ef19781935985d" args="(char *what, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zPrint_CompCol_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d665640e89334e9f7a57355e030ff63d"></a><!-- doxytag: member="zutil.c::zPrint_Dense_Matrix" ref="d665640e89334e9f7a57355e030ff63d" args="(char *what, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zPrint_Dense_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8083f641fd96ede2f54db44d18f984e9"></a><!-- doxytag: member="zutil.c::zprint_lu_col" ref="8083f641fd96ede2f54db44d18f984e9" args="(char *msg, int jcol, int pivrow, int *xprune, GlobalLU_t *Glu)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zprint_lu_col           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>msg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>jcol</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>pivrow</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"> <em>xprune</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> * </td>
+          <td class="paramname"> <em>Glu</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="12d2264eb0e17728142e651de7cc8f9c"></a><!-- doxytag: member="zutil.c::zPrint_SuperNode_Matrix" ref="12d2264eb0e17728142e651de7cc8f9c" args="(char *what, SuperMatrix *A)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zPrint_SuperNode_Matrix           </td>
+          <td>(</td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>what</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>A</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="0807017bff32a20ff59820583a9e038d"></a><!-- doxytag: member="zutil.c::zPrintPerf" ref="0807017bff32a20ff59820583a9e038d" args="(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage, double rpg, double rcond, double *ferr, double *berr, char *equed, SuperLUStat_t *stat)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void zPrintPerf           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td>
+          <td class="paramname"> <em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmem__usage__t.html">mem_usage_t</a> * </td>
+          <td class="paramname"> <em>mem_usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>rpg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"> <em>rcond</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>ferr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"> <em>berr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"> <em>equed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td>
+          <td class="paramname"> <em>stat</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by 
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
+</body>
+</html>
diff --git a/DoxyConfig b/DoxyConfig
new file mode 100644
index 0000000..071078b
--- /dev/null
+++ b/DoxyConfig
@@ -0,0 +1,1357 @@
+# Doxyfile 1.5.5
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file 
+# that follow. The default is UTF-8 which is also the encoding used for all 
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
+# iconv built into libc) for the transcoding. See 
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = SuperLU
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 4.2
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = DOC
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, 
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), 
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, 
+# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, 
+# and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = No
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like regular Qt-style comments 
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
+# interpret the first line (until the first dot) of a Qt-style 
+# comment as the brief description. If set to NO, the comments 
+# will behave just like regular Qt-style comments (thus requiring 
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Java. For instance, namespaces will be presented as packages, qualified 
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
+# sources. Doxygen will then generate output that is tailored for 
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
+# to include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also make the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
+# Doxygen will parse them like normal C++ but will assume all classes use public 
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
+# is documented as struct, union, or enum with the name of the typedef. So 
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
+# with name TypeT. When disabled the typedef will appear as a member of a file, 
+# namespace, or class. And the struct will be named TypeS. This can typically 
+# be useful for C code in case the coding convention dictates that all compound 
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YEs
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = YES
+
+# If this flag is set to YES, the members of anonymous namespaces will be 
+# extracted and appear in the documentation as a namespace called 
+# 'anonymous_namespace{file}', where file will be replaced with the base 
+# name of the file that contains the anonymous namespace. By default 
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES   = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
+# hierarchy of group names into alphabetical order. If set to NO (the default) 
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from 
+# the version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = SRC/ \
+                         EXAMPLE/
+
+# This tag can be used to specify the character encoding of the source files 
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
+# also the default input encoding. Doxygen uses libiconv (or the iconv built 
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS          = 
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
+# (namespaces, classes, functions, etc.) that should be excluded from the 
+# output. The symbol name can be a fully qualified name, a word, or if the 
+# wildcard * is used, a substring. Examples: ANamespace, AClass, 
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# is applied to all files.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.  Otherwise they will link to the documentstion.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files 
+# will be generated that can be used as input for Apple's Xcode 3 
+# integrated development environment, introduced with OSX 10.5 (Leopard). 
+# To create a documentation set, doxygen will generate a Makefile in the 
+# HTML output directory. Running make will produce the docset in that 
+# directory and running "make install" will install the docset in 
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
+# it at startup.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
+# feed. A documentation feed provides an umbrella under which multiple 
+# documentation sets from a single provider (such as a company or product suite) 
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
+# should uniquely identify the documentation set bundle. This should be a 
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
+# documentation will contain sections that can be hidden and shown after the 
+# page has loaded. For this to work a browser that supports 
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse 
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option is superseded by the HAVE_DOT option below. This is only a 
+# fallback. It is recommended to install and use dot, since it yields more 
+# powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc 
+# command. Doxygen will then run the mscgen tool (see 
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
+# the mscgen tool resides. If left empty the tool is assumed to be found in the 
+# default search path.
+
+MSCGEN_PATH            = 
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
+# doxygen will generate a call dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable call graphs 
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
+# doxygen will generate a caller dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable caller 
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
+# nodes that will be shown in the graph. If the number of nodes in a graph 
+# becomes larger than this value, doxygen will truncate the graph, which is 
+# visualized by representing a node as a red box. Note that doxygen if the 
+# number of direct children of the root node in a graph is already larger than 
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that the size of a graph can be further restricted by 
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is enabled by default, which results in a transparent 
+# background. Warning: Depending on the platform used, enabling this option 
+# may lead to badly anti-aliased labels on the edges of a graph (i.e. they 
+# become hard to read).
+
+DOT_TRANSPARENT        = YES
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
diff --git a/EXAMPLE/Makefile b/EXAMPLE/Makefile
index 241af0d..c286ded 100644
--- a/EXAMPLE/Makefile
+++ b/EXAMPLE/Makefile
@@ -33,13 +33,14 @@ include ../make.inc
 #######################################################################
 
 HEADER   = ../SRC
-LIBS	= ../$(SUPERLULIB) $(BLASLIB) -lm
 
 SLINEXM		= slinsol.o
 SLINEXM1	= slinsol1.o
 SLINXEXM 	= slinsolx.o
 SLINXEXM1 	= slinsolx1.o
 SLINXEXM2	= slinsolx2.o
+SITSOL	     	= sitersol.o sfgmr.o
+SITSOL1	     	= sitersol1.o sfgmr.o
 
 DLINEXM		= dlinsol.o
 DLINEXM1	= dlinsol1.o
@@ -47,95 +48,130 @@ DLINXEXM 	= dlinsolx.o
 DLINXEXM1 	= dlinsolx1.o
 DLINXEXM2 	= dlinsolx2.o
 SUPERLUEXM 	= superlu.o sp_ienv.o
+DITSOL	     	= ditersol.o dfgmr.o
+DITSOL1	     	= ditersol1.o dfgmr.o
 
 CLINEXM 	= clinsol.o
 CLINEXM1 	= clinsol1.o
 CLINXEXM 	= clinsolx.o
 CLINXEXM1 	= clinsolx1.o
 CLINXEXM2 	= clinsolx2.o
+CITSOL	     	= citersol.o cfgmr.o
+CITSOL1	     	= citersol1.o cfgmr.o
 
 ZLINEXM 	= zlinsol.o
 ZLINEXM1 	= zlinsol1.o
 ZLINXEXM 	= zlinsolx.o
 ZLINXEXM1 	= zlinsolx1.o
 ZLINXEXM2 	= zlinsolx2.o
+ZITSOL	     	= zitersol.o zfgmr.o
+ZITSOL1	     	= zitersol1.o zfgmr.o
 
 
 all:    single double complex complex16
 
-single:    slinsol slinsol1 slinsolx slinsolx1 slinsolx2
-double:    dlinsol dlinsol1 dlinsolx dlinsolx1 dlinsolx2 superlu
-complex:   clinsol clinsol1 clinsolx clinsolx1 clinsolx2
-complex16: zlinsol zlinsol1 zlinsolx zlinsolx1 zlinsolx2
+single:    slinsol slinsol1 slinsolx slinsolx1 slinsolx2 sitersol sitersol1
+double:    dlinsol dlinsol1 dlinsolx dlinsolx1 dlinsolx2 superlu \
+		ditersol ditersol1
+complex:   clinsol clinsol1 clinsolx clinsolx1 clinsolx2 citersol citersol1
+complex16: zlinsol zlinsol1 zlinsolx zlinsolx1 zlinsolx2 zitersol zitersol1
 
-slinsol: $(SLINEXM) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(SLINEXM) $(LIBS) -o $@
+slinsol: $(SLINEXM) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(SLINEXM) $(LIBS) -lm -o $@
 
-slinsol1: $(SLINEXM1) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(SLINEXM1) $(LIBS) -o $@
+slinsol1: $(SLINEXM1) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(SLINEXM1) $(LIBS) -lm -o $@
 
-slinsolx: $(SLINXEXM) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(SLINXEXM) $(LIBS) -o $@
+slinsolx: $(SLINXEXM) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(SLINXEXM) $(LIBS) -lm -o $@
 
-slinsolx1: $(SLINXEXM1) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(SLINXEXM1) $(LIBS) -o $@
+slinsolx1: $(SLINXEXM1) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(SLINXEXM1) $(LIBS) -lm -o $@
 
-slinsolx2: $(SLINXEXM2) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(SLINXEXM2) $(LIBS) -o $@
+slinsolx2: $(SLINXEXM2) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(SLINXEXM2) $(LIBS) -lm -o $@
 
-dlinsol: $(DLINEXM) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(DLINEXM) $(LIBS) -o $@
+sitersol: $(SITSOL) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(SITSOL) $(LIBS) -lm -o $@
 
-dlinsol1: $(DLINEXM1) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(DLINEXM1) $(LIBS) -o $@
+sitersol1: $(SITSOL1) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(SITSOL1) $(LIBS) -lm -o $@
 
-dlinsolx: $(DLINXEXM) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(DLINXEXM) $(LIBS) -o $@
+dlinsol: $(DLINEXM) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(DLINEXM) $(LIBS) -lm -o $@
 
-dlinsolx1: $(DLINXEXM1) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(DLINXEXM1) $(LIBS) -o $@
+dlinsol1: $(DLINEXM1) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(DLINEXM1) $(LIBS) -lm -o $@
 
-dlinsolx2: $(DLINXEXM2) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(DLINXEXM2) $(LIBS) -o $@
+dlinsolx: $(DLINXEXM) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(DLINXEXM) $(LIBS) -lm -o $@
 
-superlu: $(SUPERLUEXM) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(SUPERLUEXM) $(LIBS) -o $@
+dlinsolx1: $(DLINXEXM1) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(DLINXEXM1) $(LIBS) -lm -o $@
 
-clinsol: $(CLINEXM) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(CLINEXM) $(LIBS) -o $@
+dlinsolx2: $(DLINXEXM2) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(DLINXEXM2) $(LIBS) -lm -o $@
 
-clinsol1: $(CLINEXM1) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(CLINEXM1) $(LIBS) -o $@
+superlu: $(SUPERLUEXM) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(SUPERLUEXM) $(LIBS) -lm -o $@
 
-clinsolx: $(CLINXEXM) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(CLINXEXM) $(LIBS) -o $@
+ditersol: $(DITSOL) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(DITSOL) $(LIBS) -lm -o $@
 
-clinsolx1: $(CLINXEXM1) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(CLINXEXM1) $(LIBS) -o $@
+ditersol1: $(DITSOL1) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(DITSOL1) $(LIBS) -lm -o $@
 
-clinsolx2: $(CLINXEXM2) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(CLINXEXM2) $(LIBS) -o $@
+clinsol: $(CLINEXM) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(CLINEXM) $(LIBS) -lm -o $@
 
-zlinsol: $(ZLINEXM) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(ZLINEXM) $(LIBS) -o $@
+clinsol1: $(CLINEXM1) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(CLINEXM1) $(LIBS) -lm -o $@
 
-zlinsol1: $(ZLINEXM1) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(ZLINEXM1) $(LIBS) -o $@
+clinsolx: $(CLINXEXM) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(CLINXEXM) $(LIBS) -lm -o $@
 
-zlinsolx: $(ZLINXEXM) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(ZLINXEXM) $(LIBS) -o $@
+clinsolx1: $(CLINXEXM1) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(CLINXEXM1) $(LIBS) -lm -o $@
 
-zlinsolx1: $(ZLINXEXM1) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(ZLINXEXM1) $(LIBS) -o $@
+clinsolx2: $(CLINXEXM2) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(CLINXEXM2) $(LIBS) -lm -o $@
 
-zlinsolx2: $(ZLINXEXM2) ../$(SUPERLULIB)
-	$(LOADER) $(LOADOPTS) $(ZLINXEXM2) $(LIBS) -o $@
+citersol: $(CITSOL) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(CITSOL) $(LIBS) -lm -o $@
+
+citersol1: $(CITSOL1) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(CITSOL1) $(LIBS) -lm -o $@
+
+zlinsol: $(ZLINEXM) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(ZLINEXM) $(LIBS) -lm -o $@
+
+zlinsol1: $(ZLINEXM1) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(ZLINEXM1) $(LIBS) -lm -o $@
+
+zlinsolx: $(ZLINXEXM) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(ZLINXEXM) $(LIBS) -lm -o $@
+
+zlinsolx1: $(ZLINXEXM1) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(ZLINXEXM1) $(LIBS) -lm -o $@
+
+zlinsolx2: $(ZLINXEXM2) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(ZLINXEXM2) $(LIBS) -lm -o $@
+
+zitersol: $(ZITSOL) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(ZITSOL) $(LIBS) -lm -o $@
+
+zitersol1: $(ZITSOL1) $(SUPERLULIB)
+	$(LOADER) $(LOADOPTS) $(ZITSOL1) $(LIBS) -lm -o $@
 
 .c.o:
-	$(CC) $(CFLAGS) -I$(HEADER) -c $< $(VERBOSE)
+	$(CC) $(CFLAGS) $(CDEFS) -I$(HEADER) -c $< $(VERBOSE)
 
 .f.o:
 	$(FORTRAN) $(FFLAGS) -c $< $(VERBOSE)
 
 clean:	
-	rm -f *.o *linsol *linsol1 *linsolx *linsolx1 *linsolx2 superlu
+	rm -f *.o *linsol *linsol1 *linsolx *linsolx1 *linsolx2 \
+	    superlu *itersol
+
+
+
diff --git a/EXAMPLE/README b/EXAMPLE/README
index 88d993b..1198b51 100644
--- a/EXAMPLE/README
+++ b/EXAMPLE/README
@@ -5,6 +5,7 @@ various functions provded in SuperLU. You can modify these
 examples to suit your applications.
 
 Here are the descriptions of the double precision examples:
+
     dlinsol : use simple driver DGSSV to solve a linear system one time.
     dlinsol1: use simple driver DGSSV in the symmetric mode.
     dlinsolx: use DGSSVX with the full (default) options to solve a
@@ -12,8 +13,19 @@ Here are the descriptions of the double precision examples:
     dlinsolx1: use DGSSVX to factorize A first, then solve the system later.
     dlinsolx2: use DGSSVX to solve systems repeatedly with the same sparsity
 	       pattern of matrix A.
+
     superlu  : the small 5x5 sample program in Section 2 of the Users' Guide.
 
+    ditersol: use GMRES with ILU preconditioner to solve a linear system.
+              ILU is computed from the equilibrated matrix, and the 
+              preconditioned GMRES is applied to the equilibrated system.
+              ( The ILU is computed by the routine SRC/dgsitrf.c, the driver	
+	        routine is SRC/dgsisx.c. )
+    ditersol1: use GMRES with ILU preconditioner to solve a linear system.
+              ILU is computed from the equilibrated matrix, but the 
+              preconditioned GMRES is applied to the original system.
+
+
 To compile all the examples, type:
 	% make
 
@@ -21,14 +33,19 @@ To run the small 5x5 sample program in Section 1 of the Users' Guide, type:
     	% superlu
 
 To run the real version examples, type:
-        % dlinsol < g10      (or, % slinsol < g10)
-        % dlinsolx < g10     (or, % slinsolx < g10)
-        % dlinsolx1 < g10    (or, % slinsolx1 < g10)
-        % dlinsolx2 < g10    (or, % slinsolx2 < g10)
+        % dlinsol < g20.rua      (or, % slinsol < g20.rua)
+        % dlinsolx  < g20.rua     (or, % slinsolx < g20.rua)
+        % dlinsolx1 < g20.rua    (or, % slinsolx1 < g20.rua)
+        % dlinsolx2 < g20.rua    (or, % slinsolx2 < g20.rua)
 
 To run the complex version examples, type:
-        % zlinsol < cmat      (or, % clinsol < cmat)
-        % zlinsolx < cmat     (or, % clinsolx < cmat)
-        % zlinsolx1 < cmat    (or, % clinsolx1 < cmat)
-        % zlinsolx2 < cmat    (or, % clinsolx2 < cmat)
+        % zlinsol < cg20.cua      (or, % clinsol < cg20.cua)
+        % zlinsolx < cg20.cua     (or, % clinsolx < cg20.cua)
+        % zlinsolx1 < cg20.cua    (or, % clinsolx1 < cg20.cua)
+        % zlinsolx2 < cg20.cua    (or, % clinsolx2 < cg20.cua)
 
+To run the ILU preconditioner example, type:
+        % ditersol -h < g20.rua
+	% ditersol1 -h < g20.rua
+        % zitersol -h < cg20.cua
+	% zitersol1 -h < cg20.cua
diff --git a/EXAMPLE/cfgmr.c b/EXAMPLE/cfgmr.c
new file mode 100644
index 0000000..95ffe3a
--- /dev/null
+++ b/EXAMPLE/cfgmr.c
@@ -0,0 +1,334 @@
+
+/*! @file cfgmr.c
+ * \brief flexible GMRES from ITSOL developed by Yousef Saad.
+ */
+
+/* ITSOL COPYRIGHT
+
+Copyright (C) 2006, the University of Minnesota 
+
+ITSOL is free software; you can redistribute it and/or modify it under
+the terms of  the GNU General Public License as  published by the Free
+Software Foundation [version 2 of  the License, or any later version]
+For details, see 
+
+http://www.gnu.org/copyleft/gpl.html
+
+A copy of the GNU licencing agreement is attached to the ITSOL package
+in the file GNU.  For additional information contact the Free Software
+Foundation Inc., 65 Mass Ave, Cambridge, MA 02139, USA.
+
+DISCLAIMER
+----------
+
+This program  is distributed in the  hope that it will  be useful, but
+WITHOUT   ANY  WARRANTY;   without  even   the  implied   warranty  of
+MERCHANTABILITY  or FITNESS  FOR A  PARTICULAR PURPOSE.   See  the GNU
+General Public License for more details. 
+
+For information on ITSOL contact saad at cs.umn.edu
+*/
+
+#include "slu_cdefs.h"
+
+#define  epsmac  1.0e-16
+
+extern void cdotc_(complex *, int *, complex [], int *, complex [], int *);
+extern float scnrm2_(int *, complex [], int *);
+
+
+int cfgmr(int n,
+     void (*cmatvec) (complex, complex[], complex, complex[]),
+     void (*cpsolve) (int, complex[], complex[]),
+     complex *rhs, complex *sol, double tol, int im, int *itmax, FILE * fits)
+{
+/*----------------------------------------------------------------------
+|                 *** Preconditioned FGMRES ***
++-----------------------------------------------------------------------
+| This is a simple version of the ARMS preconditioned FGMRES algorithm.
++-----------------------------------------------------------------------
+| Y. S. Dec. 2000. -- Apr. 2008
++-----------------------------------------------------------------------
+| on entry:
+|----------
+|
+| rhs     = real vector of length n containing the right hand side.
+| sol     = real vector of length n containing an initial guess to the
+|           solution on input.
+| tol     = tolerance for stopping iteration
+| im      = Krylov subspace dimension
+| (itmax) = max number of iterations allowed.
+| fits    = NULL: no output
+|        != NULL: file handle to output " resid vs time and its"
+|
+| on return:
+|----------
+| fgmr      int =  0 --> successful return.
+|           int =  1 --> convergence not achieved in itmax iterations.
+| sol     = contains an approximate solution (upon successful return).
+| itmax   = has changed. It now contains the number of steps required
+|           to converge --
++-----------------------------------------------------------------------
+| internal work arrays:
+|----------
+| vv      = work array of length [im+1][n] (used to store the Arnoldi
+|           basis)
+| hh      = work array of length [im][im+1] (Householder matrix)
+| z       = work array of length [im][n] to store preconditioned vectors
++-----------------------------------------------------------------------
+| subroutines called :
+| matvec - matrix-vector multiplication operation
+| psolve - (right) preconditionning operation
+|	   psolve can be a NULL pointer (GMRES without preconditioner)
++---------------------------------------------------------------------*/
+
+    int maxits = *itmax;
+    int i, i1, ii, j, k, k1, its, retval, i_1 = 1, i_2 = 2;
+    float beta, eps1 = 0.0, t, t0, gam;
+    complex **hh, *c, *s, *rs;
+    complex **vv, **z, tt;
+    complex zero = {0.0, 0.0};
+    complex one = {1.0, 0.0};
+    complex tt1, tt2;
+
+    its = 0;
+    vv = (complex **)SUPERLU_MALLOC((im + 1) * sizeof(complex *));
+    for (i = 0; i <= im; i++) vv[i] = complexMalloc(n);
+    z = (complex **)SUPERLU_MALLOC(im * sizeof(complex *));
+    hh = (complex **)SUPERLU_MALLOC(im * sizeof(complex *));
+    for (i = 0; i < im; i++)
+    {
+	hh[i] = complexMalloc(i + 2);
+	z[i] = complexMalloc(n);
+    }
+    c = complexMalloc(im);
+    s = complexMalloc(im);
+    rs = complexMalloc(im + 1);
+
+    /*---- outer loop starts here ----*/
+    do
+    {
+	/*---- compute initial residual vector ----*/
+	cmatvec(one, sol, zero, vv[0]);
+	for (j = 0; j < n; j++)
+	    c_sub(&vv[0][j], &rhs[j], &vv[0][j]);	/* vv[0]= initial residual */
+	beta = scnrm2_(&n, vv[0], &i_1);
+
+	/*---- print info if fits != null ----*/
+	if (fits != NULL && its == 0)
+	    fprintf(fits, "%8d   %10.2e\n", its, beta);
+	/*if ( beta <= tol * dnrm2_(&n, rhs, &i_1) )*/
+	if ( !(beta > tol * scnrm2_(&n, rhs, &i_1)) )
+	    break;
+	t = 1.0 / beta;
+
+	/*---- normalize: vv[0] = vv[0] / beta ----*/
+	for (j = 0; j < n; j++)
+	    cs_mult(&vv[0][j], &vv[0][j], t);
+	if (its == 0)
+	    eps1 = tol * beta;
+
+	/*---- initialize 1-st term of rhs of hessenberg system ----*/
+	rs[0].r = beta;
+	rs[0].i = 0.0;
+	for (i = 0; i < im; i++)
+	{
+	    its++;
+	    i1 = i + 1;
+
+	    /*------------------------------------------------------------
+	    |  (Right) Preconditioning Operation   z_{j} = M^{-1} v_{j}
+	    +-----------------------------------------------------------*/
+	    if (cpsolve)
+		cpsolve(n, z[i], vv[i]);
+	    else
+		ccopy_(&n, vv[i], &i_1, z[i], &i_1);
+
+	    /*---- matvec operation w = A z_{j} = A M^{-1} v_{j} ----*/
+	    cmatvec(one, z[i], zero, vv[i1]);
+
+	    /*------------------------------------------------------------
+	    |     modified gram - schmidt...
+	    |     h_{i,j} = (w,v_{i})
+	    |     w  = w - h_{i,j} v_{i}
+	    +------------------------------------------------------------*/
+	    t0 = scnrm2_(&n, vv[i1], &i_1);
+	    for (j = 0; j <= i; j++)
+	    {
+		complex negt;
+#if 0
+		cdotc_(&tt, &n, vv[j], &i_1, vv[i1], &i_1);
+#else
+		tt = zero;
+		for (k = 0; k < n; ++k) {
+		    cc_conj(&tt1, &vv[j][k]);
+		    cc_mult(&tt2, &tt1, &vv[i1][k]);
+		    c_add(&tt, &tt, &tt2);
+		}
+#endif
+		hh[i][j] = tt;
+		negt.r = -tt.r;
+		negt.i = -tt.i;
+		caxpy_(&n, &negt, vv[j], &i_1, vv[i1], &i_1);
+	    }
+
+	    /*---- h_{j+1,j} = ||w||_{2} ----*/
+	    t = scnrm2_(&n, vv[i1], &i_1);
+	    while (t < 0.5 * t0)
+	    {
+		t0 = t;
+		for (j = 0; j <= i; j++)
+		{
+		    complex negt;
+#if 0
+		    cdotc_(&tt, &n, vv[j], &i_1, vv[i1], &i_1);
+#else
+   	            tt = zero;
+		    for (k = 0; k < n; ++k) {
+		        cc_conj(&tt1, &vv[j][k]);
+		        cc_mult(&tt2, &tt1, &vv[i1][k]);
+		        c_add(&tt, &tt, &tt2);
+		    }
+#endif
+		    c_add(&hh[i][j], &hh[i][j], &tt);
+		    negt.r = -tt.r;
+		    negt.i = -tt.i;
+		    caxpy_(&n, &negt, vv[j], &i_1, vv[i1], &i_1);
+		}
+		t = scnrm2_(&n, vv[i1], &i_1);
+	    }
+
+	    hh[i][i1].r = t;
+	    hh[i][i1].i = 0.0;
+
+	    if (t != 0.0)
+	    {
+		/*---- v_{j+1} = w / h_{j+1,j} ----*/
+		t = 1.0 / t;
+		for (k = 0; k < n; k++)
+	            cs_mult(&vv[i1][k], &vv[i1][k], t);
+	    }
+	    /*---------------------------------------------------
+	    |     done with modified gram schimdt and arnoldi step
+	    |     now  update factorization of hh
+	    +--------------------------------------------------*/
+
+	    /*--------------------------------------------------------
+	    |   perform previous transformations  on i-th column of h
+	    +-------------------------------------------------------*/
+	    for (k = 1; k <= i; k++)
+	    {
+		k1 = k - 1;
+		tt = hh[i][k1];
+                cc_mult(&tt1, &c[k1], &tt);
+                cc_mult(&tt2, &s[k1], &hh[i][k]);
+                c_add(&hh[i][k1], &tt1, &tt2);
+
+                cc_mult(&tt1, &s[k1], &tt);
+                cc_mult(&tt2, &c[k1], &hh[i][k]);
+                c_sub(&hh[i][k], &tt2, &tt1);
+	    }
+
+	    gam = scnrm2_(&i_2, &hh[i][i], &i_1);
+
+	    /*---------------------------------------------------
+	    |     if gamma is zero then any small value will do
+	    |     affect only residual estimate
+	    +--------------------------------------------------*/
+	    /* if (gam == 0.0) gam = epsmac; */
+
+	    /*---- get next plane rotation ---*/
+	    if (gam == 0.0)
+	    {
+		c[i] = one;
+		s[i] = zero;
+	    }
+            else
+	    {
+                gam = 1.0 / gam;
+		cs_mult(&c[i], &hh[i][i], gam);
+		cs_mult(&s[i], &hh[i][i1], gam);
+	    }
+
+	    cc_mult(&rs[i1], &s[i], &rs[i]);
+            rs[i1].r = -rs[i1].r;  rs[i1].i = -rs[i1].i;
+	    cc_mult(&rs[i], &c[i], &rs[i]);
+
+	    /*----------------------------------------------------
+	    |   determine residual norm and test for convergence
+	    +---------------------------------------------------*/
+            cc_mult(&tt1, &c[i], &hh[i][i]);
+            cc_mult(&tt2, &s[i], &hh[i][i1]);
+            c_add(&hh[i][i], &tt1, &tt2);
+            beta = c_abs1(&rs[i1]);
+	    if (fits != NULL)
+		fprintf(fits, "%8d   %10.2e\n", its, beta);
+	    if (beta <= eps1 || its >= maxits)
+		break;
+	}
+
+	if (i == im) i--;
+
+	/*---- now compute solution. 1st, solve upper triangular system ----*/
+	c_div(&rs[i], &rs[i], &hh[i][i]);
+
+	for (ii = 1; ii <= i; ii++)
+	{
+	    k = i - ii;
+	    k1 = k + 1;
+	    tt = rs[k];
+	    for (j = k1; j <= i; j++) {
+                cc_mult(&tt1, &hh[j][k], &rs[j]);
+		c_sub(&tt, &tt, &tt1);
+            }
+            c_div(&rs[k], &tt, &hh[k][k]);
+	}
+
+	/*---- linear combination of v[i]'s to get sol. ----*/
+	for (j = 0; j <= i; j++)
+	{
+	    tt = rs[j];
+	    for (k = 0; k < n; k++) {
+                cc_mult(&tt1, &tt, &z[j][k]);
+		c_add(&sol[k], &sol[k], &tt1);
+            }
+	}
+
+	/* calculate the residual and output */
+	cmatvec(one, sol, zero, vv[0]);
+	for (j = 0; j < n; j++)
+	    c_sub(&vv[0][j], &rhs[j], &vv[0][j]);/* vv[0]= initial residual */
+
+	/*---- print info if fits != null ----*/
+	beta = scnrm2_(&n, vv[0], &i_1);
+
+	/*---- restart outer loop if needed ----*/
+	/*if (beta >= eps1 / tol)*/
+	if ( !(beta < eps1 / tol) )
+	{
+	    its = maxits + 10;
+	    break;
+	}
+	if (beta <= eps1)
+	    break;
+    } while(its < maxits);
+
+    retval = (its >= maxits);
+    for (i = 0; i <= im; i++)
+	SUPERLU_FREE(vv[i]);
+    SUPERLU_FREE(vv);
+    for (i = 0; i < im; i++)
+    {
+	SUPERLU_FREE(hh[i]);
+	SUPERLU_FREE(z[i]);
+    }
+    SUPERLU_FREE(hh);
+    SUPERLU_FREE(z);
+    SUPERLU_FREE(c);
+    SUPERLU_FREE(s);
+    SUPERLU_FREE(rs);
+
+    *itmax = its;
+
+    return retval;
+} /*----end of fgmr ----*/
diff --git a/EXAMPLE/cg20.cua b/EXAMPLE/cg20.cua
new file mode 100755
index 0000000..ea07dba
--- /dev/null
+++ b/EXAMPLE/cg20.cua
@@ -0,0 +1,918 @@
+complex g20, symm. permuted by SYMMMD                                   sym     
+           914            26           120           768             0
+CUA                      400           400          1920             0
+(16I5)          (16I5)          (5E15.8)            (5E15.8)            
+    1    6   11   16   21   26   31   36   41   46   51   56   61   66   71   76
+   81   86   91   96  101  106  111  116  121  126  131  136  141  146  151  156
+  161  166  171  176  181  186  191  196  201  206  210  214  218  223  228  231
+  235  239  243  248  253  257  262  266  271  276  281  286  291  295  300  304
+  309  313  318  323  328  332  337  342  347  352  357  362  367  372  377  382
+  387  392  397  402  407  412  417  422  427  432  437  442  447  452  457  462
+  467  472  477  482  487  492  497  501  505  510  514  519  524  529  534  539
+  544  549  554  559  564  568  572  576  580  583  588  593  597  601  606  610
+  614  619  624  629  634  639  644  649  654  659  664  669  674  678  682  686
+  691  696  701  706  710  714  718  723  728  732  737  742  747  752  757  762
+  767  772  777  781  786  791  796  800  805  810  815  820  825  830  835  839
+  844  849  854  859  864  869  874  879  884  889  894  899  904  909  914  919
+  923  928  932  937  941  946  951  956  961  966  971  976  981  986  991  996
+ 1001 1006 1011 1015 1020 1024 1029 1033 1038 1043 1048 1053 1058 1063 1068 1073
+ 1078 1083 1088 1093 1098 1103 1108 1113 1117 1122 1126 1130 1133 1138 1142 1147
+ 1152 1156 1161 1165 1170 1174 1179 1183 1188 1193 1198 1203 1208 1212 1217 1221
+ 1226 1230 1235 1240 1245 1249 1254 1259 1264 1269 1274 1279 1284 1288 1293 1298
+ 1303 1308 1313 1317 1322 1327 1332 1337 1342 1347 1352 1357 1362 1367 1372 1377
+ 1382 1387 1392 1397 1402 1407 1412 1417 1422 1427 1432 1437 1442 1446 1451 1455
+ 1459 1464 1468 1472 1477 1482 1487 1492 1497 1501 1506 1510 1515 1519 1522 1526
+ 1530 1535 1539 1544 1549 1554 1559 1563 1568 1573 1578 1583 1587 1592 1596 1601
+ 1605 1610 1615 1620 1625 1630 1635 1640 1645 1650 1655 1660 1665 1670 1674 1679
+ 1684 1689 1694 1699 1704 1709 1714 1719 1724 1729 1734 1738 1743 1748 1753 1758
+ 1763 1768 1773 1778 1783 1788 1792 1797 1802 1807 1811 1816 1821 1826 1831 1836
+ 1841 1846 1851 1856 1861 1866 1871 1876 1881 1886 1891 1896 1901 1906 1911 1916
+ 1921
+    1    9   32  391  395    2    9  392  395  400    3    8  389  393  394    4
+    8    9  392  394    5    7    8  381  389    6    7    8    9   32    5    6
+    7   33  382    3    4    5    6    8    1    2    4    6    9   10   31  396
+  398  399   11   18   29   30   31   12   18   31  397  399   13   17  386  387
+  388   14   17   18   30  387   15   17  383  388  390   16   17   18  390  397
+   13   14   15   16   17   11   12   14   16   18   19   28   33  380  382   20
+   22   28   29   33   21   22   29   31  398   20   21   22   32  391   23   27
+  379  384  385   24   27   28  379  380   25   27   30  385  387   26   27   28
+   29   30   23   24   25   26   27   19   20   24   26   28   11   20   21   26
+   29   11   14   25   26   30   10   11   12   21   31    1    6   22   32   33
+    7   19   20   32   33   34   74   92  370  372   35   40   70  174  176   36
+   40   91  174  177   37   39   40   70   71   38   39   40   90   91   37   38
+   39   74   92   35   36   37   38   40   41   56   70   71   73   42   44   55
+   56   43   44  175  176   42   43   44   45   44   45   56   70  176   46   54
+   55   56   73   47   49   53   48   49   54   55   47   48   49   52   50   51
+   53   69   50   51   52   68   72   49   51   52   53   54   47   50   52   53
+   46   48   52   54   72   42   46   48   55   41   42   45   46   56   57   59
+   67   68   72   58   59   67   74  372   57   58   59   71   73   60   66   67
+  372  373   61   62   65   69   61   62   66   67   68   63   64   65  374   63
+   64   66  371  373   61   63   65   66   60   62   64   65   66   57   58   60
+   62   67   51   57   62   68   69   50   61   68   69   35   37   41   45   70
+   37   41   59   71   74   51   54   57   72   73   41   46   59   72   73   34
+   39   58   71   74   75   89  369  381  389   76   78   92  370  375   77   78
+   89  369  375   76   77   78   88   90   79   87   91  177  178   80   87   88
+   90   91   81   86   87  173  178   82   86  173  379  380   83   85   86   87
+   88   84   85   86  380  382   83   84   85   89  381   81   82   83   84   86
+   79   80   81   83   87   78   80   83   88   89   75   77   85   88   89   38
+   78   80   90   92   36   38   79   80   91   34   39   76   90   92   93  172
+  385  386  387   94   98  168  169  170   95   98  169  172  386   96   98  109
+  170  171   97   98  109  386  388   94   95   96   97   98   99  108  377  383
+  390  100  108  376  377  378  101  107  109  167  171  102  107  109  383  388
+  103  106  107  167  104  106  108  378  105  106  107  108  383  103  104  105
+  106  101  102  103  105  107   99  100  104  105  108   96   97  101  102  109
+  110  166  173  379  384  111  132  138  162  164  112  132  138  168  169  113
+  131  132  163  164  114  130  131  132  168  115  129  130  168  170  116  123
+  128  129  130  117  121  123  128  118  120  131  163  119  120  121  123  118
+  119  120  122  117  119  121  120  122  123  130  131  116  117  119  122  123
+  124  127  128  129  125  127  167  171  126  127  129  170  171  124  125  126
+  127  116  117  124  128  115  116  124  126  129  114  115  116  122  130  113
+  114  118  122  131  111  112  113  114  132  133  137  138  162  165  134  137
+  165  166  384  135  137  138  169  172  136  137  172  384  385  133  134  135
+  136  137  111  112  133  135  138  139  145  174  175  176  140  145  161  174
+  177  141  143  145  175  142  143  153  160  141  142  143  144  143  144  145
+  160  161  139  140  141  144  145  146  152  153  159  160  147  152  159  162
+  165  148  150  152  153  149  150  163  164  148  149  150  151  150  151  152
+  162  164  146  147  148  151  152  142  146  148  153  154  158  159  160  161
+  155  158  161  177  178  156  158  159  165  166  157  158  166  173  178  154
+  155  156  157  158  146  147  154  156  159  142  144  146  154  160  140  144
+  154  155  161  111  133  147  151  162  113  118  149  163  111  113  149  151
+  164  133  134  147  156  165  110  134  156  157  166  101  103  125  167   94
+  112  114  115  168   94   95  112  135  169   94   96  115  126  170   96  101
+  125  126  171   93   95  135  136  172   81   82  110  157  173   35   36  139
+  140  174   43  139  141  175   35   43   45  139  176   36   79  140  155  177
+   79   81  155  157  178  179  183  201  369  375  180  183  200  201  274  181
+  183  369  389  393  182  183  272  274  393  179  180  181  182  183  184  188
+  370  372  373  185  188  199  371  373  186  188  201  370  375  187  188  199
+  200  201  184  185  186  187  188  189  198  200  274  277  190  198  273  276
+  277  191  197  198  199  200  192  193  196  374  192  193  197  199  371  194
+  195  196  275  194  195  197  198  276  192  194  196  197  191  193  195  196
+  197  189  190  191  195  198  185  187  191  193  199  180  187  189  191  200
+  179  180  186  187  201  202  271  272  393  394  203  207  272  274  277  204
+  207  218  273  277  205  207  267  271  272  206  207  218  266  267  203  204
+  205  206  207  208  217  218  266  268  209  217  265  268  270  210  216  217
+  218  273  211  212  215  275  211  212  216  273  276  213  214  215  269  213
+  214  216  217  270  211  213  215  216  210  212  214  215  216  208  209  210
+  214  217  204  206  208  210  218  219  223  271  392  394  220  223  229  267
+  271  221  223  365  392  400  222  223  229  365  366  219  220  221  222  223
+  224  228  229  266  267  225  228  263  266  268  226  228  229  264  366  227
+  228  262  263  264  224  225  226  227  228  220  222  224  226  229  230  249
+  263  265  268  231  239  248  249  265  232  233  238  269  232  233  239  265
+  270  234  236  237  238  235  236  237  247  234  235  236  234  235  237  239
+  248  232  234  238  239  231  233  237  238  239  240  246  249  262  263  241
+  242  245  247  241  242  246  248  249  243  244  245  261  243  244  246  260
+  262  241  243  245  246  240  242  244  245  246  235  241  247  248  231  237
+  242  247  248  230  231  240  242  249  250  259  264  364  366  251  259  260
+  262  264  252  258  259  364  367  253  254  257  261  253  254  258  259  260
+  255  256  257  363  255  256  258  367  368  253  255  257  258  252  254  256
+  257  258  250  251  252  254  259  244  251  254  260  261  243  253  260  261
+  227  240  244  251  262  225  227  230  240  263  226  227  250  251  264  209
+  230  231  233  265  206  208  224  225  266  205  206  220  224  267  208  209
+  225  230  268  213  232  269  270  209  214  233  269  270  202  205  219  220
+  271  182  202  203  205  272  190  204  210  212  273  180  182  189  203  274
+  194  211  275  276  190  195  212  275  276  189  190  203  204  277  278  283
+  289  395  400  279  283  289  361  362  280  282  283  391  395  281  282  283
+  359  361  280  281  282  396  398  278  279  280  281  283  284  288  289  365
+  400  285  288  364  365  366  286  288  289  360  362  287  288  360  364  367
+  284  285  286  287  288  278  279  284  286  289  290  292  298  396  399  291
+  292  298  355  357  290  291  292  358  359  293  297  377  390  397  294  297
+  298  397  399  295  297  356  376  377  296  297  298  355  356  293  294  295
+  296  297  290  291  294  296  298  299  328  351  355  357  300  308  328  355
+  356  301  307  326  327  302  307  308  326  328  303  306  376  378  304  306
+  307  308  305  306  308  356  376  303  304  305  306  301  302  304  307  300
+  302  304  305  308  309  311  326  328  351  310  311  324  326  327  309  310
+  311  325  353  312  323  325  352  353  313  314  322  350  313  314  323  352
+  354  315  316  320  322  315  316  321  323  325  317  319  324  327  318  319
+  320  317  318  319  321  315  318  320  321  316  319  320  321  324  313  315
+  322  323  312  314  316  322  323  310  317  321  324  325  311  312  316  324
+  325  301  302  309  310  326  301  310  317  327  299  300  302  309  328  329
+  338  349  360  362  330  338  360  367  368  331  337  338  348  349  332  333
+  336  363  332  333  337  338  368  334  335  336  350  334  335  337  348  354
+  332  334  336  337  331  333  335  336  337  329  330  331  333  338  339  347
+  358  359  361  340  347  349  361  362  341  346  347  348  349  342  346  348
+  352  354  343  345  346  347  358  344  345  346  352  353  343  344  345  351
+  357  341  342  343  344  346  339  340  341  343  347  331  335  341  342  348
+  329  331  340  341  349  313  334  350  354  299  309  345  351  353  312  314
+  342  344  352  311  312  344  351  353  314  335  342  350  354  291  296  299
+  300  355  295  296  300  305  356  291  299  345  357  358  292  339  343  357
+  358  281  292  339  359  396  286  287  329  330  360  279  281  339  340  361
+  279  286  329  340  362  255  332  363  368  250  252  285  287  364  221  222
+  284  285  365  222  226  250  285  366  252  256  287  330  367  256  330  333
+  363  368   75   77  179  181  369   34   76  184  186  370   64  185  193  371
+  374   34   58   60  184  372   60   64  184  185  373   63  192  371  374   76
+   77  179  186  375  100  295  303  305  376   99  100  293  295  377  100  104
+  303  378   23   24   82  110  379   19   24   82   84  380    5   75   85  381
+  382    7   19   84  381  382   15   99  102  105  383   23  110  134  136  384
+   23   25   93  136  385   13   93   95   97  386   13   14   25   93  387   13
+   15   97  102  388    3    5   75  181  389   15   16   99  293  390    1   22
+  280  391  398    2    4  219  221  392    3  181  182  202  393    3    4  202
+  219  394    1    2  278  280  395   10  282  290  359  396   12   16  293  294
+  397   10   21  282  391  398   10   12  290  294  399    2  221  278  284  400
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+ 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00 4.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
+-1.00000000E+00 1.00000000E+00-1.00000000E+00 1.00000000E+00-1.00000000E+00
+ 1.00000000E+00-1.00000000E+00 1.00000000E+00 4.00000000E+00 1.00000000E+00
diff --git a/EXAMPLE/citersol.c b/EXAMPLE/citersol.c
new file mode 100644
index 0000000..07d6fee
--- /dev/null
+++ b/EXAMPLE/citersol.c
@@ -0,0 +1,372 @@
+
+/*! @file citersol.c
+ * \brief Example #1 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.2) --
+ * Lawrence Berkeley National Laboratory
+ * November, 2010
+ * August, 2011
+ *
+ * This example shows that ILU is computed from the equilibrated matrix,
+ * and the preconditioned GMRES is applied to the equilibrated system.
+ * The driver routine CGSISX is called twice to perform factorization
+ * and apply preconditioner separately.
+ * 
+ * Note that CGSISX performs the following factorization:
+ *     Pr*Dr*A*Dc*Pc^T ~= LU
+ * with Pr being obtained from MC64 statically then partial pivoting
+ * dybamically. On return, A is overwritten as A1 = Dr*A*Dc.
+ *
+ * We can solve the transformed system, A1*y = Dr*B, using FGMRES.
+ * B is first overwritten as Dr*B.
+ * Then GMRES step requires requires 2 procedures:
+ *   1) Apply preconditioner M^{-1} = Pc^T*U^{-1}*L^{-1}*Pr
+ *   2) Matrix-vector multiplication: w = A1*v
+ * 
+ * </pre>
+ */
+
+#include "slu_cdefs.h"
+
+superlu_options_t *GLOBAL_OPTIONS;
+float *GLOBAL_R, *GLOBAL_C;
+int *GLOBAL_PERM_C, *GLOBAL_PERM_R;
+SuperMatrix *GLOBAL_A, *GLOBAL_L, *GLOBAL_U;
+SuperLUStat_t *GLOBAL_STAT;
+mem_usage_t   *GLOBAL_MEM_USAGE;
+
+void cpsolve(int n,
+                  complex x[], /* solution */
+                  complex y[]  /* right-hand side */
+)
+{
+    SuperMatrix *A = GLOBAL_A, *L = GLOBAL_L, *U = GLOBAL_U;
+    SuperLUStat_t *stat = GLOBAL_STAT;
+    int *perm_c = GLOBAL_PERM_C, *perm_r = GLOBAL_PERM_R;
+    char equed[1] = {'N'};
+    float *R = GLOBAL_R, *C = GLOBAL_C;
+    superlu_options_t *options = GLOBAL_OPTIONS;
+    mem_usage_t  *mem_usage = GLOBAL_MEM_USAGE;
+    int info;
+    static DNformat X, Y;
+    static SuperMatrix XX = {SLU_DN, SLU_C, SLU_GE, 1, 1, &X};
+    static SuperMatrix YY = {SLU_DN, SLU_C, SLU_GE, 1, 1, &Y};
+    float rpg, rcond;
+
+    XX.nrow = YY.nrow = n;
+    X.lda = Y.lda = n;
+    X.nzval = x;
+    Y.nzval = y;
+
+#if 0
+    dcopy_(&n, y, &i_1, x, &i_1);
+    cgstrs(NOTRANS, L, U, perm_c, perm_r, &XX, stat, &info);
+#else
+    cgsisx(options, A, perm_c, perm_r, NULL, equed, R, C,
+	   L, U, NULL, 0, &YY, &XX, &rpg, &rcond, mem_usage, stat, &info);
+#endif
+}
+
+void cmatvec_mult(complex alpha, complex x[], complex beta, complex y[])
+{
+    SuperMatrix *A = GLOBAL_A;
+
+    sp_cgemv("N", alpha, A, x, 1, beta, y, 1);
+}
+
+int main(int argc, char *argv[])
+{
+    void cmatvec_mult(complex alpha, complex x[], complex beta, complex y[]);
+    void cpsolve(int n, complex x[], complex y[]);
+    extern int cfgmr( int n,
+	void (*matvec_mult)(complex, complex [], complex, complex []),
+	void (*psolve)(int n, complex [], complex[]),
+	complex *rhs, complex *sol, double tol, int restrt, int *itmax,
+	FILE *fits);
+    extern int cfill_diag(int n, NCformat *Astore);
+
+    char     equed[1] = {'B'};
+    yes_no_t equil;
+    trans_t  trans;
+    SuperMatrix A, L, U;
+    SuperMatrix B, X;
+    NCformat *Astore;
+    NCformat *Ustore;
+    SCformat *Lstore;
+    complex   *a;
+    int      *asub, *xa;
+    int      *etree;
+    int      *perm_c; /* column permutation vector */
+    int      *perm_r; /* row permutations from partial pivoting */
+    int      nrhs, ldx, lwork, info, m, n, nnz;
+    complex   *rhsb, *rhsx, *xact;
+    complex   *work = NULL;
+    float   *R, *C;
+    float   u, rpg, rcond;
+    complex zero = {0.0, 0.0};
+    complex one = {1.0, 0.0};
+    complex none = {-1.0, 0.0};
+    mem_usage_t   mem_usage;
+    superlu_options_t options;
+    SuperLUStat_t stat;
+
+    int restrt, iter, maxit, i;
+    double resid;
+    complex *x, *b;
+
+#ifdef DEBUG
+    extern int num_drop_L, num_drop_U;
+#endif
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Enter main()");
+#endif
+
+    /* Defaults */
+    lwork = 0;
+    nrhs  = 1;
+    trans = NOTRANS;
+
+    /* Set the default input options:
+	options.Fact = DOFACT;
+	options.Equil = YES;
+	options.ColPerm = COLAMD;
+	options.DiagPivotThresh = 0.1; //different from complete LU
+	options.Trans = NOTRANS;
+	options.IterRefine = NOREFINE;
+	options.SymmetricMode = NO;
+	options.PivotGrowth = NO;
+	options.ConditionNumber = NO;
+	options.PrintStat = YES;
+	options.RowPerm = LargeDiag;
+	options.ILU_DropTol = 1e-4;
+	options.ILU_FillTol = 1e-2;
+	options.ILU_FillFactor = 10.0;
+	options.ILU_DropRule = DROP_BASIC | DROP_AREA;
+	options.ILU_Norm = INF_NORM;
+	options.ILU_MILU = SILU;
+     */
+    ilu_set_default_options(&options);
+
+    /* Modify the defaults. */
+    options.PivotGrowth = YES;	  /* Compute reciprocal pivot growth */
+    options.ConditionNumber = YES;/* Compute reciprocal condition number */
+
+    if ( lwork > 0 ) {
+	work = SUPERLU_MALLOC(lwork);
+	if ( !work ) ABORT("Malloc fails for work[].");
+    }
+
+    /* Read matrix A from a file in Harwell-Boeing format.*/
+    if (argc < 2)
+    {
+	printf("Usage:\n%s [OPTION] < [INPUT] > [OUTPUT]\nOPTION:\n"
+		"-h -hb:\n\t[INPUT] is a Harwell-Boeing format matrix.\n"
+		"-r -rb:\n\t[INPUT] is a Rutherford-Boeing format matrix.\n"
+		"-t -triplet:\n\t[INPUT] is a triplet format matrix.\n",
+		argv[0]);
+	return 0;
+    }
+    else
+    {
+	switch (argv[1][1])
+	{
+	    case 'H':
+	    case 'h':
+		printf("Input a Harwell-Boeing format matrix:\n");
+		creadhb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'R':
+	    case 'r':
+		printf("Input a Rutherford-Boeing format matrix:\n");
+		creadrb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'T':
+	    case 't':
+		printf("Input a triplet format matrix:\n");
+		creadtriple(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    default:
+		printf("Unrecognized format.\n");
+		return 0;
+	}
+    }
+
+    cCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa,
+                                SLU_NC, SLU_C, SLU_GE);
+    Astore = A.Store;
+    cfill_diag(n, Astore);
+    printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+    fflush(stdout);
+
+    /* Generate the right-hand side */
+    if ( !(rhsb = complexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+    if ( !(rhsx = complexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsx[].");
+    cCreate_Dense_Matrix(&B, m, nrhs, rhsb, m, SLU_DN, SLU_C, SLU_GE);
+    cCreate_Dense_Matrix(&X, m, nrhs, rhsx, m, SLU_DN, SLU_C, SLU_GE);
+    xact = complexMalloc(n * nrhs);
+    ldx = n;
+    cGenXtrue(n, nrhs, xact, ldx);
+    cFillRHS(trans, nrhs, xact, ldx, &A, &B);
+
+    if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+    if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+    if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+    if ( !(R = (float *) SUPERLU_MALLOC(A.nrow * sizeof(float))) )
+	ABORT("SUPERLU_MALLOC fails for R[].");
+    if ( !(C = (float *) SUPERLU_MALLOC(A.ncol * sizeof(float))) )
+	ABORT("SUPERLU_MALLOC fails for C[].");
+
+    info = 0;
+#ifdef DEBUG
+    num_drop_L = 0;
+    num_drop_U = 0;
+#endif
+
+    /* Initialize the statistics variables. */
+    StatInit(&stat);
+
+    /* Compute the incomplete factorization and compute the condition number
+       and pivot growth using dgsisx. */
+    B.ncol = 0;  /* not to perform triangular solution */
+    cgsisx(&options, &A, perm_c, perm_r, etree, equed, R, C, &L, &U, work,
+	   lwork, &B, &X, &rpg, &rcond, &mem_usage, &stat, &info);
+
+    /* Set RHS for GMRES. */
+    if (!(b = complexMalloc(m))) ABORT("Malloc fails for b[].");
+    if (*equed == 'R' || *equed == 'B') {
+	for (i = 0; i < n; ++i) cs_mult(&b[i], &rhsb[i], R[i]);
+    } else {
+	for (i = 0; i < m; i++) b[i] = rhsb[i];
+    }
+
+    printf("cgsisx(): info %d, equed %c\n", info, equed[0]);
+    if (info > 0 || rcond < 1e-8 || rpg > 1e8)
+	printf("WARNING: This preconditioner might be unstable.\n");
+
+    if ( info == 0 || info == n+1 ) {
+	if ( options.PivotGrowth == YES )
+	    printf("Recip. pivot growth = %e\n", rpg);
+	if ( options.ConditionNumber == YES )
+	    printf("Recip. condition number = %e\n", rcond);
+    } else if ( info > 0 && lwork == -1 ) {
+	printf("** Estimated memory: %d bytes\n", info - n);
+    }
+
+    Lstore = (SCformat *) L.Store;
+    Ustore = (NCformat *) U.Store;
+    printf("n(A) = %d, nnz(A) = %d\n", n, Astore->nnz);
+    printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
+    printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
+    printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    printf("Fill ratio: nnz(F)/nnz(A) = %.3f\n",
+	    ((double)(Lstore->nnz) + (double)(Ustore->nnz) - (double)n)
+	    / (double)Astore->nnz);
+    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+    fflush(stdout);
+
+    /* Set the global variables. */
+    GLOBAL_A = &A;
+    GLOBAL_L = &L;
+    GLOBAL_U = &U;
+    GLOBAL_STAT = &stat;
+    GLOBAL_PERM_C = perm_c;
+    GLOBAL_PERM_R = perm_r;
+    GLOBAL_OPTIONS = &options;
+    GLOBAL_R = R;
+    GLOBAL_C = C;
+    GLOBAL_MEM_USAGE = &mem_usage;
+
+    /* Set the options to do solve-only. */
+    options.Fact = FACTORED;
+    options.PivotGrowth = NO;
+    options.ConditionNumber = NO;
+
+    /* Set the variables used by GMRES. */
+    restrt = SUPERLU_MIN(n / 3 + 1, 50);
+    maxit = 1000;
+    iter = maxit;
+    resid = 1e-8;
+    if (!(x = complexMalloc(n))) ABORT("Malloc fails for x[].");
+
+    if (info <= n + 1)
+    {
+	int i_1 = 1;
+	double maxferr = 0.0, nrmA, nrmB, res, t;
+        complex temp;
+	extern float scnrm2_(int *, complex [], int *);
+	extern void caxpy_(int *, complex *, complex [], int *, complex [], int *);
+
+	/* Initial guess */
+	for (i = 0; i < n; i++) x[i] = zero;
+
+	t = SuperLU_timer_();
+
+	/* Call GMRES */
+	cfgmr(n, cmatvec_mult, cpsolve, b, x, resid, restrt, &iter, stdout);
+
+	t = SuperLU_timer_() - t;
+
+	/* Output the result. */
+	nrmA = scnrm2_(&(Astore->nnz), (complex *)((DNformat *)A.Store)->nzval,
+		&i_1);
+	nrmB = scnrm2_(&m, b, &i_1);
+	sp_cgemv("N", none, &A, x, 1, one, b, 1);
+	res = scnrm2_(&m, b, &i_1);
+	resid = res / nrmB;
+	printf("||A||_F = %.1e, ||B||_2 = %.1e, ||B-A*X||_2 = %.1e, "
+		"relres = %.1e\n", nrmA, nrmB, res, resid);
+
+	if (iter >= maxit)
+	{
+	    if (resid >= 1.0) iter = -180;
+	    else if (resid > 1e-8) iter = -111;
+	}
+	printf("iteration: %d\nresidual: %.1e\nGMRES time: %.2f seconds.\n",
+		iter, resid, t);
+
+	/* Scale the solution back if equilibration was performed. */
+	if (*equed == 'C' || *equed == 'B') 
+	    for (i = 0; i < n; i++) cs_mult(&x[i], &x[i], C[i]);
+
+	for (i = 0; i < m; i++) {
+            c_sub(&temp, &x[i], &xact[i]);
+            maxferr = SUPERLU_MAX(maxferr, c_abs1(&temp));
+        }
+	printf("||X-X_true||_oo = %.1e\n", maxferr);
+    }
+#ifdef DEBUG
+    printf("%d entries in L and %d entries in U dropped.\n",
+	    num_drop_L, num_drop_U);
+#endif
+    fflush(stdout);
+
+    if ( options.PrintStat ) StatPrint(&stat);
+    StatFree(&stat);
+
+    SUPERLU_FREE (rhsb);
+    SUPERLU_FREE (rhsx);
+    SUPERLU_FREE (xact);
+    SUPERLU_FREE (etree);
+    SUPERLU_FREE (perm_r);
+    SUPERLU_FREE (perm_c);
+    SUPERLU_FREE (R);
+    SUPERLU_FREE (C);
+    Destroy_CompCol_Matrix(&A);
+    Destroy_SuperMatrix_Store(&B);
+    Destroy_SuperMatrix_Store(&X);
+    if ( lwork >= 0 ) {
+	Destroy_SuperNode_Matrix(&L);
+	Destroy_CompCol_Matrix(&U);
+    }
+    SUPERLU_FREE(b);
+    SUPERLU_FREE(x);
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Exit main()");
+#endif
+
+    return 0;
+}
diff --git a/EXAMPLE/citersol1 b/EXAMPLE/citersol1
new file mode 100755
index 0000000..436af00
Binary files /dev/null and b/EXAMPLE/citersol1 differ
diff --git a/EXAMPLE/citersol1.c b/EXAMPLE/citersol1.c
new file mode 100644
index 0000000..e44ea35
--- /dev/null
+++ b/EXAMPLE/citersol1.c
@@ -0,0 +1,381 @@
+
+/*! @file citersol1.c
+ * \brief Example #2 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.2) --
+ * Lawrence Berkeley National Laboratory
+ * November, 2010
+ * August, 2011
+ *
+ * This example shows that ILU is computed from the equilibrated matrix,
+ * but the preconditioned GMRES is applied to the original system.
+ * The driver routine CGSISX is called twice to perform factorization
+ * and apply preconditioner separately.
+ * 
+ * Note that CGSISX performs the following factorization:
+ *     Pr*Dr*A*Dc*Pc^T ~= LU
+ * with Pr being obtained from MC64 statically then partial pivoting
+ * dybamically. On return, A is overwritten as A1 = Dr*A*Dc.
+ *
+ * We need to save a copy of the original matrix A, then solve
+ * the original system, A*x = B, using FGMRES.
+ * Each GMRES step requires requires 2 procedures:
+ *   1) Apply preconditioner M^{-1} = Dc*Pc^T*U^{-1}*L^{-1}*Pr*Dr
+ *   2) Matrix-vector multiplication: w = A*v
+ *
+ * </pre>
+ */
+
+#include "slu_cdefs.h"
+
+char *GLOBAL_EQUED;
+superlu_options_t *GLOBAL_OPTIONS;
+float *GLOBAL_R, *GLOBAL_C;
+int *GLOBAL_PERM_C, *GLOBAL_PERM_R;
+SuperMatrix *GLOBAL_A, *GLOBAL_A_ORIG, *GLOBAL_L, *GLOBAL_U;
+SuperLUStat_t *GLOBAL_STAT;
+mem_usage_t   *GLOBAL_MEM_USAGE;
+
+void cpsolve(int n,
+                  complex x[], /* solution */
+                  complex y[]  /* right-hand side */
+)
+{
+    SuperMatrix *A = GLOBAL_A, *L = GLOBAL_L, *U = GLOBAL_U;
+    SuperLUStat_t *stat = GLOBAL_STAT;
+    int *perm_c = GLOBAL_PERM_C, *perm_r = GLOBAL_PERM_R;
+    char *equed = GLOBAL_EQUED;
+    float *R = GLOBAL_R, *C = GLOBAL_C;
+    superlu_options_t *options = GLOBAL_OPTIONS;
+    mem_usage_t  *mem_usage = GLOBAL_MEM_USAGE;
+    int info;
+    static DNformat X, Y;
+    static SuperMatrix XX = {SLU_DN, SLU_C, SLU_GE, 1, 1, &X};
+    static SuperMatrix YY = {SLU_DN, SLU_C, SLU_GE, 1, 1, &Y};
+    float rpg, rcond;
+
+    XX.nrow = YY.nrow = n;
+    X.lda = Y.lda = n;
+    X.nzval = x;
+    Y.nzval = y;
+
+#if 0
+    ccopy_(&n, y, &i_1, x, &i_1);
+    cgstrs(NOTRANS, L, U, perm_c, perm_r, &XX, stat, &info);
+#else
+    cgsisx(options, A, perm_c, perm_r, NULL, equed, R, C,
+	   L, U, NULL, 0, &YY, &XX, &rpg, &rcond, mem_usage, stat, &info);
+#endif
+}
+
+void cmatvec_mult(complex alpha, complex x[], complex beta, complex y[])
+{
+    SuperMatrix *A = GLOBAL_A_ORIG;
+
+    sp_cgemv("N", alpha, A, x, 1, beta, y, 1);
+}
+
+int main(int argc, char *argv[])
+{
+    void cmatvec_mult(complex alpha, complex x[], complex beta, complex y[]);
+    void cpsolve(int n, complex x[], complex y[]);
+    extern int cfgmr( int n,
+	void (*matvec_mult)(complex, complex [], complex, complex []),
+	void (*psolve)(int n, complex [], complex[]),
+	complex *rhs, complex *sol, double tol, int restrt, int *itmax,
+	FILE *fits);
+    extern int cfill_diag(int n, NCformat *Astore);
+
+    char     equed[1] = {'B'};
+    yes_no_t equil;
+    trans_t  trans;
+    SuperMatrix A, AA, L, U;
+    SuperMatrix B, X;
+    NCformat *Astore;
+    NCformat *Ustore;
+    SCformat *Lstore;
+    complex   *a, *a_orig;
+    int      *asub, *xa, *asub_orig, *xa_orig;
+    int      *etree;
+    int      *perm_c; /* column permutation vector */
+    int      *perm_r; /* row permutations from partial pivoting */
+    int      nrhs, ldx, lwork, info, m, n, nnz;
+    complex   *rhsb, *rhsx, *xact;
+    complex   *work = NULL;
+    float   *R, *C;
+    float   u, rpg, rcond;
+    complex zero = {0.0, 0.0};
+    complex one = {1.0, 0.0};
+    complex none = {-1.0, 0.0};
+    mem_usage_t   mem_usage;
+    superlu_options_t options;
+    SuperLUStat_t stat;
+
+    int restrt, iter, maxit, i;
+    double resid;
+    complex *x, *b;
+
+#ifdef DEBUG
+    extern int num_drop_L, num_drop_U;
+#endif
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Enter main()");
+#endif
+
+    /* Defaults */
+    lwork = 0;
+    nrhs  = 1;
+    trans = NOTRANS;
+
+    /* Set the default input options:
+	options.Fact = DOFACT;
+	options.Equil = YES;
+	options.ColPerm = COLAMD;
+	options.DiagPivotThresh = 0.1; //different from complete LU
+	options.Trans = NOTRANS;
+	options.IterRefine = NOREFINE;
+	options.SymmetricMode = NO;
+	options.PivotGrowth = NO;
+	options.ConditionNumber = NO;
+	options.PrintStat = YES;
+	options.RowPerm = LargeDiag;
+	options.ILU_DropTol = 1e-4;
+	options.ILU_FillTol = 1e-2;
+	options.ILU_FillFactor = 10.0;
+	options.ILU_DropRule = DROP_BASIC | DROP_AREA;
+	options.ILU_Norm = INF_NORM;
+	options.ILU_MILU = SILU;
+     */
+    ilu_set_default_options(&options);
+
+    /* Modify the defaults. */
+    options.PivotGrowth = YES;	  /* Compute reciprocal pivot growth */
+    options.ConditionNumber = YES;/* Compute reciprocal condition number */
+
+    if ( lwork > 0 ) {
+	work = SUPERLU_MALLOC(lwork);
+	if ( !work ) ABORT("Malloc fails for work[].");
+    }
+
+    /* Read matrix A from a file in Harwell-Boeing format.*/
+    if (argc < 2)
+    {
+	printf("Usage:\n%s [OPTION] < [INPUT] > [OUTPUT]\nOPTION:\n"
+		"-h -hb:\n\t[INPUT] is a Harwell-Boeing format matrix.\n"
+		"-r -rb:\n\t[INPUT] is a Rutherford-Boeing format matrix.\n"
+		"-t -triplet:\n\t[INPUT] is a triplet format matrix.\n",
+		argv[0]);
+	return 0;
+    }
+    else
+    {
+	switch (argv[1][1])
+	{
+	    case 'H':
+	    case 'h':
+		printf("Input a Harwell-Boeing format matrix:\n");
+		creadhb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'R':
+	    case 'r':
+		printf("Input a Rutherford-Boeing format matrix:\n");
+		creadrb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'T':
+	    case 't':
+		printf("Input a triplet format matrix:\n");
+		creadtriple(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    default:
+		printf("Unrecognized format.\n");
+		return 0;
+	}
+    }
+
+    cCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa,
+                                SLU_NC, SLU_C, SLU_GE);
+    Astore = A.Store;
+    cfill_diag(n, Astore);
+    printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+    fflush(stdout);
+
+    /* Make a copy of the original matrix. */
+    nnz = Astore->nnz;
+    a_orig = complexMalloc(nnz);
+    asub_orig = intMalloc(nnz);
+    xa_orig = intMalloc(n+1);
+    for (i = 0; i < nnz; ++i) {
+	a_orig[i] = ((complex *)Astore->nzval)[i];
+	asub_orig[i] = Astore->rowind[i];
+    }
+    for (i = 0; i <= n; ++i) xa_orig[i] = Astore->colptr[i];
+    cCreate_CompCol_Matrix(&AA, m, n, nnz, a_orig, asub_orig, xa_orig,
+			   SLU_NC, SLU_C, SLU_GE);
+    
+    /* Generate the right-hand side */
+    if ( !(rhsb = complexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+    if ( !(rhsx = complexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsx[].");
+    cCreate_Dense_Matrix(&B, m, nrhs, rhsb, m, SLU_DN, SLU_C, SLU_GE);
+    cCreate_Dense_Matrix(&X, m, nrhs, rhsx, m, SLU_DN, SLU_C, SLU_GE);
+    xact = complexMalloc(n * nrhs);
+    ldx = n;
+    cGenXtrue(n, nrhs, xact, ldx);
+    cFillRHS(trans, nrhs, xact, ldx, &A, &B);
+
+    if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+    if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+    if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+    if ( !(R = (float *) SUPERLU_MALLOC(A.nrow * sizeof(float))) )
+	ABORT("SUPERLU_MALLOC fails for R[].");
+    if ( !(C = (float *) SUPERLU_MALLOC(A.ncol * sizeof(float))) )
+	ABORT("SUPERLU_MALLOC fails for C[].");
+
+    info = 0;
+#ifdef DEBUG
+    num_drop_L = 0;
+    num_drop_U = 0;
+#endif
+
+    /* Initialize the statistics variables. */
+    StatInit(&stat);
+
+    /* Compute the incomplete factorization and compute the condition number
+       and pivot growth using dgsisx. */
+    B.ncol = 0;  /* not to perform triangular solution */
+    cgsisx(&options, &A, perm_c, perm_r, etree, equed, R, C, &L, &U, work,
+	   lwork, &B, &X, &rpg, &rcond, &mem_usage, &stat, &info);
+
+    /* Set RHS for GMRES. */
+    if (!(b = complexMalloc(m))) ABORT("Malloc fails for b[].");
+    for (i = 0; i < m; i++) b[i] = rhsb[i];
+
+    printf("cgsisx(): info %d, equed %c\n", info, equed[0]);
+    if (info > 0 || rcond < 1e-8 || rpg > 1e8)
+	printf("WARNING: This preconditioner might be unstable.\n");
+
+    if ( info == 0 || info == n+1 ) {
+	if ( options.PivotGrowth == YES )
+	    printf("Recip. pivot growth = %e\n", rpg);
+	if ( options.ConditionNumber == YES )
+	    printf("Recip. condition number = %e\n", rcond);
+    } else if ( info > 0 && lwork == -1 ) {
+	printf("** Estimated memory: %d bytes\n", info - n);
+    }
+
+    Lstore = (SCformat *) L.Store;
+    Ustore = (NCformat *) U.Store;
+    printf("n(A) = %d, nnz(A) = %d\n", n, Astore->nnz);
+    printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
+    printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
+    printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    printf("Fill ratio: nnz(F)/nnz(A) = %.3f\n",
+	    ((double)(Lstore->nnz) + (double)(Ustore->nnz) - (double)n)
+	    / (double)Astore->nnz);
+    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+    fflush(stdout);
+
+    /* Set the global variables. */
+    GLOBAL_A = &A;
+    GLOBAL_A_ORIG = &AA;
+    GLOBAL_L = &L;
+    GLOBAL_U = &U;
+    GLOBAL_STAT = &stat;
+    GLOBAL_PERM_C = perm_c;
+    GLOBAL_PERM_R = perm_r;
+    GLOBAL_OPTIONS = &options;
+    GLOBAL_EQUED = equed;
+    GLOBAL_R = R;
+    GLOBAL_C = C;
+    GLOBAL_MEM_USAGE = &mem_usage;
+
+    /* Set the options to do solve-only. */
+    options.Fact = FACTORED;
+    options.PivotGrowth = NO;
+    options.ConditionNumber = NO;
+
+    /* Set the variables used by GMRES. */
+    restrt = SUPERLU_MIN(n / 3 + 1, 50);
+    maxit = 1000;
+    iter = maxit;
+    resid = 1e-8;
+    if (!(x = complexMalloc(n))) ABORT("Malloc fails for x[].");
+
+    if (info <= n + 1)
+    {
+	int i_1 = 1;
+	double maxferr = 0.0, nrmA, nrmB, res, t;
+        complex temp;
+	extern float scnrm2_(int *, complex [], int *);
+	extern void caxpy_(int *, complex *, complex [], int *, complex [], int *);
+
+	/* Initial guess */
+	for (i = 0; i < n; i++) x[i] = zero;
+
+	t = SuperLU_timer_();
+
+	/* Call GMRES */
+	cfgmr(n, cmatvec_mult, cpsolve, b, x, resid, restrt, &iter, stdout);
+
+	t = SuperLU_timer_() - t;
+
+	/* Output the result. */
+	nrmA = scnrm2_(&(Astore->nnz), (complex *)((DNformat *)A.Store)->nzval,
+		&i_1);
+	nrmB = scnrm2_(&m, b, &i_1);
+	sp_cgemv("N", none, &AA, x, 1, one, b, 1); /* Original matrix */
+	res = scnrm2_(&m, b, &i_1);
+	resid = res / nrmB;
+	printf("||A||_F = %.1e, ||B||_2 = %.1e, ||B-A*X||_2 = %.1e, "
+		"relres = %.1e\n", nrmA, nrmB, res, resid);
+
+	if (iter >= maxit)
+	{
+	    if (resid >= 1.0) iter = -180;
+	    else if (resid > 1e-8) iter = -111;
+	}
+	printf("iteration: %d\nresidual: %.1e\nGMRES time: %.2f seconds.\n",
+		iter, resid, t);
+
+	for (i = 0; i < m; i++) {
+            c_sub(&temp, &x[i], &xact[i]);
+            maxferr = SUPERLU_MAX(maxferr, c_abs1(&temp));
+        }
+	printf("||X-X_true||_oo = %.1e\n", maxferr);
+    }
+#ifdef DEBUG
+    printf("%d entries in L and %d entries in U dropped.\n",
+	    num_drop_L, num_drop_U);
+#endif
+    fflush(stdout);
+
+    if ( options.PrintStat ) StatPrint(&stat);
+    StatFree(&stat);
+
+    SUPERLU_FREE (rhsb);
+    SUPERLU_FREE (rhsx);
+    SUPERLU_FREE (xact);
+    SUPERLU_FREE (etree);
+    SUPERLU_FREE (perm_r);
+    SUPERLU_FREE (perm_c);
+    SUPERLU_FREE (R);
+    SUPERLU_FREE (C);
+    Destroy_CompCol_Matrix(&A);
+    Destroy_CompCol_Matrix(&AA);
+    Destroy_SuperMatrix_Store(&B);
+    Destroy_SuperMatrix_Store(&X);
+    if ( lwork >= 0 ) {
+	Destroy_SuperNode_Matrix(&L);
+	Destroy_CompCol_Matrix(&U);
+    }
+    SUPERLU_FREE(b);
+    SUPERLU_FREE(x);
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Exit main()");
+#endif
+
+    return 0;
+}
diff --git a/EXAMPLE/clinsol.c b/EXAMPLE/clinsol.c
index 93e43c7..dc37c83 100644
--- a/EXAMPLE/clinsol.c
+++ b/EXAMPLE/clinsol.c
@@ -8,7 +8,7 @@
  */
 #include "slu_cdefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
     SuperMatrix A;
     NCformat *Astore;
@@ -81,19 +81,18 @@ main(int argc, char *argv[])
     	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
 	
 	cQuerySpace(&L, &U, &mem_usage);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	
     } else {
 	printf("cgssv() error returns INFO= %d\n", info);
 	if ( info <= n ) { /* factorization completes */
 	    cQuerySpace(&L, &U, &mem_usage);
-	    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		   mem_usage.expansions);
+	    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	}
     }
 
diff --git a/EXAMPLE/clinsol1.c b/EXAMPLE/clinsol1.c
index db765c3..a85bb10 100644
--- a/EXAMPLE/clinsol1.c
+++ b/EXAMPLE/clinsol1.c
@@ -8,7 +8,7 @@
  */
 #include "slu_cdefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
     SuperMatrix A;
     NCformat *Astore;
@@ -86,19 +86,18 @@ main(int argc, char *argv[])
     	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
 	
 	cQuerySpace(&L, &U, &mem_usage);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	
     } else {
 	printf("cgssv() error returns INFO= %d\n", info);
 	if ( info <= n ) { /* factorization completes */
 	    cQuerySpace(&L, &U, &mem_usage);
-	    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		   mem_usage.expansions);
+	    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	}
     }
 
diff --git a/EXAMPLE/clinsolx.c b/EXAMPLE/clinsolx.c
index 91147af..92dc9bb 100644
--- a/EXAMPLE/clinsolx.c
+++ b/EXAMPLE/clinsolx.c
@@ -1,14 +1,14 @@
 
 /*
- * -- SuperLU routine (version 3.0) --
+ * -- SuperLU routine (version 3.1) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * October 15, 2003
+ * August 1, 2008
  *
  */
 #include "slu_cdefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
     char           equed[1];
     yes_no_t       equil;
@@ -69,7 +69,7 @@ main(int argc, char *argv[])
     /* Add more functionalities that the defaults. */
     options.PivotGrowth = YES;    /* Compute reciprocal pivot growth */
     options.ConditionNumber = YES;/* Compute reciprocal condition number */
-    options.IterRefine = SINGLE;  /* Perform single-precision refinement */
+    options.IterRefine = SLU_SINGLE;  /* Perform single-precision refinement */
     
     if ( lwork > 0 ) {
 	work = SUPERLU_MALLOC(lwork);
@@ -139,9 +139,10 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
+
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	     
 	fflush(stdout);
 
@@ -165,9 +166,11 @@ main(int argc, char *argv[])
     Destroy_CompCol_Matrix(&A);
     Destroy_SuperMatrix_Store(&B);
     Destroy_SuperMatrix_Store(&X);
-    if ( lwork >= 0 ) {
+    if ( lwork == 0 ) {
         Destroy_SuperNode_Matrix(&L);
         Destroy_CompCol_Matrix(&U);
+    } else if ( lwork > 0 ) {
+        SUPERLU_FREE(work);
     }
 
 #if ( DEBUGlevel>=1 )
@@ -179,7 +182,7 @@ main(int argc, char *argv[])
 /*  
  * Parse command line inputs.
  */
-static void
+void
 parse_command_line(int argc, char *argv[], int *lwork,
                    float *u, yes_no_t *equil, trans_t *trans )
 {
diff --git a/EXAMPLE/clinsolx1.c b/EXAMPLE/clinsolx1.c
index a1953f7..4d995e2 100644
--- a/EXAMPLE/clinsolx1.c
+++ b/EXAMPLE/clinsolx1.c
@@ -8,7 +8,7 @@
  */
 #include "slu_cdefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
 /*
  * Purpose
@@ -135,9 +135,10 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
+
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	fflush(stdout);
 
     } else if ( info > 0 && lwork == -1 ) {
@@ -194,11 +195,14 @@ main(int argc, char *argv[])
     Destroy_CompCol_Matrix(&A);
     Destroy_SuperMatrix_Store(&B);
     Destroy_SuperMatrix_Store(&X);
-    if ( lwork >= 0 ) {
+    if ( lwork == 0 ) {
         Destroy_SuperNode_Matrix(&L);
         Destroy_CompCol_Matrix(&U);
+    } else if ( lwork > 0 ) {
+        SUPERLU_FREE(work);
     }
 
+
 #if ( DEBUGlevel>=1 )
     CHECK_MALLOC("Exit main()");
 #endif
@@ -207,7 +211,7 @@ main(int argc, char *argv[])
 /*  
  * Parse command line options to get relaxed snode size, panel size, etc.
  */
-static void
+void
 parse_command_line(int argc, char *argv[], int *lwork,
                    float *u, yes_no_t *equil, trans_t *trans )
 {
diff --git a/EXAMPLE/clinsolx2.c b/EXAMPLE/clinsolx2.c
index 4946e97..9327bbb 100644
--- a/EXAMPLE/clinsolx2.c
+++ b/EXAMPLE/clinsolx2.c
@@ -8,7 +8,7 @@
  */
 #include "slu_cdefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
 /*
  * Purpose
@@ -150,9 +150,10 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
+
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	if ( options.IterRefine ) {
             printf("Iterative Refinement:\n");
 	    printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
@@ -204,9 +205,8 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	if ( options.IterRefine ) {
             printf("Iterative Refinement:\n");
 	    printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
@@ -232,9 +232,11 @@ main(int argc, char *argv[])
     Destroy_CompCol_Matrix(&A1);
     Destroy_Dense_Matrix(&B1);
     Destroy_Dense_Matrix(&X);
-    if ( lwork >= 0 ) {
+    if ( lwork == 0 ) {
         Destroy_SuperNode_Matrix(&L);
         Destroy_CompCol_Matrix(&U);
+    } else if ( lwork > 0 ) {
+        SUPERLU_FREE(work);
     }
 
 #if ( DEBUGlevel>=1 )
@@ -245,7 +247,7 @@ main(int argc, char *argv[])
 /*  
  * Parse command line options to get relaxed snode size, panel size, etc.
  */
-static void
+void
 parse_command_line(int argc, char *argv[], int *lwork,
                    double *u, yes_no_t *equil, trans_t *trans )
 {
diff --git a/EXAMPLE/cmat b/EXAMPLE/cmat.cua
similarity index 100%
rename from EXAMPLE/cmat
rename to EXAMPLE/cmat.cua
diff --git a/EXAMPLE/dfgmr.c b/EXAMPLE/dfgmr.c
new file mode 100644
index 0000000..dd7adff
--- /dev/null
+++ b/EXAMPLE/dfgmr.c
@@ -0,0 +1,298 @@
+
+/*! @file dfgmr.c
+ * \brief flexible GMRES from ITSOL developed by Yousef Saad.
+ */
+
+/* ITSOL COPYRIGHT
+
+Copyright (C) 2006, the University of Minnesota 
+
+ITSOL is free software; you can redistribute it and/or modify it under
+the terms of  the GNU General Public License as  published by the Free
+Software Foundation [version 2 of  the License, or any later version]
+For details, see 
+
+http://www.gnu.org/copyleft/gpl.html
+
+A copy of the GNU licencing agreement is attached to the ITSOL package
+in the file GNU.  For additional information contact the Free Software
+Foundation Inc., 65 Mass Ave, Cambridge, MA 02139, USA.
+
+DISCLAIMER
+----------
+
+This program  is distributed in the  hope that it will  be useful, but
+WITHOUT   ANY  WARRANTY;   without  even   the  implied   warranty  of
+MERCHANTABILITY  or FITNESS  FOR A  PARTICULAR PURPOSE.   See  the GNU
+General Public License for more details. 
+
+For information on ITSOL contact saad at cs.umn.edu
+*/
+
+#include "slu_ddefs.h"
+
+#define  epsmac  1.0e-16
+
+extern double ddot_(int *, double [], int *, double [], int *);
+extern double dnrm2_(int *, double [], int *);
+
+
+int dfgmr(int n,
+     void (*dmatvec) (double, double[], double, double[]),
+     void (*dpsolve) (int, double[], double[]),
+     double *rhs, double *sol, double tol, int im, int *itmax, FILE * fits)
+{
+/*----------------------------------------------------------------------
+|                 *** Preconditioned FGMRES ***
++-----------------------------------------------------------------------
+| This is a simple version of the ARMS preconditioned FGMRES algorithm.
++-----------------------------------------------------------------------
+| Y. S. Dec. 2000. -- Apr. 2008
++-----------------------------------------------------------------------
+| on entry:
+|----------
+|
+| rhs     = real vector of length n containing the right hand side.
+| sol     = real vector of length n containing an initial guess to the
+|           solution on input.
+| tol     = tolerance for stopping iteration
+| im      = Krylov subspace dimension
+| (itmax) = max number of iterations allowed.
+| fits    = NULL: no output
+|        != NULL: file handle to output " resid vs time and its"
+|
+| on return:
+|----------
+| fgmr      int =  0 --> successful return.
+|           int =  1 --> convergence not achieved in itmax iterations.
+| sol     = contains an approximate solution (upon successful return).
+| itmax   = has changed. It now contains the number of steps required
+|           to converge --
++-----------------------------------------------------------------------
+| internal work arrays:
+|----------
+| vv      = work array of length [im+1][n] (used to store the Arnoldi
+|           basis)
+| hh      = work array of length [im][im+1] (Householder matrix)
+| z       = work array of length [im][n] to store preconditioned vectors
++-----------------------------------------------------------------------
+| subroutines called :
+| matvec - matrix-vector multiplication operation
+| psolve - (right) preconditionning operation
+|	   psolve can be a NULL pointer (GMRES without preconditioner)
++---------------------------------------------------------------------*/
+
+    int maxits = *itmax;
+    int i, i1, ii, j, k, k1, its, retval, i_1 = 1, i_2 = 2;
+    double beta, eps1 = 0.0, t, t0, gam;
+    double **hh, *c, *s, *rs;
+    double **vv, **z, tt;
+    double zero = 0.0;
+    double one = 1.0;
+
+    its = 0;
+    vv = (double **)SUPERLU_MALLOC((im + 1) * sizeof(double *));
+    for (i = 0; i <= im; i++) vv[i] = doubleMalloc(n);
+    z = (double **)SUPERLU_MALLOC(im * sizeof(double *));
+    hh = (double **)SUPERLU_MALLOC(im * sizeof(double *));
+    for (i = 0; i < im; i++)
+    {
+	hh[i] = doubleMalloc(i + 2);
+	z[i] = doubleMalloc(n);
+    }
+    c = doubleMalloc(im);
+    s = doubleMalloc(im);
+    rs = doubleMalloc(im + 1);
+
+    /*---- outer loop starts here ----*/
+    do
+    {
+	/*---- compute initial residual vector ----*/
+	dmatvec(one, sol, zero, vv[0]);
+	for (j = 0; j < n; j++)
+	    vv[0][j] = rhs[j] - vv[0][j];	/* vv[0]= initial residual */
+	beta = dnrm2_(&n, vv[0], &i_1);
+
+	/*---- print info if fits != null ----*/
+	if (fits != NULL && its == 0)
+	    fprintf(fits, "%8d   %10.2e\n", its, beta);
+	/*if ( beta <= tol * dnrm2_(&n, rhs, &i_1) )*/
+	if ( !(beta > tol * dnrm2_(&n, rhs, &i_1)) )
+	    break;
+	t = 1.0 / beta;
+
+	/*---- normalize: vv[0] = vv[0] / beta ----*/
+	for (j = 0; j < n; j++)
+	    vv[0][j] = vv[0][j] * t;
+	if (its == 0)
+	    eps1 = tol * beta;
+
+	/*---- initialize 1-st term of rhs of hessenberg system ----*/
+	rs[0] = beta;
+	for (i = 0; i < im; i++)
+	{
+	    its++;
+	    i1 = i + 1;
+
+	    /*------------------------------------------------------------
+	    |  (Right) Preconditioning Operation   z_{j} = M^{-1} v_{j}
+	    +-----------------------------------------------------------*/
+	    if (dpsolve)
+		dpsolve(n, z[i], vv[i]);
+	    else
+		dcopy_(&n, vv[i], &i_1, z[i], &i_1);
+
+	    /*---- matvec operation w = A z_{j} = A M^{-1} v_{j} ----*/
+	    dmatvec(one, z[i], zero, vv[i1]);
+
+	    /*------------------------------------------------------------
+	    |     modified gram - schmidt...
+	    |     h_{i,j} = (w,v_{i})
+	    |     w  = w - h_{i,j} v_{i}
+	    +------------------------------------------------------------*/
+	    t0 = dnrm2_(&n, vv[i1], &i_1);
+	    for (j = 0; j <= i; j++)
+	    {
+		double negt;
+		tt = ddot_(&n, vv[j], &i_1, vv[i1], &i_1);
+		hh[i][j] = tt;
+		negt = -tt;
+		daxpy_(&n, &negt, vv[j], &i_1, vv[i1], &i_1);
+	    }
+
+	    /*---- h_{j+1,j} = ||w||_{2} ----*/
+	    t = dnrm2_(&n, vv[i1], &i_1);
+	    while (t < 0.5 * t0)
+	    {
+		t0 = t;
+		for (j = 0; j <= i; j++)
+		{
+		    double negt;
+		    tt = ddot_(&n, vv[j], &i_1, vv[i1], &i_1);
+		    hh[i][j] += tt;
+		    negt = -tt;
+		    daxpy_(&n, &negt, vv[j], &i_1, vv[i1], &i_1);
+		}
+		t = dnrm2_(&n, vv[i1], &i_1);
+	    }
+
+	    hh[i][i1] = t;
+
+	    if (t != 0.0)
+	    {
+		/*---- v_{j+1} = w / h_{j+1,j} ----*/
+		t = 1.0 / t;
+		for (k = 0; k < n; k++)
+		    vv[i1][k] = vv[i1][k] * t;
+	    }
+	    /*---------------------------------------------------
+	    |     done with modified gram schimdt and arnoldi step
+	    |     now  update factorization of hh
+	    +--------------------------------------------------*/
+
+	    /*--------------------------------------------------------
+	    |   perform previous transformations  on i-th column of h
+	    +-------------------------------------------------------*/
+	    for (k = 1; k <= i; k++)
+	    {
+		k1 = k - 1;
+		tt = hh[i][k1];
+		hh[i][k1] = c[k1] * tt + s[k1] * hh[i][k];
+		hh[i][k] = -s[k1] * tt + c[k1] * hh[i][k];
+	    }
+
+	    gam = sqrt(pow(hh[i][i], 2) + pow(hh[i][i1], 2));
+
+	    /*---------------------------------------------------
+	    |     if gamma is zero then any small value will do
+	    |     affect only residual estimate
+	    +--------------------------------------------------*/
+	    /* if (gam == 0.0) gam = epsmac; */
+
+	    /*---- get next plane rotation ---*/
+	    if (gam == 0.0)
+	    {
+		c[i] = one;
+		s[i] = zero;
+	    }
+            else
+	    {
+		c[i] = hh[i][i] / gam;
+		s[i] = hh[i][i1] / gam;
+	    }
+
+	    rs[i1] = -s[i] * rs[i];
+	    rs[i] = c[i] * rs[i];
+
+	    /*----------------------------------------------------
+	    |   determine residual norm and test for convergence
+	    +---------------------------------------------------*/
+	    hh[i][i] = c[i] * hh[i][i] + s[i] * hh[i][i1];
+	    beta = fabs(rs[i1]);
+	    if (fits != NULL)
+		fprintf(fits, "%8d   %10.2e\n", its, beta);
+	    if (beta <= eps1 || its >= maxits)
+		break;
+	}
+
+	if (i == im) i--;
+
+	/*---- now compute solution. 1st, solve upper triangular system ----*/
+	rs[i] = rs[i] / hh[i][i];
+
+	for (ii = 1; ii <= i; ii++)
+	{
+	    k = i - ii;
+	    k1 = k + 1;
+	    tt = rs[k];
+	    for (j = k1; j <= i; j++)
+		tt = tt - hh[j][k] * rs[j];
+	    rs[k] = tt / hh[k][k];
+	}
+
+	/*---- linear combination of v[i]'s to get sol. ----*/
+	for (j = 0; j <= i; j++)
+	{
+	    tt = rs[j];
+	    for (k = 0; k < n; k++)
+		sol[k] += tt * z[j][k];
+	}
+
+	/* calculate the residual and output */
+	dmatvec(one, sol, zero, vv[0]);
+	for (j = 0; j < n; j++)
+	    vv[0][j] = rhs[j] - vv[0][j];	/* vv[0]= initial residual */
+
+	/*---- print info if fits != null ----*/
+	beta = dnrm2_(&n, vv[0], &i_1);
+
+	/*---- restart outer loop if needed ----*/
+	/*if (beta >= eps1 / tol)*/
+	if ( !(beta < eps1 / tol) )
+	{
+	    its = maxits + 10;
+	    break;
+	}
+	if (beta <= eps1)
+	    break;
+    } while(its < maxits);
+
+    retval = (its >= maxits);
+    for (i = 0; i <= im; i++)
+	SUPERLU_FREE(vv[i]);
+    SUPERLU_FREE(vv);
+    for (i = 0; i < im; i++)
+    {
+	SUPERLU_FREE(hh[i]);
+	SUPERLU_FREE(z[i]);
+    }
+    SUPERLU_FREE(hh);
+    SUPERLU_FREE(z);
+    SUPERLU_FREE(c);
+    SUPERLU_FREE(s);
+    SUPERLU_FREE(rs);
+
+    *itmax = its;
+
+    return retval;
+} /*----end of fgmr ----*/
diff --git a/EXAMPLE/ditersol.c b/EXAMPLE/ditersol.c
new file mode 100644
index 0000000..607a59d
--- /dev/null
+++ b/EXAMPLE/ditersol.c
@@ -0,0 +1,370 @@
+
+/*! @file ditersol.c
+ * \brief Example #1 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.2) --
+ * Lawrence Berkeley National Laboratory
+ * November, 2010
+ * August, 2011
+ *
+ * This example shows that ILU is computed from the equilibrated matrix,
+ * and the preconditioned GMRES is applied to the equilibrated system.
+ * The driver routine DGSISX is called twice to perform factorization
+ * and apply preconditioner separately.
+ * 
+ * Note that DGSISX performs the following factorization:
+ *     Pr*Dr*A*Dc*Pc^T ~= LU
+ * with Pr being obtained from MC64 statically then partial pivoting
+ * dybamically. On return, A is overwritten as A1 = Dr*A*Dc.
+ *
+ * We can solve the transformed system, A1*y = Dr*B, using FGMRES.
+ * B is first overwritten as Dr*B.
+ * Then GMRES step requires requires 2 procedures:
+ *   1) Apply preconditioner M^{-1} = Pc^T*U^{-1}*L^{-1}*Pr
+ *   2) Matrix-vector multiplication: w = A1*v
+ * 
+ * </pre>
+ */
+
+#include "slu_ddefs.h"
+
+superlu_options_t *GLOBAL_OPTIONS;
+double *GLOBAL_R, *GLOBAL_C;
+int *GLOBAL_PERM_C, *GLOBAL_PERM_R;
+SuperMatrix *GLOBAL_A, *GLOBAL_L, *GLOBAL_U;
+SuperLUStat_t *GLOBAL_STAT;
+mem_usage_t   *GLOBAL_MEM_USAGE;
+
+void dpsolve(int n,
+                  double x[], /* solution */
+                  double y[]  /* right-hand side */
+)
+{
+    SuperMatrix *A = GLOBAL_A, *L = GLOBAL_L, *U = GLOBAL_U;
+    SuperLUStat_t *stat = GLOBAL_STAT;
+    int *perm_c = GLOBAL_PERM_C, *perm_r = GLOBAL_PERM_R;
+    char equed[1] = {'N'};
+    double *R = GLOBAL_R, *C = GLOBAL_C;
+    superlu_options_t *options = GLOBAL_OPTIONS;
+    mem_usage_t  *mem_usage = GLOBAL_MEM_USAGE;
+    int info;
+    static DNformat X, Y;
+    static SuperMatrix XX = {SLU_DN, SLU_D, SLU_GE, 1, 1, &X};
+    static SuperMatrix YY = {SLU_DN, SLU_D, SLU_GE, 1, 1, &Y};
+    double rpg, rcond;
+
+    XX.nrow = YY.nrow = n;
+    X.lda = Y.lda = n;
+    X.nzval = x;
+    Y.nzval = y;
+
+#if 0
+    dcopy_(&n, y, &i_1, x, &i_1);
+    dgstrs(NOTRANS, L, U, perm_c, perm_r, &XX, stat, &info);
+#else
+    dgsisx(options, A, perm_c, perm_r, NULL, equed, R, C,
+	   L, U, NULL, 0, &YY, &XX, &rpg, &rcond, mem_usage, stat, &info);
+#endif
+}
+
+void dmatvec_mult(double alpha, double x[], double beta, double y[])
+{
+    SuperMatrix *A = GLOBAL_A;
+
+    sp_dgemv("N", alpha, A, x, 1, beta, y, 1);
+}
+
+int main(int argc, char *argv[])
+{
+    void dmatvec_mult(double alpha, double x[], double beta, double y[]);
+    void dpsolve(int n, double x[], double y[]);
+    extern int dfgmr( int n,
+	void (*matvec_mult)(double, double [], double, double []),
+	void (*psolve)(int n, double [], double[]),
+	double *rhs, double *sol, double tol, int restrt, int *itmax,
+	FILE *fits);
+    extern int dfill_diag(int n, NCformat *Astore);
+
+    char     equed[1] = {'B'};
+    yes_no_t equil;
+    trans_t  trans;
+    SuperMatrix A, L, U;
+    SuperMatrix B, X;
+    NCformat *Astore;
+    NCformat *Ustore;
+    SCformat *Lstore;
+    double   *a;
+    int      *asub, *xa;
+    int      *etree;
+    int      *perm_c; /* column permutation vector */
+    int      *perm_r; /* row permutations from partial pivoting */
+    int      nrhs, ldx, lwork, info, m, n, nnz;
+    double   *rhsb, *rhsx, *xact;
+    double   *work = NULL;
+    double   *R, *C;
+    double   u, rpg, rcond;
+    double zero = 0.0;
+    double one = 1.0;
+    mem_usage_t   mem_usage;
+    superlu_options_t options;
+    SuperLUStat_t stat;
+
+    int restrt, iter, maxit, i;
+    double resid;
+    double *x, *b;
+
+#ifdef DEBUG
+    extern int num_drop_L, num_drop_U;
+#endif
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Enter main()");
+#endif
+
+    /* Defaults */
+    lwork = 0;
+    nrhs  = 1;
+    trans = NOTRANS;
+
+    /* Set the default input options:
+	options.Fact = DOFACT;
+	options.Equil = YES;
+	options.ColPerm = COLAMD;
+	options.DiagPivotThresh = 0.1; //different from complete LU
+	options.Trans = NOTRANS;
+	options.IterRefine = NOREFINE;
+	options.SymmetricMode = NO;
+	options.PivotGrowth = NO;
+	options.ConditionNumber = NO;
+	options.PrintStat = YES;
+	options.RowPerm = LargeDiag;
+	options.ILU_DropTol = 1e-4;
+	options.ILU_FillTol = 1e-2;
+	options.ILU_FillFactor = 10.0;
+	options.ILU_DropRule = DROP_BASIC | DROP_AREA;
+	options.ILU_Norm = INF_NORM;
+	options.ILU_MILU = SILU;
+     */
+    ilu_set_default_options(&options);
+
+    /* Modify the defaults. */
+    options.PivotGrowth = YES;	  /* Compute reciprocal pivot growth */
+    options.ConditionNumber = YES;/* Compute reciprocal condition number */
+
+    if ( lwork > 0 ) {
+	work = SUPERLU_MALLOC(lwork);
+	if ( !work ) ABORT("Malloc fails for work[].");
+    }
+
+    /* Read matrix A from a file in Harwell-Boeing format.*/
+    if (argc < 2)
+    {
+	printf("Usage:\n%s [OPTION] < [INPUT] > [OUTPUT]\nOPTION:\n"
+		"-h -hb:\n\t[INPUT] is a Harwell-Boeing format matrix.\n"
+		"-r -rb:\n\t[INPUT] is a Rutherford-Boeing format matrix.\n"
+		"-t -triplet:\n\t[INPUT] is a triplet format matrix.\n",
+		argv[0]);
+	return 0;
+    }
+    else
+    {
+	switch (argv[1][1])
+	{
+	    case 'H':
+	    case 'h':
+		printf("Input a Harwell-Boeing format matrix:\n");
+		dreadhb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'R':
+	    case 'r':
+		printf("Input a Rutherford-Boeing format matrix:\n");
+		dreadrb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'T':
+	    case 't':
+		printf("Input a triplet format matrix:\n");
+		dreadtriple(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    default:
+		printf("Unrecognized format.\n");
+		return 0;
+	}
+    }
+
+    dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa,
+                                SLU_NC, SLU_D, SLU_GE);
+    Astore = A.Store;
+    dfill_diag(n, Astore);
+    printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+    fflush(stdout);
+
+    /* Generate the right-hand side */
+    if ( !(rhsb = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+    if ( !(rhsx = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsx[].");
+    dCreate_Dense_Matrix(&B, m, nrhs, rhsb, m, SLU_DN, SLU_D, SLU_GE);
+    dCreate_Dense_Matrix(&X, m, nrhs, rhsx, m, SLU_DN, SLU_D, SLU_GE);
+    xact = doubleMalloc(n * nrhs);
+    ldx = n;
+    dGenXtrue(n, nrhs, xact, ldx);
+    dFillRHS(trans, nrhs, xact, ldx, &A, &B);
+
+    if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+    if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+    if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+    if ( !(R = (double *) SUPERLU_MALLOC(A.nrow * sizeof(double))) )
+	ABORT("SUPERLU_MALLOC fails for R[].");
+    if ( !(C = (double *) SUPERLU_MALLOC(A.ncol * sizeof(double))) )
+	ABORT("SUPERLU_MALLOC fails for C[].");
+
+    info = 0;
+#ifdef DEBUG
+    num_drop_L = 0;
+    num_drop_U = 0;
+#endif
+
+    /* Initialize the statistics variables. */
+    StatInit(&stat);
+
+    /* Compute the incomplete factorization and compute the condition number
+       and pivot growth using dgsisx. */
+    B.ncol = 0;  /* not to perform triangular solution */
+    dgsisx(&options, &A, perm_c, perm_r, etree, equed, R, C, &L, &U, work,
+	   lwork, &B, &X, &rpg, &rcond, &mem_usage, &stat, &info);
+
+    /* Set RHS for GMRES. */
+    if (!(b = doubleMalloc(m))) ABORT("Malloc fails for b[].");
+    if (*equed == 'R' || *equed == 'B') {
+	for (i = 0; i < n; ++i) b[i] = rhsb[i] * R[i];
+    } else {
+	for (i = 0; i < m; i++) b[i] = rhsb[i];
+    }
+
+    printf("dgsisx(): info %d, equed %c\n", info, equed[0]);
+    if (info > 0 || rcond < 1e-8 || rpg > 1e8)
+	printf("WARNING: This preconditioner might be unstable.\n");
+
+    if ( info == 0 || info == n+1 ) {
+	if ( options.PivotGrowth == YES )
+	    printf("Recip. pivot growth = %e\n", rpg);
+	if ( options.ConditionNumber == YES )
+	    printf("Recip. condition number = %e\n", rcond);
+    } else if ( info > 0 && lwork == -1 ) {
+	printf("** Estimated memory: %d bytes\n", info - n);
+    }
+
+    Lstore = (SCformat *) L.Store;
+    Ustore = (NCformat *) U.Store;
+    printf("n(A) = %d, nnz(A) = %d\n", n, Astore->nnz);
+    printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
+    printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
+    printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    printf("Fill ratio: nnz(F)/nnz(A) = %.3f\n",
+	    ((double)(Lstore->nnz) + (double)(Ustore->nnz) - (double)n)
+	    / (double)Astore->nnz);
+    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+    fflush(stdout);
+
+    /* Set the global variables. */
+    GLOBAL_A = &A;
+    GLOBAL_L = &L;
+    GLOBAL_U = &U;
+    GLOBAL_STAT = &stat;
+    GLOBAL_PERM_C = perm_c;
+    GLOBAL_PERM_R = perm_r;
+    GLOBAL_OPTIONS = &options;
+    GLOBAL_R = R;
+    GLOBAL_C = C;
+    GLOBAL_MEM_USAGE = &mem_usage;
+
+    /* Set the options to do solve-only. */
+    options.Fact = FACTORED;
+    options.PivotGrowth = NO;
+    options.ConditionNumber = NO;
+
+    /* Set the variables used by GMRES. */
+    restrt = SUPERLU_MIN(n / 3 + 1, 50);
+    maxit = 1000;
+    iter = maxit;
+    resid = 1e-8;
+    if (!(x = doubleMalloc(n))) ABORT("Malloc fails for x[].");
+
+    if (info <= n + 1)
+    {
+	int i_1 = 1;
+	double maxferr = 0.0, nrmA, nrmB, res, t;
+        double temp;
+	extern double dnrm2_(int *, double [], int *);
+	extern void daxpy_(int *, double *, double [], int *, double [], int *);
+
+	/* Initial guess */
+	for (i = 0; i < n; i++) x[i] = zero;
+
+	t = SuperLU_timer_();
+
+	/* Call GMRES */
+	dfgmr(n, dmatvec_mult, dpsolve, b, x, resid, restrt, &iter, stdout);
+
+	t = SuperLU_timer_() - t;
+
+	/* Output the result. */
+	nrmA = dnrm2_(&(Astore->nnz), (double *)((DNformat *)A.Store)->nzval,
+		&i_1);
+	nrmB = dnrm2_(&m, b, &i_1);
+	sp_dgemv("N", -1.0, &A, x, 1, 1.0, b, 1);
+	res = dnrm2_(&m, b, &i_1);
+	resid = res / nrmB;
+	printf("||A||_F = %.1e, ||B||_2 = %.1e, ||B-A*X||_2 = %.1e, "
+		"relres = %.1e\n", nrmA, nrmB, res, resid);
+
+	if (iter >= maxit)
+	{
+	    if (resid >= 1.0) iter = -180;
+	    else if (resid > 1e-8) iter = -111;
+	}
+	printf("iteration: %d\nresidual: %.1e\nGMRES time: %.2f seconds.\n",
+		iter, resid, t);
+
+	/* Scale the solution back if equilibration was performed. */
+	if (*equed == 'C' || *equed == 'B') 
+	    for (i = 0; i < n; i++) x[i] *= C[i];
+
+	for (i = 0; i < m; i++) {
+	    maxferr = SUPERLU_MAX(maxferr, fabs(x[i] - xact[i]));
+        }
+	printf("||X-X_true||_oo = %.1e\n", maxferr);
+    }
+#ifdef DEBUG
+    printf("%d entries in L and %d entries in U dropped.\n",
+	    num_drop_L, num_drop_U);
+#endif
+    fflush(stdout);
+
+    if ( options.PrintStat ) StatPrint(&stat);
+    StatFree(&stat);
+
+    SUPERLU_FREE (rhsb);
+    SUPERLU_FREE (rhsx);
+    SUPERLU_FREE (xact);
+    SUPERLU_FREE (etree);
+    SUPERLU_FREE (perm_r);
+    SUPERLU_FREE (perm_c);
+    SUPERLU_FREE (R);
+    SUPERLU_FREE (C);
+    Destroy_CompCol_Matrix(&A);
+    Destroy_SuperMatrix_Store(&B);
+    Destroy_SuperMatrix_Store(&X);
+    if ( lwork >= 0 ) {
+	Destroy_SuperNode_Matrix(&L);
+	Destroy_CompCol_Matrix(&U);
+    }
+    SUPERLU_FREE(b);
+    SUPERLU_FREE(x);
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Exit main()");
+#endif
+
+    return 0;
+}
diff --git a/EXAMPLE/ditersol1 b/EXAMPLE/ditersol1
new file mode 100755
index 0000000..ac7c9b7
Binary files /dev/null and b/EXAMPLE/ditersol1 differ
diff --git a/EXAMPLE/ditersol1.c b/EXAMPLE/ditersol1.c
new file mode 100644
index 0000000..4cfe642
--- /dev/null
+++ b/EXAMPLE/ditersol1.c
@@ -0,0 +1,379 @@
+
+/*! @file ditersol1.c
+ * \brief Example #2 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.2) --
+ * Lawrence Berkeley National Laboratory
+ * November, 2010
+ * August, 2011
+ *
+ * This example shows that ILU is computed from the equilibrated matrix,
+ * but the preconditioned GMRES is applied to the original system.
+ * The driver routine DGSISX is called twice to perform factorization
+ * and apply preconditioner separately.
+ * 
+ * Note that DGSISX performs the following factorization:
+ *     Pr*Dr*A*Dc*Pc^T ~= LU
+ * with Pr being obtained from MC64 statically then partial pivoting
+ * dybamically. On return, A is overwritten as A1 = Dr*A*Dc.
+ *
+ * We need to save a copy of the original matrix A, then solve
+ * the original system, A*x = B, using FGMRES.
+ * Each GMRES step requires requires 2 procedures:
+ *   1) Apply preconditioner M^{-1} = Dc*Pc^T*U^{-1}*L^{-1}*Pr*Dr
+ *   2) Matrix-vector multiplication: w = A*v
+ *
+ * </pre>
+ */
+
+#include "slu_ddefs.h"
+
+char *GLOBAL_EQUED;
+superlu_options_t *GLOBAL_OPTIONS;
+double *GLOBAL_R, *GLOBAL_C;
+int *GLOBAL_PERM_C, *GLOBAL_PERM_R;
+SuperMatrix *GLOBAL_A, *GLOBAL_A_ORIG, *GLOBAL_L, *GLOBAL_U;
+SuperLUStat_t *GLOBAL_STAT;
+mem_usage_t   *GLOBAL_MEM_USAGE;
+
+void dpsolve(int n,
+                  double x[], /* solution */
+                  double y[]  /* right-hand side */
+)
+{
+    SuperMatrix *A = GLOBAL_A, *L = GLOBAL_L, *U = GLOBAL_U;
+    SuperLUStat_t *stat = GLOBAL_STAT;
+    int *perm_c = GLOBAL_PERM_C, *perm_r = GLOBAL_PERM_R;
+    char *equed = GLOBAL_EQUED;
+    double *R = GLOBAL_R, *C = GLOBAL_C;
+    superlu_options_t *options = GLOBAL_OPTIONS;
+    mem_usage_t  *mem_usage = GLOBAL_MEM_USAGE;
+    int info;
+    static DNformat X, Y;
+    static SuperMatrix XX = {SLU_DN, SLU_D, SLU_GE, 1, 1, &X};
+    static SuperMatrix YY = {SLU_DN, SLU_D, SLU_GE, 1, 1, &Y};
+    double rpg, rcond;
+
+    XX.nrow = YY.nrow = n;
+    X.lda = Y.lda = n;
+    X.nzval = x;
+    Y.nzval = y;
+
+#if 0
+    dcopy_(&n, y, &i_1, x, &i_1);
+    dgstrs(NOTRANS, L, U, perm_c, perm_r, &XX, stat, &info);
+#else
+    dgsisx(options, A, perm_c, perm_r, NULL, equed, R, C,
+	   L, U, NULL, 0, &YY, &XX, &rpg, &rcond, mem_usage, stat, &info);
+#endif
+}
+
+void dmatvec_mult(double alpha, double x[], double beta, double y[])
+{
+    SuperMatrix *A = GLOBAL_A_ORIG;
+
+    sp_dgemv("N", alpha, A, x, 1, beta, y, 1);
+}
+
+int main(int argc, char *argv[])
+{
+    void dmatvec_mult(double alpha, double x[], double beta, double y[]);
+    void dpsolve(int n, double x[], double y[]);
+    extern int dfgmr( int n,
+	void (*matvec_mult)(double, double [], double, double []),
+	void (*psolve)(int n, double [], double[]),
+	double *rhs, double *sol, double tol, int restrt, int *itmax,
+	FILE *fits);
+    extern int dfill_diag(int n, NCformat *Astore);
+
+    char     equed[1] = {'B'};
+    yes_no_t equil;
+    trans_t  trans;
+    SuperMatrix A, AA, L, U;
+    SuperMatrix B, X;
+    NCformat *Astore;
+    NCformat *Ustore;
+    SCformat *Lstore;
+    double   *a, *a_orig;
+    int      *asub, *xa, *asub_orig, *xa_orig;
+    int      *etree;
+    int      *perm_c; /* column permutation vector */
+    int      *perm_r; /* row permutations from partial pivoting */
+    int      nrhs, ldx, lwork, info, m, n, nnz;
+    double   *rhsb, *rhsx, *xact;
+    double   *work = NULL;
+    double   *R, *C;
+    double   u, rpg, rcond;
+    double zero = 0.0;
+    double one = 1.0;
+    mem_usage_t   mem_usage;
+    superlu_options_t options;
+    SuperLUStat_t stat;
+
+    int restrt, iter, maxit, i;
+    double resid;
+    double *x, *b;
+
+#ifdef DEBUG
+    extern int num_drop_L, num_drop_U;
+#endif
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Enter main()");
+#endif
+
+    /* Defaults */
+    lwork = 0;
+    nrhs  = 1;
+    trans = NOTRANS;
+
+    /* Set the default input options:
+	options.Fact = DOFACT;
+	options.Equil = YES;
+	options.ColPerm = COLAMD;
+	options.DiagPivotThresh = 0.1; //different from complete LU
+	options.Trans = NOTRANS;
+	options.IterRefine = NOREFINE;
+	options.SymmetricMode = NO;
+	options.PivotGrowth = NO;
+	options.ConditionNumber = NO;
+	options.PrintStat = YES;
+	options.RowPerm = LargeDiag;
+	options.ILU_DropTol = 1e-4;
+	options.ILU_FillTol = 1e-2;
+	options.ILU_FillFactor = 10.0;
+	options.ILU_DropRule = DROP_BASIC | DROP_AREA;
+	options.ILU_Norm = INF_NORM;
+	options.ILU_MILU = SILU;
+     */
+    ilu_set_default_options(&options);
+
+    /* Modify the defaults. */
+    options.PivotGrowth = YES;	  /* Compute reciprocal pivot growth */
+    options.ConditionNumber = YES;/* Compute reciprocal condition number */
+
+    if ( lwork > 0 ) {
+	work = SUPERLU_MALLOC(lwork);
+	if ( !work ) ABORT("Malloc fails for work[].");
+    }
+
+    /* Read matrix A from a file in Harwell-Boeing format.*/
+    if (argc < 2)
+    {
+	printf("Usage:\n%s [OPTION] < [INPUT] > [OUTPUT]\nOPTION:\n"
+		"-h -hb:\n\t[INPUT] is a Harwell-Boeing format matrix.\n"
+		"-r -rb:\n\t[INPUT] is a Rutherford-Boeing format matrix.\n"
+		"-t -triplet:\n\t[INPUT] is a triplet format matrix.\n",
+		argv[0]);
+	return 0;
+    }
+    else
+    {
+	switch (argv[1][1])
+	{
+	    case 'H':
+	    case 'h':
+		printf("Input a Harwell-Boeing format matrix:\n");
+		dreadhb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'R':
+	    case 'r':
+		printf("Input a Rutherford-Boeing format matrix:\n");
+		dreadrb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'T':
+	    case 't':
+		printf("Input a triplet format matrix:\n");
+		dreadtriple(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    default:
+		printf("Unrecognized format.\n");
+		return 0;
+	}
+    }
+
+    dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa,
+                                SLU_NC, SLU_D, SLU_GE);
+    Astore = A.Store;
+    dfill_diag(n, Astore);
+    printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+    fflush(stdout);
+
+    /* Make a copy of the original matrix. */
+    nnz = Astore->nnz;
+    a_orig = doubleMalloc(nnz);
+    asub_orig = intMalloc(nnz);
+    xa_orig = intMalloc(n+1);
+    for (i = 0; i < nnz; ++i) {
+	a_orig[i] = ((double *)Astore->nzval)[i];
+	asub_orig[i] = Astore->rowind[i];
+    }
+    for (i = 0; i <= n; ++i) xa_orig[i] = Astore->colptr[i];
+    dCreate_CompCol_Matrix(&AA, m, n, nnz, a_orig, asub_orig, xa_orig,
+			   SLU_NC, SLU_D, SLU_GE);
+    
+    /* Generate the right-hand side */
+    if ( !(rhsb = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+    if ( !(rhsx = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsx[].");
+    dCreate_Dense_Matrix(&B, m, nrhs, rhsb, m, SLU_DN, SLU_D, SLU_GE);
+    dCreate_Dense_Matrix(&X, m, nrhs, rhsx, m, SLU_DN, SLU_D, SLU_GE);
+    xact = doubleMalloc(n * nrhs);
+    ldx = n;
+    dGenXtrue(n, nrhs, xact, ldx);
+    dFillRHS(trans, nrhs, xact, ldx, &A, &B);
+
+    if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+    if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+    if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+    if ( !(R = (double *) SUPERLU_MALLOC(A.nrow * sizeof(double))) )
+	ABORT("SUPERLU_MALLOC fails for R[].");
+    if ( !(C = (double *) SUPERLU_MALLOC(A.ncol * sizeof(double))) )
+	ABORT("SUPERLU_MALLOC fails for C[].");
+
+    info = 0;
+#ifdef DEBUG
+    num_drop_L = 0;
+    num_drop_U = 0;
+#endif
+
+    /* Initialize the statistics variables. */
+    StatInit(&stat);
+
+    /* Compute the incomplete factorization and compute the condition number
+       and pivot growth using dgsisx. */
+    B.ncol = 0;  /* not to perform triangular solution */
+    dgsisx(&options, &A, perm_c, perm_r, etree, equed, R, C, &L, &U, work,
+	   lwork, &B, &X, &rpg, &rcond, &mem_usage, &stat, &info);
+
+    /* Set RHS for GMRES. */
+    if (!(b = doubleMalloc(m))) ABORT("Malloc fails for b[].");
+    for (i = 0; i < m; i++) b[i] = rhsb[i];
+
+    printf("dgsisx(): info %d, equed %c\n", info, equed[0]);
+    if (info > 0 || rcond < 1e-8 || rpg > 1e8)
+	printf("WARNING: This preconditioner might be unstable.\n");
+
+    if ( info == 0 || info == n+1 ) {
+	if ( options.PivotGrowth == YES )
+	    printf("Recip. pivot growth = %e\n", rpg);
+	if ( options.ConditionNumber == YES )
+	    printf("Recip. condition number = %e\n", rcond);
+    } else if ( info > 0 && lwork == -1 ) {
+	printf("** Estimated memory: %d bytes\n", info - n);
+    }
+
+    Lstore = (SCformat *) L.Store;
+    Ustore = (NCformat *) U.Store;
+    printf("n(A) = %d, nnz(A) = %d\n", n, Astore->nnz);
+    printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
+    printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
+    printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    printf("Fill ratio: nnz(F)/nnz(A) = %.3f\n",
+	    ((double)(Lstore->nnz) + (double)(Ustore->nnz) - (double)n)
+	    / (double)Astore->nnz);
+    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+    fflush(stdout);
+
+    /* Set the global variables. */
+    GLOBAL_A = &A;
+    GLOBAL_A_ORIG = &AA;
+    GLOBAL_L = &L;
+    GLOBAL_U = &U;
+    GLOBAL_STAT = &stat;
+    GLOBAL_PERM_C = perm_c;
+    GLOBAL_PERM_R = perm_r;
+    GLOBAL_OPTIONS = &options;
+    GLOBAL_EQUED = equed;
+    GLOBAL_R = R;
+    GLOBAL_C = C;
+    GLOBAL_MEM_USAGE = &mem_usage;
+
+    /* Set the options to do solve-only. */
+    options.Fact = FACTORED;
+    options.PivotGrowth = NO;
+    options.ConditionNumber = NO;
+
+    /* Set the variables used by GMRES. */
+    restrt = SUPERLU_MIN(n / 3 + 1, 50);
+    maxit = 1000;
+    iter = maxit;
+    resid = 1e-8;
+    if (!(x = doubleMalloc(n))) ABORT("Malloc fails for x[].");
+
+    if (info <= n + 1)
+    {
+	int i_1 = 1;
+	double maxferr = 0.0, nrmA, nrmB, res, t;
+        double temp;
+	extern double dnrm2_(int *, double [], int *);
+	extern void daxpy_(int *, double *, double [], int *, double [], int *);
+
+	/* Initial guess */
+	for (i = 0; i < n; i++) x[i] = zero;
+
+	t = SuperLU_timer_();
+
+	/* Call GMRES */
+	dfgmr(n, dmatvec_mult, dpsolve, b, x, resid, restrt, &iter, stdout);
+
+	t = SuperLU_timer_() - t;
+
+	/* Output the result. */
+	nrmA = dnrm2_(&(Astore->nnz), (double *)((DNformat *)A.Store)->nzval,
+		&i_1);
+	nrmB = dnrm2_(&m, b, &i_1);
+	sp_dgemv("N", -1.0, &A, x, 1, 1.0, b, 1);
+	res = dnrm2_(&m, b, &i_1);
+	resid = res / nrmB;
+	printf("||A||_F = %.1e, ||B||_2 = %.1e, ||B-A*X||_2 = %.1e, "
+		"relres = %.1e\n", nrmA, nrmB, res, resid);
+
+	if (iter >= maxit)
+	{
+	    if (resid >= 1.0) iter = -180;
+	    else if (resid > 1e-8) iter = -111;
+	}
+	printf("iteration: %d\nresidual: %.1e\nGMRES time: %.2f seconds.\n",
+		iter, resid, t);
+
+	for (i = 0; i < m; i++) {
+	    maxferr = SUPERLU_MAX(maxferr, fabs(x[i] - xact[i]));
+        }
+	printf("||X-X_true||_oo = %.1e\n", maxferr);
+    }
+#ifdef DEBUG
+    printf("%d entries in L and %d entries in U dropped.\n",
+	    num_drop_L, num_drop_U);
+#endif
+    fflush(stdout);
+
+    if ( options.PrintStat ) StatPrint(&stat);
+    StatFree(&stat);
+
+    SUPERLU_FREE (rhsb);
+    SUPERLU_FREE (rhsx);
+    SUPERLU_FREE (xact);
+    SUPERLU_FREE (etree);
+    SUPERLU_FREE (perm_r);
+    SUPERLU_FREE (perm_c);
+    SUPERLU_FREE (R);
+    SUPERLU_FREE (C);
+    Destroy_CompCol_Matrix(&A);
+    Destroy_CompCol_Matrix(&AA);
+    Destroy_SuperMatrix_Store(&B);
+    Destroy_SuperMatrix_Store(&X);
+    if ( lwork >= 0 ) {
+	Destroy_SuperNode_Matrix(&L);
+	Destroy_CompCol_Matrix(&U);
+    }
+    SUPERLU_FREE(b);
+    SUPERLU_FREE(x);
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Exit main()");
+#endif
+
+    return 0;
+}
diff --git a/EXAMPLE/dlinsol.c b/EXAMPLE/dlinsol.c
index ca81d26..473b620 100644
--- a/EXAMPLE/dlinsol.c
+++ b/EXAMPLE/dlinsol.c
@@ -8,7 +8,7 @@
  */
 #include "slu_ddefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
     SuperMatrix A;
     NCformat *Astore;
@@ -81,19 +81,18 @@ main(int argc, char *argv[])
     	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
 	
 	dQuerySpace(&L, &U, &mem_usage);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	
     } else {
 	printf("dgssv() error returns INFO= %d\n", info);
 	if ( info <= n ) { /* factorization completes */
 	    dQuerySpace(&L, &U, &mem_usage);
-	    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		   mem_usage.expansions);
+	    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	}
     }
 
diff --git a/EXAMPLE/dlinsol1.c b/EXAMPLE/dlinsol1.c
index 87793de..87c8435 100644
--- a/EXAMPLE/dlinsol1.c
+++ b/EXAMPLE/dlinsol1.c
@@ -8,7 +8,7 @@
  */
 #include "slu_ddefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
     SuperMatrix A;
     NCformat *Astore;
@@ -86,19 +86,18 @@ main(int argc, char *argv[])
     	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
 	
 	dQuerySpace(&L, &U, &mem_usage);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	
     } else {
 	printf("dgssv() error returns INFO= %d\n", info);
 	if ( info <= n ) { /* factorization completes */
 	    dQuerySpace(&L, &U, &mem_usage);
-	    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		   mem_usage.expansions);
+	    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	}
     }
 
diff --git a/EXAMPLE/dlinsolx.c b/EXAMPLE/dlinsolx.c
index 12c9b37..c0472ca 100644
--- a/EXAMPLE/dlinsolx.c
+++ b/EXAMPLE/dlinsolx.c
@@ -1,14 +1,14 @@
 
 /*
- * -- SuperLU routine (version 3.0) --
+ * -- SuperLU routine (version 3.1) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * October 15, 2003
+ * August 1, 2008
  *
  */
 #include "slu_ddefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
     char           equed[1];
     yes_no_t       equil;
@@ -69,7 +69,7 @@ main(int argc, char *argv[])
     /* Add more functionalities that the defaults. */
     options.PivotGrowth = YES;    /* Compute reciprocal pivot growth */
     options.ConditionNumber = YES;/* Compute reciprocal condition number */
-    options.IterRefine = DOUBLE;  /* Perform double-precision refinement */
+    options.IterRefine = SLU_DOUBLE;  /* Perform double-precision refinement */
     
     if ( lwork > 0 ) {
 	work = SUPERLU_MALLOC(lwork);
@@ -139,9 +139,10 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
+
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	     
 	fflush(stdout);
 
@@ -165,9 +166,11 @@ main(int argc, char *argv[])
     Destroy_CompCol_Matrix(&A);
     Destroy_SuperMatrix_Store(&B);
     Destroy_SuperMatrix_Store(&X);
-    if ( lwork >= 0 ) {
+    if ( lwork == 0 ) {
         Destroy_SuperNode_Matrix(&L);
         Destroy_CompCol_Matrix(&U);
+    } else if ( lwork > 0 ) {
+        SUPERLU_FREE(work);
     }
 
 #if ( DEBUGlevel>=1 )
@@ -179,7 +182,7 @@ main(int argc, char *argv[])
 /*  
  * Parse command line inputs.
  */
-static void
+void
 parse_command_line(int argc, char *argv[], int *lwork,
                    double *u, yes_no_t *equil, trans_t *trans )
 {
diff --git a/EXAMPLE/dlinsolx1.c b/EXAMPLE/dlinsolx1.c
index 7f727b7..79d6790 100644
--- a/EXAMPLE/dlinsolx1.c
+++ b/EXAMPLE/dlinsolx1.c
@@ -8,7 +8,7 @@
  */
 #include "slu_ddefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
 /*
  * Purpose
@@ -135,9 +135,10 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
+
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	fflush(stdout);
 
     } else if ( info > 0 && lwork == -1 ) {
@@ -194,11 +195,14 @@ main(int argc, char *argv[])
     Destroy_CompCol_Matrix(&A);
     Destroy_SuperMatrix_Store(&B);
     Destroy_SuperMatrix_Store(&X);
-    if ( lwork >= 0 ) {
+    if ( lwork == 0 ) {
         Destroy_SuperNode_Matrix(&L);
         Destroy_CompCol_Matrix(&U);
+    } else if ( lwork > 0 ) {
+        SUPERLU_FREE(work);
     }
 
+
 #if ( DEBUGlevel>=1 )
     CHECK_MALLOC("Exit main()");
 #endif
@@ -207,7 +211,7 @@ main(int argc, char *argv[])
 /*  
  * Parse command line options to get relaxed snode size, panel size, etc.
  */
-static void
+void
 parse_command_line(int argc, char *argv[], int *lwork,
                    double *u, yes_no_t *equil, trans_t *trans )
 {
diff --git a/EXAMPLE/dlinsolx2.c b/EXAMPLE/dlinsolx2.c
index 4824421..d8ff0ab 100644
--- a/EXAMPLE/dlinsolx2.c
+++ b/EXAMPLE/dlinsolx2.c
@@ -8,7 +8,7 @@
  */
 #include "slu_ddefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
 /*
  * Purpose
@@ -150,9 +150,10 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
+
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	if ( options.IterRefine ) {
             printf("Iterative Refinement:\n");
 	    printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
@@ -204,9 +205,8 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	if ( options.IterRefine ) {
             printf("Iterative Refinement:\n");
 	    printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
@@ -232,9 +232,11 @@ main(int argc, char *argv[])
     Destroy_CompCol_Matrix(&A1);
     Destroy_Dense_Matrix(&B1);
     Destroy_Dense_Matrix(&X);
-    if ( lwork >= 0 ) {
+    if ( lwork == 0 ) {
         Destroy_SuperNode_Matrix(&L);
         Destroy_CompCol_Matrix(&U);
+    } else if ( lwork > 0 ) {
+        SUPERLU_FREE(work);
     }
 
 #if ( DEBUGlevel>=1 )
@@ -245,7 +247,7 @@ main(int argc, char *argv[])
 /*  
  * Parse command line options to get relaxed snode size, panel size, etc.
  */
-static void
+void
 parse_command_line(int argc, char *argv[], int *lwork,
                    double *u, yes_no_t *equil, trans_t *trans )
 {
diff --git a/EXAMPLE/fgmr.c b/EXAMPLE/fgmr.c
new file mode 100644
index 0000000..e9b7a45
--- /dev/null
+++ b/EXAMPLE/fgmr.c
@@ -0,0 +1,263 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "slu_ddefs.h"
+
+#define  epsmac  1.0e-16
+extern double ddot_(int *, double [], int *, double [], int *);
+extern double dnrm2_(int *, double [], int *);
+extern void daxpy_(int *, double *, double [], int *, double [], int *);
+extern double dcopy_(int *, double [], int *, double [], int *);
+
+int fgmr(int n,
+     void (*matvec) (double, double[], double, double[]),
+     void (*psolve) (int, double[], double[]),
+     double *rhs, double *sol, double tol, int im, int *itmax, FILE * fits)
+{
+/*----------------------------------------------------------------------
+|                 *** Preconditioned FGMRES ***
++-----------------------------------------------------------------------
+| This is a simple version of the ARMS preconditioned FGMRES algorithm.
++-----------------------------------------------------------------------
+| Y. S. Dec. 2000. -- Apr. 2008
++-----------------------------------------------------------------------
+| on entry:
+|----------
+|
+| rhs     = real vector of length n containing the right hand side.
+| sol     = real vector of length n containing an initial guess to the
+|           solution on input.
+| tol     = tolerance for stopping iteration
+| im      = Krylov subspace dimension
+| (itmax) = max number of iterations allowed.
+| fits    = NULL: no output
+|        != NULL: file handle to output " resid vs time and its"
+|
+| on return:
+|----------
+| fgmr      int =  0 --> successful return.
+|           int =  1 --> convergence not achieved in itmax iterations.
+| sol     = contains an approximate solution (upon successful return).
+| itmax   = has changed. It now contains the number of steps required
+|           to converge --
++-----------------------------------------------------------------------
+| internal work arrays:
+|----------
+| vv      = work array of length [im+1][n] (used to store the Arnoldi
+|           basis)
+| hh      = work array of length [im][im+1] (Householder matrix)
+| z       = work array of length [im][n] to store preconditioned vectors
++-----------------------------------------------------------------------
+| subroutines called :
+| matvec - matrix-vector multiplication operation
+| psolve - (right) preconditionning operation
+|	   psolve can be a NULL pointer (GMRES without preconditioner)
++---------------------------------------------------------------------*/
+
+    int maxits = *itmax;
+    int i, i1, ii, j, k, k1, its, retval, i_1 = 1;
+    double **hh, *c, *s, *rs, t, t0;
+    double beta, eps1 = 0.0, gam, **vv, **z;
+
+    its = 0;
+    vv = (double **)SUPERLU_MALLOC((im + 1) * sizeof(double *));
+    for (i = 0; i <= im; i++)
+	vv[i] = doubleMalloc(n);
+    z = (double **)SUPERLU_MALLOC(im * sizeof(double *));
+    hh = (double **)SUPERLU_MALLOC(im * sizeof(double *));
+    for (i = 0; i < im; i++)
+    {
+	hh[i] = doubleMalloc(i + 2);
+	z[i] = doubleMalloc(n);
+    }
+    c = doubleMalloc(im);
+    s = doubleMalloc(im);
+    rs = doubleMalloc(im + 1);
+
+    /*---- outer loop starts here ----*/
+    do
+    {
+	/*---- compute initial residual vector ----*/
+	matvec(1.0, sol, 0.0, vv[0]);
+	for (j = 0; j < n; j++)
+	    vv[0][j] = rhs[j] - vv[0][j];	/* vv[0]= initial residual */
+	beta = dnrm2_(&n, vv[0], &i_1);
+
+	/*---- print info if fits != null ----*/
+	if (fits != NULL && its == 0)
+	    fprintf(fits, "%8d   %10.2e\n", its, beta);
+	/*if ( beta < tol * dnrm2_(&n, rhs, &i_1) )*/
+	if ( !(beta >= tol * dnrm2_(&n, rhs, &i_1)) )
+	    break;
+	t = 1.0 / beta;
+
+	/*---- normalize: vv[0] = vv[0] / beta ----*/
+	for (j = 0; j < n; j++)
+	    vv[0][j] = vv[0][j] * t;
+	if (its == 0)
+	    eps1 = tol * beta;
+
+	/*---- initialize 1-st term of rhs of hessenberg system ----*/
+	rs[0] = beta;
+	for (i = 0; i < im; i++)
+	{
+	    its++;
+	    i1 = i + 1;
+
+	    /*------------------------------------------------------------
+	    |  (Right) Preconditioning Operation   z_{j} = M^{-1} v_{j}
+	    +-----------------------------------------------------------*/
+	    if (psolve)
+		psolve(n, z[i], vv[i]);
+	    else
+		dcopy_(&n, vv[i], &i_1, z[i], &i_1);
+
+	    /*---- matvec operation w = A z_{j} = A M^{-1} v_{j} ----*/
+	    matvec(1.0, z[i], 0.0, vv[i1]);
+
+	    /*------------------------------------------------------------
+	    |     modified gram - schmidt...
+	    |     h_{i,j} = (w,v_{i})
+	    |     w  = w - h_{i,j} v_{i}
+	    +------------------------------------------------------------*/
+	    t0 = dnrm2_(&n, vv[i1], &i_1);
+	    for (j = 0; j <= i; j++)
+	    {
+		double negt;
+		t = ddot_(&n, vv[j], &i_1, vv[i1], &i_1);
+		hh[i][j] = t;
+		negt = -t;
+		daxpy_(&n, &negt, vv[j], &i_1, vv[i1], &i_1);
+	    }
+
+	    /*---- h_{j+1,j} = ||w||_{2} ----*/
+	    t = dnrm2_(&n, vv[i1], &i_1);
+	    while (t < 0.5 * t0)
+	    {
+		t0 = t;
+		for (j = 0; j <= i; j++)
+		{
+		    double negt;
+		    t = ddot_(&n, vv[j], &i_1, vv[i1], &i_1);
+		    hh[i][j] += t;
+		    negt = -t;
+		    daxpy_(&n, &negt, vv[j], &i_1, vv[i1], &i_1);
+		}
+		t = dnrm2_(&n, vv[i1], &i_1);
+	    }
+	    hh[i][i1] = t;
+	    if (t != 0.0)
+	    {
+		/*---- v_{j+1} = w / h_{j+1,j} ----*/
+		t = 1.0 / t;
+		for (k = 0; k < n; k++)
+		    vv[i1][k] = vv[i1][k] * t;
+	    }
+	    /*---------------------------------------------------
+	    |     done with modified gram schimdt and arnoldi step
+	    |     now  update factorization of hh
+	    +--------------------------------------------------*/
+
+	    /*--------------------------------------------------------
+	    |   perform previous transformations  on i-th column of h
+	    +-------------------------------------------------------*/
+	    for (k = 1; k <= i; k++)
+	    {
+		k1 = k - 1;
+		t = hh[i][k1];
+		hh[i][k1] = c[k1] * t + s[k1] * hh[i][k];
+		hh[i][k] = -s[k1] * t + c[k1] * hh[i][k];
+	    }
+	    gam = sqrt(pow(hh[i][i], 2) + pow(hh[i][i1], 2));
+
+	    /*---------------------------------------------------
+	    |     if gamma is zero then any small value will do
+	    |     affect only residual estimate
+	    +--------------------------------------------------*/
+	    /* if (gam == 0.0) gam = epsmac; */
+
+	    /*---- get next plane rotation ---*/
+	    if (gam > 0.0)
+	    {
+		c[i] = hh[i][i] / gam;
+		s[i] = hh[i][i1] / gam;
+	    }
+	    else
+	    {
+		c[i] = 1.0;
+		s[i] = 0.0;
+	    }
+	    rs[i1] = -s[i] * rs[i];
+	    rs[i] = c[i] * rs[i];
+
+	    /*----------------------------------------------------
+	    |   determine residual norm and test for convergence
+	    +---------------------------------------------------*/
+	    hh[i][i] = c[i] * hh[i][i] + s[i] * hh[i][i1];
+	    beta = fabs(rs[i1]);
+	    if (fits != NULL)
+		fprintf(fits, "%8d   %10.2e\n", its, beta);
+	    if (beta <= eps1 || its >= maxits)
+		break;
+	}
+
+	if (i == im) i--;
+	/*---- now compute solution. 1st, solve upper triangular system ----*/
+	rs[i] = rs[i] / hh[i][i];
+	for (ii = 1; ii <= i; ii++)
+	{
+	    k = i - ii;
+	    k1 = k + 1;
+	    t = rs[k];
+	    for (j = k1; j <= i; j++)
+		t = t - hh[j][k] * rs[j];
+	    rs[k] = t / hh[k][k];
+	}
+
+	/*---- linear combination of v[i]'s to get sol. ----*/
+	for (j = 0; j <= i; j++)
+	{
+	    t = rs[j];
+	    for (k = 0; k < n; k++)
+		sol[k] += t * z[j][k];
+	}
+
+	/* calculate the residual and output */
+	matvec(1.0, sol, 0.0, vv[0]);
+	for (j = 0; j < n; j++)
+	    vv[0][j] = rhs[j] - vv[0][j];	/* vv[0]= initial residual */
+
+	/*---- print info if fits != null ----*/
+	beta = dnrm2_(&n, vv[0], &i_1);
+
+	/*---- restart outer loop if needed ----*/
+	/*if (beta >= eps1 / tol)*/
+	if ( !(beta < eps1 / tol) )
+	{
+	    its = maxits + 10;
+	    break;
+	}
+	if (beta <= eps1)
+	    break;
+    } while(its < maxits);
+
+    retval = (its >= maxits);
+    for (i = 0; i <= im; i++)
+	SUPERLU_FREE(vv[i]);
+    SUPERLU_FREE(vv);
+    for (i = 0; i < im; i++)
+    {
+	SUPERLU_FREE(hh[i]);
+	SUPERLU_FREE(z[i]);
+    }
+    SUPERLU_FREE(hh);
+    SUPERLU_FREE(z);
+    SUPERLU_FREE(c);
+    SUPERLU_FREE(s);
+    SUPERLU_FREE(rs);
+
+    *itmax = its;
+
+    return retval;
+} /*----end of fgmr ----*/
diff --git a/EXAMPLE/g10 b/EXAMPLE/g10
deleted file mode 100644
index 09e1441..0000000
--- a/EXAMPLE/g10
+++ /dev/null
@@ -1,146 +0,0 @@
-10x10 grid, with COLMMD order                                                   
-           145            11            39            92             0
-RUA                      100           100           460             0
-(10I8)          (12I6)          (5E16.8)                                  
-       1       6      10      13      17      22      26      30      35      40
-      45      50      55      60      65      70      75      79      83      88
-      92      95      99     103     108     112     117     122     127     131
-     136     140     145     150     155     160     165     169     173     176
-     180     184     188     193     197     202     207     211     215     220
-     225     230     235     239     242     246     251     255     259     264
-     269     274     279     284     289     294     299     303     307     312
-     317     322     327     332     337     342     347     352     356     360
-     365     370     374     379     384     389     394     399     404     409
-     413     417     422     427     432     437     442     447     452     457
-     461
-    46    55    56    57    66    60    69    70    80    90    99   100
-    89    98    99   100    79    88    89    90    99    80    89    90
-   100    70    79    80    90    69    78    79    80    89    78    87
-    88    89    98    59    68    69    70    79    68    77    78    79
-    88    58    67    68    69    78    67    76    77    78    87    57
-    66    67    68    77    47    56    57    58    67    34    43    44
-    45    54    85    94    95    96    86    95    96    97    75    84
-    85    86    95    51    61    62    71    81    91    92    82    91
-    92    93    71    81    82    91    62    71    72    73    82    61
-    71    72    81    72    81    82    83    92    52    61    62    63
-    72    63    72    73    74    83    84    93    94    95    74    83
-    84    85    94    83    92    93    94    73    82    83    84    93
-    64    73    74    75    84    53    62    63    64    73    43    52
-    53    54    63    54    63    64    65    74     4     5     6    15
-     5     6     7    16     1     2    11     1     2     3    12    21
-    31    32    41     1    11    12    21    12    21    22    23    32
-    11    21    22    31     2    11    12    13    22     3    12    13
-    14    23     2     3     4    13     3     4     5    14     4    13
-    14    15    24     5    14    15    16    25    13    22    23    24
-    33    22    31    32    33    42    30    39    40    50     9    10
-    20     8     9    10    19     9    18    19    20    29    20    29
-    30    40    10    19    20    30    19    28    29    30    39     8
-    17    18    19    28    18    27    28    29    38    29    38    39
-    40    49    17    26    27    28    37    28    37    38    39    48
-     7    16    17    18    27     6    15    16    17    26     7     8
-     9    18     6     7     8    17    15    24    25    26    35    16
-    25    26    27    36    42    51    52    53    62    24    33    34
-    35    44    14    23    24    25    34    23    32    33    34    43
-    25    34    35    36    45    32    41    42    43    52    33    42
-    43    44    53    31    41    42    51    41    51    52    61    35
-    44    45    46    55    36    45    46    47    56    50    59    60
-    70    26    35    36    37    46    27    36    37    38    47    37
-    46    47    48    57    38    47    48    49    58    48    57    58
-    59    68    39    48    49    50    59    49    58    59    60    69
-    40    49    50    60    88    97    98    99    44    53    54    55
-    64    45    54    55    56    65    55    64    65    66    75    56
-    65    66    67    76    65    74    75    76    85    66    75    76
-    77    86    76    85    86    87    96    77    86    87    88    97
-    87    96    97    98
-  1.26819336e+00 -3.12426583e-02  7.78211737e-01  2.18048355e+00  4.37813682e-01
- -3.96516210e-01  1.38880676e+00  1.36442229e+00  6.58152637e-01 -6.92971494e-01
- -8.59806235e-01  5.29038063e-01 -1.74530599e-01  9.78788421e-01  1.28955368e+00
- -5.30575045e-01  1.83403368e+00 -1.71591032e+00  8.69317059e-02  1.95567435e+00
-  1.61453770e-01 -6.28688359e-01 -1.43882447e+00 -6.65959686e-02  3.73380863e-01
-  1.39860373e-01 -7.48088838e-01 -6.28974933e-01  1.39483065e+00  4.20988804e-01
- -4.33373058e-01  7.06251990e-01  2.27856907e-01 -1.01699185e+00  8.25892307e-01
-  1.47039036e+00 -1.37890689e+00 -2.60172069e-01  9.94768173e-01 -1.58105341e+00
-  1.04902235e+00  3.02689036e-01 -1.22650234e+00  6.96000951e-02  1.33881437e+00
-  1.22229851e+00 -1.59597816e+00 -1.06773032e+00 -7.59919212e-01 -1.98499916e-01
- -1.41404614e-01  4.11267927e-01 -1.17905966e+00 -2.77775506e-01  1.93931843e+00
- -8.95840361e-01 -3.04157583e-01  5.55253123e-01 -3.24246851e-01 -9.11425420e-01
- -9.96089984e-01  1.19514263e+00 -1.59447782e-01  2.70402605e+00  1.33332898e+00
-  2.51078139e-01 -3.10470908e-01 -9.23003724e-01 -3.84775736e-01 -1.46163875e+00
-  1.55446592e+00 -5.97535384e-01 -1.21056787e+00 -7.02668798e-01  9.53355517e-01
- -1.93005494e+00  5.12844987e-01  3.93682449e-01 -9.05426500e-01 -1.27447328e+00
-  3.46546103e-01 -1.19523544e+00  8.66840733e-01  1.29184358e+00  4.34312653e-01
- -3.86206929e-01 -1.12563760e-01  9.59664371e-01  2.08759311e+00  1.52468053e+00
- -1.95260790e-01  2.17314078e-01 -1.79456822e-01  2.56729070e-02  6.42066362e-01
-  9.23086649e-01 -1.55510777e+00  6.63594033e-01 -1.64769114e+00 -2.01498584e+00
-  4.91716881e-01 -1.55497528e+00 -3.97913855e-01  8.64279576e-01 -1.77618078e-01
-  1.87438052e+00  1.72400235e-01  4.91313669e-01  8.00733701e-01 -7.67268997e-01
-  3.64419504e-01 -1.40609081e-01  2.44943669e-01 -2.67458500e-01 -5.70245480e-01
- -1.87266787e-01  1.72603158e-02  2.46340439e-01 -8.54484721e-01  1.15778270e+00
-  1.61907723e-01  1.27174349e+00 -3.53443680e-02 -1.50132884e+00  3.65373411e-01
- -1.98659856e-01  9.94299745e-01 -8.03474714e-01 -5.91204478e-01  1.69154641e+00
- -7.24410496e-01  1.19219551e+00  1.86746737e-01  1.59493888e+00  3.21307056e-01
- -6.09499611e-01  5.65239403e-01 -6.10781446e-01  1.23111147e+00  1.20855665e+00
- -6.38854660e-01  6.05540299e-01 -6.24480544e-01  5.72228122e-01 -1.38972170e+00
-  2.29327812e-01  2.71190237e-01 -3.66360220e-01  1.37696039e+00  1.55706376e+00
- -1.93543855e-01  1.65130117e+00 -1.89877818e+00  1.82252476e+00  7.65458387e-01
- -5.94524008e-01  1.30245975e-01  3.50135051e-02 -6.24674139e-01 -1.51841513e+00
- -1.05107061e+00  4.99305134e-02 -1.45474887e+00  4.66545850e-01 -3.60029626e-01
- -1.35576294e-01 -1.34933848e+00 -1.27044990e+00  9.84570273e-01 -4.48806138e-02
- -7.98944517e-01 -7.65172429e-01  1.16495351e+00  6.26839083e-01  7.50801547e-02
-  3.51606903e-01 -6.96512535e-01  1.69614248e+00  5.90597780e-02  9.68481048e-01
-  6.70291997e-01  4.20146042e-01 -2.87275127e+00 -2.04134535e-03  1.60651096e+00
-  8.47648635e-01  2.68100812e-01  3.98848528e-02 -2.48284251e+00  1.15865471e+00
- -1.02627947e+00  1.15348699e+00  6.15769628e-01  9.77894070e-01 -1.11534771e+00
- -5.50021449e-01 -9.23489086e-01 -7.04993878e-02  1.47891351e-01 -5.57093642e-01
- -3.36705699e-01  4.15227463e-01  1.55781354e+00 -2.44429890e+00 -1.09819539e+00
-  1.12264786e+00  1.79707178e+00  2.64068529e-01  8.71673289e-01 -1.44617154e+00
- -7.01165346e-01  1.24598212e+00 -6.38976995e-01  5.77350219e-01  5.81667258e-01
- -2.71354296e-01  4.14191307e-01 -9.77814227e-01 -1.02146617e+00  3.17687980e-01
-  1.51610780e+00  7.49432453e-01 -5.07700387e-01  8.85299448e-01 -7.86456613e-01
-  6.34808588e-01  8.20409762e-01 -1.76026510e-01  5.62473875e-01  1.68587408e+00
-  2.79245535e-02 -9.02030581e-01 -2.05325749e+00  8.90862977e-02 -1.04842345e+00
-  4.22723685e-01 -8.44414378e-01 -3.11629756e-01 -3.22939921e-01  3.17987916e-01
- -5.11172208e-01  1.12516182e+00  7.28641592e-01 -2.37745429e+00 -2.73782416e-01
-  3.49733203e-02 -1.80786206e+00  1.02819255e+00  3.94600309e-01  6.39405642e-01
- -7.59696649e-01 -6.74720856e-01 -1.17168719e+00  2.03293002e+00  8.74212895e-01
-  1.75240173e+00 -3.20050826e-01 -1.37413808e-01  2.92314877e-01  2.56591024e+00
- -4.57815644e-01 -1.61082701e+00 -2.66952378e+00  7.03144053e-01 -5.24115850e-02
-  2.01849612e+00  9.24159405e-01 -1.81411470e+00  4.38705098e-01 -1.24734432e+00
-  3.24666917e-01  3.90070410e-01 -4.05138317e-01 -3.68411285e-01  1.14789528e+00
-  4.14302603e-02 -1.09804965e+00  1.56672375e+00  4.99520851e-01 -1.05537507e+00
- -4.50743203e-01  1.27037824e+00  8.98693601e-01  8.74127225e-01  7.61126995e-01
- -1.65923455e-01  3.00907437e-01 -3.22467327e-01  5.62147834e-01 -1.06392289e+00
-  3.51588948e-01  1.13299993e+00  1.49994248e-01 -2.48093553e-01 -7.26249000e-01
- -4.45040301e-01 -6.12911120e-01 -2.09144085e-01  7.56218970e-01  4.00486023e-01
- -1.34138072e+00  3.75041024e-01  8.61734897e-01 -5.62251244e-02  5.13478174e-01
-  3.96680866e-01 -6.20214209e-01  2.37148765e-01 -1.58684699e+00 -4.01484810e-01
- -7.70692269e-01 -2.62680506e-01  9.76489544e-01  9.77815041e-01  1.17002111e+00
-  1.59310862e-01  1.83613203e+00 -3.82918259e-01  1.55082745e-01 -9.64648249e-01
-  3.87564313e-02 -1.52762265e+00  9.64938959e-01  5.26162503e-01 -1.84454117e-01
-  1.98782828e-01 -1.27442875e-01  5.54171561e-01 -1.09734432e+00 -7.31301400e-01
-  1.40473192e+00  2.08709913e+00  3.65118460e-01  8.46105526e-01 -1.84537657e-01
-  1.03071442e+00  1.59042684e+00  3.21916399e-02  8.89163671e-01 -1.29915249e+00
-  1.18257310e+00 -2.21360782e-01  1.66494939e-02 -1.19236124e+00 -1.31646297e-01
-  1.48752430e+00 -8.36821231e-01 -1.30098190e+00  1.57413186e+00  1.16603996e+00
-  7.86429695e-01  3.97810484e-01  1.04978596e+00 -3.40795563e-01  3.36296999e-01
-  8.99883574e-01 -2.00898856e-01 -2.33734975e-01  1.44990660e+00  3.56429388e-01
-  6.52635669e-01  2.15671161e-01 -2.63896186e-01  1.80244024e+00 -6.42984172e-01
-  1.09555050e-01 -7.19037696e-01  4.20627573e-01 -1.93113369e+00  3.20690754e+00
-  5.36007045e-01  2.98450536e-01  2.84043161e-01  1.81747171e+00 -5.84302130e-01
- -1.01067382e+00 -9.60498312e-01  6.91159584e-01 -7.58618207e-01 -9.69717328e-02
- -1.40694905e+00  1.03081246e+00 -7.59874404e-01  6.60299785e-01 -1.10250960e+00
- -1.02970645e-01 -1.05980154e+00 -1.23856594e+00 -1.88923606e+00 -9.73584554e-01
-  2.12115839e-01  4.93441991e-01  1.54717659e+00  1.15818057e+00  8.62500188e-01
- -1.03470562e+00 -1.92672883e-01 -1.29972278e+00  6.44932748e-01 -2.14835899e+00
- -1.02884453e+00 -1.41582116e-01 -2.52670612e+00  3.06595916e-01  9.68992176e-01
- -7.47317127e-01 -2.79602442e+00  6.96731554e-01 -3.12981493e-01 -5.93617619e-01
-  3.32322162e-01  5.58850703e-01 -9.14800738e-01 -5.14012560e-01  1.89626061e+00
- -2.53229992e-01 -5.39775241e-01  1.87995711e+00 -1.00384945e+00 -4.97445878e-01
- -1.50439715e+00 -9.54492989e-02  3.96727054e-01 -5.27114908e-01  3.44571056e-01
- -7.23290526e-01  5.45436841e-01  1.32031907e+00 -4.04494328e-01  4.18468509e-01
-  2.47348750e-01  7.04110315e-01  6.31938853e-01 -9.92362113e-01  1.76670837e+00
- -3.82103635e-01 -7.97532757e-01 -9.36740612e-01 -2.43346549e-03  3.96086166e-01
- -5.08693172e-01 -2.68285779e-01 -1.08214045e+00  2.01413372e+00  1.94403113e+00
- -1.52152942e+00 -9.64333079e-01 -2.05725119e+00  1.49996068e-01  5.42037571e-01
-  2.54408816e-01 -3.07240694e-01 -4.17111830e-01  1.13680483e+00  3.91313809e-01
-  1.60514782e+00  6.67201442e-01 -6.77937746e-02 -1.73566011e+00  8.06348573e-01
diff --git a/EXAMPLE/g20.rua b/EXAMPLE/g20.rua
new file mode 100644
index 0000000..382c9c4
--- /dev/null
+++ b/EXAMPLE/g20.rua
@@ -0,0 +1,534 @@
+g20, symm permuted by SYMMMD                                            SYM     
+           530            26           120           384             0
+RUA                      400           400          1920             0
+(16I5)          (16I5)          (5E15.8)            (5E15.8)            
+    1    6   11   16   21   26   31   36   41   46   51   56   61   66   71   76
+   81   86   91   96  101  106  111  116  121  126  131  136  141  146  151  156
+  161  166  171  176  181  186  191  196  201  206  210  214  218  223  228  231
+  235  239  243  248  253  257  262  266  271  276  281  286  291  295  300  304
+  309  313  318  323  328  332  337  342  347  352  357  362  367  372  377  382
+  387  392  397  402  407  412  417  422  427  432  437  442  447  452  457  462
+  467  472  477  482  487  492  497  501  505  510  514  519  524  529  534  539
+  544  549  554  559  564  568  572  576  580  583  588  593  597  601  606  610
+  614  619  624  629  634  639  644  649  654  659  664  669  674  678  682  686
+  691  696  701  706  710  714  718  723  728  732  737  742  747  752  757  762
+  767  772  777  781  786  791  796  800  805  810  815  820  825  830  835  839
+  844  849  854  859  864  869  874  879  884  889  894  899  904  909  914  919
+  923  928  932  937  941  946  951  956  961  966  971  976  981  986  991  996
+ 1001 1006 1011 1015 1020 1024 1029 1033 1038 1043 1048 1053 1058 1063 1068 1073
+ 1078 1083 1088 1093 1098 1103 1108 1113 1117 1122 1126 1130 1133 1138 1142 1147
+ 1152 1156 1161 1165 1170 1174 1179 1183 1188 1193 1198 1203 1208 1212 1217 1221
+ 1226 1230 1235 1240 1245 1249 1254 1259 1264 1269 1274 1279 1284 1288 1293 1298
+ 1303 1308 1313 1317 1322 1327 1332 1337 1342 1347 1352 1357 1362 1367 1372 1377
+ 1382 1387 1392 1397 1402 1407 1412 1417 1422 1427 1432 1437 1442 1446 1451 1455
+ 1459 1464 1468 1472 1477 1482 1487 1492 1497 1501 1506 1510 1515 1519 1522 1526
+ 1530 1535 1539 1544 1549 1554 1559 1563 1568 1573 1578 1583 1587 1592 1596 1601
+ 1605 1610 1615 1620 1625 1630 1635 1640 1645 1650 1655 1660 1665 1670 1674 1679
+ 1684 1689 1694 1699 1704 1709 1714 1719 1724 1729 1734 1738 1743 1748 1753 1758
+ 1763 1768 1773 1778 1783 1788 1792 1797 1802 1807 1811 1816 1821 1826 1831 1836
+ 1841 1846 1851 1856 1861 1866 1871 1876 1881 1886 1891 1896 1901 1906 1911 1916
+ 1921
+    1    9   32  391  395    2    9  392  395  400    3    8  389  393  394    4
+    8    9  392  394    5    7    8  381  389    6    7    8    9   32    5    6
+    7   33  382    3    4    5    6    8    1    2    4    6    9   10   31  396
+  398  399   11   18   29   30   31   12   18   31  397  399   13   17  386  387
+  388   14   17   18   30  387   15   17  383  388  390   16   17   18  390  397
+   13   14   15   16   17   11   12   14   16   18   19   28   33  380  382   20
+   22   28   29   33   21   22   29   31  398   20   21   22   32  391   23   27
+  379  384  385   24   27   28  379  380   25   27   30  385  387   26   27   28
+   29   30   23   24   25   26   27   19   20   24   26   28   11   20   21   26
+   29   11   14   25   26   30   10   11   12   21   31    1    6   22   32   33
+    7   19   20   32   33   34   74   92  370  372   35   40   70  174  176   36
+   40   91  174  177   37   39   40   70   71   38   39   40   90   91   37   38
+   39   74   92   35   36   37   38   40   41   56   70   71   73   42   44   55
+   56   43   44  175  176   42   43   44   45   44   45   56   70  176   46   54
+   55   56   73   47   49   53   48   49   54   55   47   48   49   52   50   51
+   53   69   50   51   52   68   72   49   51   52   53   54   47   50   52   53
+   46   48   52   54   72   42   46   48   55   41   42   45   46   56   57   59
+   67   68   72   58   59   67   74  372   57   58   59   71   73   60   66   67
+  372  373   61   62   65   69   61   62   66   67   68   63   64   65  374   63
+   64   66  371  373   61   63   65   66   60   62   64   65   66   57   58   60
+   62   67   51   57   62   68   69   50   61   68   69   35   37   41   45   70
+   37   41   59   71   74   51   54   57   72   73   41   46   59   72   73   34
+   39   58   71   74   75   89  369  381  389   76   78   92  370  375   77   78
+   89  369  375   76   77   78   88   90   79   87   91  177  178   80   87   88
+   90   91   81   86   87  173  178   82   86  173  379  380   83   85   86   87
+   88   84   85   86  380  382   83   84   85   89  381   81   82   83   84   86
+   79   80   81   83   87   78   80   83   88   89   75   77   85   88   89   38
+   78   80   90   92   36   38   79   80   91   34   39   76   90   92   93  172
+  385  386  387   94   98  168  169  170   95   98  169  172  386   96   98  109
+  170  171   97   98  109  386  388   94   95   96   97   98   99  108  377  383
+  390  100  108  376  377  378  101  107  109  167  171  102  107  109  383  388
+  103  106  107  167  104  106  108  378  105  106  107  108  383  103  104  105
+  106  101  102  103  105  107   99  100  104  105  108   96   97  101  102  109
+  110  166  173  379  384  111  132  138  162  164  112  132  138  168  169  113
+  131  132  163  164  114  130  131  132  168  115  129  130  168  170  116  123
+  128  129  130  117  121  123  128  118  120  131  163  119  120  121  123  118
+  119  120  122  117  119  121  120  122  123  130  131  116  117  119  122  123
+  124  127  128  129  125  127  167  171  126  127  129  170  171  124  125  126
+  127  116  117  124  128  115  116  124  126  129  114  115  116  122  130  113
+  114  118  122  131  111  112  113  114  132  133  137  138  162  165  134  137
+  165  166  384  135  137  138  169  172  136  137  172  384  385  133  134  135
+  136  137  111  112  133  135  138  139  145  174  175  176  140  145  161  174
+  177  141  143  145  175  142  143  153  160  141  142  143  144  143  144  145
+  160  161  139  140  141  144  145  146  152  153  159  160  147  152  159  162
+  165  148  150  152  153  149  150  163  164  148  149  150  151  150  151  152
+  162  164  146  147  148  151  152  142  146  148  153  154  158  159  160  161
+  155  158  161  177  178  156  158  159  165  166  157  158  166  173  178  154
+  155  156  157  158  146  147  154  156  159  142  144  146  154  160  140  144
+  154  155  161  111  133  147  151  162  113  118  149  163  111  113  149  151
+  164  133  134  147  156  165  110  134  156  157  166  101  103  125  167   94
+  112  114  115  168   94   95  112  135  169   94   96  115  126  170   96  101
+  125  126  171   93   95  135  136  172   81   82  110  157  173   35   36  139
+  140  174   43  139  141  175   35   43   45  139  176   36   79  140  155  177
+   79   81  155  157  178  179  183  201  369  375  180  183  200  201  274  181
+  183  369  389  393  182  183  272  274  393  179  180  181  182  183  184  188
+  370  372  373  185  188  199  371  373  186  188  201  370  375  187  188  199
+  200  201  184  185  186  187  188  189  198  200  274  277  190  198  273  276
+  277  191  197  198  199  200  192  193  196  374  192  193  197  199  371  194
+  195  196  275  194  195  197  198  276  192  194  196  197  191  193  195  196
+  197  189  190  191  195  198  185  187  191  193  199  180  187  189  191  200
+  179  180  186  187  201  202  271  272  393  394  203  207  272  274  277  204
+  207  218  273  277  205  207  267  271  272  206  207  218  266  267  203  204
+  205  206  207  208  217  218  266  268  209  217  265  268  270  210  216  217
+  218  273  211  212  215  275  211  212  216  273  276  213  214  215  269  213
+  214  216  217  270  211  213  215  216  210  212  214  215  216  208  209  210
+  214  217  204  206  208  210  218  219  223  271  392  394  220  223  229  267
+  271  221  223  365  392  400  222  223  229  365  366  219  220  221  222  223
+  224  228  229  266  267  225  228  263  266  268  226  228  229  264  366  227
+  228  262  263  264  224  225  226  227  228  220  222  224  226  229  230  249
+  263  265  268  231  239  248  249  265  232  233  238  269  232  233  239  265
+  270  234  236  237  238  235  236  237  247  234  235  236  234  235  237  239
+  248  232  234  238  239  231  233  237  238  239  240  246  249  262  263  241
+  242  245  247  241  242  246  248  249  243  244  245  261  243  244  246  260
+  262  241  243  245  246  240  242  244  245  246  235  241  247  248  231  237
+  242  247  248  230  231  240  242  249  250  259  264  364  366  251  259  260
+  262  264  252  258  259  364  367  253  254  257  261  253  254  258  259  260
+  255  256  257  363  255  256  258  367  368  253  255  257  258  252  254  256
+  257  258  250  251  252  254  259  244  251  254  260  261  243  253  260  261
+  227  240  244  251  262  225  227  230  240  263  226  227  250  251  264  209
+  230  231  233  265  206  208  224  225  266  205  206  220  224  267  208  209
+  225  230  268  213  232  269  270  209  214  233  269  270  202  205  219  220
+  271  182  202  203  205  272  190  204  210  212  273  180  182  189  203  274
+  194  211  275  276  190  195  212  275  276  189  190  203  204  277  278  283
+  289  395  400  279  283  289  361  362  280  282  283  391  395  281  282  283
+  359  361  280  281  282  396  398  278  279  280  281  283  284  288  289  365
+  400  285  288  364  365  366  286  288  289  360  362  287  288  360  364  367
+  284  285  286  287  288  278  279  284  286  289  290  292  298  396  399  291
+  292  298  355  357  290  291  292  358  359  293  297  377  390  397  294  297
+  298  397  399  295  297  356  376  377  296  297  298  355  356  293  294  295
+  296  297  290  291  294  296  298  299  328  351  355  357  300  308  328  355
+  356  301  307  326  327  302  307  308  326  328  303  306  376  378  304  306
+  307  308  305  306  308  356  376  303  304  305  306  301  302  304  307  300
+  302  304  305  308  309  311  326  328  351  310  311  324  326  327  309  310
+  311  325  353  312  323  325  352  353  313  314  322  350  313  314  323  352
+  354  315  316  320  322  315  316  321  323  325  317  319  324  327  318  319
+  320  317  318  319  321  315  318  320  321  316  319  320  321  324  313  315
+  322  323  312  314  316  322  323  310  317  321  324  325  311  312  316  324
+  325  301  302  309  310  326  301  310  317  327  299  300  302  309  328  329
+  338  349  360  362  330  338  360  367  368  331  337  338  348  349  332  333
+  336  363  332  333  337  338  368  334  335  336  350  334  335  337  348  354
+  332  334  336  337  331  333  335  336  337  329  330  331  333  338  339  347
+  358  359  361  340  347  349  361  362  341  346  347  348  349  342  346  348
+  352  354  343  345  346  347  358  344  345  346  352  353  343  344  345  351
+  357  341  342  343  344  346  339  340  341  343  347  331  335  341  342  348
+  329  331  340  341  349  313  334  350  354  299  309  345  351  353  312  314
+  342  344  352  311  312  344  351  353  314  335  342  350  354  291  296  299
+  300  355  295  296  300  305  356  291  299  345  357  358  292  339  343  357
+  358  281  292  339  359  396  286  287  329  330  360  279  281  339  340  361
+  279  286  329  340  362  255  332  363  368  250  252  285  287  364  221  222
+  284  285  365  222  226  250  285  366  252  256  287  330  367  256  330  333
+  363  368   75   77  179  181  369   34   76  184  186  370   64  185  193  371
+  374   34   58   60  184  372   60   64  184  185  373   63  192  371  374   76
+   77  179  186  375  100  295  303  305  376   99  100  293  295  377  100  104
+  303  378   23   24   82  110  379   19   24   82   84  380    5   75   85  381
+  382    7   19   84  381  382   15   99  102  105  383   23  110  134  136  384
+   23   25   93  136  385   13   93   95   97  386   13   14   25   93  387   13
+   15   97  102  388    3    5   75  181  389   15   16   99  293  390    1   22
+  280  391  398    2    4  219  221  392    3  181  182  202  393    3    4  202
+  219  394    1    2  278  280  395   10  282  290  359  396   12   16  293  294
+  397   10   21  282  391  398   10   12  290  294  399    2  221  278  284  400
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+-1.00000000E+00 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00
+ 4.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00-1.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
+-1.00000000E+00-1.00000000E+00-1.00000000E+00-1.00000000E+00 4.00000000E+00
diff --git a/EXAMPLE/sfgmr.c b/EXAMPLE/sfgmr.c
new file mode 100644
index 0000000..66d2ff8
--- /dev/null
+++ b/EXAMPLE/sfgmr.c
@@ -0,0 +1,298 @@
+
+/*! @file sfgmr.c
+ * \brief flexible GMRES from ITSOL developed by Yousef Saad.
+ */
+
+/* ITSOL COPYRIGHT
+
+Copyright (C) 2006, the University of Minnesota 
+
+ITSOL is free software; you can redistribute it and/or modify it under
+the terms of  the GNU General Public License as  published by the Free
+Software Foundation [version 2 of  the License, or any later version]
+For details, see 
+
+http://www.gnu.org/copyleft/gpl.html
+
+A copy of the GNU licencing agreement is attached to the ITSOL package
+in the file GNU.  For additional information contact the Free Software
+Foundation Inc., 65 Mass Ave, Cambridge, MA 02139, USA.
+
+DISCLAIMER
+----------
+
+This program  is distributed in the  hope that it will  be useful, but
+WITHOUT   ANY  WARRANTY;   without  even   the  implied   warranty  of
+MERCHANTABILITY  or FITNESS  FOR A  PARTICULAR PURPOSE.   See  the GNU
+General Public License for more details. 
+
+For information on ITSOL contact saad at cs.umn.edu
+*/
+
+#include "slu_sdefs.h"
+
+#define  epsmac  1.0e-16
+
+extern float sdot_(int *, float [], int *, float [], int *);
+extern float snrm2_(int *, float [], int *);
+
+
+int sfgmr(int n,
+     void (*smatvec) (float, float[], float, float[]),
+     void (*spsolve) (int, float[], float[]),
+     float *rhs, float *sol, double tol, int im, int *itmax, FILE * fits)
+{
+/*----------------------------------------------------------------------
+|                 *** Preconditioned FGMRES ***
++-----------------------------------------------------------------------
+| This is a simple version of the ARMS preconditioned FGMRES algorithm.
++-----------------------------------------------------------------------
+| Y. S. Dec. 2000. -- Apr. 2008
++-----------------------------------------------------------------------
+| on entry:
+|----------
+|
+| rhs     = real vector of length n containing the right hand side.
+| sol     = real vector of length n containing an initial guess to the
+|           solution on input.
+| tol     = tolerance for stopping iteration
+| im      = Krylov subspace dimension
+| (itmax) = max number of iterations allowed.
+| fits    = NULL: no output
+|        != NULL: file handle to output " resid vs time and its"
+|
+| on return:
+|----------
+| fgmr      int =  0 --> successful return.
+|           int =  1 --> convergence not achieved in itmax iterations.
+| sol     = contains an approximate solution (upon successful return).
+| itmax   = has changed. It now contains the number of steps required
+|           to converge --
++-----------------------------------------------------------------------
+| internal work arrays:
+|----------
+| vv      = work array of length [im+1][n] (used to store the Arnoldi
+|           basis)
+| hh      = work array of length [im][im+1] (Householder matrix)
+| z       = work array of length [im][n] to store preconditioned vectors
++-----------------------------------------------------------------------
+| subroutines called :
+| matvec - matrix-vector multiplication operation
+| psolve - (right) preconditionning operation
+|	   psolve can be a NULL pointer (GMRES without preconditioner)
++---------------------------------------------------------------------*/
+
+    int maxits = *itmax;
+    int i, i1, ii, j, k, k1, its, retval, i_1 = 1, i_2 = 2;
+    float beta, eps1 = 0.0, t, t0, gam;
+    float **hh, *c, *s, *rs;
+    float **vv, **z, tt;
+    float zero = 0.0;
+    float one = 1.0;
+
+    its = 0;
+    vv = (float **)SUPERLU_MALLOC((im + 1) * sizeof(float *));
+    for (i = 0; i <= im; i++) vv[i] = floatMalloc(n);
+    z = (float **)SUPERLU_MALLOC(im * sizeof(float *));
+    hh = (float **)SUPERLU_MALLOC(im * sizeof(float *));
+    for (i = 0; i < im; i++)
+    {
+	hh[i] = floatMalloc(i + 2);
+	z[i] = floatMalloc(n);
+    }
+    c = floatMalloc(im);
+    s = floatMalloc(im);
+    rs = floatMalloc(im + 1);
+
+    /*---- outer loop starts here ----*/
+    do
+    {
+	/*---- compute initial residual vector ----*/
+	smatvec(one, sol, zero, vv[0]);
+	for (j = 0; j < n; j++)
+	    vv[0][j] = rhs[j] - vv[0][j];	/* vv[0]= initial residual */
+	beta = snrm2_(&n, vv[0], &i_1);
+
+	/*---- print info if fits != null ----*/
+	if (fits != NULL && its == 0)
+	    fprintf(fits, "%8d   %10.2e\n", its, beta);
+	/*if ( beta <= tol * dnrm2_(&n, rhs, &i_1) )*/
+	if ( !(beta > tol * snrm2_(&n, rhs, &i_1)) )
+	    break;
+	t = 1.0 / beta;
+
+	/*---- normalize: vv[0] = vv[0] / beta ----*/
+	for (j = 0; j < n; j++)
+	    vv[0][j] = vv[0][j] * t;
+	if (its == 0)
+	    eps1 = tol * beta;
+
+	/*---- initialize 1-st term of rhs of hessenberg system ----*/
+	rs[0] = beta;
+	for (i = 0; i < im; i++)
+	{
+	    its++;
+	    i1 = i + 1;
+
+	    /*------------------------------------------------------------
+	    |  (Right) Preconditioning Operation   z_{j} = M^{-1} v_{j}
+	    +-----------------------------------------------------------*/
+	    if (spsolve)
+		spsolve(n, z[i], vv[i]);
+	    else
+		scopy_(&n, vv[i], &i_1, z[i], &i_1);
+
+	    /*---- matvec operation w = A z_{j} = A M^{-1} v_{j} ----*/
+	    smatvec(one, z[i], zero, vv[i1]);
+
+	    /*------------------------------------------------------------
+	    |     modified gram - schmidt...
+	    |     h_{i,j} = (w,v_{i})
+	    |     w  = w - h_{i,j} v_{i}
+	    +------------------------------------------------------------*/
+	    t0 = snrm2_(&n, vv[i1], &i_1);
+	    for (j = 0; j <= i; j++)
+	    {
+		float negt;
+		tt = sdot_(&n, vv[j], &i_1, vv[i1], &i_1);
+		hh[i][j] = tt;
+		negt = -tt;
+		saxpy_(&n, &negt, vv[j], &i_1, vv[i1], &i_1);
+	    }
+
+	    /*---- h_{j+1,j} = ||w||_{2} ----*/
+	    t = snrm2_(&n, vv[i1], &i_1);
+	    while (t < 0.5 * t0)
+	    {
+		t0 = t;
+		for (j = 0; j <= i; j++)
+		{
+		    float negt;
+		    tt = sdot_(&n, vv[j], &i_1, vv[i1], &i_1);
+		    hh[i][j] += tt;
+		    negt = -tt;
+		    saxpy_(&n, &negt, vv[j], &i_1, vv[i1], &i_1);
+		}
+		t = snrm2_(&n, vv[i1], &i_1);
+	    }
+
+	    hh[i][i1] = t;
+
+	    if (t != 0.0)
+	    {
+		/*---- v_{j+1} = w / h_{j+1,j} ----*/
+		t = 1.0 / t;
+		for (k = 0; k < n; k++)
+		    vv[i1][k] = vv[i1][k] * t;
+	    }
+	    /*---------------------------------------------------
+	    |     done with modified gram schimdt and arnoldi step
+	    |     now  update factorization of hh
+	    +--------------------------------------------------*/
+
+	    /*--------------------------------------------------------
+	    |   perform previous transformations  on i-th column of h
+	    +-------------------------------------------------------*/
+	    for (k = 1; k <= i; k++)
+	    {
+		k1 = k - 1;
+		tt = hh[i][k1];
+		hh[i][k1] = c[k1] * tt + s[k1] * hh[i][k];
+		hh[i][k] = -s[k1] * tt + c[k1] * hh[i][k];
+	    }
+
+	    gam = sqrt(pow(hh[i][i], 2) + pow(hh[i][i1], 2));
+
+	    /*---------------------------------------------------
+	    |     if gamma is zero then any small value will do
+	    |     affect only residual estimate
+	    +--------------------------------------------------*/
+	    /* if (gam == 0.0) gam = epsmac; */
+
+	    /*---- get next plane rotation ---*/
+	    if (gam == 0.0)
+	    {
+		c[i] = one;
+		s[i] = zero;
+	    }
+            else
+	    {
+		c[i] = hh[i][i] / gam;
+		s[i] = hh[i][i1] / gam;
+	    }
+
+	    rs[i1] = -s[i] * rs[i];
+	    rs[i] = c[i] * rs[i];
+
+	    /*----------------------------------------------------
+	    |   determine residual norm and test for convergence
+	    +---------------------------------------------------*/
+	    hh[i][i] = c[i] * hh[i][i] + s[i] * hh[i][i1];
+	    beta = fabs(rs[i1]);
+	    if (fits != NULL)
+		fprintf(fits, "%8d   %10.2e\n", its, beta);
+	    if (beta <= eps1 || its >= maxits)
+		break;
+	}
+
+	if (i == im) i--;
+
+	/*---- now compute solution. 1st, solve upper triangular system ----*/
+	rs[i] = rs[i] / hh[i][i];
+
+	for (ii = 1; ii <= i; ii++)
+	{
+	    k = i - ii;
+	    k1 = k + 1;
+	    tt = rs[k];
+	    for (j = k1; j <= i; j++)
+		tt = tt - hh[j][k] * rs[j];
+	    rs[k] = tt / hh[k][k];
+	}
+
+	/*---- linear combination of v[i]'s to get sol. ----*/
+	for (j = 0; j <= i; j++)
+	{
+	    tt = rs[j];
+	    for (k = 0; k < n; k++)
+		sol[k] += tt * z[j][k];
+	}
+
+	/* calculate the residual and output */
+	smatvec(one, sol, zero, vv[0]);
+	for (j = 0; j < n; j++)
+	    vv[0][j] = rhs[j] - vv[0][j];	/* vv[0]= initial residual */
+
+	/*---- print info if fits != null ----*/
+	beta = snrm2_(&n, vv[0], &i_1);
+
+	/*---- restart outer loop if needed ----*/
+	/*if (beta >= eps1 / tol)*/
+	if ( !(beta < eps1 / tol) )
+	{
+	    its = maxits + 10;
+	    break;
+	}
+	if (beta <= eps1)
+	    break;
+    } while(its < maxits);
+
+    retval = (its >= maxits);
+    for (i = 0; i <= im; i++)
+	SUPERLU_FREE(vv[i]);
+    SUPERLU_FREE(vv);
+    for (i = 0; i < im; i++)
+    {
+	SUPERLU_FREE(hh[i]);
+	SUPERLU_FREE(z[i]);
+    }
+    SUPERLU_FREE(hh);
+    SUPERLU_FREE(z);
+    SUPERLU_FREE(c);
+    SUPERLU_FREE(s);
+    SUPERLU_FREE(rs);
+
+    *itmax = its;
+
+    return retval;
+} /*----end of fgmr ----*/
diff --git a/EXAMPLE/sitersol.c b/EXAMPLE/sitersol.c
new file mode 100644
index 0000000..e54f9e1
--- /dev/null
+++ b/EXAMPLE/sitersol.c
@@ -0,0 +1,370 @@
+
+/*! @file sitersol.c
+ * \brief Example #1 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.2) --
+ * Lawrence Berkeley National Laboratory
+ * November, 2010
+ * August, 2011
+ *
+ * This example shows that ILU is computed from the equilibrated matrix,
+ * and the preconditioned GMRES is applied to the equilibrated system.
+ * The driver routine SGSISX is called twice to perform factorization
+ * and apply preconditioner separately.
+ * 
+ * Note that SGSISX performs the following factorization:
+ *     Pr*Dr*A*Dc*Pc^T ~= LU
+ * with Pr being obtained from MC64 statically then partial pivoting
+ * dybamically. On return, A is overwritten as A1 = Dr*A*Dc.
+ *
+ * We can solve the transformed system, A1*y = Dr*B, using FGMRES.
+ * B is first overwritten as Dr*B.
+ * Then GMRES step requires requires 2 procedures:
+ *   1) Apply preconditioner M^{-1} = Pc^T*U^{-1}*L^{-1}*Pr
+ *   2) Matrix-vector multiplication: w = A1*v
+ * 
+ * </pre>
+ */
+
+#include "slu_sdefs.h"
+
+superlu_options_t *GLOBAL_OPTIONS;
+float *GLOBAL_R, *GLOBAL_C;
+int *GLOBAL_PERM_C, *GLOBAL_PERM_R;
+SuperMatrix *GLOBAL_A, *GLOBAL_L, *GLOBAL_U;
+SuperLUStat_t *GLOBAL_STAT;
+mem_usage_t   *GLOBAL_MEM_USAGE;
+
+void spsolve(int n,
+                  float x[], /* solution */
+                  float y[]  /* right-hand side */
+)
+{
+    SuperMatrix *A = GLOBAL_A, *L = GLOBAL_L, *U = GLOBAL_U;
+    SuperLUStat_t *stat = GLOBAL_STAT;
+    int *perm_c = GLOBAL_PERM_C, *perm_r = GLOBAL_PERM_R;
+    char equed[1] = {'N'};
+    float *R = GLOBAL_R, *C = GLOBAL_C;
+    superlu_options_t *options = GLOBAL_OPTIONS;
+    mem_usage_t  *mem_usage = GLOBAL_MEM_USAGE;
+    int info;
+    static DNformat X, Y;
+    static SuperMatrix XX = {SLU_DN, SLU_S, SLU_GE, 1, 1, &X};
+    static SuperMatrix YY = {SLU_DN, SLU_S, SLU_GE, 1, 1, &Y};
+    float rpg, rcond;
+
+    XX.nrow = YY.nrow = n;
+    X.lda = Y.lda = n;
+    X.nzval = x;
+    Y.nzval = y;
+
+#if 0
+    dcopy_(&n, y, &i_1, x, &i_1);
+    sgstrs(NOTRANS, L, U, perm_c, perm_r, &XX, stat, &info);
+#else
+    sgsisx(options, A, perm_c, perm_r, NULL, equed, R, C,
+	   L, U, NULL, 0, &YY, &XX, &rpg, &rcond, mem_usage, stat, &info);
+#endif
+}
+
+void smatvec_mult(float alpha, float x[], float beta, float y[])
+{
+    SuperMatrix *A = GLOBAL_A;
+
+    sp_sgemv("N", alpha, A, x, 1, beta, y, 1);
+}
+
+int main(int argc, char *argv[])
+{
+    void smatvec_mult(float alpha, float x[], float beta, float y[]);
+    void spsolve(int n, float x[], float y[]);
+    extern int sfgmr( int n,
+	void (*matvec_mult)(float, float [], float, float []),
+	void (*psolve)(int n, float [], float[]),
+	float *rhs, float *sol, double tol, int restrt, int *itmax,
+	FILE *fits);
+    extern int sfill_diag(int n, NCformat *Astore);
+
+    char     equed[1] = {'B'};
+    yes_no_t equil;
+    trans_t  trans;
+    SuperMatrix A, L, U;
+    SuperMatrix B, X;
+    NCformat *Astore;
+    NCformat *Ustore;
+    SCformat *Lstore;
+    float   *a;
+    int      *asub, *xa;
+    int      *etree;
+    int      *perm_c; /* column permutation vector */
+    int      *perm_r; /* row permutations from partial pivoting */
+    int      nrhs, ldx, lwork, info, m, n, nnz;
+    float   *rhsb, *rhsx, *xact;
+    float   *work = NULL;
+    float   *R, *C;
+    float   u, rpg, rcond;
+    float zero = 0.0;
+    float one = 1.0;
+    mem_usage_t   mem_usage;
+    superlu_options_t options;
+    SuperLUStat_t stat;
+
+    int restrt, iter, maxit, i;
+    double resid;
+    float *x, *b;
+
+#ifdef DEBUG
+    extern int num_drop_L, num_drop_U;
+#endif
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Enter main()");
+#endif
+
+    /* Defaults */
+    lwork = 0;
+    nrhs  = 1;
+    trans = NOTRANS;
+
+    /* Set the default input options:
+	options.Fact = DOFACT;
+	options.Equil = YES;
+	options.ColPerm = COLAMD;
+	options.DiagPivotThresh = 0.1; //different from complete LU
+	options.Trans = NOTRANS;
+	options.IterRefine = NOREFINE;
+	options.SymmetricMode = NO;
+	options.PivotGrowth = NO;
+	options.ConditionNumber = NO;
+	options.PrintStat = YES;
+	options.RowPerm = LargeDiag;
+	options.ILU_DropTol = 1e-4;
+	options.ILU_FillTol = 1e-2;
+	options.ILU_FillFactor = 10.0;
+	options.ILU_DropRule = DROP_BASIC | DROP_AREA;
+	options.ILU_Norm = INF_NORM;
+	options.ILU_MILU = SILU;
+     */
+    ilu_set_default_options(&options);
+
+    /* Modify the defaults. */
+    options.PivotGrowth = YES;	  /* Compute reciprocal pivot growth */
+    options.ConditionNumber = YES;/* Compute reciprocal condition number */
+
+    if ( lwork > 0 ) {
+	work = SUPERLU_MALLOC(lwork);
+	if ( !work ) ABORT("Malloc fails for work[].");
+    }
+
+    /* Read matrix A from a file in Harwell-Boeing format.*/
+    if (argc < 2)
+    {
+	printf("Usage:\n%s [OPTION] < [INPUT] > [OUTPUT]\nOPTION:\n"
+		"-h -hb:\n\t[INPUT] is a Harwell-Boeing format matrix.\n"
+		"-r -rb:\n\t[INPUT] is a Rutherford-Boeing format matrix.\n"
+		"-t -triplet:\n\t[INPUT] is a triplet format matrix.\n",
+		argv[0]);
+	return 0;
+    }
+    else
+    {
+	switch (argv[1][1])
+	{
+	    case 'H':
+	    case 'h':
+		printf("Input a Harwell-Boeing format matrix:\n");
+		sreadhb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'R':
+	    case 'r':
+		printf("Input a Rutherford-Boeing format matrix:\n");
+		sreadrb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'T':
+	    case 't':
+		printf("Input a triplet format matrix:\n");
+		sreadtriple(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    default:
+		printf("Unrecognized format.\n");
+		return 0;
+	}
+    }
+
+    sCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa,
+                                SLU_NC, SLU_S, SLU_GE);
+    Astore = A.Store;
+    sfill_diag(n, Astore);
+    printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+    fflush(stdout);
+
+    /* Generate the right-hand side */
+    if ( !(rhsb = floatMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+    if ( !(rhsx = floatMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsx[].");
+    sCreate_Dense_Matrix(&B, m, nrhs, rhsb, m, SLU_DN, SLU_S, SLU_GE);
+    sCreate_Dense_Matrix(&X, m, nrhs, rhsx, m, SLU_DN, SLU_S, SLU_GE);
+    xact = floatMalloc(n * nrhs);
+    ldx = n;
+    sGenXtrue(n, nrhs, xact, ldx);
+    sFillRHS(trans, nrhs, xact, ldx, &A, &B);
+
+    if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+    if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+    if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+    if ( !(R = (float *) SUPERLU_MALLOC(A.nrow * sizeof(float))) )
+	ABORT("SUPERLU_MALLOC fails for R[].");
+    if ( !(C = (float *) SUPERLU_MALLOC(A.ncol * sizeof(float))) )
+	ABORT("SUPERLU_MALLOC fails for C[].");
+
+    info = 0;
+#ifdef DEBUG
+    num_drop_L = 0;
+    num_drop_U = 0;
+#endif
+
+    /* Initialize the statistics variables. */
+    StatInit(&stat);
+
+    /* Compute the incomplete factorization and compute the condition number
+       and pivot growth using dgsisx. */
+    B.ncol = 0;  /* not to perform triangular solution */
+    sgsisx(&options, &A, perm_c, perm_r, etree, equed, R, C, &L, &U, work,
+	   lwork, &B, &X, &rpg, &rcond, &mem_usage, &stat, &info);
+
+    /* Set RHS for GMRES. */
+    if (!(b = floatMalloc(m))) ABORT("Malloc fails for b[].");
+    if (*equed == 'R' || *equed == 'B') {
+	for (i = 0; i < n; ++i) b[i] = rhsb[i] * R[i];
+    } else {
+	for (i = 0; i < m; i++) b[i] = rhsb[i];
+    }
+
+    printf("sgsisx(): info %d, equed %c\n", info, equed[0]);
+    if (info > 0 || rcond < 1e-8 || rpg > 1e8)
+	printf("WARNING: This preconditioner might be unstable.\n");
+
+    if ( info == 0 || info == n+1 ) {
+	if ( options.PivotGrowth == YES )
+	    printf("Recip. pivot growth = %e\n", rpg);
+	if ( options.ConditionNumber == YES )
+	    printf("Recip. condition number = %e\n", rcond);
+    } else if ( info > 0 && lwork == -1 ) {
+	printf("** Estimated memory: %d bytes\n", info - n);
+    }
+
+    Lstore = (SCformat *) L.Store;
+    Ustore = (NCformat *) U.Store;
+    printf("n(A) = %d, nnz(A) = %d\n", n, Astore->nnz);
+    printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
+    printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
+    printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    printf("Fill ratio: nnz(F)/nnz(A) = %.3f\n",
+	    ((double)(Lstore->nnz) + (double)(Ustore->nnz) - (double)n)
+	    / (double)Astore->nnz);
+    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+    fflush(stdout);
+
+    /* Set the global variables. */
+    GLOBAL_A = &A;
+    GLOBAL_L = &L;
+    GLOBAL_U = &U;
+    GLOBAL_STAT = &stat;
+    GLOBAL_PERM_C = perm_c;
+    GLOBAL_PERM_R = perm_r;
+    GLOBAL_OPTIONS = &options;
+    GLOBAL_R = R;
+    GLOBAL_C = C;
+    GLOBAL_MEM_USAGE = &mem_usage;
+
+    /* Set the options to do solve-only. */
+    options.Fact = FACTORED;
+    options.PivotGrowth = NO;
+    options.ConditionNumber = NO;
+
+    /* Set the variables used by GMRES. */
+    restrt = SUPERLU_MIN(n / 3 + 1, 50);
+    maxit = 1000;
+    iter = maxit;
+    resid = 1e-8;
+    if (!(x = floatMalloc(n))) ABORT("Malloc fails for x[].");
+
+    if (info <= n + 1)
+    {
+	int i_1 = 1;
+	double maxferr = 0.0, nrmA, nrmB, res, t;
+        float temp;
+	extern float snrm2_(int *, float [], int *);
+	extern void saxpy_(int *, float *, float [], int *, float [], int *);
+
+	/* Initial guess */
+	for (i = 0; i < n; i++) x[i] = zero;
+
+	t = SuperLU_timer_();
+
+	/* Call GMRES */
+	sfgmr(n, smatvec_mult, spsolve, b, x, resid, restrt, &iter, stdout);
+
+	t = SuperLU_timer_() - t;
+
+	/* Output the result. */
+	nrmA = snrm2_(&(Astore->nnz), (float *)((DNformat *)A.Store)->nzval,
+		&i_1);
+	nrmB = snrm2_(&m, b, &i_1);
+	sp_sgemv("N", -1.0, &A, x, 1, 1.0, b, 1);
+	res = snrm2_(&m, b, &i_1);
+	resid = res / nrmB;
+	printf("||A||_F = %.1e, ||B||_2 = %.1e, ||B-A*X||_2 = %.1e, "
+		"relres = %.1e\n", nrmA, nrmB, res, resid);
+
+	if (iter >= maxit)
+	{
+	    if (resid >= 1.0) iter = -180;
+	    else if (resid > 1e-8) iter = -111;
+	}
+	printf("iteration: %d\nresidual: %.1e\nGMRES time: %.2f seconds.\n",
+		iter, resid, t);
+
+	/* Scale the solution back if equilibration was performed. */
+	if (*equed == 'C' || *equed == 'B') 
+	    for (i = 0; i < n; i++) x[i] *= C[i];
+
+	for (i = 0; i < m; i++) {
+	    maxferr = SUPERLU_MAX(maxferr, fabs(x[i] - xact[i]));
+        }
+	printf("||X-X_true||_oo = %.1e\n", maxferr);
+    }
+#ifdef DEBUG
+    printf("%d entries in L and %d entries in U dropped.\n",
+	    num_drop_L, num_drop_U);
+#endif
+    fflush(stdout);
+
+    if ( options.PrintStat ) StatPrint(&stat);
+    StatFree(&stat);
+
+    SUPERLU_FREE (rhsb);
+    SUPERLU_FREE (rhsx);
+    SUPERLU_FREE (xact);
+    SUPERLU_FREE (etree);
+    SUPERLU_FREE (perm_r);
+    SUPERLU_FREE (perm_c);
+    SUPERLU_FREE (R);
+    SUPERLU_FREE (C);
+    Destroy_CompCol_Matrix(&A);
+    Destroy_SuperMatrix_Store(&B);
+    Destroy_SuperMatrix_Store(&X);
+    if ( lwork >= 0 ) {
+	Destroy_SuperNode_Matrix(&L);
+	Destroy_CompCol_Matrix(&U);
+    }
+    SUPERLU_FREE(b);
+    SUPERLU_FREE(x);
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Exit main()");
+#endif
+
+    return 0;
+}
diff --git a/EXAMPLE/sitersol1 b/EXAMPLE/sitersol1
new file mode 100755
index 0000000..4d3b482
Binary files /dev/null and b/EXAMPLE/sitersol1 differ
diff --git a/EXAMPLE/sitersol1.c b/EXAMPLE/sitersol1.c
new file mode 100644
index 0000000..242ec85
--- /dev/null
+++ b/EXAMPLE/sitersol1.c
@@ -0,0 +1,379 @@
+
+/*! @file sitersol1.c
+ * \brief Example #2 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.2) --
+ * Lawrence Berkeley National Laboratory
+ * November, 2010
+ * August, 2011
+ *
+ * This example shows that ILU is computed from the equilibrated matrix,
+ * but the preconditioned GMRES is applied to the original system.
+ * The driver routine SGSISX is called twice to perform factorization
+ * and apply preconditioner separately.
+ * 
+ * Note that SGSISX performs the following factorization:
+ *     Pr*Dr*A*Dc*Pc^T ~= LU
+ * with Pr being obtained from MC64 statically then partial pivoting
+ * dybamically. On return, A is overwritten as A1 = Dr*A*Dc.
+ *
+ * We need to save a copy of the original matrix A, then solve
+ * the original system, A*x = B, using FGMRES.
+ * Each GMRES step requires requires 2 procedures:
+ *   1) Apply preconditioner M^{-1} = Dc*Pc^T*U^{-1}*L^{-1}*Pr*Dr
+ *   2) Matrix-vector multiplication: w = A*v
+ *
+ * </pre>
+ */
+
+#include "slu_sdefs.h"
+
+char *GLOBAL_EQUED;
+superlu_options_t *GLOBAL_OPTIONS;
+float *GLOBAL_R, *GLOBAL_C;
+int *GLOBAL_PERM_C, *GLOBAL_PERM_R;
+SuperMatrix *GLOBAL_A, *GLOBAL_A_ORIG, *GLOBAL_L, *GLOBAL_U;
+SuperLUStat_t *GLOBAL_STAT;
+mem_usage_t   *GLOBAL_MEM_USAGE;
+
+void spsolve(int n,
+                  float x[], /* solution */
+                  float y[]  /* right-hand side */
+)
+{
+    SuperMatrix *A = GLOBAL_A, *L = GLOBAL_L, *U = GLOBAL_U;
+    SuperLUStat_t *stat = GLOBAL_STAT;
+    int *perm_c = GLOBAL_PERM_C, *perm_r = GLOBAL_PERM_R;
+    char *equed = GLOBAL_EQUED;
+    float *R = GLOBAL_R, *C = GLOBAL_C;
+    superlu_options_t *options = GLOBAL_OPTIONS;
+    mem_usage_t  *mem_usage = GLOBAL_MEM_USAGE;
+    int info;
+    static DNformat X, Y;
+    static SuperMatrix XX = {SLU_DN, SLU_S, SLU_GE, 1, 1, &X};
+    static SuperMatrix YY = {SLU_DN, SLU_S, SLU_GE, 1, 1, &Y};
+    float rpg, rcond;
+
+    XX.nrow = YY.nrow = n;
+    X.lda = Y.lda = n;
+    X.nzval = x;
+    Y.nzval = y;
+
+#if 0
+    scopy_(&n, y, &i_1, x, &i_1);
+    sgstrs(NOTRANS, L, U, perm_c, perm_r, &XX, stat, &info);
+#else
+    sgsisx(options, A, perm_c, perm_r, NULL, equed, R, C,
+	   L, U, NULL, 0, &YY, &XX, &rpg, &rcond, mem_usage, stat, &info);
+#endif
+}
+
+void smatvec_mult(float alpha, float x[], float beta, float y[])
+{
+    SuperMatrix *A = GLOBAL_A_ORIG;
+
+    sp_sgemv("N", alpha, A, x, 1, beta, y, 1);
+}
+
+int main(int argc, char *argv[])
+{
+    void smatvec_mult(float alpha, float x[], float beta, float y[]);
+    void spsolve(int n, float x[], float y[]);
+    extern int sfgmr( int n,
+	void (*matvec_mult)(float, float [], float, float []),
+	void (*psolve)(int n, float [], float[]),
+	float *rhs, float *sol, double tol, int restrt, int *itmax,
+	FILE *fits);
+    extern int sfill_diag(int n, NCformat *Astore);
+
+    char     equed[1] = {'B'};
+    yes_no_t equil;
+    trans_t  trans;
+    SuperMatrix A, AA, L, U;
+    SuperMatrix B, X;
+    NCformat *Astore;
+    NCformat *Ustore;
+    SCformat *Lstore;
+    float   *a, *a_orig;
+    int      *asub, *xa, *asub_orig, *xa_orig;
+    int      *etree;
+    int      *perm_c; /* column permutation vector */
+    int      *perm_r; /* row permutations from partial pivoting */
+    int      nrhs, ldx, lwork, info, m, n, nnz;
+    float   *rhsb, *rhsx, *xact;
+    float   *work = NULL;
+    float   *R, *C;
+    float   u, rpg, rcond;
+    float zero = 0.0;
+    float one = 1.0;
+    mem_usage_t   mem_usage;
+    superlu_options_t options;
+    SuperLUStat_t stat;
+
+    int restrt, iter, maxit, i;
+    double resid;
+    float *x, *b;
+
+#ifdef DEBUG
+    extern int num_drop_L, num_drop_U;
+#endif
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Enter main()");
+#endif
+
+    /* Defaults */
+    lwork = 0;
+    nrhs  = 1;
+    trans = NOTRANS;
+
+    /* Set the default input options:
+	options.Fact = DOFACT;
+	options.Equil = YES;
+	options.ColPerm = COLAMD;
+	options.DiagPivotThresh = 0.1; //different from complete LU
+	options.Trans = NOTRANS;
+	options.IterRefine = NOREFINE;
+	options.SymmetricMode = NO;
+	options.PivotGrowth = NO;
+	options.ConditionNumber = NO;
+	options.PrintStat = YES;
+	options.RowPerm = LargeDiag;
+	options.ILU_DropTol = 1e-4;
+	options.ILU_FillTol = 1e-2;
+	options.ILU_FillFactor = 10.0;
+	options.ILU_DropRule = DROP_BASIC | DROP_AREA;
+	options.ILU_Norm = INF_NORM;
+	options.ILU_MILU = SILU;
+     */
+    ilu_set_default_options(&options);
+
+    /* Modify the defaults. */
+    options.PivotGrowth = YES;	  /* Compute reciprocal pivot growth */
+    options.ConditionNumber = YES;/* Compute reciprocal condition number */
+
+    if ( lwork > 0 ) {
+	work = SUPERLU_MALLOC(lwork);
+	if ( !work ) ABORT("Malloc fails for work[].");
+    }
+
+    /* Read matrix A from a file in Harwell-Boeing format.*/
+    if (argc < 2)
+    {
+	printf("Usage:\n%s [OPTION] < [INPUT] > [OUTPUT]\nOPTION:\n"
+		"-h -hb:\n\t[INPUT] is a Harwell-Boeing format matrix.\n"
+		"-r -rb:\n\t[INPUT] is a Rutherford-Boeing format matrix.\n"
+		"-t -triplet:\n\t[INPUT] is a triplet format matrix.\n",
+		argv[0]);
+	return 0;
+    }
+    else
+    {
+	switch (argv[1][1])
+	{
+	    case 'H':
+	    case 'h':
+		printf("Input a Harwell-Boeing format matrix:\n");
+		sreadhb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'R':
+	    case 'r':
+		printf("Input a Rutherford-Boeing format matrix:\n");
+		sreadrb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'T':
+	    case 't':
+		printf("Input a triplet format matrix:\n");
+		sreadtriple(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    default:
+		printf("Unrecognized format.\n");
+		return 0;
+	}
+    }
+
+    sCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa,
+                                SLU_NC, SLU_S, SLU_GE);
+    Astore = A.Store;
+    sfill_diag(n, Astore);
+    printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+    fflush(stdout);
+
+    /* Make a copy of the original matrix. */
+    nnz = Astore->nnz;
+    a_orig = floatMalloc(nnz);
+    asub_orig = intMalloc(nnz);
+    xa_orig = intMalloc(n+1);
+    for (i = 0; i < nnz; ++i) {
+	a_orig[i] = ((float *)Astore->nzval)[i];
+	asub_orig[i] = Astore->rowind[i];
+    }
+    for (i = 0; i <= n; ++i) xa_orig[i] = Astore->colptr[i];
+    sCreate_CompCol_Matrix(&AA, m, n, nnz, a_orig, asub_orig, xa_orig,
+			   SLU_NC, SLU_S, SLU_GE);
+    
+    /* Generate the right-hand side */
+    if ( !(rhsb = floatMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+    if ( !(rhsx = floatMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsx[].");
+    sCreate_Dense_Matrix(&B, m, nrhs, rhsb, m, SLU_DN, SLU_S, SLU_GE);
+    sCreate_Dense_Matrix(&X, m, nrhs, rhsx, m, SLU_DN, SLU_S, SLU_GE);
+    xact = floatMalloc(n * nrhs);
+    ldx = n;
+    sGenXtrue(n, nrhs, xact, ldx);
+    sFillRHS(trans, nrhs, xact, ldx, &A, &B);
+
+    if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+    if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+    if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+    if ( !(R = (float *) SUPERLU_MALLOC(A.nrow * sizeof(float))) )
+	ABORT("SUPERLU_MALLOC fails for R[].");
+    if ( !(C = (float *) SUPERLU_MALLOC(A.ncol * sizeof(float))) )
+	ABORT("SUPERLU_MALLOC fails for C[].");
+
+    info = 0;
+#ifdef DEBUG
+    num_drop_L = 0;
+    num_drop_U = 0;
+#endif
+
+    /* Initialize the statistics variables. */
+    StatInit(&stat);
+
+    /* Compute the incomplete factorization and compute the condition number
+       and pivot growth using dgsisx. */
+    B.ncol = 0;  /* not to perform triangular solution */
+    sgsisx(&options, &A, perm_c, perm_r, etree, equed, R, C, &L, &U, work,
+	   lwork, &B, &X, &rpg, &rcond, &mem_usage, &stat, &info);
+
+    /* Set RHS for GMRES. */
+    if (!(b = floatMalloc(m))) ABORT("Malloc fails for b[].");
+    for (i = 0; i < m; i++) b[i] = rhsb[i];
+
+    printf("sgsisx(): info %d, equed %c\n", info, equed[0]);
+    if (info > 0 || rcond < 1e-8 || rpg > 1e8)
+	printf("WARNING: This preconditioner might be unstable.\n");
+
+    if ( info == 0 || info == n+1 ) {
+	if ( options.PivotGrowth == YES )
+	    printf("Recip. pivot growth = %e\n", rpg);
+	if ( options.ConditionNumber == YES )
+	    printf("Recip. condition number = %e\n", rcond);
+    } else if ( info > 0 && lwork == -1 ) {
+	printf("** Estimated memory: %d bytes\n", info - n);
+    }
+
+    Lstore = (SCformat *) L.Store;
+    Ustore = (NCformat *) U.Store;
+    printf("n(A) = %d, nnz(A) = %d\n", n, Astore->nnz);
+    printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
+    printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
+    printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    printf("Fill ratio: nnz(F)/nnz(A) = %.3f\n",
+	    ((double)(Lstore->nnz) + (double)(Ustore->nnz) - (double)n)
+	    / (double)Astore->nnz);
+    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+    fflush(stdout);
+
+    /* Set the global variables. */
+    GLOBAL_A = &A;
+    GLOBAL_A_ORIG = &AA;
+    GLOBAL_L = &L;
+    GLOBAL_U = &U;
+    GLOBAL_STAT = &stat;
+    GLOBAL_PERM_C = perm_c;
+    GLOBAL_PERM_R = perm_r;
+    GLOBAL_OPTIONS = &options;
+    GLOBAL_EQUED = equed;
+    GLOBAL_R = R;
+    GLOBAL_C = C;
+    GLOBAL_MEM_USAGE = &mem_usage;
+
+    /* Set the options to do solve-only. */
+    options.Fact = FACTORED;
+    options.PivotGrowth = NO;
+    options.ConditionNumber = NO;
+
+    /* Set the variables used by GMRES. */
+    restrt = SUPERLU_MIN(n / 3 + 1, 50);
+    maxit = 1000;
+    iter = maxit;
+    resid = 1e-8;
+    if (!(x = floatMalloc(n))) ABORT("Malloc fails for x[].");
+
+    if (info <= n + 1)
+    {
+	int i_1 = 1;
+	double maxferr = 0.0, nrmA, nrmB, res, t;
+        float temp;
+	extern float snrm2_(int *, float [], int *);
+	extern void saxpy_(int *, float *, float [], int *, float [], int *);
+
+	/* Initial guess */
+	for (i = 0; i < n; i++) x[i] = zero;
+
+	t = SuperLU_timer_();
+
+	/* Call GMRES */
+	sfgmr(n, smatvec_mult, spsolve, b, x, resid, restrt, &iter, stdout);
+
+	t = SuperLU_timer_() - t;
+
+	/* Output the result. */
+	nrmA = snrm2_(&(Astore->nnz), (float *)((DNformat *)A.Store)->nzval,
+		&i_1);
+	nrmB = snrm2_(&m, b, &i_1);
+	sp_sgemv("N", -1.0, &A, x, 1, 1.0, b, 1);
+	res = snrm2_(&m, b, &i_1);
+	resid = res / nrmB;
+	printf("||A||_F = %.1e, ||B||_2 = %.1e, ||B-A*X||_2 = %.1e, "
+		"relres = %.1e\n", nrmA, nrmB, res, resid);
+
+	if (iter >= maxit)
+	{
+	    if (resid >= 1.0) iter = -180;
+	    else if (resid > 1e-8) iter = -111;
+	}
+	printf("iteration: %d\nresidual: %.1e\nGMRES time: %.2f seconds.\n",
+		iter, resid, t);
+
+	for (i = 0; i < m; i++) {
+	    maxferr = SUPERLU_MAX(maxferr, fabs(x[i] - xact[i]));
+        }
+	printf("||X-X_true||_oo = %.1e\n", maxferr);
+    }
+#ifdef DEBUG
+    printf("%d entries in L and %d entries in U dropped.\n",
+	    num_drop_L, num_drop_U);
+#endif
+    fflush(stdout);
+
+    if ( options.PrintStat ) StatPrint(&stat);
+    StatFree(&stat);
+
+    SUPERLU_FREE (rhsb);
+    SUPERLU_FREE (rhsx);
+    SUPERLU_FREE (xact);
+    SUPERLU_FREE (etree);
+    SUPERLU_FREE (perm_r);
+    SUPERLU_FREE (perm_c);
+    SUPERLU_FREE (R);
+    SUPERLU_FREE (C);
+    Destroy_CompCol_Matrix(&A);
+    Destroy_CompCol_Matrix(&AA);
+    Destroy_SuperMatrix_Store(&B);
+    Destroy_SuperMatrix_Store(&X);
+    if ( lwork >= 0 ) {
+	Destroy_SuperNode_Matrix(&L);
+	Destroy_CompCol_Matrix(&U);
+    }
+    SUPERLU_FREE(b);
+    SUPERLU_FREE(x);
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Exit main()");
+#endif
+
+    return 0;
+}
diff --git a/EXAMPLE/slinsol.c b/EXAMPLE/slinsol.c
index 9c53764..40db184 100644
--- a/EXAMPLE/slinsol.c
+++ b/EXAMPLE/slinsol.c
@@ -8,7 +8,7 @@
  */
 #include "slu_sdefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
     SuperMatrix A;
     NCformat *Astore;
@@ -81,19 +81,18 @@ main(int argc, char *argv[])
     	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
 	
 	sQuerySpace(&L, &U, &mem_usage);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	
     } else {
 	printf("sgssv() error returns INFO= %d\n", info);
 	if ( info <= n ) { /* factorization completes */
 	    sQuerySpace(&L, &U, &mem_usage);
-	    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		   mem_usage.expansions);
+	    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	}
     }
 
diff --git a/EXAMPLE/slinsol1.c b/EXAMPLE/slinsol1.c
index 07d6d30..22d9c01 100644
--- a/EXAMPLE/slinsol1.c
+++ b/EXAMPLE/slinsol1.c
@@ -8,7 +8,7 @@
  */
 #include "slu_sdefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
     SuperMatrix A;
     NCformat *Astore;
@@ -86,19 +86,18 @@ main(int argc, char *argv[])
     	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
 	
 	sQuerySpace(&L, &U, &mem_usage);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	
     } else {
 	printf("sgssv() error returns INFO= %d\n", info);
 	if ( info <= n ) { /* factorization completes */
 	    sQuerySpace(&L, &U, &mem_usage);
-	    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		   mem_usage.expansions);
+	    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	}
     }
 
diff --git a/EXAMPLE/slinsolx.c b/EXAMPLE/slinsolx.c
index b3d2111..b0f68d4 100644
--- a/EXAMPLE/slinsolx.c
+++ b/EXAMPLE/slinsolx.c
@@ -1,14 +1,14 @@
 
 /*
- * -- SuperLU routine (version 3.0) --
+ * -- SuperLU routine (version 3.1) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * October 15, 2003
+ * August 1, 2008
  *
  */
 #include "slu_sdefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
     char           equed[1];
     yes_no_t       equil;
@@ -69,7 +69,7 @@ main(int argc, char *argv[])
     /* Add more functionalities that the defaults. */
     options.PivotGrowth = YES;    /* Compute reciprocal pivot growth */
     options.ConditionNumber = YES;/* Compute reciprocal condition number */
-    options.IterRefine = SINGLE;  /* Perform single-precision refinement */
+    options.IterRefine = SLU_SINGLE;  /* Perform single-precision refinement */
     
     if ( lwork > 0 ) {
 	work = SUPERLU_MALLOC(lwork);
@@ -139,9 +139,10 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
+
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	     
 	fflush(stdout);
 
@@ -165,9 +166,11 @@ main(int argc, char *argv[])
     Destroy_CompCol_Matrix(&A);
     Destroy_SuperMatrix_Store(&B);
     Destroy_SuperMatrix_Store(&X);
-    if ( lwork >= 0 ) {
+    if ( lwork == 0 ) {
         Destroy_SuperNode_Matrix(&L);
         Destroy_CompCol_Matrix(&U);
+    } else if ( lwork > 0 ) {
+        SUPERLU_FREE(work);
     }
 
 #if ( DEBUGlevel>=1 )
@@ -179,7 +182,7 @@ main(int argc, char *argv[])
 /*  
  * Parse command line inputs.
  */
-static void
+void
 parse_command_line(int argc, char *argv[], int *lwork,
                    float *u, yes_no_t *equil, trans_t *trans )
 {
diff --git a/EXAMPLE/slinsolx1.c b/EXAMPLE/slinsolx1.c
index f6e76ee..0c93def 100644
--- a/EXAMPLE/slinsolx1.c
+++ b/EXAMPLE/slinsolx1.c
@@ -8,7 +8,7 @@
  */
 #include "slu_sdefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
 /*
  * Purpose
@@ -135,9 +135,10 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
+
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	fflush(stdout);
 
     } else if ( info > 0 && lwork == -1 ) {
@@ -194,11 +195,14 @@ main(int argc, char *argv[])
     Destroy_CompCol_Matrix(&A);
     Destroy_SuperMatrix_Store(&B);
     Destroy_SuperMatrix_Store(&X);
-    if ( lwork >= 0 ) {
+    if ( lwork == 0 ) {
         Destroy_SuperNode_Matrix(&L);
         Destroy_CompCol_Matrix(&U);
+    } else if ( lwork > 0 ) {
+        SUPERLU_FREE(work);
     }
 
+
 #if ( DEBUGlevel>=1 )
     CHECK_MALLOC("Exit main()");
 #endif
@@ -207,7 +211,7 @@ main(int argc, char *argv[])
 /*  
  * Parse command line options to get relaxed snode size, panel size, etc.
  */
-static void
+void
 parse_command_line(int argc, char *argv[], int *lwork,
                    float *u, yes_no_t *equil, trans_t *trans )
 {
diff --git a/EXAMPLE/slinsolx2.c b/EXAMPLE/slinsolx2.c
index f9a2265..8962881 100644
--- a/EXAMPLE/slinsolx2.c
+++ b/EXAMPLE/slinsolx2.c
@@ -8,7 +8,7 @@
  */
 #include "slu_sdefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
 /*
  * Purpose
@@ -150,9 +150,10 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
+
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	if ( options.IterRefine ) {
             printf("Iterative Refinement:\n");
 	    printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
@@ -204,9 +205,8 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	if ( options.IterRefine ) {
             printf("Iterative Refinement:\n");
 	    printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
@@ -232,9 +232,11 @@ main(int argc, char *argv[])
     Destroy_CompCol_Matrix(&A1);
     Destroy_Dense_Matrix(&B1);
     Destroy_Dense_Matrix(&X);
-    if ( lwork >= 0 ) {
+    if ( lwork == 0 ) {
         Destroy_SuperNode_Matrix(&L);
         Destroy_CompCol_Matrix(&U);
+    } else if ( lwork > 0 ) {
+        SUPERLU_FREE(work);
     }
 
 #if ( DEBUGlevel>=1 )
@@ -245,7 +247,7 @@ main(int argc, char *argv[])
 /*  
  * Parse command line options to get relaxed snode size, panel size, etc.
  */
-static void
+void
 parse_command_line(int argc, char *argv[], int *lwork,
                    double *u, yes_no_t *equil, trans_t *trans )
 {
diff --git a/EXAMPLE/sp_ienv.c b/EXAMPLE/sp_ienv.c
index 7b0f93b..d1ed662 100644
--- a/EXAMPLE/sp_ienv.c
+++ b/EXAMPLE/sp_ienv.c
@@ -1,20 +1,23 @@
-/*
- * -- SuperLU routine (version 2.0) --
+/*! @file sp_ienv.c
+ * \brief Chooses machine-dependent parameters for the local
+ * environment.
+ *
+ * -- SuperLU routine (version 4.1) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * November 15, 1997
+ * November, 2010
  *
- */
+*/
+
 /*
  * File name:		sp_ienv.c
  * History:             Modified from lapack routine ILAENV
  */
 #include "slu_Cnames.h"
 
-int
-sp_ienv(int ispec)
-{
-/*
+/*! \brief
+
+ <pre>
     Purpose   
     =======   
 
@@ -39,26 +42,32 @@ sp_ienv(int ispec)
 	         nodes (columns) in a subtree of the elimination tree is less
 		 than relax, this subtree is considered as one supernode,
 		 regardless of their row structures.
-            = 3: the maximum size for a supernode;
+            = 3: the maximum size for a supernode in complete LU;
 	    = 4: the minimum row dimension for 2-D blocking to be used;
 	    = 5: the minimum column dimension for 2-D blocking to be used;
 	    = 6: the estimated fills factor for L and U, compared with A;
+	    = 7: the maximum size for a supernode in ILU.
 	    
    (SP_IENV) (output) int
             >= 0: the value of the parameter specified by ISPEC   
             < 0:  if SP_IENV = -k, the k-th argument had an illegal value. 
   
     ===================================================================== 
+</pre>
 */
+int
+sp_ienv(int ispec)
+{
     int i;
 
     switch (ispec) {
-	case 1: return (8);
+	case 1: return (12);
 	case 2: return (1);
 	case 3: return (100);
 	case 4: return (200);
-	case 5: return (40);
+	case 5: return (60);
         case 6: return (20);
+        case 7: return (10);
     }
 
     /* Invalid value for ISPEC */
diff --git a/EXAMPLE/superlu.c b/EXAMPLE/superlu.c
index 39d9582..f109e1a 100644
--- a/EXAMPLE/superlu.c
+++ b/EXAMPLE/superlu.c
@@ -1,9 +1,12 @@
-/*
- * -- SuperLU routine (version 2.0) --
+/*! @file superlu.c
+ * \brief a small 5x5 example
+ * 
+ * <pre>
+ * * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 #include "slu_ddefs.h"
 
@@ -13,8 +16,8 @@ main(int argc, char *argv[])
  * Purpose
  * =======
  * 
- * This is the small 5x5 example used in the Sections 1 and 2 of the 
- * User's Guide to illustrate how to call a SuperLU routine, and the
+ * This is the small 5x5 example used in the Sections 2 and 3 of the 
+ * Users' Guide to illustrate how to call a SuperLU routine, and the
  * matrix data structures used by SuperLU.
  *
  */
@@ -60,7 +63,8 @@ main(int argc, char *argv[])
 
     /* Initialize the statistics variables. */
     StatInit(&stat);
-    
+
+    /* Solve the linear system. */
     dgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
     
     dPrint_CompCol_Matrix("A", &A);
diff --git a/EXAMPLE/zfgmr.c b/EXAMPLE/zfgmr.c
new file mode 100644
index 0000000..c1f0479
--- /dev/null
+++ b/EXAMPLE/zfgmr.c
@@ -0,0 +1,334 @@
+
+/*! @file zfgmr.c
+ * \brief flexible GMRES from ITSOL developed by Yousef Saad.
+ */
+
+/* ITSOL COPYRIGHT
+
+Copyright (C) 2006, the University of Minnesota 
+
+ITSOL is free software; you can redistribute it and/or modify it under
+the terms of  the GNU General Public License as  published by the Free
+Software Foundation [version 2 of  the License, or any later version]
+For details, see 
+
+http://www.gnu.org/copyleft/gpl.html
+
+A copy of the GNU licencing agreement is attached to the ITSOL package
+in the file GNU.  For additional information contact the Free Software
+Foundation Inc., 65 Mass Ave, Cambridge, MA 02139, USA.
+
+DISCLAIMER
+----------
+
+This program  is distributed in the  hope that it will  be useful, but
+WITHOUT   ANY  WARRANTY;   without  even   the  implied   warranty  of
+MERCHANTABILITY  or FITNESS  FOR A  PARTICULAR PURPOSE.   See  the GNU
+General Public License for more details. 
+
+For information on ITSOL contact saad at cs.umn.edu
+*/
+
+#include "slu_zdefs.h"
+
+#define  epsmac  1.0e-16
+
+extern void zdotc_(doublecomplex *, int *, doublecomplex [], int *, doublecomplex [], int *);
+extern double dznrm2_(int *, doublecomplex [], int *);
+
+
+int zfgmr(int n,
+     void (*zmatvec) (doublecomplex, doublecomplex[], doublecomplex, doublecomplex[]),
+     void (*zpsolve) (int, doublecomplex[], doublecomplex[]),
+     doublecomplex *rhs, doublecomplex *sol, double tol, int im, int *itmax, FILE * fits)
+{
+/*----------------------------------------------------------------------
+|                 *** Preconditioned FGMRES ***
++-----------------------------------------------------------------------
+| This is a simple version of the ARMS preconditioned FGMRES algorithm.
++-----------------------------------------------------------------------
+| Y. S. Dec. 2000. -- Apr. 2008
++-----------------------------------------------------------------------
+| on entry:
+|----------
+|
+| rhs     = real vector of length n containing the right hand side.
+| sol     = real vector of length n containing an initial guess to the
+|           solution on input.
+| tol     = tolerance for stopping iteration
+| im      = Krylov subspace dimension
+| (itmax) = max number of iterations allowed.
+| fits    = NULL: no output
+|        != NULL: file handle to output " resid vs time and its"
+|
+| on return:
+|----------
+| fgmr      int =  0 --> successful return.
+|           int =  1 --> convergence not achieved in itmax iterations.
+| sol     = contains an approximate solution (upon successful return).
+| itmax   = has changed. It now contains the number of steps required
+|           to converge --
++-----------------------------------------------------------------------
+| internal work arrays:
+|----------
+| vv      = work array of length [im+1][n] (used to store the Arnoldi
+|           basis)
+| hh      = work array of length [im][im+1] (Householder matrix)
+| z       = work array of length [im][n] to store preconditioned vectors
++-----------------------------------------------------------------------
+| subroutines called :
+| matvec - matrix-vector multiplication operation
+| psolve - (right) preconditionning operation
+|	   psolve can be a NULL pointer (GMRES without preconditioner)
++---------------------------------------------------------------------*/
+
+    int maxits = *itmax;
+    int i, i1, ii, j, k, k1, its, retval, i_1 = 1, i_2 = 2;
+    double beta, eps1 = 0.0, t, t0, gam;
+    doublecomplex **hh, *c, *s, *rs;
+    doublecomplex **vv, **z, tt;
+    doublecomplex zero = {0.0, 0.0};
+    doublecomplex one = {1.0, 0.0};
+    doublecomplex tt1, tt2;
+
+    its = 0;
+    vv = (doublecomplex **)SUPERLU_MALLOC((im + 1) * sizeof(doublecomplex *));
+    for (i = 0; i <= im; i++) vv[i] = doublecomplexMalloc(n);
+    z = (doublecomplex **)SUPERLU_MALLOC(im * sizeof(doublecomplex *));
+    hh = (doublecomplex **)SUPERLU_MALLOC(im * sizeof(doublecomplex *));
+    for (i = 0; i < im; i++)
+    {
+	hh[i] = doublecomplexMalloc(i + 2);
+	z[i] = doublecomplexMalloc(n);
+    }
+    c = doublecomplexMalloc(im);
+    s = doublecomplexMalloc(im);
+    rs = doublecomplexMalloc(im + 1);
+
+    /*---- outer loop starts here ----*/
+    do
+    {
+	/*---- compute initial residual vector ----*/
+	zmatvec(one, sol, zero, vv[0]);
+	for (j = 0; j < n; j++)
+	    z_sub(&vv[0][j], &rhs[j], &vv[0][j]);	/* vv[0]= initial residual */
+	beta = dznrm2_(&n, vv[0], &i_1);
+
+	/*---- print info if fits != null ----*/
+	if (fits != NULL && its == 0)
+	    fprintf(fits, "%8d   %10.2e\n", its, beta);
+	/*if ( beta <= tol * dnrm2_(&n, rhs, &i_1) )*/
+	if ( !(beta > tol * dznrm2_(&n, rhs, &i_1)) )
+	    break;
+	t = 1.0 / beta;
+
+	/*---- normalize: vv[0] = vv[0] / beta ----*/
+	for (j = 0; j < n; j++)
+	    zd_mult(&vv[0][j], &vv[0][j], t);
+	if (its == 0)
+	    eps1 = tol * beta;
+
+	/*---- initialize 1-st term of rhs of hessenberg system ----*/
+	rs[0].r = beta;
+	rs[0].i = 0.0;
+	for (i = 0; i < im; i++)
+	{
+	    its++;
+	    i1 = i + 1;
+
+	    /*------------------------------------------------------------
+	    |  (Right) Preconditioning Operation   z_{j} = M^{-1} v_{j}
+	    +-----------------------------------------------------------*/
+	    if (zpsolve)
+		zpsolve(n, z[i], vv[i]);
+	    else
+		zcopy_(&n, vv[i], &i_1, z[i], &i_1);
+
+	    /*---- matvec operation w = A z_{j} = A M^{-1} v_{j} ----*/
+	    zmatvec(one, z[i], zero, vv[i1]);
+
+	    /*------------------------------------------------------------
+	    |     modified gram - schmidt...
+	    |     h_{i,j} = (w,v_{i})
+	    |     w  = w - h_{i,j} v_{i}
+	    +------------------------------------------------------------*/
+	    t0 = dznrm2_(&n, vv[i1], &i_1);
+	    for (j = 0; j <= i; j++)
+	    {
+		doublecomplex negt;
+#if 0
+		zdotc_(&tt, &n, vv[j], &i_1, vv[i1], &i_1);
+#else
+		tt = zero;
+		for (k = 0; k < n; ++k) {
+		    zz_conj(&tt1, &vv[j][k]);
+		    zz_mult(&tt2, &tt1, &vv[i1][k]);
+		    z_add(&tt, &tt, &tt2);
+		}
+#endif
+		hh[i][j] = tt;
+		negt.r = -tt.r;
+		negt.i = -tt.i;
+		zaxpy_(&n, &negt, vv[j], &i_1, vv[i1], &i_1);
+	    }
+
+	    /*---- h_{j+1,j} = ||w||_{2} ----*/
+	    t = dznrm2_(&n, vv[i1], &i_1);
+	    while (t < 0.5 * t0)
+	    {
+		t0 = t;
+		for (j = 0; j <= i; j++)
+		{
+		    doublecomplex negt;
+#if 0
+		    zdotc_(&tt, &n, vv[j], &i_1, vv[i1], &i_1);
+#else
+   	            tt = zero;
+		    for (k = 0; k < n; ++k) {
+		        zz_conj(&tt1, &vv[j][k]);
+		        zz_mult(&tt2, &tt1, &vv[i1][k]);
+		        z_add(&tt, &tt, &tt2);
+		    }
+#endif
+		    z_add(&hh[i][j], &hh[i][j], &tt);
+		    negt.r = -tt.r;
+		    negt.i = -tt.i;
+		    zaxpy_(&n, &negt, vv[j], &i_1, vv[i1], &i_1);
+		}
+		t = dznrm2_(&n, vv[i1], &i_1);
+	    }
+
+	    hh[i][i1].r = t;
+	    hh[i][i1].i = 0.0;
+
+	    if (t != 0.0)
+	    {
+		/*---- v_{j+1} = w / h_{j+1,j} ----*/
+		t = 1.0 / t;
+		for (k = 0; k < n; k++)
+	            zd_mult(&vv[i1][k], &vv[i1][k], t);
+	    }
+	    /*---------------------------------------------------
+	    |     done with modified gram schimdt and arnoldi step
+	    |     now  update factorization of hh
+	    +--------------------------------------------------*/
+
+	    /*--------------------------------------------------------
+	    |   perform previous transformations  on i-th column of h
+	    +-------------------------------------------------------*/
+	    for (k = 1; k <= i; k++)
+	    {
+		k1 = k - 1;
+		tt = hh[i][k1];
+                zz_mult(&tt1, &c[k1], &tt);
+                zz_mult(&tt2, &s[k1], &hh[i][k]);
+                z_add(&hh[i][k1], &tt1, &tt2);
+
+                zz_mult(&tt1, &s[k1], &tt);
+                zz_mult(&tt2, &c[k1], &hh[i][k]);
+                z_sub(&hh[i][k], &tt2, &tt1);
+	    }
+
+	    gam = dznrm2_(&i_2, &hh[i][i], &i_1);
+
+	    /*---------------------------------------------------
+	    |     if gamma is zero then any small value will do
+	    |     affect only residual estimate
+	    +--------------------------------------------------*/
+	    /* if (gam == 0.0) gam = epsmac; */
+
+	    /*---- get next plane rotation ---*/
+	    if (gam == 0.0)
+	    {
+		c[i] = one;
+		s[i] = zero;
+	    }
+            else
+	    {
+                gam = 1.0 / gam;
+		zd_mult(&c[i], &hh[i][i], gam);
+		zd_mult(&s[i], &hh[i][i1], gam);
+	    }
+
+	    zz_mult(&rs[i1], &s[i], &rs[i]);
+            rs[i1].r = -rs[i1].r;  rs[i1].i = -rs[i1].i;
+	    zz_mult(&rs[i], &c[i], &rs[i]);
+
+	    /*----------------------------------------------------
+	    |   determine residual norm and test for convergence
+	    +---------------------------------------------------*/
+            zz_mult(&tt1, &c[i], &hh[i][i]);
+            zz_mult(&tt2, &s[i], &hh[i][i1]);
+            z_add(&hh[i][i], &tt1, &tt2);
+            beta = z_abs1(&rs[i1]);
+	    if (fits != NULL)
+		fprintf(fits, "%8d   %10.2e\n", its, beta);
+	    if (beta <= eps1 || its >= maxits)
+		break;
+	}
+
+	if (i == im) i--;
+
+	/*---- now compute solution. 1st, solve upper triangular system ----*/
+	z_div(&rs[i], &rs[i], &hh[i][i]);
+
+	for (ii = 1; ii <= i; ii++)
+	{
+	    k = i - ii;
+	    k1 = k + 1;
+	    tt = rs[k];
+	    for (j = k1; j <= i; j++) {
+                zz_mult(&tt1, &hh[j][k], &rs[j]);
+		z_sub(&tt, &tt, &tt1);
+            }
+            z_div(&rs[k], &tt, &hh[k][k]);
+	}
+
+	/*---- linear combination of v[i]'s to get sol. ----*/
+	for (j = 0; j <= i; j++)
+	{
+	    tt = rs[j];
+	    for (k = 0; k < n; k++) {
+                zz_mult(&tt1, &tt, &z[j][k]);
+		z_add(&sol[k], &sol[k], &tt1);
+            }
+	}
+
+	/* calculate the residual and output */
+	zmatvec(one, sol, zero, vv[0]);
+	for (j = 0; j < n; j++)
+	    z_sub(&vv[0][j], &rhs[j], &vv[0][j]);/* vv[0]= initial residual */
+
+	/*---- print info if fits != null ----*/
+	beta = dznrm2_(&n, vv[0], &i_1);
+
+	/*---- restart outer loop if needed ----*/
+	/*if (beta >= eps1 / tol)*/
+	if ( !(beta < eps1 / tol) )
+	{
+	    its = maxits + 10;
+	    break;
+	}
+	if (beta <= eps1)
+	    break;
+    } while(its < maxits);
+
+    retval = (its >= maxits);
+    for (i = 0; i <= im; i++)
+	SUPERLU_FREE(vv[i]);
+    SUPERLU_FREE(vv);
+    for (i = 0; i < im; i++)
+    {
+	SUPERLU_FREE(hh[i]);
+	SUPERLU_FREE(z[i]);
+    }
+    SUPERLU_FREE(hh);
+    SUPERLU_FREE(z);
+    SUPERLU_FREE(c);
+    SUPERLU_FREE(s);
+    SUPERLU_FREE(rs);
+
+    *itmax = its;
+
+    return retval;
+} /*----end of fgmr ----*/
diff --git a/EXAMPLE/zitersol.c b/EXAMPLE/zitersol.c
new file mode 100644
index 0000000..e7d7f24
--- /dev/null
+++ b/EXAMPLE/zitersol.c
@@ -0,0 +1,372 @@
+
+/*! @file zitersol.c
+ * \brief Example #1 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.2) --
+ * Lawrence Berkeley National Laboratory
+ * November, 2010
+ * August, 2011
+ *
+ * This example shows that ILU is computed from the equilibrated matrix,
+ * and the preconditioned GMRES is applied to the equilibrated system.
+ * The driver routine ZGSISX is called twice to perform factorization
+ * and apply preconditioner separately.
+ * 
+ * Note that ZGSISX performs the following factorization:
+ *     Pr*Dr*A*Dc*Pc^T ~= LU
+ * with Pr being obtained from MC64 statically then partial pivoting
+ * dybamically. On return, A is overwritten as A1 = Dr*A*Dc.
+ *
+ * We can solve the transformed system, A1*y = Dr*B, using FGMRES.
+ * B is first overwritten as Dr*B.
+ * Then GMRES step requires requires 2 procedures:
+ *   1) Apply preconditioner M^{-1} = Pc^T*U^{-1}*L^{-1}*Pr
+ *   2) Matrix-vector multiplication: w = A1*v
+ * 
+ * </pre>
+ */
+
+#include "slu_zdefs.h"
+
+superlu_options_t *GLOBAL_OPTIONS;
+double *GLOBAL_R, *GLOBAL_C;
+int *GLOBAL_PERM_C, *GLOBAL_PERM_R;
+SuperMatrix *GLOBAL_A, *GLOBAL_L, *GLOBAL_U;
+SuperLUStat_t *GLOBAL_STAT;
+mem_usage_t   *GLOBAL_MEM_USAGE;
+
+void zpsolve(int n,
+                  doublecomplex x[], /* solution */
+                  doublecomplex y[]  /* right-hand side */
+)
+{
+    SuperMatrix *A = GLOBAL_A, *L = GLOBAL_L, *U = GLOBAL_U;
+    SuperLUStat_t *stat = GLOBAL_STAT;
+    int *perm_c = GLOBAL_PERM_C, *perm_r = GLOBAL_PERM_R;
+    char equed[1] = {'N'};
+    double *R = GLOBAL_R, *C = GLOBAL_C;
+    superlu_options_t *options = GLOBAL_OPTIONS;
+    mem_usage_t  *mem_usage = GLOBAL_MEM_USAGE;
+    int info;
+    static DNformat X, Y;
+    static SuperMatrix XX = {SLU_DN, SLU_Z, SLU_GE, 1, 1, &X};
+    static SuperMatrix YY = {SLU_DN, SLU_Z, SLU_GE, 1, 1, &Y};
+    double rpg, rcond;
+
+    XX.nrow = YY.nrow = n;
+    X.lda = Y.lda = n;
+    X.nzval = x;
+    Y.nzval = y;
+
+#if 0
+    dcopy_(&n, y, &i_1, x, &i_1);
+    zgstrs(NOTRANS, L, U, perm_c, perm_r, &XX, stat, &info);
+#else
+    zgsisx(options, A, perm_c, perm_r, NULL, equed, R, C,
+	   L, U, NULL, 0, &YY, &XX, &rpg, &rcond, mem_usage, stat, &info);
+#endif
+}
+
+void zmatvec_mult(doublecomplex alpha, doublecomplex x[], doublecomplex beta, doublecomplex y[])
+{
+    SuperMatrix *A = GLOBAL_A;
+
+    sp_zgemv("N", alpha, A, x, 1, beta, y, 1);
+}
+
+int main(int argc, char *argv[])
+{
+    void zmatvec_mult(doublecomplex alpha, doublecomplex x[], doublecomplex beta, doublecomplex y[]);
+    void zpsolve(int n, doublecomplex x[], doublecomplex y[]);
+    extern int zfgmr( int n,
+	void (*matvec_mult)(doublecomplex, doublecomplex [], doublecomplex, doublecomplex []),
+	void (*psolve)(int n, doublecomplex [], doublecomplex[]),
+	doublecomplex *rhs, doublecomplex *sol, double tol, int restrt, int *itmax,
+	FILE *fits);
+    extern int zfill_diag(int n, NCformat *Astore);
+
+    char     equed[1] = {'B'};
+    yes_no_t equil;
+    trans_t  trans;
+    SuperMatrix A, L, U;
+    SuperMatrix B, X;
+    NCformat *Astore;
+    NCformat *Ustore;
+    SCformat *Lstore;
+    doublecomplex   *a;
+    int      *asub, *xa;
+    int      *etree;
+    int      *perm_c; /* column permutation vector */
+    int      *perm_r; /* row permutations from partial pivoting */
+    int      nrhs, ldx, lwork, info, m, n, nnz;
+    doublecomplex   *rhsb, *rhsx, *xact;
+    doublecomplex   *work = NULL;
+    double   *R, *C;
+    double   u, rpg, rcond;
+    doublecomplex zero = {0.0, 0.0};
+    doublecomplex one = {1.0, 0.0};
+    doublecomplex none = {-1.0, 0.0};
+    mem_usage_t   mem_usage;
+    superlu_options_t options;
+    SuperLUStat_t stat;
+
+    int restrt, iter, maxit, i;
+    double resid;
+    doublecomplex *x, *b;
+
+#ifdef DEBUG
+    extern int num_drop_L, num_drop_U;
+#endif
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Enter main()");
+#endif
+
+    /* Defaults */
+    lwork = 0;
+    nrhs  = 1;
+    trans = NOTRANS;
+
+    /* Set the default input options:
+	options.Fact = DOFACT;
+	options.Equil = YES;
+	options.ColPerm = COLAMD;
+	options.DiagPivotThresh = 0.1; //different from complete LU
+	options.Trans = NOTRANS;
+	options.IterRefine = NOREFINE;
+	options.SymmetricMode = NO;
+	options.PivotGrowth = NO;
+	options.ConditionNumber = NO;
+	options.PrintStat = YES;
+	options.RowPerm = LargeDiag;
+	options.ILU_DropTol = 1e-4;
+	options.ILU_FillTol = 1e-2;
+	options.ILU_FillFactor = 10.0;
+	options.ILU_DropRule = DROP_BASIC | DROP_AREA;
+	options.ILU_Norm = INF_NORM;
+	options.ILU_MILU = SILU;
+     */
+    ilu_set_default_options(&options);
+
+    /* Modify the defaults. */
+    options.PivotGrowth = YES;	  /* Compute reciprocal pivot growth */
+    options.ConditionNumber = YES;/* Compute reciprocal condition number */
+
+    if ( lwork > 0 ) {
+	work = SUPERLU_MALLOC(lwork);
+	if ( !work ) ABORT("Malloc fails for work[].");
+    }
+
+    /* Read matrix A from a file in Harwell-Boeing format.*/
+    if (argc < 2)
+    {
+	printf("Usage:\n%s [OPTION] < [INPUT] > [OUTPUT]\nOPTION:\n"
+		"-h -hb:\n\t[INPUT] is a Harwell-Boeing format matrix.\n"
+		"-r -rb:\n\t[INPUT] is a Rutherford-Boeing format matrix.\n"
+		"-t -triplet:\n\t[INPUT] is a triplet format matrix.\n",
+		argv[0]);
+	return 0;
+    }
+    else
+    {
+	switch (argv[1][1])
+	{
+	    case 'H':
+	    case 'h':
+		printf("Input a Harwell-Boeing format matrix:\n");
+		zreadhb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'R':
+	    case 'r':
+		printf("Input a Rutherford-Boeing format matrix:\n");
+		zreadrb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'T':
+	    case 't':
+		printf("Input a triplet format matrix:\n");
+		zreadtriple(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    default:
+		printf("Unrecognized format.\n");
+		return 0;
+	}
+    }
+
+    zCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa,
+                                SLU_NC, SLU_Z, SLU_GE);
+    Astore = A.Store;
+    zfill_diag(n, Astore);
+    printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+    fflush(stdout);
+
+    /* Generate the right-hand side */
+    if ( !(rhsb = doublecomplexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+    if ( !(rhsx = doublecomplexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsx[].");
+    zCreate_Dense_Matrix(&B, m, nrhs, rhsb, m, SLU_DN, SLU_Z, SLU_GE);
+    zCreate_Dense_Matrix(&X, m, nrhs, rhsx, m, SLU_DN, SLU_Z, SLU_GE);
+    xact = doublecomplexMalloc(n * nrhs);
+    ldx = n;
+    zGenXtrue(n, nrhs, xact, ldx);
+    zFillRHS(trans, nrhs, xact, ldx, &A, &B);
+
+    if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+    if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+    if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+    if ( !(R = (double *) SUPERLU_MALLOC(A.nrow * sizeof(double))) )
+	ABORT("SUPERLU_MALLOC fails for R[].");
+    if ( !(C = (double *) SUPERLU_MALLOC(A.ncol * sizeof(double))) )
+	ABORT("SUPERLU_MALLOC fails for C[].");
+
+    info = 0;
+#ifdef DEBUG
+    num_drop_L = 0;
+    num_drop_U = 0;
+#endif
+
+    /* Initialize the statistics variables. */
+    StatInit(&stat);
+
+    /* Compute the incomplete factorization and compute the condition number
+       and pivot growth using dgsisx. */
+    B.ncol = 0;  /* not to perform triangular solution */
+    zgsisx(&options, &A, perm_c, perm_r, etree, equed, R, C, &L, &U, work,
+	   lwork, &B, &X, &rpg, &rcond, &mem_usage, &stat, &info);
+
+    /* Set RHS for GMRES. */
+    if (!(b = doublecomplexMalloc(m))) ABORT("Malloc fails for b[].");
+    if (*equed == 'R' || *equed == 'B') {
+	for (i = 0; i < n; ++i) zd_mult(&b[i], &rhsb[i], R[i]);
+    } else {
+	for (i = 0; i < m; i++) b[i] = rhsb[i];
+    }
+
+    printf("zgsisx(): info %d, equed %c\n", info, equed[0]);
+    if (info > 0 || rcond < 1e-8 || rpg > 1e8)
+	printf("WARNING: This preconditioner might be unstable.\n");
+
+    if ( info == 0 || info == n+1 ) {
+	if ( options.PivotGrowth == YES )
+	    printf("Recip. pivot growth = %e\n", rpg);
+	if ( options.ConditionNumber == YES )
+	    printf("Recip. condition number = %e\n", rcond);
+    } else if ( info > 0 && lwork == -1 ) {
+	printf("** Estimated memory: %d bytes\n", info - n);
+    }
+
+    Lstore = (SCformat *) L.Store;
+    Ustore = (NCformat *) U.Store;
+    printf("n(A) = %d, nnz(A) = %d\n", n, Astore->nnz);
+    printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
+    printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
+    printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    printf("Fill ratio: nnz(F)/nnz(A) = %.3f\n",
+	    ((double)(Lstore->nnz) + (double)(Ustore->nnz) - (double)n)
+	    / (double)Astore->nnz);
+    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+    fflush(stdout);
+
+    /* Set the global variables. */
+    GLOBAL_A = &A;
+    GLOBAL_L = &L;
+    GLOBAL_U = &U;
+    GLOBAL_STAT = &stat;
+    GLOBAL_PERM_C = perm_c;
+    GLOBAL_PERM_R = perm_r;
+    GLOBAL_OPTIONS = &options;
+    GLOBAL_R = R;
+    GLOBAL_C = C;
+    GLOBAL_MEM_USAGE = &mem_usage;
+
+    /* Set the options to do solve-only. */
+    options.Fact = FACTORED;
+    options.PivotGrowth = NO;
+    options.ConditionNumber = NO;
+
+    /* Set the variables used by GMRES. */
+    restrt = SUPERLU_MIN(n / 3 + 1, 50);
+    maxit = 1000;
+    iter = maxit;
+    resid = 1e-8;
+    if (!(x = doublecomplexMalloc(n))) ABORT("Malloc fails for x[].");
+
+    if (info <= n + 1)
+    {
+	int i_1 = 1;
+	double maxferr = 0.0, nrmA, nrmB, res, t;
+        doublecomplex temp;
+	extern double dznrm2_(int *, doublecomplex [], int *);
+	extern void zaxpy_(int *, doublecomplex *, doublecomplex [], int *, doublecomplex [], int *);
+
+	/* Initial guess */
+	for (i = 0; i < n; i++) x[i] = zero;
+
+	t = SuperLU_timer_();
+
+	/* Call GMRES */
+	zfgmr(n, zmatvec_mult, zpsolve, b, x, resid, restrt, &iter, stdout);
+
+	t = SuperLU_timer_() - t;
+
+	/* Output the result. */
+	nrmA = dznrm2_(&(Astore->nnz), (doublecomplex *)((DNformat *)A.Store)->nzval,
+		&i_1);
+	nrmB = dznrm2_(&m, b, &i_1);
+	sp_zgemv("N", none, &A, x, 1, one, b, 1);
+	res = dznrm2_(&m, b, &i_1);
+	resid = res / nrmB;
+	printf("||A||_F = %.1e, ||B||_2 = %.1e, ||B-A*X||_2 = %.1e, "
+		"relres = %.1e\n", nrmA, nrmB, res, resid);
+
+	if (iter >= maxit)
+	{
+	    if (resid >= 1.0) iter = -180;
+	    else if (resid > 1e-8) iter = -111;
+	}
+	printf("iteration: %d\nresidual: %.1e\nGMRES time: %.2f seconds.\n",
+		iter, resid, t);
+
+	/* Scale the solution back if equilibration was performed. */
+	if (*equed == 'C' || *equed == 'B') 
+	    for (i = 0; i < n; i++) zd_mult(&x[i], &x[i], C[i]);
+
+	for (i = 0; i < m; i++) {
+            z_sub(&temp, &x[i], &xact[i]);
+            maxferr = SUPERLU_MAX(maxferr, z_abs1(&temp));
+        }
+	printf("||X-X_true||_oo = %.1e\n", maxferr);
+    }
+#ifdef DEBUG
+    printf("%d entries in L and %d entries in U dropped.\n",
+	    num_drop_L, num_drop_U);
+#endif
+    fflush(stdout);
+
+    if ( options.PrintStat ) StatPrint(&stat);
+    StatFree(&stat);
+
+    SUPERLU_FREE (rhsb);
+    SUPERLU_FREE (rhsx);
+    SUPERLU_FREE (xact);
+    SUPERLU_FREE (etree);
+    SUPERLU_FREE (perm_r);
+    SUPERLU_FREE (perm_c);
+    SUPERLU_FREE (R);
+    SUPERLU_FREE (C);
+    Destroy_CompCol_Matrix(&A);
+    Destroy_SuperMatrix_Store(&B);
+    Destroy_SuperMatrix_Store(&X);
+    if ( lwork >= 0 ) {
+	Destroy_SuperNode_Matrix(&L);
+	Destroy_CompCol_Matrix(&U);
+    }
+    SUPERLU_FREE(b);
+    SUPERLU_FREE(x);
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Exit main()");
+#endif
+
+    return 0;
+}
diff --git a/EXAMPLE/zitersol1 b/EXAMPLE/zitersol1
new file mode 100755
index 0000000..c62788b
Binary files /dev/null and b/EXAMPLE/zitersol1 differ
diff --git a/EXAMPLE/zitersol1.c b/EXAMPLE/zitersol1.c
new file mode 100644
index 0000000..3a9b0bd
--- /dev/null
+++ b/EXAMPLE/zitersol1.c
@@ -0,0 +1,381 @@
+
+/*! @file zitersol1.c
+ * \brief Example #2 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.2) --
+ * Lawrence Berkeley National Laboratory
+ * November, 2010
+ * August, 2011
+ *
+ * This example shows that ILU is computed from the equilibrated matrix,
+ * but the preconditioned GMRES is applied to the original system.
+ * The driver routine ZGSISX is called twice to perform factorization
+ * and apply preconditioner separately.
+ * 
+ * Note that ZGSISX performs the following factorization:
+ *     Pr*Dr*A*Dc*Pc^T ~= LU
+ * with Pr being obtained from MC64 statically then partial pivoting
+ * dybamically. On return, A is overwritten as A1 = Dr*A*Dc.
+ *
+ * We need to save a copy of the original matrix A, then solve
+ * the original system, A*x = B, using FGMRES.
+ * Each GMRES step requires requires 2 procedures:
+ *   1) Apply preconditioner M^{-1} = Dc*Pc^T*U^{-1}*L^{-1}*Pr*Dr
+ *   2) Matrix-vector multiplication: w = A*v
+ *
+ * </pre>
+ */
+
+#include "slu_zdefs.h"
+
+char *GLOBAL_EQUED;
+superlu_options_t *GLOBAL_OPTIONS;
+double *GLOBAL_R, *GLOBAL_C;
+int *GLOBAL_PERM_C, *GLOBAL_PERM_R;
+SuperMatrix *GLOBAL_A, *GLOBAL_A_ORIG, *GLOBAL_L, *GLOBAL_U;
+SuperLUStat_t *GLOBAL_STAT;
+mem_usage_t   *GLOBAL_MEM_USAGE;
+
+void zpsolve(int n,
+                  doublecomplex x[], /* solution */
+                  doublecomplex y[]  /* right-hand side */
+)
+{
+    SuperMatrix *A = GLOBAL_A, *L = GLOBAL_L, *U = GLOBAL_U;
+    SuperLUStat_t *stat = GLOBAL_STAT;
+    int *perm_c = GLOBAL_PERM_C, *perm_r = GLOBAL_PERM_R;
+    char *equed = GLOBAL_EQUED;
+    double *R = GLOBAL_R, *C = GLOBAL_C;
+    superlu_options_t *options = GLOBAL_OPTIONS;
+    mem_usage_t  *mem_usage = GLOBAL_MEM_USAGE;
+    int info;
+    static DNformat X, Y;
+    static SuperMatrix XX = {SLU_DN, SLU_Z, SLU_GE, 1, 1, &X};
+    static SuperMatrix YY = {SLU_DN, SLU_Z, SLU_GE, 1, 1, &Y};
+    double rpg, rcond;
+
+    XX.nrow = YY.nrow = n;
+    X.lda = Y.lda = n;
+    X.nzval = x;
+    Y.nzval = y;
+
+#if 0
+    zcopy_(&n, y, &i_1, x, &i_1);
+    zgstrs(NOTRANS, L, U, perm_c, perm_r, &XX, stat, &info);
+#else
+    zgsisx(options, A, perm_c, perm_r, NULL, equed, R, C,
+	   L, U, NULL, 0, &YY, &XX, &rpg, &rcond, mem_usage, stat, &info);
+#endif
+}
+
+void zmatvec_mult(doublecomplex alpha, doublecomplex x[], doublecomplex beta, doublecomplex y[])
+{
+    SuperMatrix *A = GLOBAL_A_ORIG;
+
+    sp_zgemv("N", alpha, A, x, 1, beta, y, 1);
+}
+
+int main(int argc, char *argv[])
+{
+    void zmatvec_mult(doublecomplex alpha, doublecomplex x[], doublecomplex beta, doublecomplex y[]);
+    void zpsolve(int n, doublecomplex x[], doublecomplex y[]);
+    extern int zfgmr( int n,
+	void (*matvec_mult)(doublecomplex, doublecomplex [], doublecomplex, doublecomplex []),
+	void (*psolve)(int n, doublecomplex [], doublecomplex[]),
+	doublecomplex *rhs, doublecomplex *sol, double tol, int restrt, int *itmax,
+	FILE *fits);
+    extern int zfill_diag(int n, NCformat *Astore);
+
+    char     equed[1] = {'B'};
+    yes_no_t equil;
+    trans_t  trans;
+    SuperMatrix A, AA, L, U;
+    SuperMatrix B, X;
+    NCformat *Astore;
+    NCformat *Ustore;
+    SCformat *Lstore;
+    doublecomplex   *a, *a_orig;
+    int      *asub, *xa, *asub_orig, *xa_orig;
+    int      *etree;
+    int      *perm_c; /* column permutation vector */
+    int      *perm_r; /* row permutations from partial pivoting */
+    int      nrhs, ldx, lwork, info, m, n, nnz;
+    doublecomplex   *rhsb, *rhsx, *xact;
+    doublecomplex   *work = NULL;
+    double   *R, *C;
+    double   u, rpg, rcond;
+    doublecomplex zero = {0.0, 0.0};
+    doublecomplex one = {1.0, 0.0};
+    doublecomplex none = {-1.0, 0.0};
+    mem_usage_t   mem_usage;
+    superlu_options_t options;
+    SuperLUStat_t stat;
+
+    int restrt, iter, maxit, i;
+    double resid;
+    doublecomplex *x, *b;
+
+#ifdef DEBUG
+    extern int num_drop_L, num_drop_U;
+#endif
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Enter main()");
+#endif
+
+    /* Defaults */
+    lwork = 0;
+    nrhs  = 1;
+    trans = NOTRANS;
+
+    /* Set the default input options:
+	options.Fact = DOFACT;
+	options.Equil = YES;
+	options.ColPerm = COLAMD;
+	options.DiagPivotThresh = 0.1; //different from complete LU
+	options.Trans = NOTRANS;
+	options.IterRefine = NOREFINE;
+	options.SymmetricMode = NO;
+	options.PivotGrowth = NO;
+	options.ConditionNumber = NO;
+	options.PrintStat = YES;
+	options.RowPerm = LargeDiag;
+	options.ILU_DropTol = 1e-4;
+	options.ILU_FillTol = 1e-2;
+	options.ILU_FillFactor = 10.0;
+	options.ILU_DropRule = DROP_BASIC | DROP_AREA;
+	options.ILU_Norm = INF_NORM;
+	options.ILU_MILU = SILU;
+     */
+    ilu_set_default_options(&options);
+
+    /* Modify the defaults. */
+    options.PivotGrowth = YES;	  /* Compute reciprocal pivot growth */
+    options.ConditionNumber = YES;/* Compute reciprocal condition number */
+
+    if ( lwork > 0 ) {
+	work = SUPERLU_MALLOC(lwork);
+	if ( !work ) ABORT("Malloc fails for work[].");
+    }
+
+    /* Read matrix A from a file in Harwell-Boeing format.*/
+    if (argc < 2)
+    {
+	printf("Usage:\n%s [OPTION] < [INPUT] > [OUTPUT]\nOPTION:\n"
+		"-h -hb:\n\t[INPUT] is a Harwell-Boeing format matrix.\n"
+		"-r -rb:\n\t[INPUT] is a Rutherford-Boeing format matrix.\n"
+		"-t -triplet:\n\t[INPUT] is a triplet format matrix.\n",
+		argv[0]);
+	return 0;
+    }
+    else
+    {
+	switch (argv[1][1])
+	{
+	    case 'H':
+	    case 'h':
+		printf("Input a Harwell-Boeing format matrix:\n");
+		zreadhb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'R':
+	    case 'r':
+		printf("Input a Rutherford-Boeing format matrix:\n");
+		zreadrb(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    case 'T':
+	    case 't':
+		printf("Input a triplet format matrix:\n");
+		zreadtriple(&m, &n, &nnz, &a, &asub, &xa);
+		break;
+	    default:
+		printf("Unrecognized format.\n");
+		return 0;
+	}
+    }
+
+    zCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa,
+                                SLU_NC, SLU_Z, SLU_GE);
+    Astore = A.Store;
+    zfill_diag(n, Astore);
+    printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+    fflush(stdout);
+
+    /* Make a copy of the original matrix. */
+    nnz = Astore->nnz;
+    a_orig = doublecomplexMalloc(nnz);
+    asub_orig = intMalloc(nnz);
+    xa_orig = intMalloc(n+1);
+    for (i = 0; i < nnz; ++i) {
+	a_orig[i] = ((doublecomplex *)Astore->nzval)[i];
+	asub_orig[i] = Astore->rowind[i];
+    }
+    for (i = 0; i <= n; ++i) xa_orig[i] = Astore->colptr[i];
+    zCreate_CompCol_Matrix(&AA, m, n, nnz, a_orig, asub_orig, xa_orig,
+			   SLU_NC, SLU_Z, SLU_GE);
+    
+    /* Generate the right-hand side */
+    if ( !(rhsb = doublecomplexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+    if ( !(rhsx = doublecomplexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsx[].");
+    zCreate_Dense_Matrix(&B, m, nrhs, rhsb, m, SLU_DN, SLU_Z, SLU_GE);
+    zCreate_Dense_Matrix(&X, m, nrhs, rhsx, m, SLU_DN, SLU_Z, SLU_GE);
+    xact = doublecomplexMalloc(n * nrhs);
+    ldx = n;
+    zGenXtrue(n, nrhs, xact, ldx);
+    zFillRHS(trans, nrhs, xact, ldx, &A, &B);
+
+    if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+    if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+    if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+    if ( !(R = (double *) SUPERLU_MALLOC(A.nrow * sizeof(double))) )
+	ABORT("SUPERLU_MALLOC fails for R[].");
+    if ( !(C = (double *) SUPERLU_MALLOC(A.ncol * sizeof(double))) )
+	ABORT("SUPERLU_MALLOC fails for C[].");
+
+    info = 0;
+#ifdef DEBUG
+    num_drop_L = 0;
+    num_drop_U = 0;
+#endif
+
+    /* Initialize the statistics variables. */
+    StatInit(&stat);
+
+    /* Compute the incomplete factorization and compute the condition number
+       and pivot growth using dgsisx. */
+    B.ncol = 0;  /* not to perform triangular solution */
+    zgsisx(&options, &A, perm_c, perm_r, etree, equed, R, C, &L, &U, work,
+	   lwork, &B, &X, &rpg, &rcond, &mem_usage, &stat, &info);
+
+    /* Set RHS for GMRES. */
+    if (!(b = doublecomplexMalloc(m))) ABORT("Malloc fails for b[].");
+    for (i = 0; i < m; i++) b[i] = rhsb[i];
+
+    printf("zgsisx(): info %d, equed %c\n", info, equed[0]);
+    if (info > 0 || rcond < 1e-8 || rpg > 1e8)
+	printf("WARNING: This preconditioner might be unstable.\n");
+
+    if ( info == 0 || info == n+1 ) {
+	if ( options.PivotGrowth == YES )
+	    printf("Recip. pivot growth = %e\n", rpg);
+	if ( options.ConditionNumber == YES )
+	    printf("Recip. condition number = %e\n", rcond);
+    } else if ( info > 0 && lwork == -1 ) {
+	printf("** Estimated memory: %d bytes\n", info - n);
+    }
+
+    Lstore = (SCformat *) L.Store;
+    Ustore = (NCformat *) U.Store;
+    printf("n(A) = %d, nnz(A) = %d\n", n, Astore->nnz);
+    printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
+    printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
+    printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    printf("Fill ratio: nnz(F)/nnz(A) = %.3f\n",
+	    ((double)(Lstore->nnz) + (double)(Ustore->nnz) - (double)n)
+	    / (double)Astore->nnz);
+    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+    fflush(stdout);
+
+    /* Set the global variables. */
+    GLOBAL_A = &A;
+    GLOBAL_A_ORIG = &AA;
+    GLOBAL_L = &L;
+    GLOBAL_U = &U;
+    GLOBAL_STAT = &stat;
+    GLOBAL_PERM_C = perm_c;
+    GLOBAL_PERM_R = perm_r;
+    GLOBAL_OPTIONS = &options;
+    GLOBAL_EQUED = equed;
+    GLOBAL_R = R;
+    GLOBAL_C = C;
+    GLOBAL_MEM_USAGE = &mem_usage;
+
+    /* Set the options to do solve-only. */
+    options.Fact = FACTORED;
+    options.PivotGrowth = NO;
+    options.ConditionNumber = NO;
+
+    /* Set the variables used by GMRES. */
+    restrt = SUPERLU_MIN(n / 3 + 1, 50);
+    maxit = 1000;
+    iter = maxit;
+    resid = 1e-8;
+    if (!(x = doublecomplexMalloc(n))) ABORT("Malloc fails for x[].");
+
+    if (info <= n + 1)
+    {
+	int i_1 = 1;
+	double maxferr = 0.0, nrmA, nrmB, res, t;
+        doublecomplex temp;
+	extern double dznrm2_(int *, doublecomplex [], int *);
+	extern void zaxpy_(int *, doublecomplex *, doublecomplex [], int *, doublecomplex [], int *);
+
+	/* Initial guess */
+	for (i = 0; i < n; i++) x[i] = zero;
+
+	t = SuperLU_timer_();
+
+	/* Call GMRES */
+	zfgmr(n, zmatvec_mult, zpsolve, b, x, resid, restrt, &iter, stdout);
+
+	t = SuperLU_timer_() - t;
+
+	/* Output the result. */
+	nrmA = dznrm2_(&(Astore->nnz), (doublecomplex *)((DNformat *)A.Store)->nzval,
+		&i_1);
+	nrmB = dznrm2_(&m, b, &i_1);
+	sp_zgemv("N", none, &AA, x, 1, one, b, 1); /* Original matrix */
+	res = dznrm2_(&m, b, &i_1);
+	resid = res / nrmB;
+	printf("||A||_F = %.1e, ||B||_2 = %.1e, ||B-A*X||_2 = %.1e, "
+		"relres = %.1e\n", nrmA, nrmB, res, resid);
+
+	if (iter >= maxit)
+	{
+	    if (resid >= 1.0) iter = -180;
+	    else if (resid > 1e-8) iter = -111;
+	}
+	printf("iteration: %d\nresidual: %.1e\nGMRES time: %.2f seconds.\n",
+		iter, resid, t);
+
+	for (i = 0; i < m; i++) {
+            z_sub(&temp, &x[i], &xact[i]);
+            maxferr = SUPERLU_MAX(maxferr, z_abs1(&temp));
+        }
+	printf("||X-X_true||_oo = %.1e\n", maxferr);
+    }
+#ifdef DEBUG
+    printf("%d entries in L and %d entries in U dropped.\n",
+	    num_drop_L, num_drop_U);
+#endif
+    fflush(stdout);
+
+    if ( options.PrintStat ) StatPrint(&stat);
+    StatFree(&stat);
+
+    SUPERLU_FREE (rhsb);
+    SUPERLU_FREE (rhsx);
+    SUPERLU_FREE (xact);
+    SUPERLU_FREE (etree);
+    SUPERLU_FREE (perm_r);
+    SUPERLU_FREE (perm_c);
+    SUPERLU_FREE (R);
+    SUPERLU_FREE (C);
+    Destroy_CompCol_Matrix(&A);
+    Destroy_CompCol_Matrix(&AA);
+    Destroy_SuperMatrix_Store(&B);
+    Destroy_SuperMatrix_Store(&X);
+    if ( lwork >= 0 ) {
+	Destroy_SuperNode_Matrix(&L);
+	Destroy_CompCol_Matrix(&U);
+    }
+    SUPERLU_FREE(b);
+    SUPERLU_FREE(x);
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Exit main()");
+#endif
+
+    return 0;
+}
diff --git a/EXAMPLE/zlinsol.c b/EXAMPLE/zlinsol.c
index 3993113..d4f83b1 100644
--- a/EXAMPLE/zlinsol.c
+++ b/EXAMPLE/zlinsol.c
@@ -8,7 +8,7 @@
  */
 #include "slu_zdefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
     SuperMatrix A;
     NCformat *Astore;
@@ -81,19 +81,18 @@ main(int argc, char *argv[])
     	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
 	
 	zQuerySpace(&L, &U, &mem_usage);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	
     } else {
 	printf("zgssv() error returns INFO= %d\n", info);
 	if ( info <= n ) { /* factorization completes */
 	    zQuerySpace(&L, &U, &mem_usage);
-	    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		   mem_usage.expansions);
+	    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	}
     }
 
diff --git a/EXAMPLE/zlinsol1.c b/EXAMPLE/zlinsol1.c
index ed9ec31..5caf1af 100644
--- a/EXAMPLE/zlinsol1.c
+++ b/EXAMPLE/zlinsol1.c
@@ -8,7 +8,7 @@
  */
 #include "slu_zdefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
     SuperMatrix A;
     NCformat *Astore;
@@ -86,19 +86,18 @@ main(int argc, char *argv[])
     	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
 	
 	zQuerySpace(&L, &U, &mem_usage);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	
     } else {
 	printf("zgssv() error returns INFO= %d\n", info);
 	if ( info <= n ) { /* factorization completes */
 	    zQuerySpace(&L, &U, &mem_usage);
-	    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		   mem_usage.expansions);
+	    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	}
     }
 
diff --git a/EXAMPLE/zlinsolx.c b/EXAMPLE/zlinsolx.c
index a89f8e0..c8b8edb 100644
--- a/EXAMPLE/zlinsolx.c
+++ b/EXAMPLE/zlinsolx.c
@@ -1,14 +1,14 @@
 
 /*
- * -- SuperLU routine (version 3.0) --
+ * -- SuperLU routine (version 3.1) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * October 15, 2003
+ * August 1, 2008
  *
  */
 #include "slu_zdefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
     char           equed[1];
     yes_no_t       equil;
@@ -69,7 +69,7 @@ main(int argc, char *argv[])
     /* Add more functionalities that the defaults. */
     options.PivotGrowth = YES;    /* Compute reciprocal pivot growth */
     options.ConditionNumber = YES;/* Compute reciprocal condition number */
-    options.IterRefine = DOUBLE;  /* Perform double-precision refinement */
+    options.IterRefine = SLU_DOUBLE;  /* Perform double-precision refinement */
     
     if ( lwork > 0 ) {
 	work = SUPERLU_MALLOC(lwork);
@@ -139,9 +139,10 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
+
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	     
 	fflush(stdout);
 
@@ -165,9 +166,11 @@ main(int argc, char *argv[])
     Destroy_CompCol_Matrix(&A);
     Destroy_SuperMatrix_Store(&B);
     Destroy_SuperMatrix_Store(&X);
-    if ( lwork >= 0 ) {
+    if ( lwork == 0 ) {
         Destroy_SuperNode_Matrix(&L);
         Destroy_CompCol_Matrix(&U);
+    } else if ( lwork > 0 ) {
+        SUPERLU_FREE(work);
     }
 
 #if ( DEBUGlevel>=1 )
@@ -179,7 +182,7 @@ main(int argc, char *argv[])
 /*  
  * Parse command line inputs.
  */
-static void
+void
 parse_command_line(int argc, char *argv[], int *lwork,
                    double *u, yes_no_t *equil, trans_t *trans )
 {
diff --git a/EXAMPLE/zlinsolx1.c b/EXAMPLE/zlinsolx1.c
index e75ee28..75b2117 100644
--- a/EXAMPLE/zlinsolx1.c
+++ b/EXAMPLE/zlinsolx1.c
@@ -8,7 +8,7 @@
  */
 #include "slu_zdefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
 /*
  * Purpose
@@ -135,9 +135,10 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
+
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	fflush(stdout);
 
     } else if ( info > 0 && lwork == -1 ) {
@@ -194,11 +195,14 @@ main(int argc, char *argv[])
     Destroy_CompCol_Matrix(&A);
     Destroy_SuperMatrix_Store(&B);
     Destroy_SuperMatrix_Store(&X);
-    if ( lwork >= 0 ) {
+    if ( lwork == 0 ) {
         Destroy_SuperNode_Matrix(&L);
         Destroy_CompCol_Matrix(&U);
+    } else if ( lwork > 0 ) {
+        SUPERLU_FREE(work);
     }
 
+
 #if ( DEBUGlevel>=1 )
     CHECK_MALLOC("Exit main()");
 #endif
@@ -207,7 +211,7 @@ main(int argc, char *argv[])
 /*  
  * Parse command line options to get relaxed snode size, panel size, etc.
  */
-static void
+void
 parse_command_line(int argc, char *argv[], int *lwork,
                    double *u, yes_no_t *equil, trans_t *trans )
 {
diff --git a/EXAMPLE/zlinsolx2.c b/EXAMPLE/zlinsolx2.c
index 1fce9d4..7c1b650 100644
--- a/EXAMPLE/zlinsolx2.c
+++ b/EXAMPLE/zlinsolx2.c
@@ -8,7 +8,7 @@
  */
 #include "slu_zdefs.h"
 
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
 /*
  * Purpose
@@ -150,9 +150,10 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+    	printf("FILL ratio = %.1f\n", (float)(Lstore->nnz + Ustore->nnz - n)/nnz);
+
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	if ( options.IterRefine ) {
             printf("Iterative Refinement:\n");
 	    printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
@@ -204,9 +205,8 @@ main(int argc, char *argv[])
 	printf("No of nonzeros in factor L = %d\n", Lstore->nnz);
     	printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
     	printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz - n);
-	printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-	       mem_usage.expansions);
+	printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	if ( options.IterRefine ) {
             printf("Iterative Refinement:\n");
 	    printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
@@ -232,9 +232,11 @@ main(int argc, char *argv[])
     Destroy_CompCol_Matrix(&A1);
     Destroy_Dense_Matrix(&B1);
     Destroy_Dense_Matrix(&X);
-    if ( lwork >= 0 ) {
+    if ( lwork == 0 ) {
         Destroy_SuperNode_Matrix(&L);
         Destroy_CompCol_Matrix(&U);
+    } else if ( lwork > 0 ) {
+        SUPERLU_FREE(work);
     }
 
 #if ( DEBUGlevel>=1 )
@@ -245,7 +247,7 @@ main(int argc, char *argv[])
 /*  
  * Parse command line options to get relaxed snode size, panel size, etc.
  */
-static void
+void
 parse_command_line(int argc, char *argv[], int *lwork,
                    double *u, yes_no_t *equil, trans_t *trans )
 {
diff --git a/FORTRAN/Makefile b/FORTRAN/Makefile
index 0b171d2..23671a7 100644
--- a/FORTRAN/Makefile
+++ b/FORTRAN/Makefile
@@ -6,15 +6,22 @@ include ../make.inc
 #######################################################################
 
 HEADER   = ../SRC
-LIBS	= ../$(SUPERLULIB) $(BLASLIB) -lm
+LIBS	= $(SUPERLULIB) $(BLASLIB) -lm
 
+# double real
 F77EXM	= f77_main.o hbcode1.o c_fortran_dgssv.o
 
-all:	f77exm
+# double complex
+ZF77EXM	= z_f77_main.o zhbcode1.o c_fortran_zgssv.o
 
-f77exm: $(F77EXM) ../$(SUPERLULIB)
+all:	f77exm zf77exm
+
+f77exm: $(F77EXM) $(SUPERLULIB)
 	$(FORTRAN) $(LOADOPTS) $(F77EXM) $(LIBS) -o $@
 
+zf77exm: $(ZF77EXM) $(SUPERLULIB)
+	$(FORTRAN) $(LOADOPTS) $(ZF77EXM) $(LIBS) -o $@
+
 c_fortran_zgssv.o: c_fortran_zgssv.c
 	$(CC) $(CFLAGS) $(CDEFS) -I$(HEADER) -c $< $(VERBOSE)
 
@@ -25,4 +32,5 @@ c_fortran_zgssv.o: c_fortran_zgssv.c
 	$(FORTRAN) $(FFLAGS) -c $< $(VERBOSE)
 
 clean:	
-	rm -f *.o f77exm
+	rm -f *.o f77exm zf77exm
+
diff --git a/FORTRAN/c_fortran_cgssv.c b/FORTRAN/c_fortran_cgssv.c
index 219d922..550f3e7 100644
--- a/FORTRAN/c_fortran_cgssv.c
+++ b/FORTRAN/c_fortran_cgssv.c
@@ -55,7 +55,6 @@ c_fortran_cgssv_(int *iopt, int *n, int *nnz, int *nrhs,
     NCformat *Ustore;
     int      i, panel_size, permc_spec, relax;
     trans_t  trans;
-    float   drop_tol = 0.0;
     mem_usage_t   mem_usage;
     superlu_options_t options;
     SuperLUStat_t stat;
@@ -98,8 +97,8 @@ c_fortran_cgssv_(int *iopt, int *n, int *nnz, int *nrhs,
 	panel_size = sp_ienv(1);
 	relax = sp_ienv(2);
 
-	cgstrf(&options, &AC, drop_tol, relax, panel_size, 
-	       etree, NULL, 0, perm_c, perm_r, L, U, &stat, info);
+	cgstrf(&options, &AC, relax, panel_size, etree,
+                NULL, 0, perm_c, perm_r, L, U, &stat, info);
 
 	if ( *info == 0 ) {
 	    Lstore = (SCformat *) L->Store;
@@ -108,16 +107,14 @@ c_fortran_cgssv_(int *iopt, int *n, int *nnz, int *nrhs,
 	    printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
 	    printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz);
 	    cQuerySpace(L, U, &mem_usage);
-	    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		   mem_usage.expansions);
+	    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	} else {
 	    printf("cgstrf() error returns INFO= %d\n", *info);
 	    if ( *info <= *n ) { /* factorization completes */
 		cQuerySpace(L, U, &mem_usage);
-		printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		       mem_usage.expansions);
+		printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	    }
 	}
 	
diff --git a/FORTRAN/c_fortran_dgssv.c b/FORTRAN/c_fortran_dgssv.c
index 9d824f0..0373ad4 100644
--- a/FORTRAN/c_fortran_dgssv.c
+++ b/FORTRAN/c_fortran_dgssv.c
@@ -10,10 +10,9 @@
 #include "slu_ddefs.h"
 
 #define HANDLE_SIZE  8
-
-/* kind of integer to hold a pointer.  Use 'long int'
-   so it works on 64-bit systems. */
-typedef long int fptr;  /* 64 bit */
+/* kind of integer to hold a pointer.  Use int.
+   This might need to be changed on 64-bit systems. */
+typedef int fptr;  /* 32-bit by default */
 
 typedef struct {
     SuperMatrix *L;
@@ -56,7 +55,6 @@ c_fortran_dgssv_(int *iopt, int *n, int *nnz, int *nrhs,
     NCformat *Ustore;
     int      i, panel_size, permc_spec, relax;
     trans_t  trans;
-    double   drop_tol = 0.0;
     mem_usage_t   mem_usage;
     superlu_options_t options;
     SuperLUStat_t stat;
@@ -99,8 +97,8 @@ c_fortran_dgssv_(int *iopt, int *n, int *nnz, int *nrhs,
 	panel_size = sp_ienv(1);
 	relax = sp_ienv(2);
 
-	dgstrf(&options, &AC, drop_tol, relax, panel_size, 
-	       etree, NULL, 0, perm_c, perm_r, L, U, &stat, info);
+	dgstrf(&options, &AC, relax, panel_size, etree,
+                NULL, 0, perm_c, perm_r, L, U, &stat, info);
 
 	if ( *info == 0 ) {
 	    Lstore = (SCformat *) L->Store;
@@ -109,16 +107,14 @@ c_fortran_dgssv_(int *iopt, int *n, int *nnz, int *nrhs,
 	    printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
 	    printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz);
 	    dQuerySpace(L, U, &mem_usage);
-	    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		   mem_usage.expansions);
+	    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	} else {
 	    printf("dgstrf() error returns INFO= %d\n", *info);
 	    if ( *info <= *n ) { /* factorization completes */
 		dQuerySpace(L, U, &mem_usage);
-		printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		       mem_usage.expansions);
+		printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	    }
 	}
 	
diff --git a/FORTRAN/c_fortran_sgssv.c b/FORTRAN/c_fortran_sgssv.c
index 1fa08f1..873833c 100644
--- a/FORTRAN/c_fortran_sgssv.c
+++ b/FORTRAN/c_fortran_sgssv.c
@@ -55,7 +55,6 @@ c_fortran_sgssv_(int *iopt, int *n, int *nnz, int *nrhs,
     NCformat *Ustore;
     int      i, panel_size, permc_spec, relax;
     trans_t  trans;
-    float   drop_tol = 0.0;
     mem_usage_t   mem_usage;
     superlu_options_t options;
     SuperLUStat_t stat;
@@ -98,8 +97,8 @@ c_fortran_sgssv_(int *iopt, int *n, int *nnz, int *nrhs,
 	panel_size = sp_ienv(1);
 	relax = sp_ienv(2);
 
-	sgstrf(&options, &AC, drop_tol, relax, panel_size, 
-	       etree, NULL, 0, perm_c, perm_r, L, U, &stat, info);
+	sgstrf(&options, &AC, relax, panel_size, etree,
+                NULL, 0, perm_c, perm_r, L, U, &stat, info);
 
 	if ( *info == 0 ) {
 	    Lstore = (SCformat *) L->Store;
@@ -108,16 +107,14 @@ c_fortran_sgssv_(int *iopt, int *n, int *nnz, int *nrhs,
 	    printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
 	    printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz);
 	    sQuerySpace(L, U, &mem_usage);
-	    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		   mem_usage.expansions);
+	    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	} else {
 	    printf("sgstrf() error returns INFO= %d\n", *info);
 	    if ( *info <= *n ) { /* factorization completes */
 		sQuerySpace(L, U, &mem_usage);
-		printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		       mem_usage.expansions);
+		printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	    }
 	}
 	
diff --git a/FORTRAN/c_fortran_zgssv.c b/FORTRAN/c_fortran_zgssv.c
index b7cf074..ce43570 100644
--- a/FORTRAN/c_fortran_zgssv.c
+++ b/FORTRAN/c_fortran_zgssv.c
@@ -55,7 +55,6 @@ c_fortran_zgssv_(int *iopt, int *n, int *nnz, int *nrhs,
     NCformat *Ustore;
     int      i, panel_size, permc_spec, relax;
     trans_t  trans;
-    double   drop_tol = 0.0;
     mem_usage_t   mem_usage;
     superlu_options_t options;
     SuperLUStat_t stat;
@@ -98,8 +97,8 @@ c_fortran_zgssv_(int *iopt, int *n, int *nnz, int *nrhs,
 	panel_size = sp_ienv(1);
 	relax = sp_ienv(2);
 
-	zgstrf(&options, &AC, drop_tol, relax, panel_size, 
-	       etree, NULL, 0, perm_c, perm_r, L, U, &stat, info);
+	zgstrf(&options, &AC, relax, panel_size, etree,
+                NULL, 0, perm_c, perm_r, L, U, &stat, info);
 
 	if ( *info == 0 ) {
 	    Lstore = (SCformat *) L->Store;
@@ -108,16 +107,14 @@ c_fortran_zgssv_(int *iopt, int *n, int *nnz, int *nrhs,
 	    printf("No of nonzeros in factor U = %d\n", Ustore->nnz);
 	    printf("No of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz);
 	    zQuerySpace(L, U, &mem_usage);
-	    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		   mem_usage.expansions);
+	    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		   mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	} else {
 	    printf("zgstrf() error returns INFO= %d\n", *info);
 	    if ( *info <= *n ) { /* factorization completes */
 		zQuerySpace(L, U, &mem_usage);
-		printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-		       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6,
-		       mem_usage.expansions);
+		printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+		       mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
 	    }
 	}
 	
diff --git a/FORTRAN/z_f77_main.f b/FORTRAN/z_f77_main.f
new file mode 100644
index 0000000..aced69e
--- /dev/null
+++ b/FORTRAN/z_f77_main.f
@@ -0,0 +1,50 @@
+      program z_f77_main
+      integer maxn, maxnz
+      parameter ( maxn = 10000, maxnz = 100000 )
+      integer rowind(maxnz), colptr(maxn)
+      complex*16  values(maxnz), b(maxn)
+      integer n, nnz, nrhs, ldb, info, iopt
+      integer*8 factors
+*
+      call zhbcode1(n, n, nnz, values, rowind, colptr)
+*
+      nrhs = 1
+      ldb = n
+      do i = 1, n
+         b(i) = (1,2) + i*(3,4)
+      enddo
+*
+
+* First, factorize the matrix. The factors are stored in *factors* handle.
+      iopt = 1
+      call c_fortran_zgssv( iopt, n, nnz, nrhs, values, rowind, colptr, 
+     $                      b, ldb, factors, info )
+*
+      if (info .eq. 0) then
+         write (*,*) 'Factorization succeeded'
+      else
+         write(*,*) 'INFO from factorization = ', info
+      endif
+*
+* Second, solve the system using the existing factors.
+      iopt = 2
+      call c_fortran_zgssv( iopt, n, nnz, nrhs, values, rowind, colptr, 
+     $                      b, ldb, factors, info )
+*
+      if (info .eq. 0) then
+         write (*,*) 'Solve succeeded'
+         write (*,*) (b(i), i=1, 10)
+      else
+         write(*,*) 'INFO from triangular solve = ', info
+      endif
+
+* Last, free the storage allocated inside SuperLU
+      iopt = 3
+      call c_fortran_zgssv( iopt, n, nnz, nrhs, values, rowind, colptr, 
+     $                      b, ldb, factors, info )
+*
+      stop
+
+      end
+
+
diff --git a/FORTRAN/zhbcode1.f b/FORTRAN/zhbcode1.f
new file mode 100644
index 0000000..2bb55a1
--- /dev/null
+++ b/FORTRAN/zhbcode1.f
@@ -0,0 +1,46 @@
+      subroutine zhbcode1(nrow, ncol, nnzero, values, rowind, colptr)
+
+C     ================================================================
+C     ... SAMPLE CODE FOR READING A SPARSE MATRIX IN STANDARD FORMAT
+C     ================================================================
+
+      CHARACTER      TITLE*72 , KEY*8    , MXTYPE*3 ,
+     1               PTRFMT*16, INDFMT*16, VALFMT*20, RHSFMT*20
+
+      INTEGER        TOTCRD, PTRCRD, INDCRD, VALCRD, RHSCRD,
+     1               NROW  , NCOL  , NNZERO, NELTVL
+
+      INTEGER        COLPTR (*), ROWIND (*)
+
+      COMPLEX*16     VALUES (*)
+
+C    ------------------------
+C     ... READ IN HEADER BLOCK
+C     ------------------------
+
+      READ ( *, 1000 ) TITLE , KEY   ,
+     1                     TOTCRD, PTRCRD, INDCRD, VALCRD, RHSCRD,
+     2                     MXTYPE, NROW  , NCOL  , NNZERO, NELTVL,
+     3                     PTRFMT, INDFMT, VALFMT, RHSFMT
+ 1000 FORMAT ( A72, A8 / 5I14 / A3, 11X, 4I14 / 2A16, 2A20 )
+
+C     -------------------------
+C     ... READ MATRIX STRUCTURE
+C     -------------------------
+
+      READ ( *, PTRFMT ) ( COLPTR (I), I = 1, NCOL+1 )
+
+      READ ( *, INDFMT ) ( ROWIND (I), I = 1, NNZERO )
+
+      IF  ( VALCRD .GT. 0 )  THEN
+
+C         ----------------------
+C         ... READ MATRIX VALUES
+C         ----------------------
+
+          READ ( *, VALFMT ) ( VALUES (I), I = 1, NNZERO )
+
+      ENDIF
+
+      return
+      end
diff --git a/INSTALL/slamch.c b/INSTALL/slamch.c
index 4e44ad4..24bbe6f 100644
--- a/INSTALL/slamch.c
+++ b/INSTALL/slamch.c
@@ -6,7 +6,7 @@
 #define abs(x) ((x) >= 0 ? (x) : -(x))
 #define dabs(x) (double)abs(x)
 
-double slamch_(char *cmach)
+float slamch_(char *cmach)
 {
 /*  -- LAPACK auxiliary routine (version 2.0) --   
        Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
diff --git a/INSTALL/slamchtst.c b/INSTALL/slamchtst.c
index 3544004..49b88fe 100644
--- a/INSTALL/slamchtst.c
+++ b/INSTALL/slamchtst.c
@@ -1,10 +1,10 @@
 #include <stdio.h>
 
-main()
+int main()
 {
     /* Local variables */
     float base, emin, prec, emax, rmin, rmax, t, sfmin;
-    extern double slamch_(char *);
+    extern float slamch_(char *);
     float rnd, eps;
 
     eps = slamch_("Epsilon");
diff --git a/INSTALL/superlu_timer.c b/INSTALL/superlu_timer.c
index 2ef2a4a..6ba07bf 100644
--- a/INSTALL/superlu_timer.c
+++ b/INSTALL/superlu_timer.c
@@ -1,11 +1,15 @@
-/* 
+/*! @file superlu_timer.c
+ * \brief Returns the time used
+ *
+ * <pre>
  * Purpose
  * ======= 
- *	Returns the time in seconds used by the process.
+ * 
+ * Returns the time in seconds used by the process.
  *
  * Note: the timer function call is machine dependent. Use conditional
  *       compilation to choose the appropriate function.
- *
+ * </pre>
  */
 
 
@@ -15,30 +19,54 @@
  *	nanoseconds. 
 */
 #include <sys/time.h>
- 
+
 double SuperLU_timer_() {
     return ( (double)gethrtime() / 1e9 );
 }
 
+#elif _WIN32
+
+#include <time.h>
+
+double SuperLU_timer_()
+{
+    clock_t t;
+    t=clock();
+
+    return ((double)t)/CLOCKS_PER_SEC;
+}
+
 #else
 
+#ifndef NO_TIMER
 #include <sys/types.h>
 #include <sys/times.h>
-#include <time.h>
 #include <sys/time.h>
+#include <unistd.h>
+#endif
 
 #ifndef CLK_TCK
 #define CLK_TCK 60
 #endif
-
+/*! \brief Timer function
+ */ 
 double SuperLU_timer_()
 {
+#ifdef NO_TIMER
+    /* no sys/times.h on WIN32 */
+    double tmp;
+    tmp = 0.0;
+#else
     struct tms use;
     double tmp;
-    times(&use);
+    int clocks_per_sec = sysconf(_SC_CLK_TCK);
+
+    times ( &use );
     tmp = use.tms_utime;
     tmp += use.tms_stime;
-    return (double)(tmp) / CLK_TCK;
+#endif
+    /*return (double)(tmp) / CLK_TCK;*/
+    return (double)(tmp) / clocks_per_sec;
 }
 
 #endif
diff --git a/INSTALL/timertst.c b/INSTALL/timertst.c
index ddf1bb7..f470427 100644
--- a/INSTALL/timertst.c
+++ b/INSTALL/timertst.c
@@ -1,15 +1,16 @@
 #include <stdio.h>
+#include <stdlib.h>
 
 void mysub(int n, double *x, double *y)
 {
     return;
 }
 
-main()
+int main()
 {
     /* Parameters */    
-#define NMAX    100
-#define ITS     10000
+#define NMAX    1000
+#define ITS     100000
     
     int      i, j, iters;
     double   alpha, avg, t1, t2, tnotim;
@@ -29,28 +30,30 @@ main()
     while ( tnotim <= 0.0 ) {
       t1 = SuperLU_timer_();
       for (j = 0; j < iters; ++j) {
-	for (i = 0; i < NMAX; ++i)
-          y[i] += alpha * x[i];
+	for (i = 0; i < NMAX; ++i) y[i] += alpha * x[i];
 	alpha = -alpha;
       }
       t2 = SuperLU_timer_();
       tnotim = t2 - t1;
       if ( tnotim > 0. ){
-	float ops = 2.0 * iters * NMAX * 1e-6;
-        printf("Time for %d DAXPY ops  = %10.3g seconds\n",
-	       NMAX*iters, tnotim);
-	printf("DAXPY performance rate = %10.3g mflops\n", ops/tnotim);
+	float ops = 2.0 * iters * NMAX * 1e-9;
+        printf("Time for %d DAXPYs = %10.3g seconds\n",
+	       iters, tnotim);
+	printf("DAXPY performance rate = %10.3g Gflops\n", ops/tnotim);
       } else {
-        iters *= 10 ;
         /* this makes sure we dont keep trying forever */
-        if ( iters > 10000000 ) {
+        if ( iters > 100000000 ) {
           printf("*** Error: Time for operations was zero.\n"
                  "\tThe timer may not be working correctly.\n");
-          exit(9);
+          /*exit(9);*/
         }
+        iters *= 10;
       }
     }
 
+    /* Force gcc not to optimize away the previous loop (DCS) */
+    printf("y[0]=%g\n", y[0]) ;
+    
     t1 = SuperLU_timer_();
     for (j = 0; j < ITS; ++j) {
 	for (i = 0; i < NMAX; ++i)
diff --git a/INSTALL/ug.ps b/INSTALL/ug.ps
deleted file mode 100644
index 7a56054..0000000
--- a/INSTALL/ug.ps
+++ /dev/null
@@ -1,8591 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
-%%Title: ug.dvi
-%%Pages: 71
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 596 842
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -o ug.ps ug
-%DVIPSParameters: dpi=600, compressed
-%DVIPSSource:  TeX output 2003.10.21:1553
-%%BeginProcSet: texc.pro
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
-1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
-0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
-sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
-rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
-gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
-/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
-/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
-A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
-get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
-ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
-fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
-{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
-chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
-1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
-forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: special.pro
-%!
-TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
-/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
-/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
-/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
-/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
-X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
-/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
-/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
-{userdict/md get type/dicttype eq{userdict begin md length 10 add md
-maxlength ge{/md md dup length 20 add dict copy def}if end md begin
-/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
-atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
-itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
-transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
-curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
-pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
-if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
--1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
-get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
-yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
-neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
-noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
-90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
-neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
-1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
-2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
--1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
-TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
-Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
-}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
-save N userdict maxlength dict begin/magscale true def normalscale
-currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
-/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
-psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
-psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
-TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
-psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
-roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
-moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
-begin/SpecialSave save N gsave normalscale currentpoint TR
- at SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
-CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
-closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
-sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
-}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
-CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
-lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
-/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
-repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
-/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
-currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
-moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
-/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
-1 startangle endangle arc savematrix setmatrix}N end
-
-%%EndProcSet
-TeXDict begin 39158280 55380996 1000 600 600 (ug.dvi)
- at start
-%DVIPSBitmapFont: Fa cmcsc10 10.95 5
-/Fa 5 106 df<B500C093380FFFFCA26E5E0001F1FE00D8007F18F8D977F0163BA2D973
-F81673A3D971FC16E3A2D970FEED01C3A3027FED0383A26E6CEC0703A36E6C140EA26E6C
-141CA36E6C1438A26E6C1470A36E6C14E0A26E6CEB01C0A3037FEB0380A292393F800700
-A392381FC00EA26F6C5AA36F6C5AA26F6C5AA36F6C5AA26FB45AA3705A13F8486C6EC7FC
-D807FFEF0FFEB500F80307B512FC161EA24E3E7BBD5A>77 D<D903FE130690391FFFC00E
-017FEBF81E3901FE01FC3A03F0003F3E4848EB0FFE484813074848130390C71201003E14
-00007E157EA2007C153E12FCA2161EA36C150EA27E7F007F92C7FC7F13F0EA3FFCEBFFC0
-6C13FC6CEBFFC06C14FC6C14FF6C15C06C6C80011F80010380D9003F7F02037F9138003F
-FF15070301138081167F17C0163F00E0151FA3160FA27EA36C1680161F7E17006C5D6C15
-3E6D5C6D14FCD8FDF0495AD8F8FC495A3AF07FC01FC0011FB55AD8E00349C7FC39C0003F
-F02A427ABF38>83 D<003FB912E0A3903BF0003FF0007F01806D48130F48C7ED07F0007E
-1703007C170100781700A300701870A5481838A5C81600B3B14B7E4B7E0103B7FCA33D3D
-7CBC47>I<B8FCA33903FE00016C489038003F80161F160F1607A21603A317C0ED1C01A3
-93C7FCA2153CA215FC90B5FCA3EBFC00153CA2151CA21770A392C712E0A41601A2EE03C0
-A21607160F161F486C14FFB81280A32C2F7CAE33>101 D<B512F8A33803FE006C5AB3B3
-A3487EB512F8A3152F7DAE1B>105 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fb cmssbx10 12 17
-/Fb 17 120 df<EAFFF8AD0D0D788C1E>46 D<EC3FF00103B5FC010F14C0013F14F04980
-90B67E4881489038F03FFF48496C13804A7E48496C13C04A7E4816E0497F003F16F0A400
-7F16F8497FA500FF16FCB3A8007F16F8A36D5BA3003F16F0A36C6C4913E0A26C16C06E5A
-6C6D4813806E5A6CD9F87F13006C90B55A6C5D6D5C6D5C010F14C0010391C7FC9038003F
-F02E497CC637>48 D<ECFFE0010713FC013FEBFF804914E048B67E48814815FE48815A17
-8048010114C0397FFC007F49011F13E048487F4915F0816C5A003F6E13F86C5AA2120F6C
-C77E7EC8FC5DA317F0A25D17E05D17C05D17804B13004B5A5E4B5A4A5B4A5B4A5B4A5B4A
-90C7FC4A5AEC7FF85D4A5A495B495B4990C8FC495A495A495A495AEBFFC0485B4890C9FC
-485A485A48B712F05A4816F8A76C16F07E2D477CC637>50 D<EC7FF0903807FFFE011FEB
-FFC0017F8090B612F848814881488148168048EBE03FDA800F13C04880020014E048487F
-A26F13F05B12FF17F8A281A417FCA75DA3127F6D5BA3003F5C6D5B6C6D5A6E5A6CEBFFFE
-7E6C5C6C5C6C5C013F01C013F8010F130090380010011400A217F0A25DA217E05D17C05D
-D801C04913806D5B486C4913009039FC03FFFE48B6FC5E485D5E6C15C0000192C7FC6C14
-FC013F13F0010790C8FC2E497CC637>57 D<903801FFF8011F13FF90B612E0000381000F
-15FC82A249C66C7E01F86D1380D807E07F5B496D13C090C7FC1206C8FCA60207B5FC49B6
-FC131F137F48B512EF0007EBF80F4813C0481380481300485A5B12FF5BA45D7F5D6C6C5B
-92B5FC383FFF8391B6FC6C14EF6C14CF6C148F6CD9FE071380C613F8D93FC0C8FC2A317D
-AF34>97 D<EC7FFC0107B512C0011F14F0017F14FC90B7FC5A5A5A489038F007FE48EBC0
-004A137E4890C7121E160E491404007F92C7FCA35B12FFAE127F7FA216036C6C5C161F6C
-6D5B6E13FF6CD9F00F138091B6FC7E7E7E6C6CECFE00011F14F8010714C09026007FF8C7
-FC29317CAF31>99 D<EEFFF0A24B13F8B3A2EB01FF011F13C1017F13F190B512FD000391
-B5FC5A5AECF01F48EBC007EC8001481300A2485AA4485AB0127F7FA36C7E5D6E5A6C6D5A
-6CEBF03F91B6FC7E6C14FD6C14F96C6C01F013F0011F13C0D903FEC8FC2D467CC438>I<
-EC7FF80103B57E011F14E0017F8090B612FC48815A489038F03FFF48D9C00F1380EC8003
-48010014C048804915E0A248487FA217F012FFA25BA390B7FCA317E0A201F8C9FCA37F12
-7FA37F003F16C016016C6C14036E13076C6DEB1FE06E137F6C9038F803FF6C90B6FC7E6C
-1680013FECFE00010F14F8010114E09026003FFEC7FC2C317DAF33>I<EC1FFE49B512C0
-1307131F5B5B90B6FCECFC0F48EBF8031501ECF000481500AD003FEBFFE05AB67EA36C5C
-A2000301F0C7FCB3B36C5B7E22467EC521>I<EA3FF8127FEAFFFCB3B3B3ABEA7FF8123F
-0E457BC419>108 D<D83FF0D97FE049B47E007F902603FFFC010F13F026FFF80F01FF01
-3F13FC4A6E487F027F02C1B6FC91B612C301F903E71580DAF80FECE03F9026FBE0079038
-EF801FD9FFC0DAFF0014C04A6C497FA202005C495DA3495DB3AB6C486D496D1380003F6E
-814A2F7AAE57>I<EC3FFC0103B512C0011F14F8498090B7FC4816804816C048D9F81F13
-E048D9C00313F04A7E4890C713F8A24848EC7FFCA2007F16FE49143FA400FF16FFAD007F
-16FE6D147FA36C6CECFFFCA26C6D4813F86E5A6CD9F00F13F06C90B612E0A26C16C0C616
-006D5C011F14F8010714E09026007FFEC7FC30317DAF37>111 D<EDFF80263FF80F13E0
-007F013F13F8486CB512FE01FD8090B71280A217C0ECE07FDA001F13E0497F4915F081A2
-8117F8A281AE5D17F0A25DA217E05D6D4913C06D5B02C0B5128091B612005E5E01FD5C01
-FC14E0023F1380DA07FCC7FC91C9FCB06C5A123F2D427AAE38>I<D83FF013F8007F1303
-38FFF80F141F147FA214FF13F913FBA290B5120014F85C5C5C5C91C7FC5BA35BB3A76C5A
-123F1D2F7AAE25>114 D<EB0FFF017F13F048B512FC000714FF4815C05AA2383FF80390
-39F0007F80151F4848130F15071503ED01006D90C7FC7F13FEEBFFE014FF6C14C015F06C
-80816C806C806C1580C6FC013F14C0130FD9007F13E0140714018012200070147F127812
-7C127ED87F8013FF01E014C038FFFC0390B6FC16801600123F000F5C000314F8C614E001
-0F90C7FC23317DAF2A>I<D83FF8903803FFC0127F486C4913E0B3AD5DA35D5DA26C6C5B
-6D48B5FC6CEBFFF715E76C14C70007028313C06CEBFE0326003FF0C8FC2B2F7AAD38>
-117 D<D83FC0D901F8EC1FE0486CD903FEEC3FF0486C496CEC7FF87F007F4AEDFFF0A283
-6C6C4916E06017C07F001F4A16C06017E06D147F6C027F4A1380A217F06CD980FE160004
-3F5B17F814C06C01C14B5A15FCEE1FFC14E16C01E34B5AA29238F80FFE6C01F75E187F17
-FF9138FFF0076D4C5AA215E0826D5FA215C06D6E5CA34B7E6D90C75CD903FEDA3FFEC7FC
-452E7EAD4A>119 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fc cmtt10 10 10
-/Fc 10 118 df<007FB5FCB612C015F0816C803907E003FEEC00FFED7F80153FED1FC0ED
-0FE0A2150716F0150316F81501A4ED00FCACED01F8A3150316F0A2150716E0150FED1FC0
-153FED7F80EDFF00EC03FE007FB55AB65A5D15C06C91C7FC26337EB22C>68
-D<007FB512F8B612FCA36C14F839000FC000B3B3A5007FB512F8B612FCA36C14F81E3379
-B22C>73 D<387FFFE0B57EA36C5BD803F0C8FCB3AE16F0ED01F8A8007FB6FCB7FCA36C15
-F025337DB22C>76 D<90381FF80790B5EA0F804814CF000714FF5A381FF01F383FC00349
-7E48C7FC007E147F00FE143F5A151FA46CEC0F00007E91C7FC127F7FEA3FE0EA1FFCEBFF
-C06C13FC0003EBFFC06C14F06C6C7F01077F9038007FFEEC07FF02001380153FED1FC0A2
-ED0FE0A20078140712FCA56CEC0FC0A26CEC1F806D133F01E0EB7F009038FE01FF90B55A
-5D00F914F0D8F83F13C0D8700790C7FC23357CB32C>83 D<007FB612FCB712FEA43AFC00
-7E007EA70078153CC71400B3AF90383FFFFCA2497F6D5BA227337EB22C>I<3B7FFF803F
-FFC0B56C4813E0A36C496C13C03B03F00001F800B3AF6D130300015DA26D130700005D6D
-130F017F495A6D6C485AECE0FF6DB5C7FC6D5B010313F86D5B9038003F802B3480B22C>
-I<EB03FE90381FFFC0017F13F048B57E48803907FE03FE390FF800FFD81FE0EB3F805B48
-48EB1FC090C7120F5A007E15E015075AB7FCA416C000FCC9FC7E127EA2127F6CEC03C06D
-EB07E06C7ED80FF0130F6C6CEB3FC001FF13FF000190B512806C1500013F13FC010F13F0
-0101138023247CA32C>101 D<397FF01FE039FFF8FFF801FB13FE90B6FC6C1580000190
-38F07FC09138801FE091380007F049EB03F85BED01FC491300A216FE167EA816FE6D14FC
-A2ED01F86D13036DEB07F0150F9138801FE09138E07FC091B51280160001FB5B01F813F8
-EC3FC091C8FCAD387FFFE0B57EA36C5B27367FA32C>112 D<D87FFEEB3FC0B53801FFF0
-020713F8021F13FC6C5B39003F7FE1ECFF019138FC00F84A13704A13005CA25C5CA391C8
-FCAF007FB512E0B67EA36C5C26247EA32C>114 D<3A7FF003FF80486C487FA3007F7F00
-01EB000FB3A3151FA2153F6D137F3900FE03FF90B7FC6D15807F6D13CF902603FE071300
-29247FA32C>117 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fd cmmi6 6 1
-/Fd 1 106 df<1338137CA2137813701300A7EA0780EA1FC0EA38E01230EA60F0EAC1E0
-A3EA03C0A3EA0780A2EA0F0013041306EA1E0CA21318121CEA1E70EA0FE0EA07800F237D
-A116>105 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fe cmmi10 10 13
-/Fe 13 121 df<147E903803FF8090390FC1C38090391F00EFC0017E137F49133F485A48
-48EB1F8012075B000F143F48481400A2485A5D007F147E90C7FCA215FE485C5AA214015D
-48150CA21403EDF01C16181407007C1538007E010F1330003E131F027B13706C01E113E0
-3A0F83C0F9C03A03FF007F80D800FCEB1F0026267DA42C>97 D<133FEA1FFFA3C67E137E
-A313FE5BA312015BA312035BA31207EBE0FCEBE3FF9038E707C0390FFE03E09038F801F0
-01F013F8EBE000485A15FC5BA2123F90C7FCA214015A127EA2140312FE4814F8A2140715
-F05AEC0FE0A215C0EC1F80143F00781400007C137E5C383C01F86C485A380F07C06CB4C7
-FCEA01FC1E3B7CB924>I<EC3FC0903801FFF0903807E03C90380F800E90383F0007017E
-131F49137F484813FF485A485A120F4913FE001F143848481300A2127F90C8FCA35A5AA4
-5AA315031507007E1406150E003E143C003F14706C14E0390F8007C03907C03F003801FF
-F838003FC020267DA424>I<EB03F0EA01FFA3EA00075CA3130F5CA3131F5CA3133F91C8
-FCA35B017EEB07C0ED1FF0ED783801FEEBE0F89039FC01C1FCEC0383EC07070001130ED9
-F81C13F891383803F091387001E0000349C7FCEBF1C0EBF38001F7C8FCEA07FEA2EBFFE0
-EBE7F8380FE0FEEBC07F6E7E141F001F80D9800F1330A21670003F011F136001001380A2
-16E04815C0007E1481020F1380158300FE903807870048EB03FE0038EB00F8263B7CB92B
->107 D<EB0FC0EA03FF5AA2EA001F1480A2133FA21400A25BA2137EA213FEA25BA21201
-A25BA21203A25BA21207A25BA2120FA25BA2121FA25BA2123FA290C7FCA25AA2EA7E03A2
-EAFE07130612FCA2130E130C131C1318EA7C38EA3C70EA1FE0EA0780123B7DB919>I<D8
-03E0017F14FE3D07F801FFE003FFC03D0E3C0781F00F03E03D1C3E1E00F83C01F026383F
-38D9FC707F00304914E04A90387DC000007049EB7F8000604991C7FCA200E090C700FE13
-01485A017E5CA200000201140301FE5F495CA203031407000160495C180F03075D120349
-4A011F13601980030F023F13E00007F000C0495C1901031F023E1380000F1803494A1500
-61033F150E001FEF1E1C4991C7EA0FF80007C7000EEC03E043267EA449>I<EC1FC0ECFF
-F8903807E07E90380F801F90393F000F80017E14C0491307484814E0485A4848EB03F012
-0F5B121F48481307A2127F90C7FCA2150F5A4815E0A2151F16C0A248EC3F8016005D157E
-007E5C4A5A003E495A003F495A6C495A6C6C48C7FC3807E07E3801FFF038003F8024267D
-A428>111 D<90390F8003F090391FE00FFC903939F03C1F903A70F8700F80903AE0FDE0
-07C09038C0FF80030013E00001491303018015F05CEA038113015CA2D800031407A25CA2
-0107140FA24A14E0A2010F141F17C05CEE3F80131FEE7F004A137E16FE013F5C6E485A4B
-5A6E485A90397F700F80DA383FC7FC90387E1FFCEC07E001FEC9FCA25BA21201A25BA212
-03A25B1207B512C0A32C3583A42A>I<3903E001F83907F807FE390E3C1E07391C3E381F
-3A183F703F800038EBE07F0030EBC0FF00705B00601500EC007E153CD8E07F90C7FCEAC0
-7EA2120013FE5BA312015BA312035BA312075BA3120F5BA3121F5B0007C9FC21267EA425
->114 D<14FF010313C090380F80F090383E00380178131C153C4913FC0001130113E0A3
-3903F000F06D13007F3801FFE014FC14FF6C14806D13C0011F13E013039038003FF01407
-1403001E1301127FA24814E0A348EB03C012F800E0EB07800070EB0F006C133E001E13F8
-3807FFE0000190C7FC1E267CA427>I<13F8D803FE1438D8070F147C000E6D13FC121C12
-18003814011230D8701F5C12601503EAE03F00C001005B5BD8007E1307A201FE5C5B150F
-1201495CA2151F120349EC80C0A2153F1681EE0180A2ED7F0303FF130012014A5B3A00F8
-079F0E90397C0E0F1C90393FFC07F8903907F001F02A267EA430>117
-D<01F816F0D803FE9138E001F8D8070F903801F003000ED9800314FC121C121800380207
-13010030EDE000D8701F167C1260030F143CD8E03F163800C001005B5BD8007E131F1830
-01FE5C5B033F1470000117604991C7FCA218E000034A14C049137E17011880170318005F
-03FE1306170E000101015C01F801BF5B3B00FC039F8070903A7E0F0FC0E0903A1FFC03FF
-C0902703F0007FC7FC36267EA43B>119 D<903907E001F090391FF807FC9039783E0E0F
-9039E01F1C1FD801C09038383F803A03800FF07F0100EBE0FF5A000E4A1300000C157E02
-1F133C001C4AC7FC1218A2C7123FA292C8FCA25CA2147EA214FEA24A130CA20101141C00
-1E1518003F5BD87F81143801835C00FF1560010714E03AFE0E7C01C0D87C1C495A277838
-3E0FC7FC391FF00FFC3907C003F029267EA42F>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Ff cmmi12 14.4 4
-/Ff 4 86 df<191C193C193E197E19FEA21801A218031807A2180F8560183D18391871A2
-18E1170118C1DD03817FA2EF07014D7E170E5FA25F177817704D80A24C5A0403147F5F4C
-C7FCA2160E161E161C4C81A25E04F0143F5E4B5AA24B5A150793C8FC030E82A2031FB7FC
-5DA25D0370C8121F5D14015D4A4882A24AC9FC4A160F140E5CA25C147814704A83A2495A
-01031707495AA2130F133F496C4C7E2603FFE0EE3FFFB500FE031FB6FCA260A250557CD4
-58>65 D<020FB812E01AFCF2FF808791260007FEC813F06F48ED3FF8747E0307707E747E
-4C811C80030F82A24C17C0A2151FA25EA2153F1C805E62037F1800624C5E1A0F03FF5F50
-5A93C9485A505A4A4D5A4F5B4B4B90C7FCF10FFC0203EE3FF8F1FFE04B020F138092B700
-FCC8FC5CF1FF8003F8C8EA7FE0F11FF8020FEE07FC737E4B6F7E87021F707FA24B707EA2
-023F84A25DA2147FA25DA214FF6392CA12FFA24961614A4C5BA201034D90C7FC4F5A5C4F
-5A01074D5AF1FFF04A4B5B4E1380010F040F90C8FCF07FFC013F923803FFF8007FB912E0
-BA128006FCC9FC18C052527AD159>I<020FB612FCA4DA000701C0C8FC6F90C9FC5E1507
-A25EA2150FA25EA2151FA25EA2153FA25EA2157FA25EA215FFA25EA25CA293CAFCA25CA2
-5DA21407A25DA2140FA25DA2141FA25DA2023F17781A705D1AF0027F17E0A24B15011AC0
-02FF1603A24B168019075BF10F0092C95AA249173E197E4A167C19FC010716014E5A4A15
-0F181F010FEE7FF0EF03FF013F153F007FB95ABAFCA26145527AD150>76
-D<001FB600C00107B512FCA4D8000F90C9001F13006D48EE0FF84A705A010F715A624A5F
-A2011F170797C7FC5CA2013F5F190E5CA2017F171E191C5CA201FF173C19385CA2481878
-197091CAFCA24818F0615BA200071701615BA2000F1703615BA2001F170796C8FC5BA200
-3F5F180E5BA2007F171E181C5BA2183C00FF17385B18781870A218F06090C91201601703
-4D5A6D93C9FC007F5E171E5F003F5E6D5D001F15016D4A5A6C6CEC0F806C6C4ACAFC6C6C
-147E6C6C495A3A00FFC01FF06DB512C0011F91CBFC010713FC9038007FC04E5477D150>
-85 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fg cmr9 9 44
-/Fg 44 122 df<EC1FE0ECFFFC903803F01E90390FC00780EB1F8090393F000FC0017E13
-1F5BA2485AED0F8092C7FCA9ED0FC0B7FCA33901F8001F150FB3A6486CEB1FE0267FFFC1
-B5FCA328357FB42B>12 D<14C01301EB0380EB0F00130E5B133C5B5BA2485A485AA21207
-5B120F90C7FC5AA2121E123EA3123C127CA55AB0127CA5123C123EA3121E121FA27E7F12
-077F1203A26C7E6C7EA213787F131C7F130FEB0380EB01C01300124A79B71E>40
-D<12C07E1270123C121C7E120F6C7E6C7EA26C7E6C7EA27F1378137C133C133EA2131E13
-1FA37F1480A5EB07C0B0EB0F80A514005BA3131E133EA2133C137C137813F85BA2485A48
-5AA2485A48C7FC120E5A123C12705A5A124A7CB71E>I<123C127EB4FCA21380A2127F12
-3D1201A412031300A25A1206120E120C121C5A5A126009177A8715>44
-D<B512F0A514057F921A>I<123C127E12FFA4127E123C08087A8715>I<EB0FE0EB7FFCEB
-F83E3903E00F803907C007C0EB8003000F14E0391F0001F0A24814F8A2003E1300007E14
-FCA500FE14FEB2007E14FCA56CEB01F8A36C14F0A2390F8003E03907C007C0A23903E00F
-803900F83E00EB7FFCEB0FE01F347DB126>48 D<13075B5B137FEA07FFB5FC13BFEAF83F
-1200B3B3A2497E007FB51280A319327AB126>I<EB3FC0EBFFF0000313FC380F80FF391E
-007F80001CEB3FC048EB1FE048130F15F00060130712FC6C14F87E1403A3007E1307123C
-C7FC15F0A2140F15E0EC1FC0A2EC3F801500147E5C495A5C495A495A495A49C7FC133E13
-3C4913185B485A48481330485A48C7FC001C1470001FB512F05A5AB612E0A31D327CB126
->I<EB1FE0EBFFFC4813FF3907E03F80390F001FC0001EEB0FE0001CEB07F0123F018013
-F8140313C01380A2381F0007C7FC15F0A2EC0FE015C0141FEC3F80EC7E00EB01F8EB7FE0
-14FCEB003FEC1FC0EC0FE0EC07F015F8140315FC140115FEA3127EB4FCA415FC48130312
-780070EB07F86C14F0003C130F001FEB1FE0390FE03F800003B51200C613FCEB1FE01F34
-7DB126>I<14FE903807FF80011F13E090383F00F0017C13703901F801F8EBF003EA03E0
-1207EA0FC0EC01F04848C7FCA248C8FCA35A127EEB07F0EB1FFC38FE381F9038700F8090
-38E007C039FFC003E0018013F0EC01F8130015FC1400A24814FEA5127EA4127F6C14FCA2
-6C1301018013F8000F14F0EBC0030007EB07E03903E00FC03901F81F806CB51200EB3FFC
-EB0FE01F347DB126>54 D<15E0A34A7EA24A7EA34A7EA3EC0DFE140CA2EC187FA34A6C7E
-A202707FEC601FA202E07FECC00FA2D901807F1507A249486C7EA301066D7EA2010E8001
-0FB5FCA249800118C77EA24981163FA2496E7EA3496E7EA20001821607487ED81FF04A7E
-D8FFFE49B512E0A333367DB53A>65 D<B7FC16E016F83A03FC0003FE0001EC00FFEE7F80
-EE3FC0161F17E0160F17F0A617E0161F17C0EE3F80EE7F0016FEED03FC90B612F05E9039
-FC0007FCED00FEEE3F80EE1FC0EE0FE017F0160717F8160317FCA617F81607A2EE0FF0EE
-1FE0163FEE7FC00003913803FF00B75A16F816C02E337DB236>I<DA03FE130C91393FFF
-801C91B512E0903A03FE01F83C903A0FF0003C7CD91FC0EB0EFCD97F80130701FEC71203
-48481401000315005B4848157C485A173C485A171C123F5B007F160CA390C9FC481600AB
-7E6D150CA3123F7F001F161C17186C7E17386C6C15306C6C15706D15E012016C6CEC01C0
-D97F80EB0380D91FC0EB0F00D90FF0131ED903FE13FC0100B512F0023F13C0DA03FEC7FC
-2E377CB437>I<B77E16F016FE3A01FE0001FF00009138003FC0EE0FE0707E707E707E70
-7E177E177FEF3F80A2EF1FC0A3EF0FE0A418F0AA18E0A3171F18C0A21880173F18005F17
-FE5F4C5AEE07F04C5AEE3FC000014AB45AB748C7FC16F8168034337EB23B>I<B81280A3
-D803FCC7FC0001151FEE07C01603A21601A21600A41760150CA31700A2151CA2153C15FC
-90B5FCA3EBFC00153C151CA2150CA592C8FCAB487EB512FEA32B337DB232>70
-D<B512FEA3D803FEC9FC6C5AB3A9EE0180A416031700A45EA25E5E5E5E16FE00031407B7
-FCA329337DB230>76 D<D8FFFC923801FFF86D5DA20003EFFE00D801BFED06FCA3D99F80
-140CA2D98FC01418A3D987E01430A2D983F01460A3D981F814C0A3D980FCEB0180A2027E
-EB0300A36E1306A26E6C5AA36E6C5AA36E6C5AA26E6C5AA36E6C5AA3913800FD80A2037F
-C7FCA3486C133ED80FF04B7EB5011C90387FFFF8A33D337CB246>I<EC07FC91387FFFC0
-903901FC07F0903907E000FCD90F80133E013FC76C7E017E6E7E496E7E48486E7E48486E
-7EA248486E7E000F8249157E001F167FA24848ED3F80A2007F17C0A290C9121FA24817E0
-AB6C17C06D153FA3003F17806D157FA2001F17006D5D000F5E6C6C4A5AA26C6C4A5A0001
-5E6C6C4A5A017E4A5A6D4A5AD91FC0017FC7FCD907E013FC903901FC07F09039007FFFC0
-DA07FCC8FC33377CB43C>79 D<90381FE00390387FFC0748B5FC3907F01FCF390F8003FF
-48C7FC003E80814880A200788000F880A46C80A27E92C7FC127F13C0EA3FF013FF6C13F0
-6C13FF6C14C06C14F0C680013F7F01037F9038003FFF140302001380157F153FED1FC015
-0F12C0A21507A37EA26CEC0F80A26C15006C5C6C143E6C147E01C05B39F1FC03F800E0B5
-12E0011F138026C003FEC7FC22377CB42B>83 D<007FB712FEA390398007F001D87C00EC
-003E0078161E0070160EA20060160600E01607A3481603A6C71500B3AB4A7E011FB512FC
-A330337DB237>I<B500FE90381FFFF8A3000190C813006C48153C1718B3AF1738017F15
-30A217706D6C1460011F15E06E495A010F14036D6C495A6D6C49C7FCD901FC131E6DB413
-FC91383FFFF0020F13C0020190C8FC35357EB23A>I<EB7F803803FFF0380F80FC381C00
-3E003F133F6D6C7E6E7EA26E7EEA1F00C7FCA4EB01FF131FEBFF873803FC07EA0FF0EA1F
-C0EA3F80127F13004815C05AA3140FA26C131F6C133B3A3F8071F180391FC1E1FF2607FF
-C013003900FE003C22237DA126>97 D<EA03F012FFA312071203AEEC3F80ECFFE09038F3
-C0F89038F7007E01FE7F49EB1F8049EB0FC05BED07E016F0A2150316F8AA16F0150716E0
-A2ED0FC07F6DEB1F8001ECEB3F0001CF137C90388381F8903801FFE0C76CC7FC25357EB3
-2B>I<EB07F8EB3FFF9038FC07C03901F000E03903E003F03807C007120FEA1F80123F90
-380003E04890C7FCA2127E12FEAA127FA26C14187F001F14386D1330000F14706C6C13E0
-3903F001C03900FC0F8090383FFE00EB07F01D237EA122>I<153FEC0FFFA3EC007F81AE
-EB07F0EB3FFCEBFC0F3901F003BF3907E001FF48487E48487F8148C7FCA25A127E12FEAA
-127E127FA27E6C6C5BA26C6C5B6C6C4813803A03F007BFFC3900F81E3FEB3FFCD90FE013
-0026357DB32B>I<EB0FE0EB7FFCEBF83F3903F00F80D807E013C0390FC007E0381F8003
-15F0EA3F0014014814F8127EA212FEA2B6FCA248C8FCA5127E127FA26C1418A26C6C1338
-000F14306D13706C6C13E03901F003C03900FC0F00EB3FFEEB07F01D237EA122>I<EB01
-FCEB07FF90381F078090383E0FC0EB7C1F13FCEA01F8A20003EB070049C7FCACB512F0A3
-D803F0C7FCB3A7487E387FFFE0A31A357FB417>I<151F90391FC07F809039FFF8E3C039
-01F07FC73907E03F033A0FC01F83809039800F8000001F80EB00074880A66C5CEB800F00
-0F5CEBC01F6C6C48C7FCEBF07C380EFFF8380C1FC0001CC9FCA3121EA2121F380FFFFEEC
-FFC06C14F06C14FC4880381F0001003EEB007F4880ED1F8048140FA56C141F007C15006C
-143E6C5C390FC001F83903F007E0C6B51280D91FFCC7FC22337EA126>I<EA03F012FFA3
-12071203AEEC1FC0EC7FF09038F1E0FC9038F3807C9038F7007E13FE497FA25BA25BB348
-6CEB7F80B538C7FFFCA326347EB32B>I<EA0780EA0FC0EA1FE0A4EA0FC0EA0780C7FCAA
-EA07E012FFA3120F1207B3A6EA0FF0B5FCA310337EB215>I<EA07E012FFA3120F1207B3
-B3A7EA0FF0B5FCA310347EB315>108 D<2703F01FE013FF00FF90267FF80313C0903BF1
-E07C0F03E0903BF3803E1C01F02807F7003F387FD803FE1470496D486C7EA2495CA2495C
-B3486C496C487EB53BC7FFFE3FFFF0A33C217EA041>I<3903F01FC000FFEB7FF09038F1
-E0FC9038F3807C3907F7007EEA03FE497FA25BA25BB3486CEB7F80B538C7FFFCA326217E
-A02B>I<EB07F0EB3FFE9038FC1F803901F007C03903C001E000078048486C7E48C7127C
-A248147E003E143E007E143FA300FE1580A8007E1500A36C147EA26C147C6D13FC6C6C48
-5A00075C3903F007E03900FC1F80D93FFEC7FCEB07F021237EA126>I<3903F03F8000FF
-EBFFE09038F3C0F89038F7007ED807FE7F6C48EB1F804914C049130F16E0ED07F0A3ED03
-F8A9150716F0A216E0150F16C06D131F6DEB3F80160001FF13FC9038F381F89038F1FFE0
-D9F07FC7FC91C8FCAA487EB512C0A325307EA02B>I<3803E07C38FFE1FF9038E38F8090
-38E71FC0EA07EEEA03ECA29038FC0F8049C7FCA35BB2487EB512E0A31A217FA01E>114
-D<EBFF06000713CE381F00FE003C133E48131E140E5A1406A27EA200FE90C7FC6C7EEA7F
-FC383FFFC014F0000F7F6C7FC67FEB0FFF1300EC3F8000C0131F140F6C1307A37E15006C
-5B6C130E6C5B38F7807838E1FFE038C07F8019237EA11E>I<1330A51370A313F0A21201
-A212031207381FFFFEB5FCA23803F000AF1403A814073801F806A23800FC0EEB7E1CEB1F
-F8EB07E0182F7FAD1E>I<D803F0133F00FFEB0FFFA30007EB007F000380B35DA35D1201
-6D4813800000903803BFFC90387E073FEB1FFED907F8130026227EA02B>I<B5EBFFF0A3
-D80FF0EB3F800007EC1F000003140E150C6D131C00011418A26C6C5BA26D1370017E1360
-137F6D5BA290381F8180A214C3010F90C7FCA2EB07E6A214FE6D5AA26D5AA36D5AA21460
-24217E9F29>I<B53A1FFF81FFF0A33C07F801FC003F8001F049EB1E0000030100141C81
-6C6C017C1318A26D017E1338000002FE1330A290267E01FF5B159F168090263F030F5BA2
-16C0903A1F8607C180A202C613E390260FCC0390C7FCA2D907FC13F6ECF80116FE6D486C
-5AA36D481378A36D48133034217F9F37>I<B53801FFF8A32603FE0013806C48EB7C0000
-001478017E1370017F5B90383F81C090381F8380D90FC3C7FCEB07E614FE6D5A6D5A6D7E
-80805B9038039F809038071FC09038060FE0EB0C0790381C03F0496C7E01707FEBF00000
-0180000FECFF8026FFFC0313FCA326207F9F29>I<3A7FFF807FF8A33A07F8001FC00003
-EC0F800001EC070015066C6C5BA26D131C017E1318A26D5BA2EC8070011F1360ECC0E001
-0F5BA2903807E180A214F3010390C7FC14FBEB01FEA26D5AA31478A21430A25CA214E05C
-A2495A1278D8FC03C8FCA21306130EEA701CEA7838EA1FF0EA0FC025307F9F29>I
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fh cmtt9 9 15
-/Fh 15 122 df<EB07E0EB3FFC497E90B5FC4814803903FC3FC03907F00FE0390FE007F0
-EBC003391F8001F8A248C712FCA2003E147C007E147EA3007C143E00FC143FAC007E147E
-A46C14FCA2EB8001001F14F8EBC003000F14F0EBE0073907F00FE03903FC3FC06CB51280
-6C14006D5A6D5AEB07E020307DAE27>48 D<130E131FA25B5BA25B5A5A127FB5FCA213BF
-EA7E3F1200B3AA003FB512805A15C01580A21A2F79AE27>I<903803F80E90381FFE1F90
-383FFFBF90B6FC5A3803FE0F3807F803497E48487E485A49137FA248C7123FA25A127E15
-1E150012FE5AAA7E127EA2151E007F143F7EA26C7E157F6D137E6C6C13FE3907F001FCEB
-F8033903FE0FF86CB512F06C14E0013F13C06D1300EB03F820307DAE27>67
-D<387FFFFC14FFB612C06C80813907E00FF81407EC01FC6E7EA2157E157F811680151FA3
-16C0150FABED1F80A3153F1600A25D15FEA24A5A4A5A140F007FB55A5DB65A6C91C7FC14
-FC222E7FAD27>I<387FFFC080B5FC7E5CD803F0C8FCB3AAED0780ED0FC0A7007FB6FCA2
-B7FC7E1680222E7FAD27>76 D<90387FC0E03901FFF1F0000713FF5A5AEA3FE0EB801F38
-7F000F007E130712FE5A1403A3EC01E06C90C7FC127E127FEA3FC013F86CB47E6C13F86C
-13FE6CEBFF80C614C0010F13E0010013F0140FEC07F81403140115FC1400127812FCA46C
-EB01F8A26C130390388007F09038F01FE090B5FC15C0150000F85B38701FF81E307CAE27
->83 D<3A7FFE01FFF8B54813FCA36C486C13F83A07E0001F80B3AB6D133F00031500A26D
-5B0001147E6D13FE6C6C485A90387F87F814FF6D5B010F13C06D5BD901FEC7FC262F80AD
-27>85 D<003FB512FE4814FFA4007EC712FEEC01FCA2EC03F8EC07F0A2003CEB0FE0C7EA
-1FC0A2EC3F80EC7F00A214FE5C1301495A5C1307495A5C131F495A91C7FC5B13FEA2485A
-4848131E153F485A485AA2485A485AA248C7FCB7FCA46C14FE202E7DAD27>90
-D<EB0FF8EB3FFE90B51280000314C04814E0390FFC0FF0391FE003F8EBC001D83F8013FC
-48C7FC127E157E12FEB612FEA415FC00FCC8FC7E127E127F6C143C6D137E6C7E01F013FE
-390FFC07FC6CB5FC000114F86C14F0013F13C0903807FE001F207D9F27>101
-D<153F90391FC0FF80D97FF313C048B612E05A4814EF390FF07F873A1FC01FC3C0EDC000
-EB800F48486C7EA66C6C485AEBC01FA2390FF07F8090B5C7FC5C485BEB7FF0EB1FC090C9
-FCA27F6CB5FC15E015F84814FE4880EB8001007EC7EA3F80007C140F00FC15C0481407A4
-6C140F007C1580007F143F6C6CEB7F009038F807FF6CB55A000714F86C5CC614C0D90FFC
-C7FC23337EA027>103 D<387FE0FFD8FFF313C090B512F0816C800003EB81FE49C67E49
-EB3F8049131F16C049130FA216E01507A6150F16C07F151F6DEB3F80157F6DEBFF009038
-FF83FEECFFFC5D5D01F313C0D9F0FEC7FC91C8FCAC387FFF80B57EA36C5B23317F9F27>
-112 D<397FFC03FC39FFFE0FFF023F13804A13C0007F90B5FC39007FFE1F14F89138F00F
-809138E002004AC7FC5CA291C8FCA2137EAD007FB57EB67EA36C5C22207E9F27>114
-D<133C137EA8007FB512F0B612F8A36C14F0D8007EC7FCAE1518157EA415FE6D13FC1483
-ECFFF86D13F06D13E0010313C0010013001F297EA827>116 D<397FE01FF8486C487EA3
-007F131F00031300B21401A21403EBFC0F6CB612E016F07EEB3FFE90390FF87FE024207F
-9F27>I<3A7FFC0FFF80486C4813C0A36C486C13803A07E000F800000313015D13F00001
-130301F85B1200A26D485A137CA290387E0F80133EA2011F90C7FC5CA2130F149E14BE13
-0714FC1303A25C1301A25CA213035CA213075C1208EA3E0F007F5B131FD87E7FC8FCEA7F
-FE6C5A5B6C5AEA07C022317E9F27>121 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fi cmr6 6 3
-/Fi 3 52 df<13E01201120712FF12F91201B3A7487EB512C0A212217AA01E>49
-D<EA01FC3807FF80381C0FC0383003E0386001F0EB00F812F86C13FCA2147C1278003013
-FCC7FC14F8A2EB01F0EB03E014C0EB0780EB0F00131E13385B5B3801C00CEA0380380600
-185A5A383FFFF85AB512F0A216217CA01E>I<13FF000313C0380F03E0381C00F014F800
-3E13FC147CA2001E13FC120CC712F8A2EB01F0EB03E0EB0FC03801FF00A2380003E0EB00
-F01478147C143E143F1230127812FCA2143E48137E0060137C003813F8381E03F0380FFF
-C00001130018227DA01E>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fj cmtt12 14.4 16
-/Fj 16 118 df<007FB67E16E0B712F816FE826C82832701FE00037F03007FEE3FF8707E
-160F707E1603707EA2701380177F18C0173FA218E0171FA218F0170FA418F81707AE170F
-18F0A4171F18E0A2173F18C0177FA2EFFF80A24C13005E4C5A160F4C5A4C5AEEFFF01503
-007FB75A5FB8C7FC5E5E6C15F0168035497DC83E>68 D<003FB7FC481680B812C0A36C16
-806C1600C7D87F80C7FCB3B3B3A5003FB7FC481680B812C0A36C16806C16002A4976C83E
->73 D<003FB512C04880B67EA36C5C6C5C26007F80C9FCB3B3AA18C0EF03F0EF07F8AB00
-3FB8FC5AB9FCA36C17F07E35497CC83E>76 D<0103B57E013F14F848B7FC4816804816C0
-4816E04816F0EC800301FCC7127FD83FF0EC1FF849140FA24848EC07FCA2491403A648C8
-EA01FEB3B06D1403007F16FCA56D1407A36C6CEC0FF86D141F6D143F6C6CEC7FF09039FF
-8003FF91B6FC6C16E06C16C06C16806C1600D8003F14F8010314802F4B79C93E>79
-D<DAFFF01378010701FE13FC011FEBFF81017F14E190B612F94815FF5A48EBC03F390FFE
-0003D81FF87F4848EB007F49143F4848141F5B160F00FF150790C8FCA31603A37F705A6C
-6C91C8FCA26C7E7F6C7E13FE380FFFE06C13FE6CEBFFE06C14FE6CECFFE0013F14F8010F
-14FE010380D9007F14C0020380DA003F7F15039238007FF8EE1FFC1607707EA2707E82A2
-1880003E167F127F5AA56D15FF1800A26D5C6D5D6D14036D4A5A01FE4A5A6D6C133F9139
-FC01FFF091B65A5F486C5D011F4AC7FC01075C48C614E00078010F90C8FC314B7AC93E>
-83 D<003FB812FC5AB912FEA590C7EB0001A9007EEE00FCA2C81500B3B3AC49B67E4981
-A56D5D37497DC83E>I<267FFFFE0103B512F0A2B64914F8A36C496D14F0A2C690C83807
-F800B3B3AA6E140FA2017F5E6E141FA2013F5E6E143FA26D6C4A5A6D6C4A5A6E5B6D6C49
-90C7FC903A03FF800FFEEDE03F6D90B55A6D5D023F14E06E5C020791C8FC020113FC9138
-003FE03D4A80C83E>I<EC1FF891B57E010314E0010F14F84980017F8090B7FC48D9F80F
-1380DAC00113C048496C13E04848C7123F4848EC1FF049140F484815F81607484815FCA2
-48481403A24915FEA200FF1501A290B7FCA517FCA290CAFC7FA2127FA27F123F6D15FCA2
-6C6CEC01FE7F6C6C14036C6C14076DEC0FFC6C6D131F6C01E0EB7FF86C9039FC03FFF06D
-B612E06D15C06D158001071500010114FC6D6C13E0020790C7FC2F3679B43E>101
-D<143E147F4A7E497FA56D5B6EC8FC143E91C9FCAC003FB57E5A81A47EC7123FB3B3007F
-B71280B812C0A56C16802A4A76C93E>105 D<ED07FC3B3FFF803FFF804891B512E0B500
-C38002C78002CF806C01DF806C9038FFF80FD8003F9038C003FFED00014A7F4A815C177F
-5CA25CA35CB3A8003FB5D8C07FB51280486EB612C0B66C15E0A36C4A15C06C4A6C14803B
-347FB33E>110 D<EC1FF0ECFFFE01036D7E010F14E04980017F14FC90B67E489038F01F
-FFECC00748D90001138048486D13C04848EC7FE049143F4848EC1FF049140F003F16F849
-1407A24848EC03FCA448C8EA01FEAA6D1403007F16FCA26D1407A2003F16F86D140F6C6C
-EC1FF0A26C6CEC3FE06D147F6C6CECFFC06D5B6CD9C00713806CD9F01F13006C90B55A6D
-5C6D5C010F14E001031480010049C7FCEC1FF02F3679B43E>I<ED07FC3B3FFF803FFF80
-4891B512E0B500C314F802CF8002DF806C90B7FC6CDAF80F1380D8003FD9C00113C092C7
-13E04A143F4AEC1FF04A15F84A140F4AEC07FCA217034A15FE1701A318FF83A95F18FEA2
-80170318FC6E140718F86E140FEF1FF06E143F6EEC7FE06EECFFC0DBC0031380EDF01F92
-B6120002DF14FC02CF5C02C35C02C114C0DAC07F90C7FCED0FF892C9FCB3003FB512C048
-80B67EA36C5C6C5C384F7FB33E>I<EE07FE263FFFF890387FFFC0484AB512E0B5D8FC07
-14F05D4B14F86C5C6C91387FFC0FD80003EBFFC002FD90380007F0DAFFFEEB03E003F890
-C7FC5D5DA25D5DA292C9FCA25CA45CB3A3003FB612FC4881B7FCA37E6C5D35347CB33E>
-114 D<903901FFF00F011F9038FE1F8090B612BF000315FF5A5A5A393FFE003F01F01307
-D87FC0130190C8FC5A48157FA47EEE3F00D87FC091C7FC13F0EA3FFE381FFFF06CEBFFC0
-6C14FE6C6E7EC615E0013F14F8010780D9003F7F02007F03071380030013C0003EED3FE0
-007F151F48150F17F06D1407A37FA26D140F6D15E0161F01FCEC3FC06D14FF9026FFC00F
-138091B612005E485D013F5C6D14E0D8FC0714802778007FF8C7FC2C3677B43E>I<147C
-14FC497EAD003FB712FC5AB87EA36C5EA2260001FEC9FCB3A6173FA2EF7F80A76E14FF6D
-16006F5A9238C007FE91387FF01F92B55A6E5C6E5C6E5C6E1480020149C7FC9138003FF0
-31437DC13E>I<263FFF80EB7FFF4892B5FCB56C4880A36C806C81D8003FEC007FB3AC17
-FFA25E5E80011F140F6E5B02FE90B612806DB812C06D17E083010114FE6DDAF83F13C002
-3F01E01480020790C9FC3B347FB23E>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fk cmex10 10 9
-/Fk 9 113 df<177C17FCEE01F8A2EE03F0EE07E0EE0FC0A2EE1F80EE3F005E167E5E15
-015E15034B5A5E150F5E151F4B5AA24BC7FCA215FEA24A5AA24A5AA24A5AA2140F5D141F
-5D143F5DA2147F92C8FC5CA25C13015C1303A25C1307A3495AA3495AA3133F5CA3137F5C
-A313FF91C9FCA35A5BA31203A25BA31207A35BA3120FA45BA2121FA65BA2123FA85BA212
-7FAE5B12FFB3A62E95688149>48 D<12F87E127EA27E6C7E6C7EA26C7E6C7E7F12016C7E
-7F137E137F6D7E131F80130F806D7EA26D7EA26D7EA26D7EA2147FA26E7EA281141F8114
-0F811407A281140381A2140181140081A28182A36F7EA36F7EA382150FA3821507A38215
-03A3821501A382A281A31780A3167FA317C0A4163FA217E0A6161FA217F0A8160FA217F8
-AE160717FCB3A62E957E8149>I<B47EB3A6127F7FAE123FA27FA8121FA27FA6120FA27F
-A41207A37FA31203A37FA21201A37F7EA380137FA380133FA380131FA36D7EA36D7EA313
-0380A2130180130080A28081143FA281141F81140F811407A26E7EA26E7EA26E7EA2157F
-A26F7EA26F7E150F821507826F7E1501821500167E167F82EE1F80EE0FC0A2EE07E0EE03
-F0EE01F8A2EE00FC177C2E95688349>64 D<EE07FCB3A617F8160FAE17F0A2161FA817E0
-A2163FA617C0A2167FA41780A316FFA31700A35DA25EA315035EA315075EA3150F5EA315
-1F5EA34B5AA34B5AA393C7FC5DA25D14015D1403A25D14075DA2140F5D141F5D143F5DA2
-4AC8FCA214FEA2495AA2495AA2495AA2495A5C131F5C133F49C9FC137E13FE5B485A1203
-5B485A485AA2485A48CAFC127EA25A5A2E957E8349>I<EAFF80B3B3B00934688049>I<EA
-FF80B3B3B00934598049>I<BB12FC86A3D87FC0C9001F7FF0007F6C6C17076C6C050113
-806C6CEF007F1A1F6C6CF00FC06C6C18076C6C1803F201E06C6D17006D6C1860013F1970
-6E18306D7E6D6C18181B006D7E6D7E6D7EA26D7F6E7E6E7EA26E7E6E7E6E7EA26E7E6E7E
-80826F7E6F7EA26F7E6F7E6F5A5EA24B5A5E4BCBFC153E157E5D5D4A5A4A5A14075D4A5A
-4ACCFC143E147E147C5C4948181801031930495A4A18704948186049CC12E0491801017E
-F003C0017C180749180F4848F01F800003197F49EF01FF4848050713004848173F48CA00
-0FB5FC48BA5AA25ABB5AA24D537B7F58>80 D<BF12E08AA38A6C90CCFC0900806C6D1907
-6C6D07007F6C6D1A1F1D076C6DF201FF6C6D747E6C6DF33F801E0F6C6D1B076D6CF303C0
-6D6D1A01F600E06D7F6D6D1B706D1D30816D6D1B186D6D1B007F816E7E6E7FA26E7F6E7F
-6E7FA26E7F6E7F6E7FA26F7E6F7F6F7FA26F7F6F7F81836F7F6F7F167F83707F707F8284
-707F707FA2707F82715A60173F715A604D5A4DCDFC17FEA24C5A4C5A4C5A4C5A4C5A5F16
-3F4CCEFC16FE4B5A4B5A4B5AA24B5A4B5A4B5A4BCFFC15FEA24A5A4A5A4A481B184A481B
-304A5A4B1B70023F1C604ACF12E002FE1B014948F303C049481B074948F30F801E1F4948
-1B7F4948F3FF0049481A0349CE120F01FEF37FFEF403FF48481A7F4848077FB55A48BEFC
-48655AA248655ABFFC666D747B7F78>88 D<1B301B781BF8A2F201F0A2F203E0A2F207C0
-A2F20F80A2F21F00A21A3EA262A262A24F5AA24F5AA24F5AA262190FA24FC7FCA2193EA2
-61A261A24E5AA24E5AA24E5AA24E5AA24EC8FCA2183EA260131001305E13F800014C5A12
-03D80FFC4B5A121DD838FE4B5A12F0D8407F4B5A12004DC9FC6D7E173E6D7E5F6D7E5FA2
-6D6C495AA26D6C495AA26D6C5C1607A26D6C495AA2027F49CAFCA291383F803EA25EEC1F
-C05EEC0FE0EDE1F0EC07F1EDF3E0A26EB45AA26E5BA26E90CBFCA25D157E157C15384D64
-788353>112 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fl cmmi12 12 1
-/Fl 1 66 df<1830187018F0A217011703A24D7EA2170F171FA21737A2176717E717C793
-380187FCA2EE0307EE07031606160CA216181638163004607FA216C0030113011680ED03
-00A21506150E150C5D845D03707F15605DA24A5A4AB7FCA25C0206C87F5C021C157F1418
-5CA25C14E05C495A8549C9FC49163F1306130E5B133C137C01FE4C7ED807FFED01FF007F
-01F0027FEBFFC0B5FC5C42477DC649>65 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fm cmbx12 12 53
-/Fm 53 122 df<ED0FFF4AB512C0020F14F0027F80903A01FFF803FC499038C000FE010F
-EB00034948497E49485B5C495A4C138001FF6E13005CA3705AEE01F893C8FCA74BB51280
-B9FCA5C69038E00003B3B0007FD9FFC1B6FCA538467EC53E>12 D<B612F8A91D097F9A25
->45 D<EA07C0EA1FF0EA3FF8EA7FFCEAFFFEA7EA7FFCEA3FF8EA1FF0EA07C00F0F788E1F
->I<EC3FF849B5FC010F14E0013F14F890397FF01FFC9039FFC007FE4890380001FF4848
-6D1380000716C049147F000F16E049143F001F16F0A2003F16F8A249141F007F16FCA600
-FF16FEB3A3007F16FCA56C6CEC3FF8A3001F16F0A2000F16E06D147F000716C06D14FF6C
-6C4913806C6D4813006C6D485A90397FF01FFC6DB55A010F14E0010314809026003FF8C7
-FC2F427CC038>48 D<EC03C01407141F147FEB03FF133FB6FCA413C3EA0003B3B3ADB712
-FCA5264177C038>I<ECFFE0010F13FE013F6D7E90B612E0000315F82607FC0313FE3A0F
-E0007FFFD81F806D138048C7000F13C0488001C015E001F07F00FF6E13F07F17F881A46C
-5A6C5A6C5AC9FC17F05DA217E05D17C04B13804B1300A2ED1FFC4B5A5E4B5A4B5A4A90C7
-FC4A5A4A5AEC0FF04A5AEC3F804AC7127814FE495A494814F8D907E014F0495A495A49C8
-FC017C140149140348B7FC4816E05A5A5A5A5AB8FC17C0A42D417BC038>I<ECFFF00107
-13FF011F14C0017F14F049C66C7ED803F8EB3FFED807E06D7E81D80FF86D138013FE001F
-16C07FA66C5A6C4815806C485BC814005D5E4B5A4B5A4B5A4A5B020F1380902607FFFEC7
-FC15F815FF16C090C713F0ED3FFCED0FFEEEFF80816F13C017E0A26F13F0A217F8A3EA0F
-C0EA3FF0487EA2487EA217F0A25D17E06C5A494913C05BD83F80491380D81FF0491300D8
-0FFEEBFFFE6CB612F800015D6C6C14C0011F49C7FC010113E02D427BC038>I<163FA25E
-5E5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7140715C7EC0F87EC1F07143E147E147C14
-F8EB01F0EB03E0130714C0EB0F80EB1F00133E5BA25B485A485A485A120F5B48C7FC123E
-5A12FCB91280A5C8000F90C7FCAC027FB61280A531417DC038>I<0007150301E0143F01
-FFEB07FF91B6FC5E5E5E5E5E16804BC7FC5D15E092C8FC01C0C9FCAAEC3FF001C1B5FC01
-C714C001DF14F09039FFE03FFC9138000FFE01FC6D7E01F06D13804915C0497F6C4815E0
-C8FC6F13F0A317F8A4EA0F80EA3FE0487E12FF7FA317F05B5D6C4815E05B007EC74813C0
-123E003F4A1380D81FC0491300D80FF0495AD807FEEBFFFC6CB612F0C65D013F1480010F
-01FCC7FC010113C02D427BC038>I<4AB47E021F13F0027F13FC49B6FC01079038807F80
-90390FFC001FD93FF014C04948137F4948EBFFE048495A5A1400485A120FA248486D13C0
-EE7F80EE1E00003F92C7FCA25B127FA2EC07FC91381FFF8000FF017F13E091B512F89039
-F9F01FFC9039FBC007FE9039FF8003FF17804A6C13C05B6F13E0A24915F0A317F85BA412
-7FA5123FA217F07F121FA2000F4A13E0A26C6C15C06D4913806C018014006C6D485A6C90
-38E01FFC6DB55A011F5C010714C0010191C7FC9038003FF02D427BC038>I<121E121F13
-FC90B712FEA45A17FC17F817F017E017C0A2481680007EC8EA3F00007C157E5E00785D15
-014B5A00F84A5A484A5A5E151FC848C7FC157E5DA24A5A14035D14074A5AA2141F5D143F
-A2147F5D14FFA25BA35B92C8FCA35BA55BAA6D5A6D5A6D5A2F447AC238>I<EC7FF00103
-B5FC010F14C0013F14F090397F801FFC3A01FC0003FE48486D7E497F4848EC7F80163F48
-4815C0A2001F151FA27FA27F7F01FE143F6D158002C0137F02F014006C01FC5B6E485A6C
-9038FF83FCEDE7F86CECFFE06C5D6C92C7FC6D14C06D80010F14F882013F8090B7FC4801
-3F14802607FC0F14C0260FF80314E04848C6FC496D13F0003F141F48481307496D13F815
-0000FF157F90C8123F161F160FA21607A36D15F0127F160F6D15E06C6C141F6DEC3FC06C
-6CEC7F80D80FFE903801FF003A07FFC00FFE6C90B55AC615F0013F14C0010F91C7FC0100
-13F02D427BC038>I<EC7FF0903807FFFE011F6D7E017F14E09039FFE03FF0489038800F
-F848496C7E48488048486D7E001F80003F1680A2484815C08117E0A212FF17F0A617F8A4
-5D127FA3003F5CA26C7E5D6C6C5B12076C6C133E6CEBC07C6CEBFFF8013F5B010F01C013
-F00101130090C8FCA217E05DA2EA03C0D80FF015C0487E486C491380A217004B5A150F5E
-49495A6C48495A01C0EBFFE0260FF0035B6CB65A6C4AC7FC6C14F86C6C13E0D907FEC8FC
-2D427BC038>I<EE1F80A24C7EA24C7EA34C7EA24B7FA34B7FA24B7FA34B7F169F031F80
-161F82033F80ED3E07037E80157C8203FC804B7E02018115F0820203814B137F0207815D
-173F020F814B7F021F8292C77EA24A82023E80027E82027FB7FCA291B87EA2498302F0C8
-FCA20103834A157F0107834A153FA249488284011F8491C97E4984133E017E82B6020FB6
-12F0A54C457CC455>65 D<B9FC18F018FE727E19E026003FFCC700077F05017F716C7E72
-7E727EA2721380A37213C0A74E1380A24E1300A24E5A4E5A4E5A4D5B05075B94B5128091
-B700FCC7FC18F018FF19E002FCC7000113F8716C7EF01FFE727E7213801AC07213E0A272
-13F0A31AF8A71AF0A2601AE0604E13C0604E138095B5120005075BBA12F86119C04EC7FC
-18E045447CC350>I<DCFFF01470031F01FF14F04AB6EAE0010207EDF803023FEDFE0791
-B539E001FF0F4949C7EA3F9F010701F0EC0FFF4901C0804990C87E494881494881494816
-7F4849163F4849161F5A4A160F485B19074890CAFC19035A5BA2007F1801A34994C7FC12
-FFAE127F7F1AF0A2123FA27F6C18011AE06C7F19036C6D17C06E16077E6C6DEE0F806C6D
-EE1F006D6C5E6D6C167E6D6C6C5D6D6D4A5A6D01F0EC07F0010101FEEC1FE06D903AFFF0
-01FF80023F90B6C7FC020715FC020115F0DA001F1480030001F8C8FC44467AC451>I<B9
-FC18F018FE727E19E026003FFEC7001F13F805017F9438003FFF060F7F727F727F727F84
-737E737EA2737EA2737EA21B80A2851BC0A51BE0AD1BC0A51B8061A21B006162193F624F
-5A19FF624E5B06075B4E5B063F90C7FC4DB45A050F13F8BA5A19C04EC8FC18F095C9FC4B
-447CC356>I<BA12F8A485D8001F90C71201EF003F180F180318011800A2197E193EA319
-1EA21778A285A405F890C7FCA316011603161F92B5FCA5ED001F160316011600A2F101E0
-1778A2F103C0A494C7FC1907A21A80A2190FA2191FA2193FF17F0061601807181F4DB5FC
-BBFC61A443447DC34A>I<BA1280A419C026003FFEC7121F1701EF007F183F181F180F18
-0719E01803A31801A3EE01E0F000F0A419001603A31607160F167F91B6FCA59138FE007F
-160F16071603A31601A693C9FCAFB712F0A53C447CC346>I<DCFFF01470031F01FF14F0
-4AB6EAE0010207EDF803023FEDFE0791B539E001FF0F4949C7EA3F9F010701F0EC0FFF49
-01C0804990C87E4948814948814948167F4849163F4849161F5A4A160F485B19074890CA
-FC19035A5BA2007F1801A34994C8FC12FFAD057FB612F0127F7FA3003FDC0001EBF000A2
-7F7EA26C7FA26C7F807E6C7F6C7F6D7E6D6C5D6D6C7E6D6D5C6D01F05C010101FE143F6D
-903AFFF001FF9F023F90B6120F0207EDFC030201EDF000DA001F02C01330030001FCC9FC
-4C467AC458>I<B7D88003B612FEA526003FFEC9EBF800B3A791B9FCA54AC9FCB3AAB7D8
-8003B612FEA54F447CC358>I<B712E0A5D8001F90C7FCB3B3B3A4B712E0A523447DC32A>
-I<B712F0A526003FFECAFCB3B1F00780A4180F1900A460A360A2187EA218FE1701170317
-07171F177FEE03FFB95AA539447CC343>76 D<B500FE067FB512806E95B6FCA26F5EA2D8
-003F50C7FC013D6DEE03DFA2013C6DEE079FA26E6CEE0F1FA26E6C161EA26E6C163CA36E
-6C1678A26E6C16F0A26E6DEC01E0A26E6DEC03C0A36E6DEC0780A26F6CEC0F00A26F6C14
-1EA26F6C5CA36F6C5CA26F6C5CA26F6D485AA26F6D485AA26F6D485AA3706C48C7FCA293
-383FF81EA2706C5AA2706C5AA3706C5AA2705BA2705BA2705BA2B6057FB6128071C7FCA2
-173E171C61447CC36A>I<923807FFC092B512FE0207ECFFC0021F15F091267FFE0013FC
-902601FFF0EB1FFF01070180010313C04990C76C7FD91FFC6E6C7E49486F7E49486F7E01
-FF8348496F7E48496F1380A248496F13C0A24890C96C13E0A24819F04982003F19F8A300
-7F19FC49177FA400FF19FEAD007F19FC6D17FFA3003F19F8A26D5E6C19F0A26E5D6C19E0
-A26C6D4B13C06C19806E5D6C6D4B13006C6D4B5A6D6C4B5A6D6C4B5A6D6C4A5B6D01C001
-075B6D01F0011F5B010101FE90B5C7FC6D90B65A023F15F8020715C002004AC8FC030713
-C047467AC454>79 D<B9FC18F018FE727E19E0D8001F90C7000F7F05017F716C7E727E72
-7E721380A21AC084A21AE0A91AC0A24E1380A21A00604E5A4E5A4D485A050F5B92B712C0
-96C7FC18FC18C092CBFCB3A7B712E0A543447DC34D>I<B812F8EFFFC018F818FE727ED8
-001F90C7003F13E005037F05007F727E727E727EA28684A286A762A24E90C7FCA24E5A61
-187F943801FFF005075B053F138092B7C8FC18F818E018F892C77FEF3FFF050F7F717F71
-7FA2717FA2717FA785A61B0F85A2187F73131F72141EB700E06DEB803E72EBE0FC72EBFF
-F8060114F0726C13E0CC0007138050457DC354>82 D<DAFFE0131C010701FE133C013F90
-38FF807C90B6EAE0FC4815F9489038801FFF3907FC00014848EB007F4848143F4848140F
-491407007F15035B1601160012FF177CA27FA26D153C7F7F6D92C7FC6C7EEBFFE014FE6C
-EBFFF015FF6C15E016FC6C816C6F7E6C826C826C6C81011F810107811300020F80140003
-077FED007F82040F1380828212F082A282A27EA218007EA26C5D6C5E6D14036D5D6D1407
-01F84A5A01FFEC3FF002F8EBFFE0486CB65AD8FC1F92C7FCD8F80714FC48C614F0480107
-138031467AC43E>I<003FBA12E0A59026FE000FEB8003D87FE09338003FF049171F90C7
-1607A2007E1803007C1801A300781800A400F819F8481978A5C81700B3B3A20107B8FCA5
-45437CC24E>I<B76C010FB512F8A526003FFEC93803E000B3B3A9011F17076280190F6D
-606F151F6D95C7FC6D6D5D197E6D6D5D6D6D1403DA7FFC4A5A6EB4EC3FF0020F9039F003
-FFE06E90B61280020193C8FC6E6C14FC030F14E09226007FFEC9FC4D457CC356>I<9038
-01FFE0011F13FE017F6D7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D7EA26F7F
-A36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6FC1307013F13F19038FFFC01000313E0
-000F1380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE013EEBFFC0
-3A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97
-D<EB7FC0B5FCA512037EB1ED0FF892B57E02C314E002CF14F89139DFC03FFC9139FF000F
-FE02FCEB03FF4A6D13804A15C04A6D13E05CEF7FF0A218F8173FA318FCAC18F8A2177F18
-F0A3EFFFE06E15C06E5B6E491380027C491300496C495A903AFC1FC07FFC496CB512F0D9
-F00314C049C691C7FCC8EA1FF036467DC43E>I<EC3FFC49B512C0010F14F0013F14FC90
-397FF003FE9039FFC001FF0003495A48494813805B120F485AA2485A6F1300007F6E5AED
-00784991C7FCA212FFAC6C7EA3123F6DEC03C0A26C6C1407000F16806D140F6C6DEB1F00
-6C6D133E6C01F05B3A007FFC03F86DB55A010F14C0010391C7FC9038003FF82A2F7CAD32
->I<EE03FEED07FFA5ED001F160FB1EC3FE0903803FFFC010FEBFF8F013F14CF9039FFF8
-07FF48EBC00148903880007F4890C7123F4848141F49140F121F485AA3127F5BA212FFAC
-127FA37F123FA26C6C141FA26C6C143F0007157F6C6C91B5FC6CD9C00314FC6C9038F01F
-EF6DB5128F011FEBFE0F010713F89026007FC0EBF80036467CC43E>I<EC3FF80103B57E
-010F14E0013F8090397FF83FF89039FFC007FC48496C7E48496C7E48486D1380485A001F
-ED7FC05B003FED3FE0A2127F5B17F0161F12FFA290B7FCA401F0C9FCA5127FA27FA2123F
-17F06C7E16016C6C15E06C6C14036C6DEB07C06C6DEB0F806C01F0EB3F0090397FFE01FE
-011FB55A010714F0010114C09026001FFEC7FC2C2F7DAD33>I<EDFF80020F13E0027F13
-F049B512F849EB8FFC90390FFE0FFE90381FFC1F14F8133FEB7FF0A2ED0FFCEBFFE0ED03
-F0ED00C01600ABB612F8A5C601E0C7FCB3B0007FEBFFE0A527467DC522>I<DAFFE0137E
-010F9039FE03FF80013FEBFF8F90B812C048D9C07F133F489038001FF84848EB0FFC4848
-903907FE1F80001F9238FF0F00496D90C7FCA2003F82A8001F93C7FCA26D5B000F5D6C6C
-495A6C6C495A6C9038C07FF04890B55A1680D8078F49C8FC018013E0000F90CAFCA47F7F
-7F90B612C016FC6CEDFF8017E06C826C16FC7E000382000F82D81FF0C77ED83FC0140748
-48020113808248C9FC177FA46D15FF007F17006D5C6C6C4A5A6C6C4A5AD80FFEEC3FF83B
-07FFC001FFF0000190B612C06C6C92C7FC010F14F8D9007F90C8FC32427DAC38>I<EB7F
-C0B5FCA512037EB1ED07FE92383FFF8092B512E002C114F89139C7F03FFC9138CF801F91
-39DF000FFE14DE14FC4A6D7E5CA25CA35CB3A7B60083B512FEA537457CC43E>I<137C48
-B4FC4813804813C0A24813E0A56C13C0A26C13806C1300EA007C90C7FCAAEB7FC0EA7FFF
-A512037EB3AFB6FCA518467CC520>I<EB7FC0B5FCA512037EB3B3B3A3B61280A519457C
-C420>108 D<90277F8007FEEC0FFCB590263FFFC090387FFF8092B5D8F001B512E00281
-6E4880913D87F01FFC0FE03FF8913D8FC00FFE1F801FFC0003D99F009026FF3E007F6C01
-9E6D013C130F02BC5D02F86D496D7EA24A5D4A5DA34A5DB3A7B60081B60003B512FEA557
-2D7CAC5E>I<90397F8007FEB590383FFF8092B512E0028114F8913987F03FFC91388F80
-1F000390399F000FFE6C139E14BC02F86D7E5CA25CA35CB3A7B60083B512FEA5372D7CAC
-3E>I<EC1FFC49B512C0010714F0011F14FC90397FF80FFF9026FFC0017F48496C7F4848
-C7EA3FE000078248486E7E49140F001F82A2003F82491407007F82A400FF1780AA007F17
-00A46C6C4A5AA2001F5E6D141F000F5E6C6C4A5AA26C6C6CEBFFE06C6D485B27007FF80F
-90C7FC6DB55A010F14F8010114C09026001FFCC8FC312F7DAD38>I<90397FC00FF8B590
-B57E02C314E002CF14F89139DFC03FFC9139FF001FFE000301FCEB07FF6C496D13804A15
-C04A6D13E05C7013F0A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA24C13E06E15C06E5B6E
-4913806E4913006E495A9139DFC07FFC02CFB512F002C314C002C091C7FCED1FF092C9FC
-ADB67EA536407DAC3E>I<DA3FE0131E902603FFFC133E010F01FF137E013F1480903AFF
-F80FE0FE489038E003F148EBC0014890388000FB4890C7127F49143F001F151F485A160F
-5B127FA3485AAC6C7EA46C7EA26C6C141F163F6C6C147F6C15FF6C6D5A6C9038E003EF6C
-9038F01FCF6DB5128F011FEBFE0F010313F89038007FC091C7FCAD0307B512FCA536407C
-AC3B>I<90387F807FB53881FFE0028313F0028F13F8ED8FFC91389F1FFE000313BE6C13
-BC14F8A214F0ED0FFC9138E007F8ED01E092C7FCA35CB3A5B612E0A5272D7DAC2E>I<90
-391FFC038090B51287000314FF120F381FF003383FC00049133F48C7121F127E00FE140F
-A215077EA27F01E090C7FC13FE387FFFF014FF6C14C015F06C14FC6C800003806C15806C
-7E010F14C0EB003F020313E0140000F0143FA26C141F150FA27EA26C15C06C141FA26DEB
-3F8001E0EB7F009038F803FE90B55A00FC5CD8F03F13E026E007FEC7FC232F7CAD2C>I<
-EB01E0A51303A41307A2130FA2131FA2133F137F13FF1203000F90B51280B7FCA4C601E0
-C7FCB3A3ED01E0A9150302F013C0137F150790393FF80F8090391FFC1F006DB5FC6D13FC
-01015B9038003FE023407EBE2C>I<D97FC049B4FCB50103B5FCA50003EC000F6C81B3A8
-5EA25EA25E7E6E491380017FD901F713FE9138F807E76DB512C7010F1407010313FE9026
-007FF0EBFC00372E7CAC3E>I<B6903803FFFCA5000101E09038003E006C163C80017F5D
-8017F8013F5D6E1301011F5D6E1303010F5D6E13076D5DED800F6D92C7FC15C05E6DEBE0
-1E163E6D143CEDF07C027F1378EDF8F8023F5B15FD021F5B15FF6E5BA36E5BA26E90C8FC
-A26E5AA26E5AA21578362C7EAB3B>I<B5D8FE1FB539801FFFF0A500019027C0003FE0C7
-EA7C007114786E17F86C6F6C5C6E1601017F6E6C5CA26E011F1403013F6F5C6E013F1407
-011F6F5CA26E0179140F010F048090C7FC6E01F95C6D02F0EBC01E15806D902681E07F5B
-18E003C3157C6D9139C03FF07815E76DDA801F5B18F803FF14F96E9039000FFDE018FF6E
-486D5BA36E486D5BA26E486D90C8FCA24B7F02075DA26E48147C4B143C4C2C7EAB51>I<
-B500FE90383FFFF0A5C601F0903803E0006D6C495A013F4A5A6D6C49C7FC6E5B6D6C137E
-6DEB807C6D6D5A6DEBC1F0EDE3E06DEBF7C06EB45A806E90C8FC5D6E7E6E7F6E7FA24A7F
-4A7F8291381F3FFCEC3E1F027C7F4A6C7E49486C7F01036D7F49487E02C08049486C7F49
-C76C7E013E6E7E017E141FB500E090B512FCA5362C7EAB3B>I<B6903803FFFCA5000101
-E09038003E006C163C80017F5D8017F8013F5D6E1301011F5D6E1303010F5D6E13076D5D
-ED800F6D92C7FC15C05E6DEBE01E163E6D143CEDF07C027F1378EDF8F8023F5B15FD021F
-5B15FF6E5BA36E5BA26E90C8FCA26E5AA26E5AA21578A215F85D14015D001F1303D83F80
-5B387FC007D8FFE05B140F92C9FC5C143E495A387FC1F8EB07F06CB45A6C5B000790CAFC
-EA01FC36407EAB3B>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fn cmsy8 8 7
-/Fn 7 107 df<B812C0A32A037A9137>0 D<123C127E12FFA4127E123C08087A9414>I<
-130C131EA50060EB01800078130739FC0C0FC0007FEB3F80393F8C7F003807CCF83801FF
-E038007F80011EC7FCEB7F803801FFE03807CCF8383F8C7F397F0C3F8000FCEB0FC03978
-1E078000601301000090C7FCA5130C1A1D7C9E23>3 D<12E012F812FEEA3F80EA0FE0EA
-03F8EA00FEEB3F80EB0FE0EB03F8EB00FC143FEC0FC0EC07F0EC01FCEC007FED1FC0ED07
-F0ED01FCED007FEE1FC01607161FEE7F00ED01FCED07F0ED1FC0037FC7FCEC01FCEC07F0
-EC0FC0023FC8FC14FCEB03F8EB0FE0EB3F8001FEC9FCEA03F8EA0FE0EA3F80007ECAFC12
-F812E0CBFCAD007FB71280B812C0A22A3B7AAB37>21 D<137813FE1201A3120313FCA3EA
-07F8A313F0A2EA0FE0A313C0121F1380A3EA3F00A3123E127E127CA35AA35A0F227EA413
->48 D<D93F80EC07F0D9FFF0EC3FFC000301FC91B5FC4801FF903901F80780D80F80903A
-8007C001C03D1E003FC00F8000E0486D6C48C71270003890260FF03E143048902607F83C
-14386E6C48141800606D6C5A00E06D6C48141C48027F150C5E153F6F7E6F7E82151F6C6F
-141C0060DA3DFE1418DB78FF143800704A6C7E003001016D6C1370003849486C6C13F06C
-903B07C00FF001E06C903B0F8007FC07C02807807E0003B512806CB44801001400C601F0
-EC3FFCD93F80EC07F03E1F7C9D47>I<12E0B3B3B3AD034378B114>106
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fo cmmi8 8 13
-/Fo 13 121 df<1670A216F01501A24B7EA21507150DA2151915391531ED61FC156015C0
-EC0180A2EC03005C14064A7F167E5C5CA25C14E05C4948137F91B6FC5B0106C7123FA25B
-131C1318491580161F5B5B120112031207000FED3FC0D8FFF8903807FFFEA22F2F7DAE35
->65 D<013FB6FC17E0903A00FE0007F0EE01FC4AEB007EA2010181A25C1880010316005F
-5CA2010715FEA24A5C4C5A010F4A5A4C5A4AEB1F8004FFC7FC91B512F84914C00280C9FC
-A3133F91CAFCA35B137EA313FE5BA312015BA21203B512E0A2312D7DAC2D>80
-D<000FB8FCA23B1FC003F8003F0100151F001C4A130E123C003801071406123000704A13
-0EA20060010F140C12E0485CA2141FC715005DA2143FA292C8FCA25CA2147EA214FEA25C
-A21301A25CA21303A25CA21307A25C130F131F001FB512F0A2302D7FAC29>84
-D<13F8121FA21201A25BA21203A25BA21207A25BA2120FEBC7E0EB9FF8EBB83C381FF01E
-EBE01F13C09038800F80EA3F00A2123EA2007E131FA2127CA2143F00FC14005AA2147EA2
-147C14FC5C387801F01303495A383C0F806C48C7FCEA0FFCEA03F0192F7DAD1E>98
-D<EB01F8EB0FFE90383E0780EB7C01D801F813C03803F0073807E00FEA0FC00180138012
-1F48C8FCA25A127EA312FE5AA51560007C14E0EC01C0EC03806CEB0F00001E131C380F81
-F83807FFE0C648C7FC1B1F7D9D1F>I<14FCEB03FF90380F839C90381F01BC013E13FCEB
-7C005B1201485A15F8485A1401120F01C013F0A21403121F018013E0A21407A215C0A200
-0F130F141F0007EB3F80EBC07F3803E1FF3800FF9F90383E1F0013005CA2143EA2147E00
-38137C00FC13FC5C495A38F807E038F00F80D87FFEC7FCEA1FF81E2C7E9D22>103
-D<1307EB0F80EB1FC0A2EB0F80EB070090C7FCA9EA01E0EA07F8EA0E3CEA1C3E12381230
-1270EA607EEAE07C12C013FC485A120012015B12035BA21207EBC04014C0120F13801381
-381F01801303EB0700EA0F06131EEA07F8EA01F0122E7EAC18>105
-D<15E0EC01F01403A3EC01C091C7FCA9147CEB03FE9038078F80EB0E07131C013813C013
-30EB700F0160138013E013C0EB801F13001500A25CA2143EA2147EA2147CA214FCA25CA2
-1301A25CA21303A25CA2130700385BEAFC0F5C49C7FCEAF83EEAF0F8EA7FF0EA1F801C3B
-81AC1D>I<131FEA03FFA2EA003FA2133EA2137EA2137CA213FCA25BA2120115F89038F0
-03FCEC0F0E0003EB1C1EEC387EEBE07014E03807E1C09038E3803849C7FC13CEEA0FDC13
-F8A2EBFF80381F9FE0EB83F0EB01F81300481404150C123EA2007E141C1518007CEBF038
-ECF83000FC1470EC78E048EB3FC00070EB0F801F2F7DAD25>I<27078007F0137E3C1FE0
-1FFC03FF803C18F0781F0783E03B3878E00F1E01263079C001B87F26707F8013B0006001
-0013F001FE14E000E015C0485A4914800081021F130300015F491400A200034A13076049
-133E170F0007027EEC8080188149017C131F1801000F02FCEB3F03053E130049495C180E
-001F0101EC1E0C183C010049EB0FF0000E6D48EB03E0391F7E9D3E>109
-D<90387C01F89038FE07FE3901CF8E0F3A03879C0780D907B813C0000713F000069038E0
-03E0EB0FC0000E1380120CA2D8081F130712001400A249130F16C0133EA2017EEB1F80A2
-017C14005D01FC133E5D15FC6D485A3901FF03E09038FB87C0D9F1FFC7FCEBF0FC000390
-C8FCA25BA21207A25BA2120FA2EAFFFCA2232B829D24>112 D<3807C01F390FF07FC039
-1CF8E0E0383879C138307B8738707F07EA607E13FC00E0EB03804848C7FCA2128112015B
-A21203A25BA21207A25BA2120FA25BA2121FA290C8FC120E1B1F7E9D20>114
-D<013F137C9038FFC1FF3A01C1E383803A0380F703C0390700F60F000E13FE4813FC1218
-0038EC0700003049C7FCA2EA200100005BA313035CA301075B5D14C000385CD87C0F1306
-00FC140E011F130C011B131C39F03BE038D8707113F0393FE0FFC0260F803FC7FC221F7E
-9D28>120 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fp cmti10 10.95 63
-/Fp 63 124 df<933807FF80043F13E09338FE00F8DB01F0133EDB07E0130E4B48131F4C
-137F031F14FF4BC7FCA218FE157E1878180015FE5DA31401A25DA414030103B712F0A218
-E0903A0003F000070207140F4B14C0A3171F020F15805DA2173F1800141F5D5F177EA214
-3F92C712FE5FA34A1301027EECF81CA3160302FEECF03C4A1538A21878187013014A0101
-13F018E0933800F1C0EF7F804948EC1F0094C7FCA35C1307A2001E5B127F130F00FF5BA2
-49CAFC12FEEAF81EEA703CEA7878EA1FF0EA07C0385383BF33>12
-D<D801E013F03907F803FC000F130701FC13FE001F130FA4000F13073903D801EC390018
-000CA20138131C01301318017013380160133001E01370491360000114E039038001C001
-001380481303000EEB070048130E485B485B485B4813601F1C70BE2F>34
-D<EA01E0EA07F8120F13FC121FA4120FEA03D8EA0018A2133813301370136013E013C012
-01EA038013005A120E5A5A5A5A5A0E1C6DBE1C>39 D<ED01801507ED0F00151C5D5D5D14
-014A5A4A5A4AC7FC141E143E5C14785C1301495AA2495A5C130F49C8FCA2133EA25BA213
-FC5B12015BA212035B1207A25B120FA25BA2121FA290C9FCA25AA2123EA2127EA2127CA6
-5AAB1278A67EA47EA2120E120F7EA26C7EA26C7E6C7E1360215A73C325>I<14031580A2
-EC01C0EC00E0A21570A215781538153CA3151EA4151FA2150FA7151FA9153FA2153EA315
-7EA2157CA215FCA215F8A21401A215F0A2140315E0A2140715C0A2EC0F80A2141F15005C
-143EA25CA25CA2495A5C1303495A5C130F49C7FC131E5B137C5B5B485A485A485A48C8FC
-121E5A12705A5A205A7FC325>I<EA01E0EA07F8120FA2EA1FFCA4EA0FF8EA0798EA0018
-13381330A21370136013E013C01201EA0380EA07001206120E5A5A5A5A5A0E1C7A891C>
-44 D<387FFFFCA3B5FCA21605799521>I<120FEA3FC0127FA212FFA31380EA7F00123C0A
-0A77891C>I<15FE913807FF8091381F07C091387C01F0ECF000494813F8494813780107
-147C495A49C7FC167E133E137EA25BA2485AA2000315FEA25B000715FCA2491301120FA3
-4848EB03F8A44848EB07F0A448C7EA0FE0A316C0007E141F12FE1680153FA2481500A215
-7EA25DA25D4813015D6C495A127C4A5A4A5A6C49C7FC143E6C5B380FC1F03803FFC0C648
-C8FC273F76BC2E>48 D<15031507150F151F151E153E157EEC01FEEC03FC1407141FEB01
-FF90380FFBF8EB1FC3EB0E07130015F0A2140FA215E0A2141FA215C0A2143FA21580A214
-7FA21500A25CA25CA21301A25CA21303A25CA21307A25CA2130FA25CA2131FA25CEB7FE0
-B612F0A215E0203D77BC2E>I<15FE913803FFC091380F01F091383C00F84A137C4A7F49
-48133F49487F4A148049C7FC5BEB0E0C011E15C0EB1C0EEB3C06133813781370020E133F
-D9F00C148013E0141C0218137F00011600EBC0384A13FEEC600102E05B3A00E3C003F890
-39FF0007F0013C495A90C7485A5E037FC7FC15FC4A5A4A5AEC0FC04AC8FC147E14F8EB03
-E0495A011FC9FC133E49141801F0143C48481438485A1678485A48C85A120E001E4A5AD8
-3FE0130301FF495A397C3FF01FD8780FB55AD8700391C7FCD8F0015B486C6C5A6E5AEC07
-C02A3F79BC2E>I<1638167E16FE16FCA3150116F8A3150316F0A2150716E0A2ED0FC0A3
-ED1F80A216005DA2157EA2157C15FC5D14015D14035D4A5AA24A5AA24AC7FC143EED0380
-91387C0FC014F8ECF01F01011480EB03E014C0903807803F010F1400EB1F00133E495B49
-137E485A485A484813FE48B46C5A4813F04813FE267C00FF130800F090380FFFFC006013
-01C714E0913803F8005DA314075DA3140F5DA3141F5DA3020EC7FC274F7DBC2E>52
-D<157F913801FFE0913807C0F091381F007C023C133C4A133E4A131F1301495A5C1307A2
-495AA2163F011F143EA2167E6E137C16F8ECE00102F013F09138F803E09138FC07C09039
-0FFE0F00ECFFBE6D13F86D5B7F6D7F8101037F90380F9FFFD91F0F1380D97C0713C0497E
-48486C13E03903E0007F4848133F4848131F001F140F90C7FC003E1407A2127E127CA200
-FC15C05AA2ED0F80A2ED1F00153E007C143C157C007E5C6CEB03F0391F8007C0390FE03F
-802607FFFEC7FC000113F838003FC0283F78BC2E>56 D<15FF020713C091381F81E09138
-3E00F002FC13F84948137C495A4948137E010F143E495A133F4A133F017F147F91C7FC5B
-A2485AA216FF12035B16FE150112075B1503A216FC491307A20003140F16F8151F12016D
-133F0000EC7FF015EF90387C01CF90393E079FE090380FFE1FD903F813C090C7123FA216
-80157F160015FEA24A5A001C5C007F1303485C4A5A4A5A4A5A4849C7FC00F8137E00E05B
-6C485A387C07E0383FFFC06C90C8FCEA03F8283F77BC2E>I<131EEB3F80137FEBFFC05A
-A214806C13005B133C90C7FCB3120FEA3FC0127FA212FFA35B6CC7FC123C122777A61C>
-I<171C173C177CA217FCA216011603A21607A24C7EA2161DA216391679167116E1A2ED01
-C1A2ED038115071601150EA2031C7FA24B7EA25D15F05D4A5AA24A5AA24AC7FC5C140E5C
-021FB6FC4A81A20270C7127FA25C13015C495AA249C8FCA2130E131E131C133C5B01F882
-487ED807FEEC01FFB500E0017FEBFF80A25C39417BC044>65 D<49B712C018F818FE903B
-0003FC0001FF9438007F804BEC3FC0A2F01FE014074B15F0180FA2140F5D181FA2021F16
-E05D183F19C0023FED7F804B14FF19004D5A027F4A5A92C7EA07F0EF1FE0EF7F804AD903
-FEC7FC92B512F017FE4AC7EA3F800101ED1FE04A6E7E17078401036F7E5CA30107825CA3
-010F5E4A1407A260011F150F5C4D5A60013F153F4A4A5A4D5A017F4A90C7FC4C5A91C7EA
-0FF849EC3FF0B812C094C8FC16F83C3E7BBD40>I<9339FF8001C0030F13E0033F9038F8
-03809239FF807E07913A03FC001F0FDA0FF0EB071FDA1FC0ECBF00DA7F806DB4FC4AC77E
-495AD903F86E5A495A130F4948157E4948157C495A13FF91C9FC4848167812035B120749
-1670120FA2485A95C7FC485AA3127F5BA312FF5BA490CCFCA2170FA2170EA2171E171C17
-3C173817786C16706D15F04C5A003F5E6D1403001F4B5A6D4AC8FC000F151E6C6C5C6C6C
-14F86C6C495A6C6CEB07C090397FC03F8090261FFFFEC9FC010713F0010013803A4272BF
-41>I<49B712C018F818FE903B0003FE0003FF9438007F804BEC1FC0F00FE0F007F01407
-4BEC03F8F001FCA2140F4BEC00FEA3141F4B15FFA3143F5DA3027F5D5DA219FE14FF92C8
-1203A34917FC4A1507A219F813034A150F19F0A20107EE1FE05CF03FC0A2010FEE7F804A
-16006060011F4B5A4A4A5A4D5AA2013F4B5A4AEC3FC04DC7FC017F15FEEE03FC4AEB0FF0
-01FFEC7FE0B8128004FCC8FC16E0403E7BBD45>I<49B812F8A390260003FEC7121F1807
-4B14031801F000F014075DA3140F5D19E0A2141F4B1338A2EF7801023F027013C04B91C7
-FCA217F0027F5CED80011603160F91B65AA3ED001F49EC07805CA3010392C8FC5CF00380
-4C13070107020E14005C93C75A180E010F161E4A151C183CA2011F5E5C60A2013F15014A
-4A5A1707017F150F4D5A4A147F01FF913807FF80B9FCA295C7FC3D3E7BBD3E>I<49B812
-F0A390260003FEC7123F180F4B1403A2F001E014075DA3140F5D19C0A2141F5D1770EFF0
-03023F02E013804B91C7FCA21601027F5CED8003A2160702FFEB1F8092B5FCA349D9003F
-C8FC4A7F82A20103140E5CA2161E0107141C5CA293C9FC130F5CA3131F5CA3133F5CA213
-7FA25C497EB612E0A33C3E7BBD3B>I<9339FF8001C0030F13E0033F9038F803809239FF
-807E07913A03FC001F0FDA0FF0EB071FDA1FC0ECBF00DA7F806DB4FC4AC77E495AD903F8
-6E5A495A130F4948157E4948157C495A13FF91C9FC4848167812035B1207491670120FA2
-485A95C7FC485AA3127F5BA312FF5BA30303B512FC90C7FCA2DB000190C7FCA25FA21603
-5FA316076C5E7FA2003F150F6D5D121F6D141F000F153F6C6C4A5A6C6C14F76C6CEB01E3
-6CB4EB07C1903A7FC03F81C090391FFFFE00010701F890C8FC010013803A4272BF46>I<
-49B648B6FC495DA2D9000390C7000313004B5D4B5DA2180714074B5DA2180F140F4B5DA2
-181F141F4B5DA2183F143F4B5DA2187F147F4B5DA218FF91B8FC96C7FCA292C712015B4A
-5DA2170313034A5DA2170713074A5DA2170F130F4A5DA2171F131F4A5DA2173F133F4A5D
-A2017F157FA24A5D496C4A7EB66CB67EA3483E7BBD44>I<49B6FC5BA2D9000313005D5D
-A314075DA3140F5DA3141F5DA3143F5DA3147F5DA314FF92C7FCA35B5CA313035CA31307
-5CA3130F5CA3131F5CA3133F5CA2137FA25C497EB67EA3283E7BBD23>I<4AB61280A218
-0091C713C0167F5FA216FF94C7FCA35D5EA315035EA315075EA3150F5EA3151F5EA3153F
-5EA3157FA25EA215FFA293C8FCA25CA25DA2380F8003EA3FC0D87FE05BA21407D8FFC05B
-140F01805B49485A12FC0070495A4A5A6C01FEC9FC383C01FC380F07F03807FFC0C648CA
-FC314079BD30>I<49B6903807FFFE605ED9000390C7000113E04B6E13004B15FC4E5A19
-E002074B5A4BEC0F804EC7FC183C020F5D4B5C4D5AEF07C0021F4AC8FC4B131E5F5F023F
-5C9238C003E0EE07804CC9FC027F5B4B5AEEFF801581ECFF834B7FED0F7FED1E3F49017C
-7FECFEF89138FFE01F03C07F491380ED000F4A805C010714074A80A21603010F815C1601
-83131F4A6D7FA2177F013F825C173F017F82A24A81496C4A7EB6D8800FB512C0A261473E
-7BBD46>I<49B612C0A25FD9000390C8FC5D5DA314075DA3140F5DA3141F5DA3143F5DA3
-147F5DA314FF92C9FCA35B5CA313035C18C0EF01E0010716C05C17031880130F4A140718
-005F131F4A141EA2173E013F5D4A14FC1601017F4A5A16074A131F01FFECFFF0B8FCA25F
-333E7BBD39>I<49B5933807FFFC496062D90003F0FC00505ADBBF805E1A771AEF140703
-3F923801CFE0A2F1039F020FEE071F020E606F6C140E1A3F021E161C021C04385BA2F170
-7F143C023804E090C7FCF001C0629126780FE0495A02705FF00700F00E0114F002E0031C
-5BA2F03803010116704A6C6C5D18E019070103ED01C00280DA03805BA2943807000F1307
-0200020E5C5FDB03F8141F495D010E4B5CA24D133F131E011CDAF9C05CEEFB80197F013C
-6DB4C7FC013895C8FC5E01784A5C13F8486C4A5CD807FE4C7EB500F04948B512FE16E015
-00563E7BBD52>I<902601FFFE020FB5FC496D5CA2D900016D010013C04AEE3F00193E70
-141C193CEC07BFDB3FE01438151F1978020F7FDA0E0F15708219F0EC1E07021C6D5CA203
-031401023C7FDA38015DA2701303EC7800027002805BA2047F130702F014C04A013F91C7
-FCA2715A0101141F4AECF00EA2040F131E010315F84A151C1607EFFC3C0107140391C714
-3817FE040113784915FF010E16708218F0131E011C6F5AA2173F133C01385E171F137813
-F8486C6F5AEA07FEB500F01407A295C8FC483E7BBD44>I<EEFFC0030713F892383F80FE
-9238FC003FDA03F0EB0F804A486D7EDA1F80804AC76C7E027E6E7E4A8149481400494881
-1307495A4948157F133F5C49C9FC4917805B1201485AA212075B000F17FFA25B121F1900
-48485DA448484B5AA34D5AA25B4D5A12FF60171F60007F163F604D5AA24DC7FC5F003F15
-014C5A6D5D001F4B5A4C5A6C6C4A5A4C5A6C6C4AC8FC000315FC6C6C495A6C6CEB07E001
-7FEB1F8090261FC07EC9FC903807FFF801001380394273BF46>I<49B77E18F018FC903B
-0003FE0003FEEF00FF4BEC7F80F03FC00207151F19E05DA2020F16F0A25DA2141FF03FE0
-5DA2023F16C0187F4B1580A2027FEDFF00604B495A4D5A02FF4A5A4D5A92C7EA3FC04CB4
-C7FC4990B512FC17E04ACAFCA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA2
-5CA2137FA25C497EB67EA33C3E7BBD3E>I<49B612FCEFFF8018F0903B0003FE000FF8EF
-03FE4BEB00FF8419800207ED3FC05DA219E0140F5DA3021FED7FC05DA2F0FF80143F4B15
-004D5A60027F4A5A4B495A4D5AEF3F8002FF02FEC7FC92380007F892B512E01780499038
-000FE04A6D7E707E707E0103814A130083A213075CA25E130F5C5F1603131F5CA3013F02
-0714404A16E05F017F160119C04A01031303496C1680B6D8800113079438FE0F00933800
-7E1ECAEA3FFCEF07F03B407BBD42>82 D<92391FE00380ED7FFC913A01FFFE0700913907
-F01F8F91390FC007DF4AC66CB4FC023E6D5A4A130014FC495A4948147CA2495AA2010F15
-785CA3011F1570A46E91C7FCA2808014FE90380FFFE015FC6DEBFF8016E06D806D806D6C
-7F141F02037FEC003FED07FF1501A281A282A212075A167E120EA2001E15FE5EA25E003E
-14015E003F14034B5A486C5C150F6D495A6D49C8FCD8F9F0137C39F8FE01F839F03FFFF0
-D8E00F13C026C001FEC9FC314279BF33>I<48B9FCA25A903AFE001FF00101F89138E000
-7FD807E0163E49013F141E5B48C75BA2001E147FA2001C4B131C123C003814FFA2007892
-C7FC12704A153C00F01738485CC716001403A25DA21407A25DA2140FA25DA2141FA25DA2
-143FA25DA2147FA25DA214FFA292C9FCA25BA25CA21303A25CEB0FFE003FB67E5AA2383D
-71BC41>I<001FB500F090B512F0485DA226003FF0C7380FFC004AEC03F04A5D715A017F
-1503A24A5DA201FF150795C7FC91C8FCA2485E170E5BA20003161E171C5BA20007163C17
-385BA2000F167817705BA2001F16F05F5BA2003F1501A2495DA2007F1503A2495DA21607
-94C8FC48C8FC5E160E161E6C151C163C5E5E5E6C6C13014B5A001F4A5A6C6C011FC9FC6D
-133E6C6C13F83903FC07F0C6B512C0013F90CAFCEB07F83C406FBD44>I<B500FE91387F
-FFE094B5FC19C00003018091380FFC0049C8EA07F000015F606095C7FC170EA25F173C17
-386D5DA26C5E16015F4C5AA24CC8FC5E160E5E805E137F5E5EA24B5AA24B5A150793C9FC
-ECC00EA2013F5B153C15385DA25D14C15DECC38014E302E7CAFCEB1FEF14EE14FCA25CA2
-5CA25C5C130F5CA291CBFC130E3B406DBD44>I<010C1306011C130E0178133C01E01370
-484813E04913C0000313013907000380000EEB0700000C1306001C130E0018130C003813
-1C003013180070133800601330A200E0137000CFEB678039FFC07FE0A6018013C0397F00
-3F80003CEB1E001F1C69BE2F>92 D<147E49B47E903907C1C38090391F80EFC090383F00
-FF017E137F4914804848133F485AA248481400120F5B001F5C157E485AA215FE007F5C90
-C7FCA21401485C5AA21403EDF0385AA21407EDE078020F1370127C021F13F0007E013F13
-E0003E137FECF3E1261F01E313C03A0F8781E3803A03FF00FF00D800FC133E252977A72E
->97 D<EB1FC0EA0FFF5CA2EA003FA291C7FCA25BA2137EA213FEA25BA21201A25BA21203
-A25B147E3907F1FF809038F783E09038EF01F013FE390FF800F8A24913FC49137C485A15
-7E5B15FE123FA290C7FCA248130115FC127EA2140300FE14F85AA2EC07F0A215E048130F
-15C0141F15800078EB3F00127C147E003C5B383E01F8381E03E06C485A6CB4C7FCEA01F8
-1F4076BE2A>I<EC1FC0ECFFF0903803F03C903807C01E90381F800E90383F000F017E13
-3F4913FF485A485A000714FE5B000F14FC48481300A2485AA3127F90C8FCA35A5AA64814
-03007E1407150F151E003E143C15786C14F0EC03E0390F800F803903E07E003801FFF838
-003FC0202977A72A>I<EE3F80ED1FFF1700A2ED007FA2167EA216FEA25EA21501A25EA2
-1503A25EA21507A25E147E903801FF8F903807C1CF90391F80EFC090383F00FF017E137F
-5B48486D5A485AA2485A000F92C7FC5B001F5CA24848137EA215FE127F90C75AA214015A
-485CA2140316384814F0A21407167891380FE070127C021F13F0007E013F5B003E137FEC
-F3E1261F01E35B3A0F8781E3802703FF00FFC7FCD800FC133E294077BE2E>I<EC3F8090
-3801FFE0903807E0F890381F803CEB3E0001FC131E485A485A12074848133E49133C121F
-4848137C15F8EC03F0397F000FE0ECFF809038FFFC00B512C048C8FCA45AA61506150E15
-1E007C143C15786C14F0EC01E06CEB07C0390F801F003807C0FC3801FFF038007F801F29
-76A72A>I<167C4BB4FC923807C78092380F83C0ED1F87161FED3F3FA2157EA21780EE0E
-004BC7FCA414015DA414035DA30103B512F8A390260007E0C7FCA3140F5DA5141F5DA414
-3F92C8FCA45C147EA414FE5CA413015CA4495AA4495AA4495A121E127F5C12FF49C9FCA2
-EAFE1EEAF83C1270EA7878EA3FE0EA0F802A5383BF1C>I<EC03F0EC0FFC91383E0E1C91
-38FC077E903901F003FE1303903807E001D90FC013FCEB1F80A2EB3F004914F8137E01FE
-1303A2484814F0A2150712034914E0A2150F12074914C0A2151FA216805B153F1203ED7F
-006D5BA200015B0000495A9038F80F7E90387C1EFEEB1FF8903807E0FC90C7FC1401A25D
-A21403A25D001C1307007F5C48130F5D4A5A4AC7FC48137E00F85B387C03F0381FFFC0D8
-03FEC8FC273B7CA72A>I<EB01FC13FF5CA21303A25CA21307A25CA2130FA25CA2131FA2
-5CA2133FA291C8FCEC03F890387F0FFE91383E0F80D97E7813C0ECE007D9FFC013E01480
-1400A2485A5BA25B0003140F16C05BA20007141F16805BA2000F143F16005B5D001F147E
-EDFE074913FCA2003F0101130FEDF80E1300161E48ECF01CA2007E1538A200FE15700200
-13E048EC7FC00038EC1F0028407ABE2E>I<1478EB01FCA21303A314F8EB00E01400AD13
-7C48B4FC38038F80EA0707000E13C0121E121CEA3C0F1238A2EA781F00701380A2EAF03F
-140012005B137E13FE5BA212015BA212035B1438120713E0000F1378EBC070A214F0EB80
-E0A2EB81C01383148038078700EA03FEEA00F8163E79BC1C>I<EB01FC13FF5CA21303A2
-5CA21307A25CA2130FA25CA2131FA25CA2133FA291C8FCED03E049EB0FF8ED3C3C017EEB
-707CEDE1FC9038FE01C1EC03839038FC0703140E0001011C13F891383800E04948130014
-60000313E0EBF9C0EBF78001FEC8FC1207EBFFE0EBE7F8EBE0FE000F137F6E7EEBC01F81
-001F130F16701380A2003F15F0021F13E001001380A248148116C0007EEB0F83168000FE
-14879138078F0048EB03FE0038EB00F826407ABE2A>107 D<EB07F0EA03FF14E0A2EA00
-0FA214C0A2131FA21480A2133FA21400A25BA2137EA213FEA25BA21201A25BA21203A25B
-A21207A25BA2120FA25BA2121FA25BA2123FA290C7FCA25A1307127EA2EAFE0F130E12FC
-A2131E131CA2EA7C381378EA3C70EA1FE0EA0780144079BE17>I<D801F0D93F80137F3D
-07FC01FFE003FFC03D0F3E07C1F80F83F03D0E1F0F00FC1E01F8001E011C90387C380000
-1C49D97E707F003C01F05C0038157F4A5C26783FC05C12704A91C7FC91C7127E00F003FE
-1301494A5CEA007EA20301140301FE5F495CA203031407000160495C180F03075D000305
-1F13E0494A1480A2030FEC3F810007F001C0495CA2031F91383E0380120F494AEC0700A2
-033F150E001FEF1E1C4991C7EA0FF80007C7000EEC03E0432979A74A>I<D801F0EB3F80
-3A07FC01FFE03A0F3E07C1F83A0E1F0F00FC001E011C137C001C49137E003C13F012385C
-38783FC012705C91C7FC00F015FE495CEA007EA2150101FE5C5BA2150300015D5B15075E
-0003020F13704914C0A2031F13F00007ED80E05B1681EE01C0120F49EC0380A2EE070000
-1FEC0F0E49EB07FC0007C7EA01F02C2979A733>I<EC1FC0ECFFF8903803F07C90380FC0
-1FEB1F8090393F000F80017E14C0491307484814E0485A12075B000F15F0485AA2485AA2
-ED0FE0127F90C7FCA2151F4815C05AA2ED3F80A2ED7F00A248147E007C5C007E13015D4A
-5A003E495A6C495A4A5A260F803EC7FC3807C0FC3801FFF038003F80242977A72E>I<90
-3903E001F890390FF807FE903A1E7C1E0F80903A1C3E3C07C0013C137801389038E003E0
-EB783F017001C013F0ED80019038F07F0001E015F8147E1603000113FEA2C75AA2010114
-0717F05CA20103140F17E05CA20107EC1FC0A24A1480163F010F15005E167E5E131F4B5A
-6E485A4B5A90393FB80F80DA9C1FC7FCEC0FFCEC03E049C9FCA2137EA213FEA25BA21201
-A25BA21203A2387FFFE0B5FCA22D3A80A72E>I<027E1360903901FF81E0903807C1C390
-391F80E7C090383F00F7017E137F5B4848EB3F80485AA2485A000F15005B121F5D484813
-7EA3007F14FE90C75AA3481301485CA31403485CA314074A5A127C141F007E133F003E49
-5A14FF381F01EF380F879F3903FF1F80EA00FC1300143F92C7FCA35C147EA314FE5CA213
-01130390B512F05AA2233A77A72A>I<D801F013FC3A07FC07FF803A0F3E0F03C0260E1F
-1C13E0001EEB380F001C1370003CEBE01F123814C0D8783F14C00070903880070092C7FC
-91C8FC12F05BEA007EA313FE5BA312015BA312035BA312075BA3120F5BA3121F5B0007C9
-FC232979A726>I<EC7F80903801FFE0903807C0F890381F003C013E131C013C131E017C
-133E49137E15FEA2000114FCA215706D13007FEBFFC014FC6C13FF15806D13C06D13E001
-0F13F01300140F14071403120C123F387F80011403D8FF0013E0A300FCEB07C000F0EB0F
-8012700078EB1F006C133C381F01F83807FFE0C690C7FC1F297AA725>I<EB01C0EB03F0
-1307A25CA2130FA25CA2131FA25CA2133FA291C7FCA2007FB51280B6FC1500D8007EC7FC
-13FEA25BA21201A25BA21203A25BA21207A25BA2120FA25BA2121F141C1380A2003F133C
-1438EB0078147014F05C495AEA1F03495A6C48C7FCEA07FCEA01F0193A78B81E>I<137C
-48B4141C26038F80137EEA0707000E7F001E15FE121CD83C0F5C12381501EA781F007001
-805BA2D8F03F1303140000005D5B017E1307A201FE5C5B150F1201495CA2151F0003EDC1
-C0491481A2153F1683EE0380A2ED7F07000102FF13005C01F8EBDF0F00009038079F0E90
-397C0F0F1C90391FFC07F8903907F001F02A2979A731>I<017CEB01C048B4EB07F03803
-8F80EA0707000E01C013F8121E001C1403EA3C0F0038EC01F0A2D8781F130000705BA2EA
-F03F91C712E012005B017E130116C013FE5B1503000115805BA2ED07001203495B150EA2
-5DA25D1578000114706D5B0000495A6D485AD97E0FC7FCEB1FFEEB03F0252979A72A>I<
-017C167048B491387001FC3A038F8001F8EA0707000E01C015FE001E1403001CEDF000EA
-3C0F0038177C1507D8781F4A133C00701380A2D8F03F130F020049133812005B017E011F
-14784C137013FE5B033F14F0000192C712E05BA2170100034A14C049137E17031880A2EF
-070015FE170E00010101141E01F86D131C0000D9039F5BD9FC076D5A903A3E0F07C1E090
-3A1FFC03FFC0902703F0007FC7FC372979A73C>I<903903F001F890390FFC07FE90393C
-1E0E0F9026780F1C138001F0EBB83FD801E013F89039C007F07FEA0380000714E0D9000F
-140048151C000E4AC7FCA2001E131FA2C75BA2143F92C8FCA35C147EA314FE4A131CA301
-01143C001E1538003F491378D87F811470018314F000FF5D9039077801C039FE0F7C033A
-7C0E3C078027783C1E1EC7FC391FF80FFC3907E003F029297CA72A>I<137C48B4143826
-038F8013FCEA0707000E7F001E1401001C15F8EA3C0F12381503D8781F14F000701380A2
-D8F03F1307020013E012005B017E130F16C013FE5B151F1201491480A2153F000315005B
-A25D157EA315FE5D00011301EBF8030000130790387C1FF8EB3FF9EB07E1EB00035DA214
-07000E5CEA3F80007F495AA24A5AD8FF0090C7FC143E007C137E00705B387801F0383803
-E0381E0FC06CB4C8FCEA03F8263B79A72C>I<D901F01370D907FC13F0010F14E090381F
-FE0190393FFF03C049EB838090387C0FCF9039F803FF009038F0007E49133C000114386C
-48137890C75A4A5A4A5A4A5A4AC7FC141E5C5C5C495A495A495A49C8FC131E4913075B5B
-48485B4848131E485A01F05BD80FFE137C391F1F81F8383E0FFFD83C075B486C5B00705C
-D8F00190C7FC38E0007C24297BA725>I<B8FCA2280278982E>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fq cmsy10 10.95 21
-/Fq 21 113 df<007FB812F8B912FCA26C17F83604789847>0 D<121EEA7F80A2EAFFC0
-A4EA7F80A2EA1E000A0A799B19>I<0060166000F816F06C1501007E15036CED07E06C6C
-EC0FC06C6CEC1F806C6CEC3F006C6C147E6C6C5C6C6C495A017E495A6D495A6D6C485A6D
-6C485A6D6C48C7FC903803F07E6D6C5A903800FDF8EC7FF06E5A6E5AA24A7E4A7EECFDF8
-903801F8FC903803F07E49487E49486C7E49486C7E49486C7E017E6D7E496D7E48486D7E
-4848147E4848804848EC1F804848EC0FC048C8EA07E0007EED03F0481501481500006016
-602C2C73AC47>I<EB03C0A2805CA600F0140F00FC143F00FE147F00FF14FF393FC3C3FC
-390FE187F03903F18FC03900FDBF00EB3FFCEB0FF0EB03C0EB0FF0EB3FFCEBFDBF3903F1
-8FC0390FE187F0393FC3C3FC39FF03C0FF00FE147F00FC143F00F0140F00001400A6805C
-A220277AA92D>I<1506150FB3A9007FB912E0BA12F0A26C18E0C8000FC9FCB3A6007FB9
-12E0BA12F0A26C18E03C3C7BBC47>6 D<EB0FFCEB3FFF90B512C0000314F04880488048
-804880A2481580A3B712C0AA6C1580A36C1500A26C5C6C5C6C5C6C5CC614C0013F90C7FC
-EB0FFC22227BA72D>15 D<007FB912E0BA12F0A26C18E0CDFCAE007FB912E0BA12F0A26C
-18E0CDFCAE007FB912E0BA12F0A26C18E03C287BAA47>17 D<1818187CEF01FCEF07F8EF
-1FF0EF7FC0933801FF00EE07FCEE1FF0EE7FC04B48C7FCED07FCED1FF0ED7FC04A48C8FC
-EC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB7FC04848CAFCEA07FCEA1FF0EA7FC048
-CBFC5AEA7F80EA3FE0EA0FF8EA03FEC66C7EEB3FE0EB0FF8EB03FE903800FF80EC3FE0EC
-0FF8EC03FE913800FF80ED3FE0ED0FF8ED03FE923800FF80EE3FE0EE0FF8EE03FE933800
-FF80EF3FE0EF0FF8EF03FC170018381800AE007FB812F8B912FCA26C17F8364878B947>
-20 D<126012F812FEEA7F80EA3FE0EA0FF8EA03FEC66C7EEB3FE0EB0FF8EB03FE903800
-FF80EC3FE0EC0FF8EC03FE913800FF80ED3FE0ED0FF8ED03FE923800FF80EE3FE0EE0FF8
-EE03FE933800FF80EF3FE0EF0FF8EF03FC1701EF07F8EF1FF0EF7FC0933801FF00EE07FC
-EE1FF0EE7FC04B48C7FCED07FCED1FF0ED7FC04A48C8FCEC07FCEC1FF0EC7FC04948C9FC
-EB07FCEB1FF0EB7FC04848CAFCEA07FCEA1FF0EA7FC048CBFC12FC1270CCFCAE007FB812
-F8B912FCA26C17F8364878B947>I<D91FE01620D97FF816703801FFFE486D7E48804814
-F09038E01FF8271F8007FC15F0273E0001FE15E0003CD9007F1401007CDA3FC013030078
-DA0FE014C00070DA07F8130700F0DA03FEEB1F8048913A01FF807F006F90B5FC043F5B70
-5B04075B040113E000409238007F803C157BA047>24 D<140C141EA2143E143CA2147C14
-78A214F8495AA2495A495AA2495A49CDFC133E137EEA01F8485AEA0FE0003FBB12FEBDFC
-A2003F1AFED80FE0CDFCEA03F06C7EEA007E133E7F6D7E6D7EA26D7E6D7EA26D7E1478A2
-147C143CA2143E141EA2140C50307BAE5B>32 D<0207B512E0023F14F049B6FC4915E0D9
-0FFCC8FCEB1FE0017FC9FC13FEEA01F8485A485A5B485A121F90CAFC123EA25AA21278A2
-12F8A25AA2B812E017F0A217E000F0CAFCA27EA21278A2127CA27EA27E7F120F6C7E7F6C
-7E6C7EEA00FE137FEB1FE0EB0FFC0103B612E06D15F0EB003F020714E02C3678B13D>50
-D<176017F01601A2EE03E0A2EE07C0A2EE0F80A2EE1F00A2163EA25EA25EA24B5AA24B5A
-A24B5AA24B5AA24BC7FCA2153EA25DA25DA24A5AA24A5AA24A5AA24A5AA24AC8FCA2143E
-A25CA25CA2495AA2495AA2495AA2495AA249C9FCA2133EA25BA25BA2485AA2485AA2485A
-A2485AA248CAFCA2123EA25AA25AA25A12602C5473C000>54 D<387FFFFCB5FCA300F0C7
-FCB3B3B3B3AD1260165A71C328>100 D<B512F814FCA3C7123CB3B3B3B3AD1418165A7E
-C328>I<153FEC03FFEC0FE0EC3F80EC7E00495A5C495AA2495AB3AA130F5C131F495A91
-C7FC13FEEA03F8EA7FE048C8FCEA7FE0EA03F8EA00FE133F806D7E130F801307B3AA6D7E
-A26D7E80EB007EEC3F80EC0FE0EC03FFEC003F205B7AC32D>I<12FCEAFFC0EA07F0EA01
-FCEA007E6D7E131F6D7EA26D7EB3AA801303806D7E1300147FEC1FC0EC07FEEC00FFEC07
-FEEC1FC0EC7F0014FC1301495A5C13075CB3AA495AA2495A133F017EC7FC485AEA07F0EA
-FFC000FCC8FC205B7AC32D>I<126012F0B3B3B3B3B11260045B76C319>106
-D<0060131800F0133CB3B3B3B3B000601318165A75C32D>I<126012F07EA21278127CA2
-123C123EA2121E121FA27E7FA212077FA212037FA212017FA212007FA21378137CA27FA2
-131E131FA27F80A2130780A2130380A2130180A2130080A21478147CA2143C143EA2141E
-141FA26E7EA2140781A2140381A2140181A2140081A21578157CA2153C153EA2151E151F
-A2811680A2150716C0A21503ED0180225B7BC32D>110 D<1A03F207801A0FA2F21F00A2
-1A3EA262A262A24F5AA24F5AA24F5AA24F5AA24FC7FCA2193EA261A261A24E5AA24E5AA2
-4E5AA24E5AA24EC8FCA2183EA260A260A24D5A131C017C5E01FE15031201D807FF4B5A12
-0E484C5A00787FD8E07F4BC9FC00C07FD8003F153E80011F5D80010F5D8001074A5A8001
-034A5AA26E495A13016E495A7F6F48CAFC147FEDC03E143F6F5A141F6F5A140FEDF1F015
-F9913807FBE015FF6E5BA26E5BA26E90CBFCA2157EA2153C1538495B7B834C>112
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fr cmbx12 14.4 52
-/Fr 52 122 df<922601FFFC903801FFE0033F9026FF801F13F84AB6D8E07F13FE020F03
-F9B6FC023FD9C00FB500C0138091277FFC0003D9FE0113C0902601FFE049495A49494949
-4813E04990C714F049484A13E0495A19C0495A7413C0017F17804A6E6E1380719138007E
-007192C7FCAEBCFCA526007FF8C7000301C0C8FCB3B3A7007FB5D8F803B612F0A553547D
-D34E>11 D<B712F0AB240B7F9F2D>45 D<EA07F0487E487E487E487EB51280A76C13006C
-5A6C5A6C5A6C5A1111769025>I<913803FFC0023F13FC91B6FC010315C0010F018113F0
-903A1FFC003FF849486D7E49486D7E49486D7E48496D138048496D13C0A24817E04890C8
-13F0A34817F8A24817FC49157FA3007F17FEA600FF17FFB3A5007F17FEA6003F17FCA26D
-15FFA26C17F8A36C17F0A26C6D4913E0A26C6D4913C06C17806E5B6C6D4913006D6C495A
-D91FFCEB3FF8903A0FFF81FFF06D90B55A01011580D9003F01FCC7FC020313C0384F7BCD
-43>48 D<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF800C7FCB3B3
-B3A6007FB712FEA52F4E76CD43>I<EC3FFE0103B512E0010F14FC013F14FF90B712C048
-D9C07F7F2703FE000F13F8D807F801037FD80FE06D7F48486D7F48488001F01680486C6E
-13C07F486C6E13E07FA27013F0A56C5AA26C5AEA0FF0EA03C0C914E05EA218C05E1880A2
-4C13005F4C5A4B5B5F4B5B5F4B5B4B90C7FC4B5A5E4B5AED7FE04B5A4A5B4A48C8FC4A5A
-5D4A48EB01F04A5AEC3F804AC7FC02FEEC03E0495A495A495A495AD91F80140749C8FC01
-3E150F017FB7FC90B812C05A5A5A5A5A5A5AB9FC1880A4344E79CD43>I<91380FFFC091
-B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7ED803F86E7E49
-1680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801FC1680C9FC4C
-13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF80DA000713E0
-030113F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA218FEA2EA03E0
-EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E001F04A13C06C
-484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F1580010302FCC7FC
-D9001F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F163F167FA216FF5D
-5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC01580EC1F005C14
-7E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A1207485A485A90C8
-FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>I<D80380150ED807
-E0157E01FEEC03FED9FFF0137F91B65A5F5F5F5F5F94C7FC5E5E16F016C093C8FC15F801
-E190C9FC01E0CAFCABEC0FFF027F13F001E3B512FE01E76E7E9026FFF8077FDAC0017F49
-C713F8496E7E49143F4981496E7E6C481680C9FC18C08218E0A418F0A3EA0FE0487E487E
-487E487EA418E0A35B6C484A13C05B491680003EC85A003F17006C6C4A5A6D5D6C6C4A5A
-D807F8495BD803FE01075B2701FFC03F5B6C90B65A013F4AC7FC6D14F8010314C0902600
-7FF8C8FC344F79CD43>I<ED0FFF92B512E0020780021F14FC91397FFE03FE903A01FFF0
-007F4901C0EB3F804990C7121F4948EC7FC0494814FF49484913E049485B01FF5C485BA2
-485B5AA2486F13C04A6D1380486F1300177E94C7FC5AA291CAFC5AA21508913801FFF802
-0713FFB54814C04A14F04AC66C7E023C6D7E4A6D7E4A6D7E7013804A15C0A24A15E07013
-F05C18F8A491C714FCA37EA67EA46C17F880A27E18F06C5D18E06C6D15C07E6E4913806C
-6D15006D6C495A6D6CEB7FFC6DB448485A6D90B55A010315C0010092C7FC023F13FC0207
-13C0364F7ACD43>I<121F7F7FEBFF8091B81280A45A1900606060A2606060485F0180C8
-6CC7FC007EC95A4C5A007C4B5A5F4C5A160F4C5A484B5A4C5A94C8FC16FEC812014B5A5E
-4B5A150F4B5AA24B5AA24B5A15FFA24A90C9FCA25C5D1407A2140FA25D141FA2143FA414
-7F5DA314FFA55BAC6D5BA2EC3FC06E5A395279D043>I<913807FFC0027F13FC0103B67E
-010F15E090261FFC0113F8903A3FE0003FFCD97F80EB0FFE49C76C7E48488048486E1380
-000717C04980120F18E0177FA2121F7FA27F7F6E14FF02E015C014F802FE4913806C7FDB
-C00313009238F007FE6C02F85B9238FE1FF86C9138FFBFF06CEDFFE017806C4BC7FC6D80
-6D81010F15E06D81010115FC010781011F81491680EBFFE748018115C048D9007F14E048
-48011F14F048487F48481303030014F8484880161F4848020713FC1601824848157F173F
-A2171FA2170FA218F8A27F007F17F06D151FA26C6CED3FE0001F17C06D157F6C6CEDFF80
-6C6C6C010313006C01E0EB0FFE6C01FCEBFFFC6C6CB612F06D5D010F1580010102FCC7FC
-D9000F13C0364F7ACD43>I<91380FFF8091B512F8010314FE010F6E7E4901037F90267F
-F8007F4948EB3FF048496D7E484980486F7E484980824817805A91C714C05A7013E0A218
-F0B5FCA318F8A618FCA46C5DA37EA25E6C7F6C5DA26C5D6C7F6C6D137B6C6D13F390387F
-F803011FB512E36D14C30103028313F89039007FFE03EC00401500A218F05EA3D801F816
-E0487E486C16C0487E486D491380A218005E5F4C5A91C7FC6C484A5A494A5A49495B6C48
-495BD803FC010F5B9027FF807FFEC7FC6C90B55A6C6C14F06D14C0010F49C8FC010013F0
-364F7ACD43>I<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C7FA24C7FA34C808304
-7F80167E8304FE804C7E03018116F8830303814C7E03078116E083030F814C7E031F8116
-8083033F8293C77E4B82157E8403FE824B800201835D840203834B800207835D844AB87E
-A24A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A24A820103854A820107
-85A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547BD366>65
-D<BA12C019FEF1FFC01AF01AFCD8000701F0C7000313FFDE007F7F737F070F7F737F8785
-87858785A287A84F5BA263616361634F5B4F5B077F90C7FC4E485A060713F892B812E097
-C8FC861AF003F0C7000313FE9539003FFF80070F13E0737F07017F87737F747E1C807413
-C0A27413E0A31CF0A386A362A31CE0A2621CC0A250138097B5FC1C004F5B19074F5B073F
-13F04EB55ABC128098C7FC1AF81AC007F8C8FC54527CD160>I<932601FFFCEC01C0047F
-D9FFC013030307B600F81307033F03FE131F92B8EA803F0203DAE003EBC07F020F01FCC7
-383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901F882494982494982494982
-4949824990CA7E494883A2484983485B1B7F485B481A3FA24849181FA3485B1B0FA25AA2
-98C7FC5CA2B5FCAE7EA280A2F307C07EA36C7FA21B0F6C6D1980A26C1A1F6C7F1C006C6D
-606C6D187EA26D6C606D6D4C5A6D6D16036D6D4C5A6D6D4C5A6D01FC4C5A6D6DEE7F806D
-6C6C6C4BC7FC6E01E0EC07FE020F01FEEC1FF80203903AFFE001FFF0020091B612C0033F
-93C8FC030715FCDB007F14E0040101FCC9FC525479D261>I<BA7E19FCF1FF801AF01AFC
-D8000701F0C7000F13FF060014C0071F7F070713F807017F737F747E747F747F86747F74
-7F8886888688A2757EA31D8087A21DC0A51DE0A387A963A31DC0A51D80A2631D00A3515A
-A2646264505B6264505B505B5090C7FCF2FFFE4F5B07075B071F5B96B512C0060F91C8FC
-BB5A1AF01AC007FCC9FC19805B527CD167>I<BC1280A5D8000701F8C7000114C0F0001F
-19071901851A7F1A3F1A1FA2F20FE0A21A07A31A03A318F81BF01A01A497C7FC1701A317
-031707170F177F92B6FCA59238F8007F170F170717031701A317001B3EA31B7CA395C8FC
-A21BFCA21BF8A21A01A31A031BF01A071A0FA21A1F1A3FF27FE0F101FF1907191F0603B5
-FCBCFCA21BC0A34F517CD058>I<BB12FEA5D8000701F8C700077FF0007F191F19078585
-8586861B80A21A1FA31A0FA41BC006F81307A497C7FCA31701A317031707170F177F92B6
-FCA59238F8007F170F170717031701A31700A795C9FCB3B812F8A54A517CD055>I<B8D8
-C003B8FCA5D8000701F8C9001FEBE000B3AE92BAFCA503F8C9121FB3B1B8D8C003B8FCA5
-60527CD169>72 D<B812C0A5D8000701F8C7FCB3B3B3B2B812C0A52A527CD132>I<B812
-F8A5D8000701F8CAFCB3B3A91A7CA41AFC1AF8A51901A31903A219071AF0190FA2191F19
-3F197F19FF180360183F4DB5FCBB12E0A546527CD151>76 D<B600FC073FB512FE6F61A2
-6F96B6FCA2D80007F5C00070EF01EFA202EF6DEF03CFA202E76DEF078FA202E36DEF0F0F
-A202E16D171EA302E06D173CA26F6C1778A26F6C17F0A26F6DED01E0A26F6DED03C0A36F
-6DED0780A26F6DED0F00A26F6D151EA26F6D5DA3706C5DA2706C5DA2706D495AA2706D49
-5AA2706D495AA3706D49C7FCA2706D131EA2706D5BA2716C5BA3716C5BA271EB81E0A271
-EBC3C0A271EBE780A27101FFC8FCA3715BA2715BA2725AA2725AA2D93FFC6F5AB74DB712
-FEA2725AA2725A77527CD180>I<93380FFFC00303B6FC031F15E092B712FC0203D9FC00
-13FF020F01C0010F13C0023F90C7000313F0DA7FFC02007F494848ED7FFE4901E0ED1FFF
-49496F7F49496F7F4990C96C7F49854948707F4948707FA24849717E48864A83481B804A
-83481BC0A2481BE04A83A2481BF0A348497113F8A5B51AFCAF6C1BF86E5FA46C1BF0A26E
-5F6C1BE0A36C6D4D13C0A26C6D4D1380A26C1B006C6D4D5A6E5E6C626D6C4C5B6D6D4B5B
-6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B90C7FC6D6D4B5A6D01FF02035B023F01E0011F13F0
-020F01FC90B512C0020390B7C8FC020016FC031F15E0030392C9FCDB001F13E0565479D2
-65>79 D<BAFC19F819FF1AE086D8000701F0C7001F13FC060113FF726C13807313C0070F
-13E01BF0857313F81BFCA27313FEA41BFFA81BFEA31BFC61A21BF84F13F04F13E0614F13
-C04F13004E485A061F5B92B812F01AC04FC7FC19E003F8CBFCB3AEB812C0A550527CD15C
->I<91260FFF80130791B500F85B010702FF5B011FEDC03F49EDF07F9026FFFC006D5A48
-01E0EB0FFD4801800101B5FC4848C87E48488149150F001F824981123F4981007F82A284
-12FF84A27FA26D82A27F7F6D93C7FC14C06C13F014FF15F86CECFF8016FC6CEDFFC017F0
-6C16FC6C16FF6C17C06C836C836D826D82010F821303010082021F16801400030F15C0ED
-007F040714E01600173F050F13F08383A200788200F882A3187FA27EA219E07EA26CEFFF
-C0A27F6D4B13806D17006D5D01FC4B5A01FF4B5A02C04A5A02F8EC7FF0903B1FFFC003FF
-E0486C90B65AD8FC0393C7FC48C66C14FC48010F14F048D9007F90C8FC3C5479D24B>83
-D<003FBC1280A59126C0003F9038C0007F49C71607D87FF8060113C001E08449197F4919
-3F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912F0A5
-53517BD05E>I<B800C00103B612FCA5D8000701F8CAEBF000F31F80B3B3B11B3FA26D97
-C7FC81637F1B7E6D6D17FE505A6E7E505A6E6D15076E4D5A6E6D4B5A6E6D4B5A6E01F84B
-5A6E6DDA03FFC8FC6E6CB46CEB0FFE6F9039F001FFF8030F90B65A030316C0DB007F92C9
-FC040F14F8DC007F13805E537CD167>I<B700FC017FB600FE91B612F0A5D8003F01C0C8
-001F01E0C9EBF8006F71EE0FC06D7161876F1C1F6D7196C7FC6F8373606D1E3E6F836D71
-60876F1CFC6D666F4B801F016D66704A806E525A88704A17076E059F5F70021F80080F16
-0F6E6570023F806EDC3E074CC8FC8870027E5F6EDC7C03163E7002FC804F6C167E6E1C7C
-700101814F6C16FC6E745B70010317016E4C6D5D060716C00580496D14036F63DDC00F16
-E04F6D14076F07F05BDDE01F170F6F92C76C5D1DF8DDF03E6E141F6F98C9FCDDF87E16FC
-067C6E5C6FF1FE3EDDFCFC177E6F4A6E147C1DFFDDFFF06E14FC6F62A24E816F62A27049
-6F5BA24E817061A295C97E7061A270487090CAFCA37048705AA24D1601040360A2704870
-5A84537DD18B>87 D<EC7FFF0107B512F0013F14FE90B77E48D9E00F7F2703FE000113F0
-486C6D7F6EEB3FFC48826E131F83707FA36C496D7FA26C90C7FC6C5AC9FCA6037FB5FC02
-0FB6FC91B7FC01071487013FEBF0074913803901FFFC004813F0485B485B485B4890C7FC
-5A5BA2485AA45EA26D5C007F151D163D6C6C02797F6C6D01F113F86C9026C003E1EBFFE0
-6C9026F81FC014F06C90B5487EC6ED001F011F01FC010713E0010101E090C8FC3C387CB6
-41>97 D<EB3FF0B5FCA51203C6FCB3A4923801FFE0030F13FE033FEBFFC092B612F002F3
-01017F913AF7F8003FFEDAFFE0EB0FFF03806D7F92C76C7F4A6E7F4A824A6E7FA2727EA2
-85A28584A31A80AC1A00A44E5AA36118FF616E4A5BA26E4A5B6E4A5B6F495BDACFC04990
-C7FCDA87F0EB7FFC913A03FE03FFF849C6B612E0496D148049011F01FCC8FC90C7000313
-C041547BD24B>I<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1F
-FE0001FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F1300
-705A4892C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F80
-6C6DEC3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F
-49C7FC020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F
-13FC91B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F
-484980485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C
-6D5C6C6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101EC
-FE0FD9003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715
-C04901817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C0
-488191C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E0
-6CEE01F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFE
-EB03FE903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>I<ED
-3FFC0203B5FC020F14C0023F14E09139FFF81FF0499038C03FF849EB807F49903800FFFC
-495A495AA2495AA2EE7FF8495AEE3FF0EE0FC093C7FCAEB712E0A526007FF8C8FCB3B3A7
-007FB512FEA52E547CD329>I<DA3FFF14FF0103B5D8F00713C0010FDAFC1F13E0013FEC
-FF7F90267FFC0F9038FF9FF09026FFE001EBF83F48496C13E0484990387FF01F4890C7D8
-3FF813E0489338FC0FC0F0078048486E6CC7FCA2003F82A9001F5EA26C6C4A5AA26C5E6C
-6D495A6C6D495A6C6D485BDAFC0F5B4890B6C8FCD803EF14FC01C314F02607C03F90C9FC
-91CBFCA2120FA37FA213F813FE90B7FC6C16F817FF18C06C836C836C836D828448B9FC12
-074848C700031480D81FF8EC003F4848150748486F13C083485A83A56D5D007F18806D5D
-003F18006C6C4B5AD80FFEED1FFC6C6C6CEC7FF86C01E049485A6C01FE011F5B6C6CB712
-80010F03FCC7FC010115E0D9000F01FCC8FC3C4F7CB543>I<EB3FF0B5FCA51203C6FCB3
-A4EE1FFC93B512C0030314F0030F8092391FE07FFC92393F001FFE037C8003F07FDAF1E0
-81ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3ACB6D8F807B612C0A542537BD24B>I<13
-7F497E000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA51201
-7EB3B3A6B612E0A51B547BD325>I<EB3FF0B5FCA51203C6FCB3A54CB512F8A59339003F
-FE00EF1FF0EF3FC04D5A4DC7FCEE03FEEE07F84C5A4C5AEE7FC04CC8FC4B5A4B5AED0FF8
-ED1FE04B7E4B7EECF1FF02F37F02F77F91B6FC83159F030F7F02FE80DAF8077F4A7E6F7F
-6F7F83707E82707F84707F707F82707F84707F177F717E4D13C0B6D8F003B6FCA540537C
-D247>107 D<EB3FF0B5FCA512017EB3B3B3B1B612F0A51C537BD225>I<D93FF0D91FFCED
-FFE0B591B500C0010713FE030302F0011F6D7E030F6E017F8092271FE07FFCD9FF037F92
-2A3F001FFE01F8007F0003027C9126FF03E080C602F06DD90780137FDAF1E0038FC77FDA
-F3C0159EDAF7806D01BC143F07FC8102FFC75C4A5EA24A5EA44A5EB3ACB6D8F807B6D8C0
-3FB512FEA567367BB570>I<D93FF0EB1FFCB591B512C0030314F0030F8092391FE07FFC
-92393F001FFE0003027C80C602F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA25CA45C
-B3ACB6D8F807B612C0A542367BB54B>I<913801FFE0021F13FE91B612C0010315F0010F
-9038807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F488348
-90C86C7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C
-5FA26C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0F
-FF807FFC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B5
-010F13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC60280
-6D7F92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA261
-5F616E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E0
-6F1480031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<90397FE003FEB590
-380FFF80033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E013FEC6ECC07FECE780
-14EF150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB612FCA52F367CB537>
-114 D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF81307D81FE0130148487F
-4980127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF15F86C14FF16C06C15
-F06C816C816C81C681013F1580010F15C01300020714E0EC003F030713F015010078EC00
-7F00F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8EC7F0001FEEB01FE90
-39FFC00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387CB635>I<143EA6147E
-A414FEA21301A313031307A2130F131F133F13FF5A000F90B6FCB8FCA426003FFEC8FCB3
-A9EE07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC6DEBFFF86D6C5B021F5B
-020313802A4D7ECB34>I<D93FF8913801FFC0B50207B5FCA50003ED001FC61607B3AE5F
-A35FA2017F5D173B177B6D6C14F3DC01E313F06D6CD907C3EBFFC0903A0FFFC03F836D90
-B51203010114FE6D6C13F8020701E091C7FC42377BB54B>I<B600F00107B5FCA5000101
-F8C8EA7FE06C6DED3F00A2017F163E6E157E013F167C6E15FC6D5E6F13016D5E8117036D
-5E6F13076D5E6F130F6D5E6F131F6D93C7FC815F6E6C133E177E023F147C6F13FC6E5C16
-816E5C16C3A26EEBE3E016E76E5C16FF6E5CA26E91C8FCA26F5AA36F5AA26F5AA26F5AA2
-6F5A6F5A40367DB447>I<B6D8E07FB5D8C003B512C0A5000101F0C701F0C7381FF8006E
-027FED07E06C715DA26E023F150F017F705DA26E181F013F4B6C92C7FC6E606D70143E94
-B5FC6F177E6D4A6E137C03C001F315FC6D715B160303E001E114016D020702E05B03F013
-C06D71485A160F03F8D9807F13076D05F85B93381F003F03FC160F027F4902FC5BDBFE3E
-011F131F023F04FE90C8FC167EDBFF7C010F5B6E01FCECFF3E4C6D137E6E5FA24C7F6E5F
-4C7F6E5FA24C7F6E5F4C147FA26E5F93C8123F6F5EA2033E6FC9FC5A367DB461>I<007F
-B500F090387FFFFEA5C66C48C7000F90C7FC6D6CEC07F86D6D5C6D6D495A6D4B5A6F495A
-6D6D91C8FC6D6D137E6D6D5B91387FFE014C5A6E6C485A6EEB8FE06EEBCFC06EEBFF806E
-91C9FCA26E5B6E5B6F7E6F7EA26F7F834B7F4B7F92B5FCDA01FD7F03F87F4A486C7E4A48
-6C7E020F7FDA1FC0804A486C7F4A486C7F02FE6D7F4A6D7F495A49486D7F01076F7E4948
-6E7E49486E7FEBFFF0B500FE49B612C0A542357EB447>I<B600F00107B5FCA5C601F8C8
-EA7FE06EED3F00A26D6C153E187E013F167C6E15FC6D5E6F13016D5E6F13036D5E811707
-6D6D5C170F6D6D5C171F6D93C7FC6F5B027F143E6F137E023F147C6F13FCA26E6D5A1681
-6EEBC1F016C36E5C16E76E5C16FF6E5CA26E91C8FCA36F5AA26F5AA26F5AA26F5AA26F5A
-A35E150F5E151F93C9FC5DD81FC0133E486C137E486C137C486C13FC5D14015D14034A5A
-6C48485A49485A263FC07FCAFCEB81FE6CB45A6C13F000035BC690CBFC404D7DB447>I
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fs cmbx12 20.74 11
-/Fs 11 117 df<EE01F0EE07F8160F163F167FED01FF150F153F4AB5FC143F010FB6FCB8
-FCA54A7E14C0EBF000C8FCB3B3B3B3AE007FBA12F0A8447171F061>49
-D<92380FFFE04AB67E020F15F0027F15FE49B87E4917E0010F17F8013F8349D9C01F14FF
-9027FFFC0001814801E06D6C80480180021F804890C86C8048486F8048486F8001FF6F80
-4801C06E8002F081486D18806E816E18C0B5821BE06E81A37214F0A56C5BA36C5B6C5B6C
-5B000313C0C690C9FC90CA15E060A34E14C0A21B80601B0060626295B55A5F624D5C624D
-5C4D91C7FC614D5B4D13F04D5B6194B55A4C49C8FC4C5B4C5B4C13E04C5B604C90C9FCEE
-7FFC4C5A4B5B4B5B4B0180EC0FF04B90C8FC4B5A4B5A4B48ED1FE0EDFFE04A5B4A5B4A90
-C9FC4A48163F4A5ADA3FF017C05D4A48167F4A5A4990CA12FFD903FC160749BAFC5B4919
-805B5B90BBFC5A5A5A5A481A005A5ABCFCA462A44C7176F061>I<923801FFFE033FEBFF
-F84AB7FC020F16E0023F16F84A16FE49B97E49DA003F80010F01F0010714F04901800101
-804948C880D97FF86F7F02E081496C834801FC6F148014FF486E6E14C08181481AE081A9
-6C5C1BC06C4A5C6C5C6D90C815806D5AD90FF85D90CA150062606295B55A4D5C624D5C4D
-5C4D91C7FC4D13FC4D5B4CB512E0047F1480037FB548C8FC92B612F818C018F8F0FF806F
-15F092C7003F13FC050713FF050114C071807213F8727F727F867214801BC07214E01BF0
-A27214F81BFCA37214FEA31BFFEBFF80000313E0487F001F13FC487FA2487FA2B67EA31B
-FEA3601BFCA292C8FC6C1AF84A5D4A18F06C494B14E05C6C01C04B14C06C90C915804E14
-006C6D4B5B6C01F092B55A6C01FC4A5C27007FFFC001075C6D01FE013F14C0010F90B85A
-6D4DC7FC010117F8D9003F16E0020F93C8FC020015F0030749C9FC507378F061>I<F10F
-F04F7E193FA2197F19FF60A260606060A2606095B5FCA25F5F5FA25F5F5F5F18BFEFFF3F
-5EEE03FE17FCEE07F8160FEE1FF0EE3FE017C0167FEEFF804B13005E4B5A15074B5A4B5A
-5E153F4B5A4B5A93C7FC4A5A14034A5A5D4A5A141F4A5A4A5A5D4AC8FC5B495A5C495A13
-0F495A495A5C137F495A4890C9FC5B485A1207485A485A5B123F485A485A90BC12FCA8CB
-02F8C7FCB3A20307B912FCA856727BF161>I<96267FFFE01670063FB6ED01F80503B700
-F01403053F04FC14074CB96C130F040706E0131F043F72133F93BA00FC137F0303DC0007
-6D13FF030F03C09039003FFF814B02FCC8000713C3037F02E0030113F792B600806F6CB5
-FC02034ACA121F4A02F8834A02E0834A4A1701027F4A8391B548CC7E494A85495C4C8549
-88494A85494A85495C8A4991CDFC90B54886A2484A1B7FA2481E3F5D481E1F5D5A1F0FA2
-485CA3481E075DA2F703F0489BC7FCA45DA2B6FCB27EA281A47EA2F703F06FF307F87EA3
-6C80A21F0F7E6F1CF07E6F1B1F7E20E06C6E1B3F816DF57FC06D80F7FF806D806D6E4F13
-006D6E616D525A826D6E4F5A6D6E4F5A6E6D6C4E5A021F6EF0FFE06E6E4D5B6E02F84D5B
-6E02FE050F90C7FC02006E6CEE3FFE6F02F0EEFFFC031F02FE03035B6FDAFFC0021F13E0
-030303FF0103B55A030093B7C8FC043F18FC040718F0040118C0DC003F94C9FC050316F8
-DD003F1580DE007F01F0CAFC757A75F78C>67 D<92383FFFF80207B612E0027F15FC49B8
-7E010717E0011F83499026F0007F13FC4948C7000F7F90B502036D7E486E6D806F6D8072
-7F486E6E7F8486727FA28684A26C5C72806C5C6D90C8FC6D5AEB0FF8EB03E090CAFCA705
-07B6FC041FB7FC0303B8FC157F0203B9FC021FECFE0391B612800103ECF800010F14C049
-91C7FC017F13FC90B512F04814C0485C4891C8FC485B5A485B5C5A5CA2B5FC5CA360A36E
-5DA26C5F6E5D187E6C6D846E4A48806C6D4A4814FC6C6ED90FF0ECFFFC6C02E090263FE0
-7F14FE00019139FC03FFC06C91B6487E013F4B487E010F4B1307010303F01301D9003F02
-80D9003F13FC020101F8CBFC57507ACE5E>97 D<93387FFF80030FB512FC037FECFF804A
-B712E0020716F8021F16FE027FD9F8077F49B5D8C000804991C7003F13E04901FC020F7F
-49496E7F49498049496E7F49496E7F90B55A48727E92C914804884485B1BC048841BE048
-5BA27313F05AA25C5AA21BF885A2B5FCA391BAFCA41BF002F8CCFCA67EA3807EA47E806C
-F103F0F207F86C7F1A0F6C6E17F06C191F6F17E06C6E163F6D6DEE7FC06D6D16FF6D6D4B
-13806D6D4B13006D6D6CEC0FFE6D02E0EC3FFC6D02F8ECFFF86D9126FFC00F5B023F91B6
-5A020F178002034CC7FC020016F8031F15E0030392C8FCDB000F13E04D507BCE58>101
-D<903801FFFCB6FCA8C67E131F7FB3AD95380FFFE095B512FE05036E7E050F15E0053F15
-F84D81932701FFF01F7F4CD900077FDC07FC6D80DC0FF06D80DC1FC07F4C48824CC8FC04
-7E6F7F5EEDFDF85E03FF707F5EA25EA25EA293C9FCA45DB3B3A6B8D8E003B81280A86178
-79F76C>104 D<902601FFFCEC7FFEB6020FB512F0057F14FE4CB712C0040716F0041F82
-047F16FE93B5C66C7F92B500F0010F14C0C66C0380010380011F4AC76C806D4A6E8004F0
-6F7F4C6F7F4C6F7F4C8193C915804B7014C0861DE0A27414F0A27414F8A47513FCA57513
-FEAF5113FCA598B512F8A31DF0621DE0621DC0621D806F5E701800704B5B505B704B5B70
-92B55A04FC4A5C704A5C706C010F5C05E0013F49C7FC9227FE7FFC01B55A70B712F0040F
-16C0040393C8FC040015F8053F14C0050301F0C9FC94CCFCB3A6B812E0A85F6F7ACD6C>
-112 D<902601FFF8EB07FEB691383FFFC094B512F00403804C14FE4C8093261FFC3F1380
-93263FE07F13C0DC7F80B5FCC66C5D011FDAFE0114E06DEBF9FC16F815FB16F016E015FF
-16C07114C05E72138095381FFE0093C76C5AF001E095C8FCA25DA65DB3B3A2B812F8A843
-4E7ACD4F>114 D<15FFA75CA55CA45CA25CA25CA25CA25C91B5FCA25B5B5B131F5B90B9
-FC120FBAFCA6D8000791C9FCB3B3A3F01FE0AE183F7014C07F187F7014806D16FF826D4B
-13006E6D485AEEFE0F6E90B55A020F5D6E5D020115C06E6C5C031F49C7FC030113F03B6E
-7CEC4B>116 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Ft cmss10 10.95 49
-/Ft 49 123 df<14FE903803FF8049EB81FE5B5B5BEB7F83140001FE13015B92C7FC1201
-ADB6EA80FEA6D801FCC7FCB3B027407EBF31>12 D<14FCEB01F8EB03F0EB07E0EB0FC013
-1F1480EB3F005B137E5B12015B1203A2485AA25B120FA25B121FA25B123FA448C7FCA712
-FEB3A2127FA76C7EA4121F7FA2120F7FA212077FA26C7EA212017F1200137E137F7FEB1F
-8014C0130FEB07E0EB03F0EB01F8EB00FC165A79C323>40 D<12FC127E7E6C7E6C7E7F12
-076C7E7F12016C7E7F137E137FA2EB3F80A2131F14C0A2130F14E0A2130714F0A4EB03F8
-A7EB01FCB3A2EB03F8A7EB07F0A414E0130FA214C0131FA21480133FA2EB7F00A2137E13
-FE5B485A12035B485A120F5B485A48C7FC127E5A165A7BC323>I<12FFA80808788719>
-46 D<EB03FCEB0FFF013F13C090B512F048804880EBFE073907F801FE48486C7E497F48
-48EB3F80A249131F003F15C0A290C7120F4815E0A4007E1407A200FE15F0B3A3007FEC0F
-E0A56C6CEB1FC0A36D133F001F15806D137F000F15006D5B6C6C485A3903FE07FC90B5FC
-6C5C6C5C013F13C06D5BD903FCC7FC24407CBD2D>48 D<14C013011307130F137FEA07FF
-B5FCA4139FEAF81F1200B3B3A8B612F8A61D3E78BD2D>I<EB0FF8EB3FFF90B512C04814
-F048804880390FF01FFE391FC003FF4848C6138090C7127F48EC3FC0127EED1FE012FE48
-140F007C15F0123C1238001814071208C8FCA2150FA216E0A2151F16C0153F1680ED7F00
-5D5D4A5A4A5A4A5A4A5A4A5A4A5A4AC7FC14FE495A495A495A495A495A495A49C8FC13FC
-485A485A485A485A485A48C9FC48B612F0B7FCA6243E7CBD2D>I<EB03FCEB1FFF4913C0
-90B57E48803903FE07F83907F801FC496C7E4848137E48487F5B003F158090C7121F4815
-C0A2007E140F00FE15E0A41507A216F0A4150FA2127FA2151F7F003F143F7F6C6C137F6D
-13FF380FF8039038FFBFF76CEBFFE76CECC7E06C140F6C13FCEB3FF090C7FC16C0151FA2
-1680153F16005D157E15FE4A5A1403000C495A000F495A391FC07FE090B55A485C6C91C7
-FC00075B000113F838003FC024407CBD2D>57 D<EC01FE4A7EA34A7FA391380FDFC0159F
-021F7F158FA291383F0FF0A21507027E7FA2150302FC7FA201016D7E14F8A201036D7E5C
-A201076E7E5C010F6E7EA25C011F6E7E5CA2013F6E7E91C7FC49811607137E90B77EA348
-82A2D803F8C7EA01FF825B00071780177F5B000FEE3FC05B001F17E0171F5B003F17F017
-0F90C9FC48EE07F8A200FE17FC17035A363F7DBE3D>65 D<EDFFF0020FEBFF80023F14F0
-91B612FC13035B499038803FF890391FFC0003D93FF01300D97FC01438494814184890C9
-FC485A485A5B120F5B121F5B123F5BA2485AA412FF90CAFCAB7F127FA46C7EA27F121F7F
-120F7F12077F6C7E6C6C15046C6D140C6D6C143CD93FF0147CD91FFCEB01FE90390FFF80
-1F6D90B5FC6D15FC010015F0023F14C0020F1400020013F02F417ABF3A>67
-D<B612F8EDFF8016E016F88290C7EA1FFF03037F03007F707EEE1FF0707E707E1603707E
-A2707EEF7F80A2173F18C0A2171F18E0A2170FA218F0AC18E0171FA318C0173FA2EF7F80
-A2EFFF00A24C5A16034C5A4C5A4C5A4C5AEEFFC003035B031F90C7FC90B65A16F816E016
-8003F8C8FC343F78BE42>I<B8FCA690CAFCB3A390B612FCA690CAFCB3A590B71280A729
-3F78BE36>I<EDFFF0020F13FF023F14E091B612F8010315FE5B49EB803F903A1FFC0003
-FCD93FF01300D97FC0143C4948141C4890C8120C484815005B485A120F5B121F5B123F5B
-A2127F5BA312FF90CAFCA90307B5FCA27F127FA36D90C7127F123FA27F121F7F120F7F12
-076C7E7F6C7E6C7F6D7EEB3FF0D91FFCEB01FF90390FFF801F6D90B6FC7F010015FC023F
-14F0020F1400020013F030417ABF3D>71 D<12FFB3B3B3A9083F78BE19>73
-D<B4FCB3B3B3A390B612F0A6243F78BE31>76 D<D8FFE0EE3FF8A36D167FA26D16FFA200
-FE17FB6D1501A2017EED03F3A36DED07E3A36D6CEC0FC3A26E141F010F1683A26E143F01
-071603A26E147F0103157E6E14FEA2010115FC6E1301A2010015F86E1303027E14F0027F
-1307A26E14E0ED800FA2021F14C0EDC01F020F1480A2EDE03F02071400A26F5A0203137E
-A26E6C5AA3913800FDF8A215FF6F5AA26F5AA36F5A92C8FCA23D3F77BE50>I<D8FFF015
-FEA27FA27FA27F12FE137FA280133F80131F80130F801307801303801301801300808081
-143F81141F81140F81140781140381140181140081811680153F16C0151F16E0150F16F0
-150716F8150316FC1501A2ED00FE16FF167FA2163FA2161FA22F3F78BE40>I<4AB47E02
-0F13F0027F13FE91B6FC010315C04981011F010013F8D93FF8EB1FFCD97FE0EB07FE4A13
-0349486D7E4890C813804848ED7FC049153F4848ED1FE04848ED0FF0A24848ED07F8A249
-1503003F17FCA2491501007F17FEA390CAFC4817FFAC6D5D007F17FEA46D1503003F17FC
-A26D1507001F17F86D150F000F17F06D151F6C6CED3FE0A26C6CED7FC06C6CEDFF806C6D
-4913006E5BD97FF0EB0FFE6D6C495A6DB4EBFFF8010790B512E06D5D010092C7FC6E5B02
-0F13F00201138038437BC043>I<B612F015FEEDFFC08216F890C7EA3FFCED07FEED01FF
-6F1380167FEE3FC0EE1FE0A2160F17F01607A6160F17E0161FA2EE3FC0167FEEFF804B13
-00ED07FEED3FFC90B65A5E16C093C7FC15FC90CAFCB3A92C3F78BE3A>I<B612F015FF16
-C016F016FC90C7EA3FFEED03FF03001380EE3FC0EE1FE0160F17F0160717F81603A51607
-17F0160FA2EE1FE0EE3FC016FF03031380031F130090B65A16F85E16C04BC7FC5DEB0001
-811400816F7E153F82151F826F7EA26F7E1503826F7EA26F7EA2EE7F80163F17C0EE1FE0
-A2EE0FF0A2EE07F8EE03FCA2EE01FE2F3F78BE3B>82 D<ECFFF0010713FF011F14C0017F
-14F890B67E5A48EB803F3A07FC0007F848481301D81FE0EB0078491438003F15184991C7
-FCA248CAFCA67FA26C7E7F7F6C7EEA0FFEEBFFC06C13FC6CEBFFC06C14F86C14FE013F6D
-7E010F80010380D9003F7F02037F9138007FFC150F6F7E15018281821780163FA7EE7F00
-12601270007815FE007C1401007F4A5AD8FFC0130701F0EB1FF801FFEB7FF06C90B55A00
-1F5D000792C7FC00015CD8003F13F8010113C029437CC033>I<B912FEA6C890C8FCB3B3
-B3A2373E7DBD3E>I<B4ED01FCB3B3AB6C6CEC03F8A36C6CEC07F0A26C6CEC0FE0A26C6C
-EC1FC06D143F6C6CEC7F806C6CECFF003A01FF8003FE6C9038E01FFC6DB55A011F14E001
-075C010149C7FC9038003FF02E4178BE3F>I<B46CEE1FC0007FEF3F807F003FEF7F00A2
-7F001F17FE7F000F4C5AA27F00074C5AA26C6C4B5AA27F00014C5AA27F6C4C5A80017F4B
-5AA280013F4BC7FCA26D6C14FEA280010F4A5AA26D6C5C1603A26D6C495AA26D6C5C160F
-A26D6C5C161FA2DA7F805B163FDA3FC090C8FC5EA291381FE07E16FE020F5B15F015F102
-075B15F902035B15FB15FF6E5BA26E5BA36F5A3A3F7FBE3D>I<D87FC0ED0FF86C6CED1F
-F06D16E0001FEE3FC06C6C157F6C6CEDFF806C6C16004C5A6C6C14036C6D5C6D6C495A16
-0F6D6C495A6D6C5C6D6C495A167F6D6C5C6D6C49C7FC0101495A903800FF03ED83FC9138
-7FC7F8EC3FCF91381FEFF0EDFFE06E5B806E5B93C8FC6E5A814A7F5C824A7F91381FEFF0
-15CF91383FC7F891387F83FC9138FF03FE150149486C7E49486D7E0107814A6D7E494813
-1F49486D7E8349486D7E4948130301FF8191C76C7E48486E13800003167F484816C049ED
-3FE04848ED1FF0001F17F849150F4848ED07FC007FEE03FE484816FF90C97E383F7EBE3D
->88 D<EB0FF890B5FC00031480000F14E04814F0A29038F00FF890388003FC381E000100
-1814FE00101300C812FF157FA7EC7FFF010FB5FC137F48B6FC120748EBF07F383FFC0013
-C048C7FC12FE5AA315FF7E5C387F8007EBE01F6CB6FCA26C147F6C13FC6C13F0000190C7
-FC202B7CA92C>97 D<12FEB3A414FF010713E0011F7F017F7FB67E819038F80FFFEBE001
-D98000138090C7EA7FC0153F48141F16E0150FA3ED07F0AAED0FE0A3151FED3FC07E6DEB
-7F8015FFD9E00313009038F81FFE90B55A485C6D5B6D5B010F1380260001FEC7FC244079
-BE2F>I<49B47E010F13F0013F13FC4913FF90B612805A481300D807FCEB1F00D80FF013
-0748487F4990C7FC123F5B127F90C9FCA312FEAA127FA36C7EA26C6C14406DEB01C06C6C
-13036C6C131F01FF13FF6C90B5FC7E6C6C14806DEBFE00010F13F001011380222B7DA928
->I<ED07F0B3A4EB07F8EB3FFF4913C748B512F74814FF5A1480390FFC003FD81FF0131F
-49130F48481307A2485A90C7FCA312FEAA127FA37F003F140F7F6C6C131F6D133F6C6C13
-7F9038FF01FF6C90B5FC6C14F76C14E76C148790383FFE07D90FF0C7FC24407DBE2F>I<
-EB03F8EB1FFF017F13C090B57E488048803807FE07390FF801FC9038E000FE4848137E00
-3F143E49133F90C77E5A127EED0F80B7FCA600FCC9FCA37E127EA2127FA26C7EA26C7E6D
-14806C6C1303D807FC131F01FF13FF6C90B5FC7E6C6C14006D13FC010F13E0010190C7FC
-212B7DA928>I<EC1FF0ECFFFC5B13075BA290381FE03C90383F800491C7FC5B137E13FE
-ADB6FCA6C648C7FCB3B01E407FBF1C>I<D903FC133F90390FFF03FF013F13DF4990B512
-8090B7FC5A9026FE07FCC7FC3803F80148486C7E49137EA248487FA86C6C137EA26D13FE
-6C6C485A3901FE07F848B5FC5D485C5D01CF90C8FC380FC3FC0180C9FC7FA212077F90B5
-12F06C14FF16C048814815F85A3A3FE0001FFCD87F80EB03FE90C712016F7E00FE81A56C
-5D6C6C495A6D1303D83FF0EB0FFCD81FFEEB7FF86CB65A6C5D6C5DC692C7FC011F13F801
-0313C0293D7EA82D>I<12FEB3A449B4FC010713C0011F13F0017F13F890B512FCB6FC90
-38F80FFEEBE003EBC00190388000FFA290C7127FA35AB3A9203F79BE2F>I<12FFA81200
-AF127FB3B3A4083F7ABE16>I<12FEB3A5EDFF804A13004A5A4A5A4A5A4A5A4A5A4A5A4A
-5A4990C7FC495A495A495A5C495A495A497E13FFB57E8013FBEBF1FCEBE0FE497E497E49
-6C7E488048131F6E7E8114076E7E8114016E7E157F1680153FED1FC016E0233F79BE2C>
-107 D<12FEB3B3B3A9073F79BE16>I<26FC01FFECFF800107D9C00313E0011FD9F00F13
-F8017FD9F83F7F90B56C487F00FD92B5FC3CFFF80FFFFC07FFD9E003EBF001496C497E49
-6C49EB7F80A290C76C48133FA34892C7FCB3A9392979A848>I<38FC01FF010713C0011F
-13F0017F13F890B512FC12FD39FFF80FFEEBE003EBC00190388000FFA290C7127FA35AB3
-A9202979A82F>I<EB01FE90380FFFC0013F13F0497F90B57E000314FF14033A07F8007F
-804848EB3FC04848EB1FE049130F4848EB07F0A290C712034815F8A2007E140100FE15FC
-A96C14036C15F8A36C6CEB07F06D130FA26C6CEB1FE06C6CEB3FC001FC13FF2607FF0313
-806C90B512006C5C6C5C013F13F0010F13C0D901FEC7FC262B7DA92D>I<14FFD8FE0713
-E0011F7F017F7FB67E819038F80FFFEBE003D98000138090C7EA7FC0153F5AED1FE0A215
-0FA216F01507A8150F16E0A2151FA2ED3FC06C147F6DEBFF805CD9E00313009038F81FFE
-90B55A485C6D5B6D5B010F1380D901FEC7FC90C9FCB1243B79A82F>I<00FC137CEB03FC
-130F131F133F137FEBFFC038FDFE00EAFFF85B5B5BA25BA290C7FCA25AB3A6162979A81F
->114 D<EB1FF890B51280000314E04814F85A5A393FE00FF0EB8000007F143090C8FCA5
-7F6C7E13F06CB4FC14F06C13FE6C7F000114C06C14E0011F13F013019038001FF81407EC
-03FCA21401A3124012700078EB03F8007E130738FFE01F90B512F015E06C14C0001F1480
-0003EBFE0038003FF01E2B7EA923>I<13FCACB612C0A6D800FCC7FCB3A86D132015E0EB
-7F03ECFFF0A27F15C06D1300EB07F01C357EB321>I<00FE147FB3AC15FFA25C6C5B6C13
-0FEBC03F90B6FC6CEBFE7F6C13FC6C13E0000390C7FC202979A72F>I<B415FE6CEC01FC
-A26C6CEB03F8A27F001FEC07F0A27F000FEC0FE0A26C6CEB1FC0A27F0003EC3F80A26C6C
-14005DA26C6C137E15FEA2017F5B1401013F5B14811483011F5B14C314C7010F5BA29038
-07E7C014EFA26DB45AA36D90C7FCA227287FA72A>I<00FEDA7F80EB0FE0007F6F14C018
-1F15FF6C6C6E148003FB143F140101C013F3001F6FEB7F00140315F1D80FE06E137E03E1
-14FE1407D807F0D9E0FC5B170115C0140FD803F8027E5B1703EC1F8000015F01FC143F17
-070000D93F005C161F01FE1587023E148F017E5E027E130F17CFD93E7C5D013FEC07DFA2
-1478D91FF86DB4C7FCA25C010F5D16013B287FA73E>I<D87F80EB01FE003F5D6C6C495A
-6C6C13076D495A6C6C495A6C6C5C00014A5A6C6C49C7FC017F5B90383F81FEECC1FC9038
-1FE3F890380FE7F06DB45A7F6D5B6D5B92C8FC147E14FF497F81497F903807E7F090380F
-E3F8EB1FC190383F80FC4A7E49137F01FE6D7E48486D7E4848800007140F496D7E48486D
-7E48486D7E003F8148486D7E48C8EA7F80292880A72A>I<B415FE6CEC01FC7F003FEC03
-F87F121FED07F07F000FEC0FE07F1207ED1FC06C7E16806C6C133FA2ED7F006C7E157E01
-7F13FEA26D5B14815D131F14C190380FC3F0A2903807E3E014E7A201035BA2903801F780
-A2EB00FF92C7FCA2147EA3147CA214FC5C13015CA213035C13075CEA200F383C1F80D83F
-FFC8FCA25B5BEA07F0273B7FA72A>I<007FB61280A51600C7EA01FE4A5A14074A5A5D4A
-5A4A5A147F5D4AC7FC495A1303495A5C495A131F495A5C495A49C8FC5A5B485A485A120F
-485A5B485A48B61280B7FCA521287DA728>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fu cmtt10 10.95 89
-/Fu 89 127 df<121C127FEAFF80B3EA7F00B2123EC7FCA8121C127FA2EAFF80A3EA7F00
-A2121C09396DB830>33 D<00101304007C131F00FEEB3F80A26C137FA248133FB2007E14
-00007C7F003C131E00101304191C75B830>I<903907C007C0A2496C487EA8011F131FA2
-02C05BA3007FB7FCA2B81280A36C16006C5D3A007F807F80A2020090C7FCA9495BA2003F
-90B512FE4881B81280A36C1600A22701FC01FCC7FCA300031303A201F85BA76C486C5AA2
-29387DB730>I<1438147C14FCA4EB03FF011F13E090B512FC4880000780481580261FFE
-FD13C09039F0FC3FE0D83FC0131FD87F80EB0FF001001307007E15F800FE14035A1507A3
-6CEC03F0A2007F91C7FC138013C0EA3FF0EA1FFE13FF6C13FF6C14E0000114F86C6C7F01
-1F7F01037F0100148002FD13C09138FC7FE0151FED0FF015070018EC03F8127E1501B4FC
-A35AA26CEC03F07E01801307ED0FE0D83FC0131F01F0EB7FC0D81FFEB512806CB612006C
-5C6C5CC614F0013F13C0D907FEC7FCEB00FCA5147C143825477BBE30>I<D803C0EB01E0
-D80FF01303486C497E487E150F487ED87E7E495AEAFE7F5E486C133FA25E157FA24BC7FC
-6C5A5D387E7E01EA7FFED83FFC5B1403EA1FF86C48485AEA03C0C75B140FA25D141FA24A
-5AA25D147FA292C8FC5CA2495AA25C1303A25C1307A290390FF001E0ED07F84A487E011F
-497EA24A487E133F163F90267F807F1380ED7E1F14005BA25B1201A24848EB7F3F033F13
-004914FF12076F5A5B6F5A6C486D5A0001EC01E029477DBE30>I<EB07E0EB1FF8497E13
-7F497E803801FC7F497E810003131F13F0A6143F92C8FC91387F0FFF9026F87E1F138000
-0113FEEBF9FC13FB4A6C1300D9FFF013C06C13E0151F02C05BEB7F809038FF003F4892C7
-FC485C48EB807E5A15FE391FDFC0FC383F8FE014E1397F07F1F8EB03F300FEEBFBF0EB01
-FF5D7FEDC006027F130F91393F801F8015C06C137F6CEBFFE049EBF83F018701FC130026
-3FFFFBB5FC6C01F15B14E06C9038C03FFC00039038001FF8D801FCEB07E0293A7DB830>
-I<EA07C0EA0FF0EA1FF8A213FCA213FE120F1207EA007EA513FE13FCA2120113F81203EA
-07F0120FEA1FE0127FEAFFC013801300127C12380F1D70B730>I<141E147F14FF5BEB03
-FEEB07FCEB0FF0EB1FE0EB3FC0EB7F80EBFF00485A5B12035B485A120F5BA2485AA2123F
-5BA2127F90C7FCA412FEAD127FA47F123FA27F121FA26C7EA27F12076C7E7F12017F6C7E
-EB7F80EB3FC0EB1FE0EB0FF0EB07FCEB03FEEB01FF7F147F141E184771BE30>I<127812
-FE7E7F6C7E6C7EEA0FF06C7E6C7E6C7E6C7EEB7F80133F14C0131FEB0FE014F01307A2EB
-03F8A214FC1301A214FE1300A4147FAD14FEA4130114FCA2130314F8A2EB07F0A2130F14
-E0EB1FC0133F1480137FEBFF00485A485A485A485AEA3FE0485A485A90C7FC5A12781847
-78BE30>I<14E0497E497EA60038EC0380007EEC0FC0D8FF83EB3FE001C3137F9038F3F9
-FF267FFBFB13C06CB61280000FECFE00000314F86C5C6C6C13C0011F90C7FC017F13C048
-B512F04880000F14FE003FECFF80267FFBFB13C026FFF3F913E09038C3F87F0183133FD8
-7E03EB0FC00038EC0380000091C7FCA66D5A6D5A23277AAE30>I<143EA2147FAF007FB7
-FCA2B81280A36C1600A2C76CC8FCAF143EA229297DAF30>I<EA03E0EA0FF0EA1FF813FC
-EA3FFEA213FFA27EA27E1203EA007FA2137E13FEEA01FC1203EA07F8EA3FF0127FEAFFE0
-EA7F801300123C1019708B30>I<007FB612F0A2B712F8A36C15F0A225077B9E30>I<120F
-EA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C0C6E8B30>I<16F01501ED03F8A2
-1507A2ED0FF0A2ED1FE0A2ED3FC0A2ED7F80A2EDFF00A24A5AA25D1403A24A5AA24A5AA2
-4A5AA24A5AA24A5AA24AC7FCA2495AA25C1303A2495AA2495AA2495AA2495AA2495AA249
-C8FCA2485AA25B1203A2485AA2485AA2485AA2485AA2485AA248C9FCA25AA2127CA22547
-7BBE30>I<14FE903807FFC0497F013F13F8497F90B57E48EB83FF4848C6138049137F48
-48EB3FC04848EB1FE049130F001F15F0491307A24848EB03F8A290C712014815FCA400FE
-EC00FEAD6C14016C15FCA36D1303003F15F8A26D1307001F15F0A26D130F6C6CEB1FE0A2
-6C6CEB3FC06C6CEB7F806D13FF2601FF8313006CEBFFFE6D5B6D5B010F13E06D5BD900FE
-C7FC273A7CB830>I<EB03C0497EA2130FA2131FA2133F137F13FF1203123FB5FCA213EF
-138FEA7E0F1200B3B0003FB512F84814FCB612FEA26C14FC6C14F81F3977B830>I<EB07
-FC90383FFFC090B512F00003804814FE4880261FF80F1380263FE00113C09038C0007F48
-48EB3FE090C7121FED0FF04814075A6C15F81503A3127E1218C8FCA2150716F0150F16E0
-151F16C0153FED7F8015FF4A13005DEC07FC4A5A4A5A4A5A4A5A4A5A4990C7FC495A495A
-EB0FF0EB3FE0495A495A4890C8FC4848EB01F04848EB03F8485AEA1FE048B6FCB7FCA37E
-6C15F025397BB830>I<EB03FF013F13E090B512F84814FE4880481580260FFE0113C090
-38F0007F4848EB1FE0150F16F01507A26C5A6C5AC8FC150F16E0A2151FED3FC0157FEDFF
-8002071300903807FFFE495B5D8115FF6D1480D9000113C09138003FE0ED1FF0ED07F815
-0316FC150116FE1500A21218127EB4FCA2150116FC4814036C15F86C6C13076DEB1FF0D8
-3FF0133F3A1FFE01FFE06CB612C06C15806CECFE00C65C013F13F001031380273A7CB830
->I<EC03FC4A7E140F141FA2143F147F157E14FEA2EB01FCEB03F8A2EB07F0A2EB0FE0EB
-1FC0A2EB3F80A2EB7F0013FEA2485A485AA2485AA2485A485AA2485AA248C7FC12FEB8FC
-1780A46C1600C8007EC7FCAA91387FFFFE91B6FCA46E5B29397DB830>I<000FB6128048
-15C05AA316800180C8FCAEEB83FF019F13C090B512F015FC8181D9FE0313809039F0007F
-C049133F0180EB1FE06CC7120F000E15F0C81207A216F81503A31218127EA2B4FC150716
-F048140F6C15E06C141F6DEB3FC06D137F3A3FE001FF80261FFC0F13006CB55A6C5C6C5C
-6C14E06C6C1380D90FFCC7FC25397BB730>I<EC0FF8EC7FFF49B51280010714E0131F49
-14F090387FF80F9039FFC007F84813803803FE005B485A4848EB03F0ED01E0484890C7FC
-5B123F5BA2127FEB000C903803FFE0010F13F8D8FF3F13FE48B6FCB7128016C09039FE00
-7FE001F8EB1FF001E0130F49EB07F849EB03FCA290C7120116FE1500A37EA46C7E15016D
-14FC121F6D1303000FEC07F86D130F6C6CEB1FF06DEB3FE03A03FF81FFC06C90B512806C
-15006D5B011F13F8010713E001011380273A7CB830>I<127CB712FC16FEA416FC48C7EA
-0FF816F0ED1FE0007CEC3FC0C8EA7F80EDFF00A24A5A4A5A5D14075D140F5D4A5AA24A5A
-A24AC7FCA25C5C13015CA213035CA213075CA4495AA6131F5CA96D5A6DC8FC273A7CB830
->I<49B4FC011F13F0017F13FC90B57E0003ECFF804815C048010113E03A1FF8003FF049
-131FD83FC0EB07F8A24848EB03FC90C71201A56D1303003F15F86D13076C6CEB0FF06C6C
-EB1FE0D807FCEB7FC03A03FF83FF806C90B512006C6C13FC011F13F0497F90B512FE4880
-2607FE0013C0D80FF8EB3FE0D81FE0EB0FF04848EB07F8491303007F15FC90C712014815
-FE481400A66C14016C15FC6D1303003F15F86D1307D81FF0EB1FF06D133F3A0FFF01FFE0
-6C90B512C06C1580C6ECFE006D5B011F13F0010190C7FC273A7CB830>I<49B4FC010F13
-E0013F13F890B57E4880488048010113803A0FFC007FC0D81FF0EB3FE04848131F49EB0F
-F048481307A290C7EA03F85A4815FC1501A416FEA37E7E6D1303A26C6C13076C6C130F6D
-133FD80FFC13FF6CB6FC7E6C14FE6C14F9013FEBE1FC010F138190380060011400ED03F8
-A2150716F0150F000F15E0486C131F486CEB3FC0157FEDFF804A1300EC07FE391FF01FFC
-90B55A6C5C6C5C6C1480C649C7FCEB3FF0273A7CB830>I<120FEA3FC0EA7FE0A2EAFFF0
-A4EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F
-000C276EA630>I<EA03C0EA0FF0EA1FF8A2EA3FFCA4EA1FF8A2EA0FF0EA03C0C7FCAFEA
-03C0EA0FF0121F13F8123F13FCA3121FA2120F12031200120113F8120313F01207EA1FE0
-123FEA7FC0EAFF80EA7F00127E12380E3470A630>I<16F01503ED07F8151F157FEDFFF0
-14034A13C0021F138091383FFE00ECFFF8495B010713C0495BD93FFEC7FC495A3801FFF0
-485B000F13804890C8FCEA7FFC5BEAFFE05B7FEA7FF87FEA1FFF6C7F000313E06C7F3800
-7FFC6D7E90380FFF806D7F010113F06D7FEC3FFE91381FFF80020713C06E13F01400ED7F
-F8151F1507ED03F01500252F7BB230>I<007FB7FCA2B81280A36C16006C5DCBFCA7003F
-B612FE4881B81280A36C1600A229157DA530>I<1278127EB4FC13C07FEA7FF813FEEA1F
-FF6C13C000037F6C13F86C6C7EEB1FFF6D7F010313E06D7F9038007FFC6E7E91380FFF80
-6E13C0020113F080ED3FF8151F153FEDFFF05C020713C04A138091383FFE004A5A903801
-FFF0495B010F13804990C7FCEB7FFC48485A4813E0000F5B4890C8FCEA7FFE13F8EAFFE0
-5B90C9FC127E1278252F7BB230>I<EC1FE0ECFFF8010313FE010F7F4914804914C09039
-7FF03FE09038FF800F4890380007F0D803FC13033A07F801FBF89038F007FF380FE01F4A
-13FCEA1FC0495A003FEBFF0F903800FE07903901FC03FE007FEBF801EA7E03ECF000A2EA
-FE0700FC49137EAA00FE6D13FED87E0314FCA2ECF801D87F0114F8003FEBFC03903900FE
-07F0903880FF0F001F90387FFFE06D6C13C0EA0FE06E13803A07F007FE009038F801F86C
-6CC7127C6CB414FE6CEB800390387FF01F6DB512FC6D14F86D14E0010314C00100EBFE00
-EC1FF0273A7CB830>64 D<147F4A7EA2497FA4497F14F7A401077F14E3A3010F7FA314C1
-A2011F7FA490383F80FEA590387F007FA4498049133F90B6FCA34881A39038FC001F0003
-8149130FA4000781491307A2D87FFFEB7FFFB56CB51280A46C496C130029397DB830>I<
-007FB512F0B612FE6F7E82826C813A03F8001FF815076F7E1501A26F7EA615015EA24B5A
-1507ED1FF0ED7FE090B65A5E4BC7FC6F7E16E0829039F8000FF8ED03FC6F7E1500167FA3
-EE3F80A6167F1700A25E4B5A1503ED1FFC007FB6FCB75A5E16C05E6C02FCC7FC29387EB7
-30>I<91387F803C903903FFF03E49EBFC7E011F13FE49EBFFFE5B9038FFE07F48EB801F
-3903FE000F484813075B48481303A2484813015B123F491300A2127F90C8FC167C16005A
-5AAC7E7EA2167C6D14FE123FA27F121F6D13016C6C14FCA26C6CEB03F86D13076C6CEB0F
-F03901FF801F6C9038E07FE06DB512C06D14806D1400010713FC6D13F09038007FC0273A
-7CB830>I<003FB512E04814FCB67E6F7E6C816C813A03F8007FF0ED1FF8150F6F7E6F7E
-15016F7EA2EE7F80A2163F17C0161FA4EE0FE0AC161F17C0A3163F1780A2167F17005E4B
-5A15034B5A150F4B5AED7FF0003FB65A485DB75A93C7FC6C14FC6C14E02B387FB730>I<
-007FB7FCB81280A47ED803F8C7123FA8EE1F0093C7FCA4157C15FEA490B5FCA6EBF800A4
-157C92C8FCA5EE07C0EE0FE0A9007FB7FCB8FCA46C16C02B387EB730>I<003FB7128048
-16C0B8FCA27E7ED801FCC7121FA8EE0F8093C7FCA5153E157FA490B6FCA69038FC007FA4
-153E92C8FCAE383FFFF8487FB5FCA27E6C5B2A387EB730>I<02FF13F00103EBC0F8010F
-13F1013F13FD4913FF90B6FC4813C1EC007F4848133F4848131F49130F485A491307121F
-5B123F491303A2127F90C7FC6F5A92C8FC5A5AA892B5FC4A14805CA26C7F6C6D1400ED03
-F8A27F003F1407A27F121F6D130F120F7F6C6C131FA2D803FE133F6C6C137FECC1FF6C90
-B5FC7F6D13FB010F13F30103EBC1F0010090C8FC293A7DB830>I<3B3FFF800FFFE0486D
-4813F0B56C4813F8A26C496C13F06C496C13E0D803F8C7EAFE00B290B6FCA601F8C7FCB3
-A23B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E02D387FB730>I<
-007FB6FCB71280A46C1500260007F0C7FCB3B3A8007FB6FCB71280A46C1500213879B730
->I<D83FFF90380FFF80486D4813C0B56C5AA26C497E6C496C1380D803F0903803F8004B
-5A4B5A151F4B5A5E4BC7FC15FE14014A5A5D4A5A4A5A141F5D4A5A4AC8FC5C13F18101F3
-7F13F790B57E14EFECC7F01483EC03F8140101FE7F496C7E5B157F497F82151F82150F82
-6F7EA26F7E1501821500D83FFF903803FFC0486D4813E0B56C5AA26C497E6C496C13C02B
-387FB730>75 D<383FFFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE0F80EE1FC0A9003F
-B7FC5AB8FCA27E6C16802A387EB730>I<D83FF8ECFFE0486C4913F0486C4913F8A2007F
-16F06C6C4913E00007160001EF14BFEC800FA39039E7C01F3FA4ECE03F01E3133EA2ECF0
-7EA201E1137CA2ECF8FCA201E013F8A214FDEC7DF0A3147FEC3FE0A3EC1FC0A2EC070091
-C7FCADD83FFC903801FFE0486C4913F0B54913F8A26C486D13F06C486D13E02D387FB730
->I<D83FFC90381FFF80486C4913C0B54913E0A26C6D6C13C06C6E13800003913801F800
-EBF7C0A3EBF3E0A314F013F1A214F8A213F014FCA2147C147EA2143E143FA2141FA21581
-A2140F15C1A2140715E1A2140315F1A21401A215F91400A3157DA3153FEA3FFF481380B5
-EAC01FA26CEB800F6C496C5A2B387EB730>I<90383FFFE048B512FC000714FF48158048
-15C04815E0EBF80001E0133FD87F80EB0FF0A290C71207A44815F8481403B3A96C1407A2
-6C15F0A36D130FA26D131F6C6CEB3FE001F813FF90B6FC6C15C06C15806C1500000114FC
-D8003F13E0253A7BB830>I<007FB512F0B612FE6F7E16E0826C813903F8003FED0FFCED
-03FE15016F7EA2821780163FA6167F17005EA24B5A1503ED0FFCED3FF890B6FC5E5E1680
-4BC7FC15F001F8C9FCB0387FFFC0B57EA46C5B29387EB730>I<90383FFFE048B512FC00
-0714FF4815804815C04815E0EBF80001E0133F4848EB1FF049130F90C71207A44815F848
-1403B3A8147E14FE6CEBFF076C15F0EC7F87A2EC3FC7018013CF9038C01FFFD83FE014E0
-EBF80F90B6FC6C15C06C15806C1500000114FCD8003F7FEB00016E7EA21680157F16C015
-3F16E0151F16F0150FED07E025467BB830>I<003FB57E4814F0B612FC15FF6C816C8126
-03F8017F9138003FF0151F6F7E15071503821501A515035E1507150F4B5A153F4AB45A90
-B65A5E93C7FC5D8182D9F8007FED3FE0151F150F821507A817F8EEF1FCA53A3FFF8003FB
-4801C0EBFFF8B56C7E17F06C496C13E06C49EB7FC0C9EA1F002E397FB730>I<90390FF8
-03C0D97FFF13E048B512C74814F74814FF5A381FF80F383FE001497E4848137F90C7123F
-5A48141FA2150FA37EED07C06C91C7FC7F7FEA3FF0EA1FFEEBFFF06C13FF6C14E0000114
-F86C80011F13FF01031480D9003F13C014019138007FE0151FED0FF0A2ED07F8A2007C14
-0312FEA56C140716F07F6DEB0FE06D131F01F8EB3FC001FF13FF91B51280160000FD5CD8
-FC7F13F8D8F81F5BD878011380253A7BB830>I<003FB712C04816E0B8FCA43AFE003F80
-0FA8007CED07C0C791C7FCB3B1011FB5FC4980A46D91C7FC2B387EB730>I<3B7FFFC007
-FFFCB56C4813FEA46C496C13FCD803F8C7EA3F80B3B16D147F00011600A36C6C14FE6D13
-016D5CEC800390393FE00FF890391FF83FF06DB55A6D5C6D5C6D91C7FC9038007FFCEC1F
-F02F3980B730>I<D87FFE90380FFFC0B54913E06E5AA24A7E6C486D13C0D807F0903801
-FC00A26D130300035DA46C6C495AA46C6C495AA46D131F6D5CA3EC803F013F5CA46D6C48
-C7FCA490380FE0FEA401075B14F1A301035BA314FB01015BA314FFA26D5BA46E5A6E5A2B
-397EB730>I<D83FFC903801FFE0486C4913F000FF16F8A2007F16F06C486D13E0D81FC0
-9038001FC0000F1680A76D143F00071600A7000390380F803E9039F01FC07EEC3FE0A3EC
-7FF0A2147D0001157CA29039F8FDF8FCA314F8A300005D01F913FCA2ECF07CA201FD137D
-A2017D5CECE03DA3017F133FA2ECC01FA2013F5CA2EC800F6D486C5A2D397FB730>I<3A
-3FFF01FFF84801837F02C77FA202835B6C01015B3A01FC007F806D91C7FC00005C6D5BEB
-7F01EC81FCEB3F8314C3011F5B14E7010F5B14FF6D5BA26D5BA26D5BA26D90C8FCA4497F
-A2497FA2815B81EB0FE781EB1FC381EB3F8181EB7F0081497F49800001143F4980000314
-1F49800007140FD87FFEEB7FFFB590B5128080A25C6C486D130029387DB730>I<D87FFF
-90381FFFC0B56C4813E0A46C496C13C0D803F8903803F8006D1307A26C6C495AA26C6C5C
-151F6D5CEC803F013F5CECC07F011F91C7FCA290380FE0FEA214F101075BA2903803FBF8
-A201015B14FF6D5BA26E5AA36E5AB1903803FFF8497F497FA26D5B6D5B2B387EB730>I<
-001FB612FC4815FE5AA490C7EA03FCED07F816F0150FED1FE016C0153FED7F80003E1500
-C85A4A5A5D14034A5A5D140F4A5A5D143F4A5A92C7FC5C495A5C1303495A5C130F495A5C
-133F495A91C8FC5B4848147C4914FE1203485A5B120F485A5B123F485A90B6FCB7FCA46C
-15FC27387CB730>I<007FB5FCB61280A4150048C8FCB3B3B3A5B6FC1580A46C14001947
-6DBE30>I<127CA212FEA27EA26C7EA26C7EA26C7EA26C7EA26C7EA26C7EA212017FA26C
-7EA26D7EA26D7EA26D7EA26D7EA26D7EA26D7EA2130180A26D7EA26E7EA26E7EA26E7EA2
-6E7EA26E7EA26E7EA2140181A26E7EA2ED7F80A2ED3FC0A2ED1FE0A2ED0FF0A2ED07F8A2
-1503A2ED01F0150025477BBE30>I<007FB5FCB61280A47EC7123FB3B3B3A5007FB5FCB6
-FCA46C140019477DBE30>I<007FB612F0A2B712F8A36C15F0A225077B7D30>95
-D<EB7FF80003B5FC4814C04880488048809038E01FFC9038C003FE14016E7E6C487F6CC7
-7FC8123FA491B5FC130F137F48B6FC12075A48EB803F383FF800EA7FE0138048C7FC5AA4
-157F7E6C6C13FFEBC003263FF01FEBFF8090B712C07E6C14EF000314876CD9FE01138026
-003FE0C8FC2A2A7BA830>97 D<EA3FFC487E12FFA2127F123F1200AAEC03FE91381FFF80
-027F13E091B57E90B612FC82ECFE079138F001FF4A6C13804A137F4AEB3FC091C7121F17
-E049140FA217F01607A8160FA217E07F161F6EEB3FC0A26EEB7F806E13FFDAF003130091
-38FC0FFE91B55A5E495CD97E7F13C0D93C1F90C7FC90380003FC2C3980B730>I<ECFFE0
-010713FC011F7F017F7F90B612804815C048EB807F3907FC003F485A485A49EB1F804848
-EB0F004990C7FC127F90C9FCA25A5AA87E7EA27F003FEC07C06DEB0FE06C7E6D131F6C6C
-14C0D807FE133F9039FFC0FF806C90B5FCC615006D5B011F13F801075B01011380232A7A
-A830>I<913801FFE04A7F5CA28080EC0007AAEB03FE90381FFF874913E790B6FC5A5A48
-1303380FFC00D81FF0133F49131F485A150F4848130790C7FCA25AA25AA87E6C140FA27F
-003F141F6D133F6C7E6D137F390FF801FF2607FE07EBFFC06CB712E06C16F06C14F76D01
-C713E0011F010313C0D907FCC8FC2C397DB730>I<49B4FC010713E0011F13F8017F7F90
-B57E488048018113803A07FC007FC04848133FD81FE0EB1FE0150F484814F0491307127F
-90C7FCED03F85A5AB7FCA516F048C9FC7E7EA27F003FEC01F06DEB03F86C7E6C7E6D1307
-D807FEEB1FF03A03FFC07FE06C90B5FC6C15C0013F14806DEBFE00010713F8010013C025
-2A7CA830>I<EDFF80020713E0021F13F05C4A13F891B5FC491387903803FE079138FC03
-F0903907F800C04A1300A8003FB612C04815E0B7FCA36C15C0260007F0C7FCB3A9003FB5
-12FE4880B71280A26C15006C5C25397DB830>I<D903FC13FF90261FFF8713C04913DF90
-B712E05A5A2607FE07138F903AF801FE07C048486C6CC7FCA2497F001F8149133FA56D13
-7F000F92C7FC6D5BA26C6C485AEBFE0790B55A5D485C15C001DF5BD9C3FCC8FC01C0C9FC
-A37F7F6CB512F015FF6C15C04815F0488148813A3FE0001FFE0180130148C8127F007E81
-00FE168048151FA56C153F007FED7F006D5C6C6C495A01F013076CB4EB7FFC6C90B55A6C
-5D000115C06C6C91C7FC011F13FC010113C02B3E7DA730>I<EA3FFC487E12FFA2127F12
-3F1200AAEC01FE91380FFF80023F13E091B57E90B67EA29138FE07FCECF8039138E001FE
-14C0EC8000A291C7FCA25BB3A23B3FFFF81FFFF8486D4813FCB500FE14FEA26C01FC14FC
-6C496C13F82F3880B730>I<14E0EB03F8A2497EA36D5AA2EB00E091C8FCA9381FFFF848
-7F5AA27E7EEA0001B3A9003FB612C04815E0B7FCA27E6C15C023397AB830>I<EC01C0EC
-07F0A2EC0FF8A3EC07F0A2EC01C091C7FCA990B512F04814F8A47EEB0003B3B3A5EC07F0
-A2123C007EEB0FE0B4131FEC3FC0147F90B512806C14005C6C5B000F13F0000313C01D4E
-7CB830>I<EA7FF8487EA4127F1200AB0203B512804A14C017E0A217C06E14809139001F
-E0004B5A4B5A4BC7FC4A5A4A5AEC0FF84A5A4A5A4A5A4A5A01FD7F90B57E8114F7ECE3F8
-ECC1FCEC81FEEC00FF497F496D7E6F7E826F7E15076F7E6F7E3B7FFFF81FFFE0B56C4813
-F017F8A217F06C496C13E02D387FB730>I<387FFFF8B57EA47EEA0001B3B3A8007FB612
-F0B712F8A46C15F025387BB730>I<02FC137E3B7FC3FF01FF80D8FFEF01877F90B500CF
-7F15DF92B57E6C010F13872607FE07EB03F801FC13FE9039F803FC01A201F013F8A301E0
-13F0B3A23C7FFE0FFF07FF80B548018F13C0A46C486C01071380322881A730>I<EC01FE
-3A3FFC0FFF80267FFE3F13E000FF90B57E90B67E7E6C9038FE07FCC6EBF8039138E001FE
-14C0EC8000A291C7FCA25BB3A23B3FFFF81FFFF8486D4813FCB500FE14FEA26C01FC14FC
-6C496C13F82F2880A730>I<49B4FC010F13E0013F13F8497F90B57E0003ECFF8014013A
-07FC007FC04848EB3FE0D81FE0EB0FF0A24848EB07F8491303007F15FC90C71201A300FE
-EC00FEA86C14016C15FCA26D1303003F15F86D13076D130F6C6CEB1FF06C6CEB3FE06D13
-7F3A07FF01FFC06C90B512806C15006C6C13FC6D5B010F13E0010190C7FC272A7CA830>
-I<EC03FE3A3FFC1FFF80267FFE7F13E000FF90B57E90B612FC6C816CEBFE07C69038F001
-FF4A6C13804A137F4AEB3FC091C7121F17E049140FA217F01607A8160FA217E07F161F6E
-EB3FC0A26EEB7F806E13FFDAF00313009138FC0FFE91B55A5E495C6E13C0021F90C7FCEC
-03FC91C9FCAD383FFFF8487FB57EA26C5B6C5B2C3C80A730>I<49B413F8010FEBC1FC01
-3F13F14913FD48B6FC5A481381390FFC007F49131F4848130F491307485A491303127F90
-C7FC15015A5AA77E7E15037FA26C6C1307150F6C6C131F6C6C133F01FC137F3907FF01FF
-6C90B5FC6C14FD6C14F9013F13F1010F13C1903803FE0190C7FCAD92B512F84A14FCA46E
-14F82E3C7DA730>I<ED07F83A3FFF803FFF486DB51280B512C302CF14C06C13DF6C9038
-FFFC3FD8001F13E09238801F809238000F004A90C7FC5C5C5CA25CA45CAF003FB512FC48
-80B7FCA26C5C6C5C2A287EA730>I<90381FFC1E48B5129F000714FF5A5A5A387FF007EB
-800100FEC7FC4880A46C143E007F91C7FC13E06CB4FC6C13FC6CEBFF806C14E0000114F8
-6C6C7F01037F9038000FFF02001380007C147F00FEEC1FC0A2150F7EA27F151F6DEB3F80
-6D137F9039FC03FF0090B6FC5D5D00FC14F0D8F83F13C026780FFEC7FC222A79A830>I<
-EB0780497E131FA9003FB612E04815F0B7FCA36C15E026001FC0C7FCB216F8ED01FCA5EC
-E003010FEB07F814F09138FC1FF06DB512E06D14C016806D14009038007FFCEC1FF02633
-7EB130>I<D83FFCEB3FFC486C497E00FF14FFA2007F147F003F143F00001400B3A41501
-A2150315076D130F903A7FC07FFFF891B612FC6D15FE7F6D4913FC6D9038F87FF8010001
-C0C7FC2F2880A630>I<3B3FFFC07FFF80486DB512C0B515E0A26C16C06C496C13803B01
-F80003F000A26D130700005DA26D130F017E5CA2017F131F6D5CA2EC803F011F91C7FCA2
-6E5A010F137EA2ECE0FE01075BA214F101035BA3903801FBF0A314FF6D5BA36E5A6E5A2B
-277EA630>I<3B3FFFC01FFFE0486D4813F0B515F8A26C16F06C496C13E0D807E0C7EA3F
-00A26D5C0003157EA56D14FE00015DEC0F80EC1FC0EC3FE0A33A00FC7FF1F8A2147DA2EC
-FDF9017C5C14F8A3017E13FBA290393FF07FE0A3ECE03FA2011F5C90390F800F802D277F
-A630>I<3A3FFF81FFFC4801C37FB580A26C5D6C01815BC648C66CC7FC137FEC80FE9038
-3F81FC90381FC3F8EB0FE3ECE7F06DB45A6D5B7F6D5B92C8FC147E147F5C497F81903803
-F7E0EB07E790380FE3F0ECC1F890381F81FC90383F80FE90387F007E017E137F01FE6D7E
-48486D7E267FFF80B5FCB500C1148014E3A214C16C0180140029277DA630>I<3B3FFFC0
-7FFF80486DB512C0B515E0A26C16C06C496C13803B01FC0003F000A2000014076D5C137E
-150F017F5C7F151FD91F805BA214C0010F49C7FCA214E00107137EA2EB03F0157C15FCEB
-01F85DA2EB00F9ECFDF0147D147FA26E5AA36E5AA35DA2143F92C8FCA25C147EA2000F13
-FE486C5AEA3FC1EBC3F81387EB8FF0EBFFE06C5B5C6C90C9FC6C5AEA01F02B3C7EA630>
-I<001FB612FC4815FE5AA316FC90C7EA0FF8ED1FF0ED3FE0ED7FC0EDFF80003E491300C7
-485A4A5A4A5A4A5A4A5A4A5A4A5A4990C7FC495A495A495A495A495A495A4948133E4890
-C7127F485A485A485A485A485A48B7FCB8FCA46C15FE28277DA630>I<ED3FF0913803FF
-F8140F5C147F16F09138FFF00092C7FC495A5CB3A21303495A133F383FFFF0B55A5C91C8
-FC14C080003F7F38003FF813076D7E1301B3A2806D7E15F091387FFFF016F8141F801403
-9138003FF025477BBE30>I<EA7FE0EAFFFE6D7E8014F07EC66C7E13076D7E1301B3A280
-6D7E15E091387FFFE06E13F8801407141F5C4A13E09138FFE00092C7FC495A5CB3A21303
-495A137F387FFFF0B5FC14C05C49C8FCEA7FE025477BBE30>125
-D<017C133848B4137C48EB80FE4813C14813C348EBEFFC397FEFFFF0D8FF8713E0010713
-C0486C1380D87C0113003838007C1F0C78B730>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fv cmmi10 10.95 46
-/Fv 46 123 df<131C013E141F017EEC7FC0ED01FFED07BF01FEEB1E3F03381380491370
-9238E01E0000014948C7FCEC0780D9F80EC8FC5C00035B14F0EBF3C001FFC9FC4813F0EC
-FF8001E013F0EC07FC000FEB00FE157F496D7EA2001F141F17705BA2003F16F0033F13E0
-90C71300A248ED01C0A2007EEC1F03178000FE91380F0700168E48EC07FC0038EC01F02C
-297CA734>20 D<EC1FF0903801FFFC010713FF011F14C090397FC01FE09038FC0007D801
-F01301D803C090C7FC485AA290C9FC5A120EA2120F7E7F3803CFFF6CB57E021FC7FC3803
-DFFE380781E0000EC9FC5A123C5A127012F05AA515066C140E5D00785C007C14F0393F80
-07E06CB55A000791C7FC000113FC38007FE0232B7DA82A>34 D<121EEA7F80A2EAFFC0A4
-EA7F80A2EA1E000A0A798919>58 D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A4
-13E013C0A312011380120313005A120E5A1218123812300B1C798919>I<183818FC1703
-EF0FF8EF3FE0EFFF80933803FE00EE0FF8EE3FE0EEFF80DB03FEC7FCED0FF8ED3FE0EDFF
-80DA03FEC8FCEC0FF8EC3FE0ECFF80D903FEC9FCEB0FF8EB3FE0EBFF80D803FECAFCEA0F
-F8EA3FE0EA7F8000FECBFCA2EA7F80EA3FE0EA0FF8EA03FEC66C7EEB3FE0EB0FF8EB03FE
-903800FF80EC3FE0EC0FF8EC03FE913800FF80ED3FE0ED0FF8ED03FE923800FF80EE3FE0
-EE0FF8EE03FE933800FF80EF3FE0EF0FF8EF03FC17001838363678B147>I<ED0180ED03
-C01507A21680150FA216005DA2151E153EA2153C157CA2157815F8A25D1401A25D1403A2
-5D1407A25D140FA24AC7FCA2141E143EA2143C147CA2147814F8A25C1301A25C1303A25C
-1307A25C130FA291C8FC5BA2131E133EA25BA2137813F8A25B1201A25B1203A25B1207A2
-5B120FA290C9FC5AA2121E123EA2123C127CA2127812F8A25A1260225B7BC32D>I<1260
-12F8B4FCEA7FC0EA1FF0EA07FCEA01FF38007FC0EB1FF0EB07FCEB01FF9038007FC0EC1F
-F0EC07FCEC01FF9138007FC0ED1FF0ED07FCED01FF9238007FC0EE1FF0EE07FCEE01FF93
-38007FC0EF1FF0EF07F8EF01FCA2EF07F8EF1FF0EF7FC0933801FF00EE07FCEE1FF0EE7F
-C04B48C7FCED07FCED1FF0ED7FC04A48C8FCEC07FCEC1FF0EC7FC04948C9FCEB07FCEB1F
-F0EB7FC04848CAFCEA07FCEA1FF0EA7FC048CBFC12FC1270363678B147>I<17075F8417
-1FA2173F177FA217FFA25E5EA24C6C7EA2EE0E3F161E161C1638A21670A216E0ED01C084
-ED0380171FED07005D150E5DA25D157815705D844A5A170F4A5A4AC7FC92B6FC5CA2021C
-C7120F143C14384A81A24A140713015C495AA249C8FC5B130E131E4982137C13FED807FF
-ED1FFEB500F00107B512FCA219F83E417DC044>65 D<49B712F818FF19E090260001FEC7
-EA3FF0F007F84B6E7E727E850203815D1A80A20207167F4B15FFA3020F17004B5C611803
-021F5E4B4A5A180FF01FE0023F4B5A4B4A5ADD01FEC7FCEF07F8027FEC7FE092B6C8FC18
-E092C7EA07F84AEC01FE4A6E7E727E727E13014A82181FA213034A82A301075F4A153FA2
-61010F167F4A5E18FF4D90C7FC011F5E4A14034D5A013FED1FF04D5A4AECFFC0017F0207
-90C8FCB812FC17F094C9FC413E7DBD45>I<49B712F818FF19C0D9000190C7EA3FF0F00F
-F84BEC03FCF000FE197F0203EE3F805DF11FC0A20207EE0FE05D1AF0A2020F16075DA21A
-F8141F5DA2190F143F5DA21AF0147F4B151FA302FF17E092C9123FA21AC049177F5C1A80
-19FF010318005C4E5A61010716034A5E4E5A180F010F4C5A4A5E4E5A4EC7FC011F16FE4A
-4A5AEF07F8013FED0FE0EF3FC04A49B4C8FC017FEC0FFCB812F017C004FCC9FC453E7DBD
-4B>68 D<49B912C0A3D9000190C71201F0003F4B151F190F1A80020316075DA314075D1A
-00A2140F4B1307A24D5B021F020E130E4B92C7FC171EA2023F5C5D177CEE01FC4AB55AA3
-ED800302FF6D5A92C7FCA3495D5C19380401147801034B13704A16F093C85AA201071601
-4A5E180361010F16074A4BC7FCA260011F163E4A157E60013F15014D5A4A140F017F15FF
-B95AA260423E7DBD43>I<49B9FCA3D9000190C7120718004B157F193F191E14035DA314
-075D191CA2140F5D17074D133C021F020E13384B1500A2171E023F141C4B133C177C17FC
-027FEB03F892B5FCA39139FF8003F0ED00011600A2495D5CA2160101035D5CA293C9FC13
-075CA3130F5CA3131F5CA2133FA25C497EB612F8A3403E7DBD3A>I<DC3FF0130E923803
-FFFE031F9038FF801C923A7FF00FC03C913B01FF0001E07CDA07FC903800F0FCDA0FF0EC
-79F8DA3FC0143F4A48141F4AC8120FD903FC16F0495A49481507495A013F17E04A150349
-5A49C9FC4818C05B1203485A1980485AA2485A95C7FC123F5BA2127F5BA312FF5BA3043F
-B512E0A290C8FC9339001FF800170F60A2171F60A36C6C153F60A26C7E177F001F5F7F6C
-6C15FF00075D6C6C4A90C7FC6C6CEC07BF6CB4EC1F1FD97FC0EB7E0F903A1FF803F80E01
-07B5EAE00601010280C8FC9026001FF8C9FC3F427BBF47>I<49B6D8C03FB512F81BF017
-80D900010180C7383FF00093C85B4B5EA2197F14034B5EA219FF14074B93C7FCA260140F
-4B5DA21803141F4B5DA21807143F4B5DA2180F4AB7FC61A20380C7121F14FF92C85BA218
-3F5B4A5EA2187F13034A5EA218FF13074A93C8FCA25F130F4A5DA21703131F4A5DA2013F
-1507A24A5D496C4A7EB6D8E01FB512FCA2614D3E7DBD4C>I<49B612C05BA2D90001EB80
-0093C7FC5DA314035DA314075DA3140F5DA3141F5DA3143F5DA3147F5DA314FF92C8FCA3
-5B5CA313035CA313075CA3130F5CA3131F5CA2133FA25CEBFFE0B612E0A32A3E7DBD28>
-I<92B612E0A39239003FF000161F5FA2163F5FA3167F5FA316FF94C7FCA35D5EA315035E
-A315075EA3150F5EA3151FA25EA2153FA25EA2157FA25EA2D80F8013FFEA3FC0486C91C8
-FCA25CD8FFC05B140301805B49485A00FC5C0070495A0078495A0038495A001E017EC9FC
-380F81FC3803FFE0C690CAFC33407ABD32>I<49B612F0A3D900010180C7FC93C8FC5DA3
-14035DA314075DA3140F5DA3141F5DA3143F5DA3147F5DA314FF92C9FCA35B5C180C181E
-0103161C5C183C183813074A1578187018F0130F4AEC01E0A21703011FED07C04A140F17
-1F013FED3F8017FF4A1303017F021F1300B9FCA25F373E7DBD3E>76
-D<49B56C49B512F81BF0A290C76D9039000FFE004AEE03F0705D735A03DF150302037F03
-8F5E82190791380787FC030793C7FC1503705C140F91260E01FF140EA26F151E021E8002
-1C017F141C83193C023C6D7E02381638161F711378147802706D6C1370A2040714F002F0
-804A01035C8318010101EC01FF4A5E82188313034A91387FC380A2EF3FC7010716E791C8
-001F90C8FC18F718FF4981010E5E1707A2131E011C6F5AA2013C1501137C01FE6F5AEA03
-FFB512FC187818704D3E7DBD49>78 D<49B712F018FF19C0D9000190C76C7EF00FF84BEC
-03FC1801020382727E5DA214071A805DA2140F4E13005DA2021F5E18034B5D1807023F5E
-4E5A4B4A5A4E5A027F4B5A06FEC7FC4BEB03FCEF3FF091B712C005FCC8FC92CBFCA25BA2
-5CA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA25C497EB612E0A3413E7DBD
-3A>80 D<EE3FF00303B5FC92391FC03FC092397E0007E0DA01F8EB01F8DA07E06D7E4A48
-147EDA3F8080027EC813804AED1FC0EB03F84948ED0FE0130F494816F04A1507494816F8
-137F49C9FC485AA2484817FCA2485A120FA2485AA25B123F19F84848160FA44848EE1FF0
-A3F03FE0A290CAFCF07FC0A2198018FF19004D5AA24D5A606C16074D5A6D01F85C003FD9
-03FE495ADA0F07495A271FC01C0349C7FC9139380180FE260FE030EB81FCEEC3F82607F0
-70EBC7E03B03F86000CFC0D801FCECFF80D800FE4AC8FC90393FF003F890270FF81FE013
-0C0103B5FC9026007FF1141CDA00011418183882607013F017039338FC0FE093B5FC6060
-A26F91C7FC5F705AEE3FF0EE0FC03E527BBF48>I<49B77E18F818FFD90001D900017F94
-38003FE04BEC0FF0727E727E14034B6E7EA30207825DA3020F4B5A5DA24E5A141F4B4A5A
-614E5A023F4B5A4B4A5A06FEC7FCEF03FC027FEC0FF04BEBFF8092B500FCC8FC5F9139FF
-8001FE92C7EA7F80EF1FC084496F7E4A1407A28413035CA2170F13075C60171F130F5CA3
-011F033F5B4AEE038018E0013F17071A004A021F5B496C160EB600E090380FF01E05075B
-716C5ACBEAFFE0F03F8041407DBD45>I<007FB500F090387FFFFE19FC5D26007FE0C700
-0313804A913800FC004A5D187001FF16F0A291C95AA2481601605BA200031603605BA200
-07160795C7FC5BA2000F5E170E5BA2001F161E171C5BA2003F163C17385BA2007F1678A2
-491570A200FF16F0A290C95AA216015F5A16035F16074CC8FC160E161E5E007F5D5E6C4A
-5A6D495A6C6C495A6C6C011FC9FC6C6C137E3903FC03F8C6B512E0013F1380D907FCCAFC
-3F407ABD3E>85 D<027FB5D88007B512C091B6FCA2020101F8C7EBF8009126007FE0EC7F
-804C92C7FC033F157C701478616F6C495A4E5A6F6C495A4EC8FC180E6F6C5B606F6C5B60
-17016F6C485A4D5A6F018FC9FC179E17BCEE7FF85F705AA3707EA283163F167FEEF7FCED
-01E7EEC3FEED0383ED070392380E01FF151E4B6C7F5D5D4A486D7E4A5A4A486D7E92C7FC
-140E4A6E7E5C4A6E7E14F0495A49486E7E1307D91F806E7ED97FC014072603FFE0EC1FFF
-007F01FC49B512FEB55CA24A3E7EBD4B>88 D<EC1F80ECFFE0903903F0707090390FC039
-F890381F801D90383F000F017E5C5B00011407485A48485CA2485A001F140F5E485AA215
-1F007F5D5BA2153F00FF92C7FC90C7FCA25D92387E03805AA215FEEDFC07007E01011400
-14035E6C0107130E140E3A1F801C7C1C000F13783A07C1F03E383A01FFC01FF03A007F00
-07C029297DA730>97 D<EB1FC0EA0FFF5CA2EA003FA291C8FCA25BA2137EA213FEA25BA2
-1201A25BA21203A25BEC3F800007EBFFE09038F3C1F849C67E01FE137E4848133E49133F
-5B491480001F141F5B5BED3FC0123FA290C7FCA248147F1680127EA215FF00FE15005AA2
-4A5AA25D1403485C1407007C5C4A5A5D003C495A003E49C7FC001E137E6C13F8380783F0
-3803FFC0C648C8FC22407CBE27>I<EC07F0EC7FFE903801FC0F903907E0038090390FC0
-01C0D93F8013E090387F000701FE131F485A485A16C0485A000F15804990C7FC121F485A
-A3127F5BA312FF90C9FCA6007E1560007F15E01501ED03C06CEC07806DEB0F00001F141E
-6C6C137C3907E001F03901F01FC06CB5C7FCEB1FF023297DA727>I<EE07F0ED03FF17E0
-A2ED000FA217C0A2161FA21780A2163FA21700A25EA2167EA216FEA25EEC1F80ECFFE190
-3803F07190390FC039F890381F801D90383F000F137E495C00011407485A485A5E485A00
-1F140FA248485CA2151F127F495CA2153F12FF90C790C7FCA25DEE038048147EA215FE16
-07007ED901FC130014035E6C0107130E140E3A1F801C7C1C000F13783A07C1F03E383A01
-FFC01FF03A007F0007C02C407DBE2F>I<EC1FE0ECFFFC903803F01E90380FC00F90393F
-800780D97E0013C0491303EA03F8120749130748481480121F49130F003FEC1F00153E39
-7F8001FCEC1FF090B51280B500F8C7FC90C9FCA45AA616C01501007E1403ED07806CEC0F
-00151E6C5C6C6C13F83907C003E03903E03F802600FFFEC7FCEB3FE022297CA72A>I<16
-3EEEFFC0923803E1E0923807C0F0ED0F811687ED1F8F160F153FA217E092387E038093C7
-FCA45DA514015DA30103B512FCA390260003F0C7FCA314075DA4140F5DA5141F5DA4143F
-92C8FCA45C147EA414FE5CA413015CA4495AA35CEA1E07127F5C12FF495AA200FE90C9FC
-EAF81EEA703EEA7878EA1FF0EA07C02C537CBF2D>I<EB01FC13FF5CA21303A25CA21307
-A25CA2130FA25CA2131FA25CA2133FA291C9FC15FE90397F07FFC091381F03E090397E38
-01F09138F000F8EBFFE04A7F5C91C7FC485AA25BA2484813015E5BA2000714035E5B1507
-120F5E49130F5E121F031F1370491480A2003F023F13F0EE00E090C7FC160148023E13C0
-1603007E1680EE070000FE5DED1F1E48EC0FF80038EC03E02C407CBE34>104
-D<143C14FEA21301A314FCEB00701400AD137E3801FF803803C7C0EA0703000F13E0120E
-121C13071238A2EA780F007013C0A2EAF01F14801200133F14005B137EA213FE5BA21201
-5B0003130E13F0A20007131EEBE01CA2143CEBC0381478147014E013C13803E3C03801FF
-00EA007C173E7EBC1F>I<ED01C0ED07F0A2150FA316E0ED038092C7FCADEC03E0EC0FF8
-EC3C3EEC701EECE01FEB01C001031480EB0780140049133F010E1400131E131C013C5BA2
-90C7127EA215FEA25DA21401A25DA21403A25DA21407A25DA2140FA25DA2141FA25DA214
-3FA292C7FCA25C147EA2001C13FE007F5BEAFF015C495A495A48485A38F81F80D8783EC8
-FCEA3FF8EA0FE0245081BC25>I<EB01FC13FF5CA21303A25CA21307A25CA2130FA25CA2
-131FA25CA2133FA291C9FC16FC49EB03FE92380F0780017EEB3C0FED703F01FE13E09138
-01C07F9038FC0380EC07000001010E14004A131C494890C7FC5C00035BEBF9C0495A01FF
-C9FC5A14F0EBE3FE9038E07F80000FEB1FC06E7EEBC00781001F1303160E1380A2003F15
-1E0207131C010013E0A2485DA2007E01031378167000FE01015B15F1489038007F800038
-023EC7FC29407CBE2F>I<EB07F0EA03FF14E0A2EA000FA214C0A2131FA21480A2133FA2
-1400A25BA2137EA213FEA25BA21201A25BA21203A25BA21207A25BA2120FA25BA2121FA2
-5BA2123FA290C7FCA25AEB0380127EA212FE130700FC1300A25B130EA2EA7C1C133CEA3E
-38EA1FF0EA07C014407DBE1B>I<01F8D907F0EB07F8D803FED93FFEEB1FFE28078F80F8
-1FEB781F3E0F0F81C00F81E00F803E0E07C78007C3C007C0001CD9CF00EBC78002FEDAEF
-007F003C4914FE0038495C49485C12780070495CA200F0494948130F011F600000495CA2
-041F141F013F6091C75B193F043F92C7FC5B017E92C75A197E5E01FE9438FE01C049027E
-14FCA204FE01011303000106F81380495CF20700030115F00003190E494A151E1A1C0303
-5E0007943800F8F0494AEC7FE0D801C0D900E0EC1F804A297EA750>I<01F8EB0FF0D803
-FEEB3FFC3A078F80F03E3A0F0F83C01F3B0E07C7800F80001CEBCF0002FE80003C5B0038
-5B495A127800705BA200F049131F011F5D00005BA2163F013F92C7FC91C7FC5E167E5B01
-7E14FE5EA201FE0101EB03804914F8A203031307000103F013005B170E16E000035E4915
-3C17385F0007913801F1E0496DB45AD801C0023FC7FC31297EA737>I<EC07F8EC7FFE90
-3901FC0F80903907E007E090390FC003F090393F8001F8EB7F0001FEEB00FC485A484814
-FEA2485A120F5B001F15FF485AA2ED01FE127F5BA2150300FF15FC90C7FCA2ED07F8A2ED
-0FF0A2007E15E0007FEC1FC0ED3F80A26CEC7F006C6C13FC4A5A6C6C485A3907E00FC026
-01F03FC7FC3800FFFCEB1FE028297DA72C>I<D907C013FE903A0FF003FF80903A1C7C0F
-07E0903A383C1C03F0903A783E7801F80170EBF0009026F03FE013FC01E05B4B13FE0001
-017F147E01C090C7FC147E17FF000313FEA2C75AA201015C17FE5CA20103140317FC5CA2
-0107EC07F8A24A14F0160F010F15E0161F17C0EE3F80011F15006E137E5E9138B801F890
-393FBC03E091389E0FC0DA07FFC7FCEC01F849C9FCA2137EA213FEA25BA21201A25BA212
-03A2B512E0A3303A84A72E>I<D801F0EB3F80D807FCEBFFE03A0F1F03C0F0000E90380F
-00F8391E0F9E03001C13BC003CEBF807003813F0A226781FE013F000709038C001C092C7
-FC5C12F0133F000090C8FCA35B137EA313FE5BA312015BA312035BA312075BA3120F5BEA
-038025297EA729>114 D<EC1FC0ECFFF8903803E03C903807800E90381E000716804913
-0F49131F153FA201F81400A2151C6D90C7FC7FEBFFE014FE90387FFFC06D7F6D13F86D7F
-13039038001FFE14031400157E000C143E123F487EA248C7123CA25D12FC00F05C007049
-5A0078495A6C495A260F803EC7FC3803FFF838007FC021297CA72B>I<147014FC1301A2
-5CA21303A25CA21307A25CA2130FA25CA2007FB512F0B6FC15E039001F8000133FA291C7
-FCA25BA2137EA213FEA25BA21201A25BA21203A25BA21207EC01C013E01403000F1480A2
-EBC0071500140E141E5C000713385C3803E1E03801FF80D8003EC7FC1C3A7EB821>I<13
-7C48B4EC03802603C7C0EB0FC0EA0703000F7F000E151F121C010715801238163FEA780F
-0070491400A2D8F01F5C5C0000157E133F91C712FEA2495C137E150113FE495CA2150300
-01161C4914F0A21507173CEEE038150F031F1378000016706D133F017C017313F0017E01
-E313E0903A3F03C1F1C0903A0FFF007F80D901FCEB1F002E297EA734>I<017E147848B4
-EB01FC2603C7C013FED807031303000F13E0120E121C0107130100381400167ED8780F14
-3E00705B161EEAF01F4A131C1200133F91C7123C16385B137E167801FE14705B16F016E0
-120149EB01C0A2ED0380A2ED0700A20000140E5D6D133C017C5B6D5B90381F03C0903807
-FF80D901FCC7FC27297EA72C>I<013EEE0380D9FF800107EB0FE02601C3E090381F801F
-D8038117F0380701F0000E153F001E1600D81C03160F003C170700384BEB03E0D8780714
-7E00705B1801D8F00F14FE4A4914C01200131FDA800114034C1480133F14000303140749
-4A1400137EA26001FE0107140E495C60A360150F017C5E017E011F14F0705B6D0139495A
-6D903970F8038090280FC0E07C0FC7FC903A03FFC01FFC903A007F0007F03C297EA741>
-I<D901F8133FD907FEEBFFE0903A1E0F83C0F0903A3807C780F890397003CF0301E013FE
-D801C0EBFC071203018013F8D8070015F0EE01C0000E4AC7FCA2001E1307A2C75BA2140F
-5DA3141F5DA3143F92380001C0A34A1303001E1680003F017E1307267F80FE14005ED8FF
-81141ED901DF131CD8FE035C3A7C078F80F03A3C0F07C1E03A1FFC03FF802707F0007EC7
-FC2D297EA734>I<02F8130ED903FE131ED90FFF131C49EB803C49EBC0784914F090397E
-07F1E09038F800FF49EB1FC049EB07800001EC0F006C48131E90C75A5D5D4A5A4A5A4A5A
-4AC7FC143E14785C495A495A495A49C8FC011E14E05B5B4913014848EB03C0485AD807F8
-EB078048B4131F3A1F87E07F00391E03FFFE486C5B00785CD870005B00F0EB7FC048011F
-C7FC27297DA72A>122 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fw cmr10 10.95 88
-/Fw 88 125 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907
-F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7
-FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11
-D<EC03FE91383FFF809138FE03E0903903F800F0D90FE013384948137C90393F8001FE90
-387F00035B5BA2485A6F5AED007093C7FCAA16FEB7FCA33901FC000315011500B3AC486C
-497EB5D8F87F13FCA32E407EBF33>I<EC03FF023F13EE9138FE01FEEB03F090380FE003
-EB1FC0EB3F80EB7F005B5B150148481300AEB7FCA3D801FCC7FCB3AE486C497EB5D8F87F
-13FCA32E407EBF33>I<DA03FE49B4FC91273FFF801F13C0913BFE03E07F01F0903C03F0
-00F1FC0078D90FE0D97FF0131C49484948133E4948484913FF494848495A5B491500A248
-485C03016E5A0300153896C7FCAA197FBBFCA3D801FCC738FE00018485B3AC486C496CEC
-FF80B5D8F87FD9FC3F13FEA347407EBF4C>I<001E130F397F803FC000FF137F01C013E0
-A201E013F0A3007F133F391E600F3000001300A401E01370491360A3000114E04913C000
-03130101001380481303000EEB070048130E0018130C0038131C003013181C1C7DBE2D>
-34 D<013F1603D9FFC04B7E2601E0E0150F2607C070151F48486C4BC7FC023E157E4848
-6C15FE48D90FC0EB03FC003ED90EF0EB0FF8DA0F3F13FD007E903A070FFFF1F0007C0200
-EB03E0160000FC6D6C495A170F604DC8FC5F173E5F17FC5F4C5A1603007CD907005B4C5A
-007E150F003E495C020E49C9FC003F5D6C49133E260F803C5B023813FC6C6C485B3A01E0
-E001F03800FFC090273F0003E0133F90C70007ECFFC09339C001E0E0923A0F8007C07003
-1F49487E0400143C033E90381F001C037E497F037C133E4B150F0201027E7F4B137C4A5A
-020702FCEB03805D4A5A141F92C7FC143E147E147C5CA2495A0103037CEB07005C494814
-7E010F033E5B4A160E49C8123F496F5B013E92380F803C49173801FC6F6C5A49923801E0
-E0496FB45A0160043FC7FC41497BC34C>37 D<EC0F80EC7FE0ECF870903803E038010713
-3CECC01CEB0F80011F131E150EA2EB3F00A55D1480A25D157815705D6D6C5A14C1ECC380
-02C7CAFC02EE91387FFFFCEB0FEC14FC4A020713C06D48913801FE006E5DEF00F06D7E01
-074B5A496C5D011D1503D939FF4A5A017093C7FC496D5B0001017F140E496C6C131E0003
-6E131C2607801F143C000F6E5B001F6D6C1370263F000714F0486E485ADA03FE5B913801
-FF03486D495A0487C8FCED7FCFED3FFE6F4814386D5C150F007F6E6C14786D6D6C147000
-3F4A6C14F06D496C6C13E0001F91393E3FC0016C6C903AFC1FF003C03D07FC07F007FC1F
-800001B5D8C001B512006C6C90C7EA7FFCD90FF8EC0FF03E437CC047>I<121EEA7F8012
-FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A120E5A12181238
-12300B1C79BE19>I<1430147014E0EB01C0EB03801307EB0F00131E133E133C5B13F85B
-12015B1203A2485AA2120F5BA2121F90C7FCA25AA3123E127EA6127C12FCB2127C127EA6
-123E123FA37EA27F120FA27F1207A26C7EA212017F12007F13787F133E131E7FEB078013
-03EB01C0EB00E014701430145A77C323>I<12C07E12707E7E121E7E6C7E7F12036C7E7F
-12007F1378137CA27FA2133F7FA21480130FA214C0A3130714E0A6130314F0B214E01307
-A614C0130FA31480A2131F1400A25B133EA25BA2137813F85B12015B485A12075B48C7FC
-121E121C5A5A5A5A145A7BC323>I<EB03C0A2805CA600F0140F00FC143F00FE147F00FF
-14FF393FC3C3FC390FE187F03903F18FC03900FDBF00EB3FFCEB0FF0EB03C0EB0FF0EB3F
-FCEBFDBF3903F18FC0390FE187F0393FC3C3FC39FF03C0FF00FE147F00FC143F00F0140F
-00001400A6805CA220277AC32D>I<1506150FB3A9007FB912E0BA12F0A26C18E0C8000F
-C9FCB3A915063C3C7BB447>I<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E0
-13C0A312011380120313005A120E5A1218123812300B1C798919>I<B512FEA617067F96
-1E>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A798919>I<ED0180ED03C01507A216
-80150FA216005DA2151E153EA2153C157CA2157815F8A25D1401A25D1403A25D1407A25D
-140FA24AC7FCA2141E143EA2143C147CA2147814F8A25C1301A25C1303A25C1307A25C13
-0FA291C8FC5BA2131E133EA25BA2137813F8A25B1201A25B1203A25B1207A25B120FA290
-C9FC5AA2121E123EA2123C127CA2127812F8A25A1260225B7BC32D>I<EB01FE90380FFF
-C090383F03F090387C00F849137C48487F48487F4848EB0F80A2000F15C04848EB07E0A3
-003F15F0A290C712034815F8A64815FCB3A26C15F8A56C6CEB07F0A3001F15E0A36C6CEB
-0FC0A26C6CEB1F80000315006C6C133E6C6C5B017C5B90383F03F090380FFFC0D901FEC7
-FC263F7DBC2D>I<EB01C013031307131F137FEA07FFB5FC139FEAF81F1200B3B3ACEB7F
-F0B612F8A31D3D78BC2D>I<EB07FC90383FFF8090B512E03903F01FF83907C007FC390F
-0001FE001E6D7E001C1580003CEC7FC05AED3FE01270B4FC6DEB1FF07FA56C5A6CC7FC12
-0CC813E0153FA216C0157F168015FF16004A5A5D4A5A4A5A5D4A5A4A5A4AC7FC147E147C
-5C495A495A495A495A49C71270133E133C5B4914E0485A485A485A48C7120148B6FCA25A
-4815C0B7FCA3243D7CBC2D>I<EB07FC90383FFF809038F80FE03901E003F839078001FC
-D80F007F000E6D7E001E1580D81F80137F486C14C07FA27F5BA2121F6C5AC8138015FF16
-00A24A5AA24A5A5DEC07E04A5A023FC7FCEB1FFCECFF809038000FE0EC07F86E7E6E7E6E
-7E1680ED7FC0A216E0153FA216F0A2120C123F487E487EA316E0A249137F6CC713C01278
-EDFF807E6C4913006C495A3907C007FC3903F80FF0C6B55A013F1380D907F8C7FC243F7C
-BC2D>I<150E151E153EA2157EA215FE1401A21403EC077E1406140E141CA214381470A2
-14E0EB01C0A2EB0380EB0700A2130E5BA25B5BA25B5B1201485A90C7FC5A120E120C121C
-5AA25A5AB8FCA3C8EAFE00AC4A7E49B6FCA3283E7EBD2D>I<00061403D80780131F01F8
-13FE90B5FC5D5D5D15C092C7FC14FCEB3FE090C9FCACEB01FE90380FFF8090383E03E090
-387001F8496C7E49137E497F90C713800006141FC813C0A216E0150FA316F0A3120C127F
-7F12FFA416E090C7121F12FC007015C012780038EC3F80123C6CEC7F00001F14FE6C6C48
-5A6C6C485A3903F80FE0C6B55A013F90C7FCEB07F8243F7CBC2D>I<EC1FE0ECFFF89038
-03F03E90380FC00F90391F000780133E017EEB1FC049133F4848137F12035B12074848EB
-3F80ED1F00001F91C7FC5BA2123FA3485AA214FE903887FF8039FF8F07E090389C01F090
-38B800FC01B0137E13F0497F16804914C0A2ED1FE0A34914F0A5127FA6123F6D14E0A212
-1FED3FC0A26C6C1480A20007EC7F006C6C137E6C6C5B6C6C485A90387E07F06DB45A010F
-1380D903FCC7FC243F7CBC2D>I<1238123C123F90B612FCA316F85A16F016E00078C712
-010070EC03C0ED078016005D48141E151C153C5DC8127015F04A5A5D14034A5A92C7FC5C
-141EA25CA2147C147814F8A213015C1303A31307A3130F5CA2131FA6133FAA6D5A0107C8
-FC26407BBD2D>I<EB03FC90381FFF8090387C07E09038F001F83901E0007C48487F4848
-7F48C7FCED0F80121E16C0003E1407A4123FA26DEB0F807F6C6C131F6D140001FC133E6C
-6C5B9038FF80786C6D5A6CEBF3E06CEBFF806C91C7FC133F6D13C06D7F013F13F801787F
-48486C7E3903E01FFF48486C1380260F800313C048487E489038007FE0003E143F007E14
-1F007CEC0FF01507481403A31501A46C15E0007C1403A2007E15C06C14076CEC0F806DEB
-1F006C6C133ED807F05B3901FC03F86CB512E0011F1380D903FCC7FC243F7CBC2D>I<EB
-03FCEB1FFF90387E07C09038FC03F048486C7E48486C7E4848137C000F147E4848137F81
-003F15805B007F15C0A2151F12FF16E0A516F0A5127F153FA36C7EA2001F147F120F6C6C
-13FF6D13DF000313013900F8039F90387E0F1FD91FFE13E0EB07F090C7FCA2ED3FC0A416
-80157FD80F801400487E486C13FEA24A5A5D49485AEB8007391E000FE0001F495A260FC0
-7FC7FC3803FFFE6C13F838003FC0243F7CBC2D>I<121EEA7F80A2EAFFC0A4EA7F80A2EA
-1E00C7FCB3121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A2779A619>I<121EEA7F80A2EA
-FFC0A4EA7F80A2EA1E00C7FCB3121E127FEAFF80A213C0A4127F121E1200A412011380A3
-120313005A1206120E120C121C5A1230A20A3979A619>I<007FB912E0BA12F0A26C18E0
-CDFCAE007FB912E0BA12F0A26C18E03C167BA147>61 D<ED7FE0913807FFFE91391F801F
-809139780001E0D901E0EB0078D90780141E49C87E011E6F7E0138ED01C0496F7E491670
-0001177848488249D93F80131C28070001FFF07F48902607E07C130F000E90260FC01E7F
-001E90263F00071480001C499038038003003C01FED901C013C0003849ECFE010101EC00
-FF267803F8027F13E000701700495AA200F018F000E01870495AA96D7E12F01270A26D7E
-007818E0263801FC5C01005C003C7F001C017F49EB01C0001E6DEB077F000E903B0FC01E
-3F8380000F903B07E07C1F87006C903A01FFF007FE3C0380003F8001F86D90CAFC6C7E12
-0013707F011EEE03F06D160F6D6CED3FC0D901E0913801FE00D90078EC1FF0913A1F8003
-FF800207B500F8C7FC9126007FFEC8FC3C417BBF47>64 D<15074B7EA34B7EA34B7EA34B
-7EA34B7E15E7A2913801C7FC15C3A291380381FEA34AC67EA3020E6D7EA34A6D7EA34A6D
-7EA34A6D7EA34A6D7EA349486D7E91B6FCA249819138800001A249C87EA24982010E157F
-A2011E82011C153FA2013C820138151FA2017882170F13FC00034C7ED80FFF4B7EB500F0
-010FB512F8A33D417DC044>I<B712FCEEFF8017F00001903980000FF86C6CC7EA03FE70
-7E701380EF7FC0EF3FE0A2EF1FF0A218F8A3170F171FA318F0A2EF3FE0177F18C0EFFF80
-4C1300EE03FCEE0FF8EE7FE091B6C7FC17E091C7EA07FCEE01FE933800FF80EF7FC0EF3F
-E0EF1FF018F8170F18FC1707A218FEA718FC170FA2EF1FF818F0173FEF7FE0EFFFC00403
-138048486C90380FFE00B85A17E094C7FC373E7DBD40>I<DB3FF01306912603FFFE130E
-020F9038FF801E913A3FF007E03E9139FF8000F8D903FEC7EA7C7ED907F8EC1EFE494814
-0FD93FE0140749481403495A91C812014848150012034848167E5B000F173EA24848161E
-A2123F5B180E127FA349160012FFAC127F7F180EA2123FA27F001F171E181C6C7EA20007
-173C6D16386C6C1678000117706C6C16F06EEC01E06D6C15C06D6C1403D90FF0EC07806D
-6CEC1F00D903FE143E902600FF8013F891393FF007F0020FB512C0020391C7FC9138003F
-F037427BBF42>I<B712FCEEFF8017E000019039C0001FF86C6C48EB03FEEE00FF717E71
-7EEF0FE084717E717E170184717EA21980187F19C0A3F03FE0A519F0AB19E0A5F07FC0A2
-1980A218FF19004D5AA24D5A6017074D5A4D5AEF7FC04DC7FCEE03FE48486CEB1FF8B85A
-178004FCC8FC3C3E7DBD45>I<B912E0A300019038C000016C6C48EB001FEF0FF01703A2
-17011700A31870A418381638A41800A21678A216F81501150791B5FCA3EC800715011500
-1678A21638A2180EA3181C93C7FCA4183C1838A21878A318F8EF01F0A21707170F173F48
-486CEB03FFB912E0A3373E7DBD3E>I<B91280A300019038C000036C6C48EB007FEF1FC0
-170F1707A21703A31701A4EF00E0A21638A31800A31678A216F81501150791B5FCA3EC80
-07150115001678A21638A693C8FCAF3801FFE0B612F0A3333E7DBD3B>I<DB3FE0130C91
-2603FFFE131C021F9038FF803C913A7FF00FC07C9139FF0001F0D903FC90380078FC4948
-143DD91FE0141F4948140F4948140701FF15034890C8FC491501485A000716005B000F17
-7C5B001F173CA2485AA2181C127FA25B95C7FC12FFAB041FB512F0127FA26D9139000FFE
-00EF03FC123FA27F121FA26C7EA212077F12036C7E7F6C7F6D6C14076D7E6D6C140FD907
-F8141ED903FEEC3C7C902600FF80EBF83C913A7FF007F01C021FB5EAC00C020391C8FC91
-38003FF03C427BBF47>I<B6D8C01FB512F8A3000101E0C7383FFC0026007F80EC0FF0B3
-A691B7FCA30280C7120FB3A92601FFE0EC3FFCB6D8C01FB512F8A33D3E7DBD44>I<B612
-F0A3C6EBF000EB3FC0B3B3B2EBFFF0B612F0A31C3E7EBD21>I<011FB512FCA3D9000713
-006E5A1401B3B3A6123FEA7F80EAFFC0A44A5A1380D87F005B007C130700385C003C495A
-6C495A6C495A2603E07EC7FC3800FFF8EB3FC026407CBD2F>I<B600C090387FFFFCA300
-0101E0C7000F138026007F80913807FE0018F818E0604D5A4DC7FC173E5F5F4C5A4C5A4C
-5A4C5A4CC8FC163E5E5E4B5A4B5AED07804B7E151F4B7E4B7E15FF913881EFF8913883C7
-FCEC878791388F03FE91389E01FF14BCDAF8007F4A6D7E5C4A6D7E4A6D7EA2707E707EA2
-707E707EA2707F717E84173F717E717EA2717E848419802601FFE04A13C0B600C090B6FC
-A3403E7DBD47>I<B612F8A3000101E0C9FC38007F80B3B0EF0380A517071800A45FA35F
-A25F5F5F4C5A160748486C133FB8FCA3313E7DBD39>I<B500C093B512C0A300016D4BEB
-E000D8007F1880D977F0ED03BFA3D973F8ED073FA3D971FC150EA2D970FE151CA3027F15
-38A36E6C1470A36E6C14E0A26E6CEB01C0A36E6CEB0380A36E6CEB0700A26E6C130EA36E
-6C5BA3037F5BA26F6C5AA36F6C5AA392380FE1C0A3923807F380A26FB4C7FCA36F5AA213
-F8486C6D5AD807FFEFFFE0B500F80178017FEBFFC0A34A3E7CBD53>I<B56C91B512F880
-80D8007F030713006EEC01FC6E6E5A1870EB77FCEB73FEA2EB71FF01707FA26E7E6E7EA2
-6E7E6E7EA26E7E6E7EA26E7E6E7FA26F7E6F7EA26F7E6F7EA26F7E6F7EA26F7E6F1380A2
-EE7FC0EE3FE0A2EE1FF0EE0FF8A2EE07FCEE03FEA2EE01FF7013F0A2177F173FA2171F17
-0FA2170701F81503487ED807FF1501B500F81400A218703D3E7DBD44>I<ED7FE0913807
-FFFE91391FC03F8091397E0007E04948EB03F8D907F0EB00FE4948147F49486E7E49486E
-7E49C86C7E01FE6F7E00018349150300038348486F7EA248486F7EA2001F188049167F00
-3F18C0A3007F18E049163FA300FF18F0AC007F18E06D167FA4003F18C0A26C6CEEFF80A3
-6C6C4B1300A26C6C4B5A00035F6D150700015F6C6C4B5A6D5E6D6C4A5A6D6C4A5A6D6C4A
-C7FC6D6C14FED901FCEB03F8D9007FEB0FE091391FC03F80912607FFFEC8FC9138007FE0
-3C427BBF47>I<B712F8EEFF8017E000019039C0003FF86C6C48EB07FCEE01FE707EEF7F
-80EF3FC018E0A2EF1FF0A218F8A818F0A2EF3FE0A218C0EF7F80EFFF004C5AEE07FCEE3F
-F091B612C04CC7FC0280C9FCB3A73801FFE0B612C0A3353E7DBD3E>I<ED7FE0913807FF
-FE91391FC03F8091397F000FE0D901FCEB03F8D907F0EB00FE4948147F49486E7E49486E
-7E49C86C7E498248486F7E49150300038348486F7EA2000F834981001F1880A24848EE7F
-C0A3007F18E0A249163FA200FF18F0AC007F18E0A26D167FA3003F18C0A26C6CEEFF80A3
-000F18006D5D0007DA0F805B6C6C90393FE003FCED70706C6C496C485A6C6C48486C485A
-017FD9800E5BD93F819038061FC0D91FC19038073F80D90FE14AC7FCD907F1EB03FE9026
-01FDC013F8903A007EE007E091271FF03FC013180207B5FC9139007FE1E0DB0001143883
-711378A2706C13F0EFFF0318FFA27113E0A37113C0711380711300715AEF01F83D527BBF
-47>I<B712C016FCEEFF800001D9C00013E06C6C48EB1FF0EE07FCEE01FE707E84717EA2
-717EA284A760177F606017FF95C7FCEE01FCEE07F8EE1FE0EEFF8091B500FCC8FC16F091
-388001FCED003FEE1FC0707E707E83160383160183A383A484A4F0C004190EA28218E005
-7F131E2601FFE0161CB600C0EB3FF094381FF83805071370CA3801FFE09438003F803F40
-7DBD43>I<D907FC131890391FFF8038017FEBE0783901FC03F83A03F0007CF8D807C013
-3F4848130F001F140748C7FC003E1403007E1401A2007C140012FC1678A46C1538A27EA2
-6C6C14007F7FEA3FF8EBFF806C13F86CEBFF806C14F06C14FC6C14FF6C15C0013F14E001
-0714F0EB007F020713F89138007FFC150FED07FE15031501ED00FFA200E0157FA3163FA2
-7EA3163E7E167E6C157C6C15FC6C15F86D13016DEB03F06DEB07E0D8F9FCEB0FC03AF07F
-803F8090391FFFFE00D8E00713F839C0007FC028427BBF33>I<003FB91280A3903AF000
-7FE001018090393FC0003F48C7ED1FC0007E1707127C00781703A300701701A548EF00E0
-A5C81600B3B14B7E4B7E0107B612FEA33B3D7DBC42>I<B600C090B512F8A3000101E0C7
-0007130026007F80EC01FC715A1870B3B3A4013F16F06E5DA21701011F5E80010F15036E
-4A5A010793C7FC6D6C5C6D6C141E6D6C5C027F14F86E6C485A91390FF00FE00203B51280
-020049C8FCED1FF03D407DBD44>I<B691380FFFFEA3000301E0020113E06C0180913800
-7F806CEF3F00017F163E181C6E153C013F1638A26E1578011F1670A26D6C5DA26E140101
-075EA26E140301035EA26D6C4AC7FCA2806D150EA26F131E027F141CA26F133C023F1438
-A26E6C5BA26F13F0020F5CA2EDF80102075CA26E6C485AA2EDFE07020191C8FCA26F5A6E
-130EA2ED7F9CA216DCED3FF8A36F5AA36F5AA26F5AA36F5A3F407EBD44>I<B500FE017F
-B5D88007B5FCA3000301C0010101E0C713F86C90C849EC3FE07148EC0F807E7215006E14
-3F017F190E84A26D6C60A24D7E6D6C60A2EFE7F86D6C60A2933801C3FC6E18F001076104
-037F6E0281140101036104077F17006D6C4D5AA2040EEB7F806D6C4DC7FCA24CEB3FC0DA
-7F80160EA24CEB1FE003C0161E023F171C047814F0DBE070010F133C021F173804F014F8
-4C1307DA0FF05EA2DBF1C0EB03FCDA07F95EA2DBFB80EB01FEDA03FF6F5AA293C8FCA26E
-5FA24B157F020094C8FCA24B81037C153EA20378151E0338151C58407EBD5D>I<007FB5
-D8C003B512E0A3C649C7EBFC00D93FF8EC3FE06D48EC1F806D6C92C7FC171E6D6C141C6D
-6C143C5F6D6C14706D6D13F04C5ADA7FC05B023F13036F485ADA1FF090C8FC020F5BEDF8
-1E913807FC1C163C6E6C5A913801FF7016F06E5B6F5AA26F7E6F7EA28282153FED3BFEED
-71FF15F103E07F913801C07F0203804B6C7EEC07004A6D7E020E6D7E5C023C6D7E02386D
-7E14784A6D7E4A6D7F130149486E7E4A6E7E130749C86C7E496F7E497ED9FFC04A7E0007
-6DEC7FFFB500FC0103B512FEA33F3E7EBD44>I<B66C0103B51280A3000101F0C8EBF800
-6C6C48ED3FC0725A013F041EC7FC6D7E606D6C15386D6C1578606D6C5D6E14016D5E6D6D
-1303606E6C49C8FC6E6C5B170E6E6C131E171C6E6C5B6E6C137817706E6C13F06F5B6E13
-016EEB83C05FED7FC7DB3FE7C9FC16EFED1FFE5E150F6F5AB3A4ED1FFC020FB512FCA341
-3E7FBD44>I<003FB712F8A391C7EA1FF013F801E0EC3FE00180EC7FC090C8FC003EEDFF
-80A2003C4A1300007C4A5A12784B5A4B5AA200704A5AA24B5A4B5AA2C8485A4A90C7FCA2
-4A5A4A5AA24A5AA24A5A4A5AA24A5A4A5AA24990C8FCA2495A4948141CA2495A495AA249
-5A495A173C495AA24890C8FC485A1778485A484815F8A24848140116034848140F484814
-3FED01FFB8FCA32E3E7BBD38>I<EAFFFCA4EAF000B3B3B3B3ABEAFFFCA40E5B77C319>I<
-486C13C00003130101001380481303000EEB070048130E0018130C0038131C0030131800
-70133800601330A300E01370481360A400CFEB678039FFC07FE001E013F0A3007F133FA2
-003F131F01C013E0390F0007801C1C73BE2D>I<EAFFFCA4EA003CB3B3B3B3ABEAFFFCA4
-0E5B7FC319>I<1318133C137E13FF3801E7803803C3C0380781E0380F00F0001E137848
-133C48131E48130F00601306180D76BD2D>I<EB0FF8EBFFFE3903F01F8039078007E000
-0F6D7E9038E001F8D81FF07F6E7EA3157F6C5AEA0380C8FCA4EC1FFF0103B5FC90381FF8
-7FEB7F803801FC00EA07F8EA0FE0485A485AA248C7FCEE038012FEA315FFA3007F5BEC03
-BF3B3F80071F8700261FC00E13CF3A07F03C0FFE3A01FFF807FC3A003FC001F0292A7DA8
-2D>97 D<EA01FC12FFA3120712031201B1EC03FC91381FFF8091387C07E09039FDE001F0
-9039FFC000FC4A137E91C77E49158049141F17C0EE0FE0A217F0A2160717F8AA17F0A216
-0FA217E0161F17C06D1580EE3F006D5C6E13FE9039F3C001F89039F1E003F09039E0780F
-C09026C03FFFC7FCC7EA07F82D407EBE33>I<49B4FC010F13E090383F00F8017C131E48
-48131F4848137F0007ECFF80485A5B121FA24848EB7F00151C007F91C7FCA290C9FC5AAB
-6C7EA3003FEC01C07F001F140316806C6C13076C6C14000003140E6C6C131E6C6C137890
-383F01F090380FFFC0D901FEC7FC222A7DA828>I<ED01FC15FFA3150715031501B114FF
-010713E190381F80F990387E003D49131FD803F81307485A49130348481301121F123F5B
-127FA290C7FCA25AAA7E7FA2123FA26C7E000F14037F000714076C6C497E6C6C497ED800
-7C017913F890383F01F190380FFFC1903A01FE01FC002D407DBE33>I<EB01FE90380FFF
-C090383F03F09038FC01F848486C7E4848137E48487F000F158049131F001F15C0484813
-0FA2127F16E090C7FCA25AA290B6FCA290C9FCA67EA27F123F16E06C7E1501000F15C06C
-6C13036DEB07806C6C1400C66C131E017E5B90381F80F8903807FFE0010090C7FC232A7E
-A828>I<EC1FC0EC7FF8903801F83C903807E07E90380FC0FFEB1FC1EB3F811401137FEC
-00FE01FE137C1500AEB6FCA3C648C7FCB3AE487E007F13FFA320407EBF1C>I<167C9039
-03F801FF903A1FFF078F8090397E0FDE1F9038F803F83803F001A23B07E000FC0600000F
-6EC7FC49137E001F147FA8000F147E6D13FE00075C6C6C485AA23901F803E03903FE0FC0
-26071FFFC8FCEB03F80006CAFC120EA3120FA27F7F6CB512E015FE6C6E7E6C15E06C8100
-03813A0FC0001FFC48C7EA01FE003E140048157E825A82A46C5D007C153E007E157E6C5D
-6C6C495A6C6C495AD803F0EB0FC0D800FE017FC7FC90383FFFFC010313C0293D7EA82D>
-I<EA01FC12FFA3120712031201B1EC01FE913807FFC091381E07E091387803F09138E001
-F8D9FDC07F148001FF6D7E91C7FCA25BA25BB3A6486C497EB5D8F87F13FCA32E3F7DBE33
->I<EA01E0EA07F8A2487EA46C5AA2EA01E0C8FCACEA01FC127FA3120712031201B3AC48
-7EB512F0A3143E7DBD1A>I<1478EB01FEA2EB03FFA4EB01FEA2EB00781400AC147FEB7F
-FFA313017F147FB3B3A5123E127F38FF807E14FEA214FCEB81F8EA7F01387C03F0381E07
-C0380FFF803801FC00185185BD1C>I<EA01FC12FFA3120712031201B292B51280A39238
-3FFC0016E0168093C7FC153C5D5D4A5AEC07C04A5A4AC8FC143E147F4A7E13FD9038FFDF
-C0EC9FE0140F496C7E01FC7F496C7E1401816E7E81826F7E151F826F7EA282486C14FEB5
-39F07FFFE0A32B3F7EBE30>I<EA01FC12FFA3120712031201B3B3B1487EB512F8A3153F
-7DBE1A>I<2701F801FE14FF00FF902707FFC00313E0913B1E07E00F03F0913B7803F03C
-01F80007903BE001F87000FC2603F9C06D487F000101805C01FBD900FF147F91C75B13FF
-4992C7FCA2495CB3A6486C496CECFF80B5D8F87FD9FC3F13FEA347287DA74C>I<3901F8
-01FE00FF903807FFC091381E07E091387803F000079038E001F82603F9C07F0001138001
-FB6D7E91C7FC13FF5BA25BB3A6486C497EB5D8F87F13FCA32E287DA733>I<14FF010713
-E090381F81F890387E007E01F8131F4848EB0F804848EB07C04848EB03E0000F15F04848
-EB01F8A2003F15FCA248C812FEA44815FFA96C15FEA36C6CEB01FCA3001F15F86C6CEB03
-F0A26C6CEB07E06C6CEB0FC06C6CEB1F80D8007EEB7E0090383F81FC90380FFFF0010090
-C7FC282A7EA82D>I<3901FC03FC00FF90381FFF8091387C0FE09039FDE003F03A07FFC0
-01FC6C496C7E6C90C7127F49EC3F805BEE1FC017E0A2EE0FF0A3EE07F8AAEE0FF0A4EE1F
-E0A2EE3FC06D1580EE7F007F6E13FE9138C001F89039FDE007F09039FC780FC0DA3FFFC7
-FCEC07F891C9FCAD487EB512F8A32D3A7EA733>I<02FF131C0107EBC03C90381F80F090
-397F00387C01FC131CD803F8130E4848EB0FFC150748481303121F485A1501485AA448C7
-FCAA6C7EA36C7EA2001F14036C7E15076C6C130F6C7E6C6C133DD8007E137990383F81F1
-90380FFFC1903801FE0190C7FCAD4B7E92B512F8A32D3A7DA730>I<3901F807E000FFEB
-1FF8EC787CECE1FE3807F9C100031381EA01FB1401EC00FC01FF1330491300A35BB3A548
-7EB512FEA31F287EA724>I<90383FC0603901FFF8E03807C03F381F000F003E1307003C
-1303127C0078130112F81400A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C7F6C1480
-000114C0D8003F13E0010313F0EB001FEC0FF800E01303A214017E1400A27E15F07E1401
-6C14E06CEB03C0903880078039F3E01F0038E0FFFC38C01FE01D2A7DA824>I<131CA613
-3CA4137CA213FCA2120112031207001FB512C0B6FCA2D801FCC7FCB3A215E0A912009038
-FE01C0A2EB7F03013F138090381F8700EB07FEEB01F81B397EB723>I<D801FC14FE00FF
-147FA3000714030003140100011400B3A51501A31503120015076DEB06FF017E010E1380
-6D4913FC90381FC078903807FFE00100903880FE002E297DA733>I<B539E00FFFE0A327
-07FE000313006C48EB00FC5E00015D7F00005DA26D13016D5CA26D6C485AA2ECC007011F
-91C7FCA290380FE00EA2ECF01E0107131CA26D6C5AA2ECFC7801011370A2ECFEF001005B
-A2EC7FC0A36E5AA26EC8FCA3140E2B287EA630>I<B53BC3FFFE03FFF8A3290FFE003FE0
-0013C06C486D48EB3F806C4817006D010F141E00016F131C15076D163C00004A6C1338A2
-017F5E4B7E151DD93F805DED3DFC1538D91FC04A5AED78FE9238707E03D90FE0017F5BED
-E03F02F0140701070387C7FC9138F1C01F02F9148F010315CE9138FB800F02FF14DE6D15
-FCED00076D5DA24A1303027E5CA2027C1301023C5C023813003D287EA642>I<B539F01F
-FFE0A30003D9C00F1300C690388007F8D97F0013E002805BD93FC05B011F49C7FC90380F
-E00EECF01E6D6C5A01035B6D6C5A6E5AEB00FF6E5A6E5A81141F814A7E81147BECF1FC90
-3801E1FEECC0FF01037F49486C7ED90F007F011E6D7E013E130F496D7E01FC80486C8000
-0F4A7EB539803FFFF8A32D277FA630>I<B539E00FFFE0A32707FE000313006C48EB01FC
-6F5A00015D7F00005DA2017F495AA2EC8003013F5CA26D6C48C7FCA26E5A010F130EA26D
-6C5AA2ECF83C01031338A26D6C5AA2ECFEF001005BA2EC7FC0A36E5AA36EC8FCA2140EA2
-141E141C143C1438A2147800181370127EB45BA2495AA248485AD87E07C9FCEA780EEA3C
-3CEA1FF8EA07E02B3A7EA630>I<001FB61280A2EBE0000180140049485A001E495A121C
-4A5A003C495A141F00385C4A5A147F5D4AC7FCC6485AA2495A495A130F5C495A90393FC0
-0380A2EB7F80EBFF005A5B484813071207491400485A48485BA248485B4848137F00FF49
-5A90B6FCA221277EA628>I<B812F0A22C0280982D>I<BE12C0A25A0280985B>I
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fx cmbx10 10.95 52
-/Fx 52 124 df<EC0780140F141FEC3E0014FE495A495A5C495A130F495A495AA249C7FC
-5B5B1201485AA212075BA2120F5B121FA3485AA4127F5BA512FFB0127FA57F123FA46C7E
-A3120F7F1207A27F1203A26C7E12007F7F6D7EA26D7E6D7E13076D7E806D7E6D7E143EEC
-1F80140F1407195A77C329>40 D<127012F8127C7EEA3F806C7E6C7E12076C7E7F6C7E6C
-7EA2137F80133F806D7EA280130FA280130780A36D7EA4807FA51580B01500A55B5CA449
-5AA35C130F5CA2131F5CA2495A5C137F91C7FC13FEA2485A485A5B485A120F485A485A00
-3EC8FC5A5A1270195A7AC329>I<EA0FC0EA1FE0EA3FF0EA7FF8EAFFFCA6EA7FF8EA3FF0
-EA1FE0EA0FC00E0E798D1D>46 D<ECFFE0010713FC011F13FF017F14C0D9FFE07F489038
-803FF03A03FE000FF848486D7EA248486D7E001F81A348486D1380A3007F16C0A500FF16
-E0B3A2007F16C0A5003F16806D5BA2001F1600A2000F5D6D13076C6C495A6C6C495A6C6D
-485A6C9038E0FFE06DB55A011F91C7FC010713FC010013E02B3D7CBB34>48
-D<140F143F5C495A130F48B5FCB6FCA313F7EAFE071200B3B3A8007FB612F0A5243C78BB
-34>I<903803FF80013F13F890B512FE00036E7E4881260FF80F7F261FC0037F4848C67F
-486C6D7E6D6D7E487E6D6D7EA26F1380A46C5A6C5A6C5A0007C7FCC8FC4B1300A25E153F
-5E4B5AA24B5A5E4A5B4A5B4A48C7FC5D4A5AEC1FE04A5A4A5A9139FF000F80EB01FC495A
-4948EB1F00495AEB1F8049C7FC017E5C5B48B7FC485D5A5A5A5A5AB7FC5EA4293C7BBB34
->I<903801FFE0010F13FE013F6D7E90B612E04801817F3A03FC007FF8D807F06D7E82D8
-0FFC131F6D80121F7FA56C5A5E6C48133FD801F05CC8FC4B5A5E4B5A4A5B020F5B902607
-FFFEC7FC15F815FEEDFFC0D9000113F06E6C7E6F7E6F7E6F7E1780A26F13C0A217E0EA0F
-C0487E487E487E487EA317C0A25D491580127F49491300D83FC0495A6C6C495A3A0FFE01
-FFF86CB65A6C5DC61580013F49C7FC010313E02B3D7CBB34>I<ED01F815031507A2150F
-151F153FA2157F15FF5C5CA25C5CEC1FBFEC3F3F143E147C14FCEB01F814F0EB03E01307
-EB0FC0EB1F801400133E137E5B485A5B485A1207485A5B48C7FC5A127E5AB812F8A5C838
-7FF800AA49B612F8A52D3C7DBB34>I<EC07FF023F13C049B512F001078049EB03FC9038
-3FF80090397FE001FE9038FFC0034849487E48495AA2485A120FA2485A6F5A003F6E5A6F
-5A92C8FC485AA21402EC3FFE00FF496C7E01F9B512E001FB809138E03FF89039FF800FFC
-4A6C7E825B6F13804915C0A317E05BA4127FA5123FA26D15C0121FA2000F4A13806D1500
-12076C6C495A6C6D485A6C9038E07FF86DB55A6D5C6D1480010749C7FC010013F02B3D7C
-BB34>54 D<ECFFF0010713FE011F6D7E017F14E09039FFC07FF03A01FE001FF848486D7E
-48486D7E1503485A8281121FA27F7F7F6D5B02C05B14F06C6D485A9138FE0FF89138FF9F
-F06CECFFE06C5D5E6C92C7FC6C816D14E0011F80498090B67E48812607FE3F7F48486C14
-80381FF807D9F00114C048486C7E007F8049010F13E0150348487F81167FA2163FA36D15
-C0127FEE7F807F6C6CECFF006C6C5B01FEEB07FE3A0FFFC03FFC6C90B55A000115E06C6C
-5C011F49C7FC010113F02B3D7CBB34>56 D<16FCA24B7EA24B7EA34B7FA24B7FA34B7FA2
-4B7FA34B7F157C03FC7FEDF87FA2020180EDF03F0203804B7E02078115C082020F814B7E
-021F811500824A81023E7F027E81027C7FA202FC814A147F49B77EA34982A2D907E0C700
-1F7F4A80010F835C83011F8391C87E4983133E83017E83017C81B500FC91B612FCA5463F
-7CBE4F>65 D<B812F8EFFF8018F018FC8426003FFCC7EA3FFF050F13807113C07113E083
-19F0A27113F8A719F05FA24D13E019C04D13804D1300EF3FFE933801FFF891B712E01880
-18F818FE02FCC7380FFF80050313C07113E07113F019F8F07FFCA2F03FFEA219FFA38460
-A419FE187FA2F0FFFC4D13F85F4D13F0053F13E0BA12C0190018FC18F095C7FC403E7DBD
-4A>I<922607FFC0130E92B500FC131E020702FF133E023FEDC07E91B7EAE1FE01039138
-803FFB499039F80003FF4901C01300013F90C8127F4948151FD9FFF8150F48491507485B
-4A1503481701485B18004890CAFC197E5A5B193E127FA349170012FFAC127F7F193EA212
-3FA27F6C187E197C6C7F19FC6C6D16F86C6D150119F06C6D15036C6DED07E0D97FFEED0F
-C06D6CED3F80010F01C0ECFF006D01F8EB03FE6D9039FF801FFC010091B55A023F15E002
-071580020002FCC7FC030713C03F407ABE4C>I<B812F8EFFF8018F018FC18FF26003FFC
-C76C13C005077F05017F716C7E727E727E727E721380A27213C0A27213E0A21AF084A21A
-F8A41AFCA5197FA319FFA51AF8A41AF0A2601AE0A24E13C0A24E13804E1300604E5A4E5A
-4D485A050713E0057F5BBA5A4EC7FC18F818C005F8C8FC463E7DBD50>I<BAFCA4198026
-003FFEC7123F1707170183183FA2181FF00FC0A31807EE07C0A3F003E0A3160F95C7FC16
-1F163F16FF91B6FCA54AC6FC163F161F040F147CA2160719F8A593C71201A219F01803A2
-1807A2180FF01FE0183F18FF1703173FBAFCA219C0A33E3D7DBC45>I<B912FEA4842600
-3FFEC77E170F1703170084A284F01F80A3180FA2EE07C0A2F007C0A4040F90C7FCA2161F
-163F16FF91B6FCA54AC6FC163F161F160FA21607A693C9FCACB712E0A53A3D7DBC42>I<
-B71280A526003FFEC7FCB3B3B0B71280A5213E7DBD28>73 D<B712E0A526003FFEC9FCB3
-AD183EA4187E187CA418FCA21701A2EF03F8A21707170F171F177FEE01FF160FB9FC18F0
-A4373E7DBD3F>76 D<B6051FB512C06F5EA26F5EA2D8003F97C7FC6F16F7A26E6CED01E7
-A26E6CED03C7A36E6CED0787A26E6CED0F07A26E6C151EA36E6D143CA26E6D1478A26E6D
-14F0A26F6CEB01E0A36F6CEB03C0A26F6CEB0780A26F6CEB0F00A36F6C131EA26F6D5AA2
-6F6D5AA26F6D5AA393387FF1E0A293383FFBC0A270B45AA37090C7FCA2705AA2705AB600
-C0031FB612C0A2705AA2705A5A3E7CBD63>I<B6037FB512E0A2818181D8003F6D913900
-1F800081A281816E7E6E7F6E7F80826E7F6E7F6E7F6E7F157F826F7F6F7F6F7F6F7F8183
-6F7F6F7F707E701380A27013C07013E07013F07013F87013FCA27013FEEF7FFF71139F71
-13DF8319FF8383838384A28484848484A284B600C080197F193F191FA24B3E7DBD52>I<
-ED3FFF0203B512F0021F14FE027F6E7E902701FFF80713E00107D9C00013F84990C7EA3F
-FCD93FFCEC0FFF49486E7F49486E7F48496E7F4A80488448496F7EA24890C96C7E4884A2
-49161F003F84A34848701380A400FF19C0AD007F19806D5EA3003F1900A26D5E6C60A26C
-6D4B5AA26C6D4B5A6C6D4A5BA26C6D4A5B6C6D4A5B6D6C4A5B6DB4023F90C7FC6D01C0EB
-FFFE0107D9F80713F8010190B612E06D5E021F4AC8FC020314F0DA003F90C9FC42407ABE
-4F>I<B812F017FF18C018F018FC26003FFCC77FEF1FFF7113807113C07113E0A27113F0
-A319F8A819F0A34D13E019C05F4D1380053F1300EFFFFE91B712F860188005FCC7FC4ACA
-FCB3A4B77EA53D3E7DBD47>I<B87E17FCEFFF8018F08428003FFC000113FE9338003FFF
-050F7F717F717FA2858385A761A25F61614D5B4D90C8FCEF3FFE4CB45A91B712F018C04D
-C9FC717E9126FC000F7F040113F0707F717EA2717EA2717EA685A6F207C019C0A271140F
-07E01380B76DEBF01F719038FC3F007190B5FC716C5B061F13F8CB000113E04A3F7DBD4E
->82 D<903A03FFC001C0011FEBF803017FEBFE0748B6128F4815DF48010013FFD80FF813
-0F48481303497F4848EB007F127F49143F161F12FF160FA27F1607A27F7F01FC91C7FCEB
-FF806C13F8ECFFC06C14FCEDFF806C15E016F86C816C816C816C16806C6C15C07F010715
-E0EB007F020714F0EC003F1503030013F8167F163F127800F8151FA2160FA27EA217F07E
-161F6C16E06D143F01E015C001F8EC7F8001FEEB01FF9026FFE00713004890B55A486C14
-F8D8F81F5CD8F00314C027E0003FFEC7FC2D407ABE3A>I<003FB912FCA5903BFE003FFE
-003FD87FF0EE0FFE01C0160349160190C71500197E127EA2007C183EA400FC183F48181F
-A5C81600B3AF010FB712F8A5403D7CBC49>I<B76C90B61280A526003FFEC9003EC7FCB3
-B3A4197E011F177C80A26D17FC616D6D14014E5A6D6D4A5A6D6D140F6D01F8EC3FC0DA7F
-FEECFF8091273FFFC00F90C8FC020F90B512FC02035D020015E0031F1480030101F8C9FC
-493F7DBD50>I<B600FC020FB512C0A5C66C48C9381F8000013F95C7FC80616D173E6F15
-7E6D177C6F15FC6D5F8118016D6D5D18036D5F6F14076D5F6F140F027F5E81181F023F93
-C8FC6F5C6E153E70137E6E157C8218FC6E6D5B17016E5DEEF0036E5DEEF8076E5D16FC17
-0F037F5CEEFE1F033F91C9FC705A6F133E17BE17FE6F5BA26F5BA26F5BA26F5BA36F5BA2
-705AA270CAFCA24A3F7EBD4F>I<007FB6013FB512F0A5D8001F01C0D9003FC7FC6D6D14
-7E18FE6D6D5C6D6D495A6D4B5A6F13076D6D5C6E6C495A4D5A6EEB803F6E01C090C8FC6E
-147E705A6E13F16EEBF9F86EEBFBF0EEFFE0806F5B5F816F7F81836F7F81834B7F4B7F5D
-83DB3F3F7FED7E1F03FE804B6C7F4A486C7F4A487E0207814B6C7F4A487E4A4880023F6E
-7E92C76C7F027E804A8201016F7F4A6E7F495A49486E7F010F6F7F4A80B600C0017F90B5
-FCA5483E7DBD4F>88 D<903807FFC0013F13F848B6FC48812607FE037F260FF8007F6DEB
-3FF0486C806F7EA36F7EA26C5A6C5AEA01E0C8FC153F91B5FC130F137F3901FFFE0F4813
-E0000F1380381FFE00485A5B485A12FF5BA4151F7F007F143F6D90387BFF806C6C01FB13
-FE391FFF07F36CEBFFE100031480C6EC003FD91FF890C7FC2F2B7DA933>97
-D<13FFB5FCA512077EAFEDFFE0020713FC021FEBFF80027F80DAFF8113F09139FC003FF8
-02F06D7E4A6D7E4A13074A80701380A218C082A318E0AA18C0A25E1880A218005E6E5C6E
-495A6E495A02FCEB7FF0903AFCFF01FFE0496CB55AD9F01F91C7FCD9E00713FCC7000113
-C033407DBE3A>I<EC7FF00107B5FC011F14C0017F14E09039FFF01FF0489038800FF848
-EB001F4848EB3FFC120F485AA2485AA2007FEC1FF849EB0FF0ED03C000FF91C7FCAB127F
-7FA3003F153E7F001F157E6C6C147C6C6C14FC91388001F86C9038C003F0C69038F81FE0
-6DB512C0011F14800107EBFE009038007FF0272B7DA92E>I<EE07F8ED07FFA5ED003F16
-1FAFEC7FF0903807FFFE011FEBFF9F017F14DF9039FFF01FFF48EBC00348EB00014848EB
-007F485A001F153F5B123FA2127F5BA212FFAA127FA37F123FA26C6C147F120F6D14FF6C
-6C01037F6C6D48EBFFE06CEBF03F6C6CB512BF6D143F010713FC010001E0EBE00033407D
-BE3A>I<ECFFF0010713FE011F6D7E017F809039FFE07FE0489038801FF048496C7E4848
-6D7E48486D7E121F491301003F81A2485A6F1380A212FFA290B7FCA401F0C9FCA5127FA2
-7F123FEE0F806C7E161F6C6C15006C6C5C6C6D137E6C9038E001FC6C9038F80FF8013FB5
-5A6D14C0010391C7FC9038007FF8292B7DA930>I<EC07FE91387FFF8049B512C0010714
-E090390FFE3FF0EB1FF090393FE07FF8EB7FC013FF1480A2489038003FF0ED1FE0ED0FC0
-92C7FCAAB612E0A500010180C7FCB3AC007FEBFF80A525407DBF20>I<903A03FF8007F0
-013F9038F83FF8499038FCFFFC48B712FE48018313F93A07FC007FC34848EB3FE1001FED
-F1FC4990381FF0F81700003F81A7001F5DA26D133F000F5D6C6C495A3A03FF83FF8091B5
-C7FC4814FC01BF5BD80F03138090CAFCA2487EA27F13F06CB6FC16F016FC6C15FF17806C
-16C06C16E01207001F16F0393FE000034848EB003F49EC1FF800FF150F90C81207A56C6C
-EC0FF06D141F003F16E001F0147FD81FFC903801FFC02707FF800F13006C90B55AC615F8
-013F14E0010101FCC7FC2F3D7DA834>I<13FFB5FCA512077EAFED1FF8EDFFFE02036D7E
-4A80DA0FE07F91381F007F023C805C4A6D7E5CA25CA35CB3A4B5D8FE0FB512E0A5333F7C
-BE3A>I<EA01F8487E487E487E481380A66C13006C5A6C5A6C5AC8FCA913FFB5FCA51207
-7EB3ABB512F8A515407CBF1D>I<13FFB5FCA512077EB3B3AFB512FCA5163F7CBE1D>108
-D<01FFD91FF8ECFFC0B590B5010713F80203DAC01F13FE4A6E487FDA0FE09026F07F077F
-91261F003FEBF8010007013EDAF9F0806C0178ECFBC04A6DB4486C7FA24A92C7FC4A5CA3
-4A5CB3A4B5D8FE07B5D8F03FEBFF80A551297CA858>I<01FFEB1FF8B5EBFFFE02036D7E
-4A80DA0FE07F91381F007F0007013C806C5B4A6D7E5CA25CA35CB3A4B5D8FE0FB512E0A5
-33297CA83A>I<EC7FF0903803FFFE011FEBFFC0017F14F09039FFE03FF8489038800FFC
-3A03FE0003FE48486D7E000F168048486D13C0A2003F16E049147F007F16F0A400FF16F8
-AA007F16F0A46C6CECFFE0A2001F16C06C6C491380A26C6C4913003A03FF800FFE6C9038
-E03FFC6C6CB512F0011F14C0010791C7FC9038007FF02D2B7DA934>I<01FFEBFFE0B500
-0713FC021FEBFF80027F80DAFF8113F09139FC007FF8000701F06D7E6C496D7E4A130F4A
-6D7E1880A27013C0A38218E0AA4C13C0A318805E18005E6E5C6E495A6E495A02FCEBFFF0
-DAFF035B92B55A029F91C7FC028713FC028113C00280C9FCACB512FEA5333B7DA83A>I<
-DA7FE01378902607FFFC13F8011FEBFF01017F14819039FFF81FC3489038E007E7489038
-8003F74890380001FF48487F001F157F5B003F153F5B127F161FA2485AAA127F7FA36C6C
-143F167F121F6C6C14FF6D5B6C6D5A6CEBC00F6CEBF03F6C6CB512BF6DEBFE3F010713F8
-010013C091C7FCAC030FB512E0A5333B7DA837>I<3901FE01FE00FF903807FF804A13E0
-4A13F0EC3F1F91387C3FF8000713F8000313F0EBFFE0A29138C01FF0ED0FE091388007C0
-92C7FCA391C8FCB3A2B6FCA525297DA82B>I<90383FFC1E48B512BE000714FE5A381FF0
-0F383F800148C7FC007E147EA200FE143EA27E7F6D90C7FC13F8EBFFE06C13FF15C06C14
-F06C806C806C806C80C61580131F1300020713C014000078147F00F8143F151F7EA27E16
-806C143F6D140001E013FF9038F803FE90B55A15F0D8F87F13C026E00FFEC7FC222B7DA9
-29>I<EB07C0A5130FA4131FA3133F137FA213FF5A1207001FEBFFFEB6FCA40001EBC000
-B3151FA96CEBE03EA2017F137EECF8FC90383FFFF86D13F0010713E001001380203B7EB9
-29>I<D9FF80EB0FF8B5EB0FFFA50007EC007F6C153FB3A5167FA316FF6C5C4B7F6C903A
-C007DFFFE09138F01F9F6DB5121F6D13FE010F13F8010101E0EBE000332A7CA83A>I<B5
-00FC90383FFFC0A5000101C0903803E0006E1307A26C5E6E130F017F5D6E131F013F92C7
-FC6E5B011F143E6E137E010F147C6E13FCA26D5C15816D5C15C36D5C15E76D5C15FF6E5B
-A36E90C8FCA26E5AA26E5AA26E5AA26E5AA232287EA737>I<B53CFC3FFFFC03FFFEA500
-03D980009039C0000F806E161F6C037F15006E496C5B6C183E836E48157E017F177C6E48
-6D13FC013F02EF5C83DAFC071401011F02C75CDAFE0FEBFE03010F02835C17FFDAFF1F14
-076D02015C03BF148F6DD9BE005C18CF03FE14DF6D49017F90C7FC18FF6D496D5AA36E48
-6D5AA26E486D5AA36E486D5AA26E486D5A47287EA74C>I<B5D8FC03B51280A5C69026E0
-007FC7FC6E13FE6D6C5B6D6C485A6D6C485A010F13076D6C485AED9FC06DEBFF806D91C8
-FC6D5B6E5AA2143F6E7E140F814A7F4A7F4A7F02FE7F903801FC7F49486C7E02F07F4948
-6C7E49486C7E011F7F49486C7FD97F008001FE6D7FB5D8C007EBFFC0A532287EA737>I<
-B500FC90383FFFC0A5000101C0903803E0006E1307A26C5E6E130F017F5D6E131F013F92
-C7FC6E5B011F143E6E137E010F147C6E13FCA26D5C15816D5C15C36D5C15E76D5C15FF6E
-5BA36E90C8FCA26E5AA26E5AA26E5AA26E5AA35D14075D000E130FD83F805B387FC01FD8
-FFE090C9FC5C143E147E5CEBC1F8387FC3F0387E0FE06CB45A6C5B6C48CAFCEA03F8323B
-7EA737>I<B912E0A43304809A34>123 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fy cmbx12 24.88 36
-/Fy 36 122 df[<18F8EF01FC1707170FEF1FF8EF3FF0EFFFE04C13C04C13804C13004C
-5A161F4C5A4C5A4C5A4B5B5D4B5B5F5D4B90C7FC4B5A157F5E4B5A5C4A5BA24A5B5C5E5C
-5E5C4A90C8FCA24A5AA25B5D5B5D5BA2495BA25B5D5BA25D5BA390B55AA25AA292C9FC5A
-A35C5AA35A5CA35AA35CA25AA65A5CA8B5FCB3A87EA8807EA67EA280A37EA3807EA37E80
-A37E81A27EA26D7FA37F81A27F817FA26D7FA27F817F817FA26E7EA26E7F80828082806E
-7FA26E7F806F7E82153F6F7E6F7F81836F7F816F7F707E707E707E160F707E7013807013
-C07013E0EF3FF0EF1FF8EF0FFC17071701EF00F8>54 206 106 282
-90 40 D[<127C12FE6C7E7F6C7E6C7EEA1FFC6C7E6C7E6C7F6C7F806C7F6D7E6D7E6D7E
-806D7F7F816D7F6D7F817F6E7E816E7EA26E7F82808280826E7FA26E7FA28280828183A2
-6F7FA2838183A28183A36F7FA283A28183A3811880A318C081A318E0A382A218F0A618F8
-82A818FCB3A818F8A85E18F0A618E0A293B5FCA318C0A35D1880A318005DA35F5DA25FA2
-4B5BA35F5DA25F5D5FA24B5BA294C7FC92B5FC5E5C5EA24A5BA24A5B5E5C5E5C5E4A90C8
-FCA24A5A5D4A5A5B5D495B495B5D5B4990C9FC5C495A495A495A485B5C485B4890CAFC48
-5A485AEA3FF0485A485A5B48CBFC127C>54 206 115 282 90 I<EB1FE0EB7FF83801FF
-FE0007EBFF804814C04814E0A24814F0A24814F8A2B612FCA86C14F8A26C14F0A26C14E0
-A26C14C06C14800001EBFE0038007FF8EB1FE01E1E6F9D41>46 D[<EF7FFF041FB512FC
-93B77E030716F0031F16FC037F16FF4AB912C00207DAF00714F04ADA8000804A01FCC700
-1F7F027F496E13FF91B500E0020380494A6E80494A6E804991C96C7F4B8249864949707F
-4B8249864949707FA290B5864B824888A24888A24B824888A24888A44888A4484A7080A5
-4888A9B61B80B3AE6C1D00A96C646F5EA46C64A46C64A36C646F5EA26C64A26C64A26F5E
-6C646D98C7FC6F5E6D626F5E6D626D6D4C5B6F5E6D6E92B55A6D626D6E4A5C6D02F00207
-5C6E6D4A91C8FC6E01FE023F5B020F6D6C90B512F86EDAF0075C020191B712C06E60033F
-4CC9FC030716F003001680041F02FCCAFCDC007F90CBFC>97 137
-119 262 116 48 D[<EF01F8EF07FC170F171F177FEE01FF1607161F93B5FC1503153F02
-03B6FC49B7FCB9FCA615C3ECFC03EBFE00C8FCB3B3B3B3B3AE003FBC12C0A9>82
-135 111 262 116 I[<93381FFFF00303B612E0033F15FC4AB812C0020717F0021F17FC
-027F17FF49BA12C0010719F049DA800F814901F8C715FE4901C0021F804948C800078149
-486F814801F00300814849708048018070804890CA6C806E70804813F002FC7080486D70
-158080486E6F15C0817315E081B6836F19F0A3861DF8A56C5CA26C5CA26C5C6C91CAFC6C
-5B000113F826007FE01AF090CCFC62A21DE0A297B6FC1DC0A24F1580A24F150064A24F5C
-64614F5C644F5C644F91C7FC96B55A4E5C634E5C4E5C4E5C634E49C8FC4E5B4E5B95B55A
-4D14C0624D91C9FC4D13FC4D5B4D5B4D13C04D5B94B5CAFC4C13FC4C5B4C5B4C49ED0FF8
-4C13804C90C9FC4C5A4C48EE1FF04B5B4B13E04B5B4B5B4B90CAFCDB3FFC173F4B4818E0
-4B5A4A5B4A49177F4A90CBFC4A4818FF5D4A485F4A48053F13C04ABBFC91BCFC5B5B5B5B
-491B805B5B90BDFC5A5A5A5A481C005A5ABEFCA464A4>93 135 117
-262 116 I[<933807FFFE93B612F80307EDFF80033F16F092B812FE0203717E020F18E0
-023F844A9026FE003F14FC91B500C0010780010301FCC70001804901F06E6C14C04901C0
-6F8092C97E4948708049488590267FFFC06F808190B500F8846F816F845A81A2486F1880
-A285A282A24C5CA37E1D0093C8FC7E6D5B6D494B5C6D5B6D5B010301C060D9007EC95A91
-CA5DA24F5C6461644F5C96B6C7FC634E5C4E5C4E14E04E5C063F5C95B548C8FC050314F8
-0407B612E00307B712804B4BC9FC19F885F1FFC01AF86F16FF92C86C14C0060714F00601
-14FC7280073F6D7E738073807314F888738085881D807315C0A21DE0861DF0A21DF8A274
-14FCA4D93FF01AFEEBFFFC000313FF4880488048804880A24880A2B67EA21DFCA45014F8
-A34B19F07E97B612E05D6C4A19C0A24B4B15806C5C6C49C948150002F84C5C6C01C0616C
-6D4C5C6C01F84C5C6C01FE4C5C6D6C6C4B5C6D01F04AB65A6D01FF020792C7FC6D02F801
-7F14FC010391B85A010019E0023F1880020F4DC8FC020117F0DA003F1680030303F8C9FC
-DB000F49CAFC>95 137 118 262 116 I[<BFFC1EFEF6FFE01FFCF7FF8020F020FC20FF
-8DC7000392CA001F15E00B0181776C800C1F807814FF0C03818A78818E79808B8E8B8E8B
-8EA27980A4791580AB551500A4555CA26A676A676A555C9CB65AA2545D5492C7FC545C54
-14F80C3F5C545C53B612800B0F4AC8FC0B7F14F80A1FB612E095BBC9FC1FF81F801FF8F7
-FF8020F820FE95CBECFFC00C1F14F00C07807814FE0C006E7E7980798079807980798079
-808E79158023C08B23E08C23F0A223F88CA223FCA38C23FEAB5614FCA55614F8A39DB612
-F0A25515E06723C055158067551500555C555C9CB6FC545D0C075D0C1F15C09BB75A0B0F
-93C7FCC212FC6921E021800EFCC8FC20F020800DF0C9FC0CFCCAFC>143
-142 120 269 165 66 D[<0803B500C0EE01F00703B600FEEE03F8077FDBFFE015070607
-B800FC150F063F05FF151F4DBA00E0143F050F07F8147F053F07FE14FF94BC5B04039326
-F8000FECC003040F4BC86CEBF007043F03C0030F6D5A93B648C900036D5A4B03F0933900
-7FFF3F030703C0051F90B5FC4B92CB7E033F02FC18034B02F08492B648844A0380193F4A
-92CD7E4A4A864A4A864A02F0864A4A864A8991B65A494B874992CF7E4C885B494A885E49
-8B494A88A2495C8D90B65A8D5A5E48217FA24892D1FC223FA25A5DA248211FA3485CFA0F
-F09FC7FCA25AA45DA3B6FCB27EA381A47EA46C80FA07F0FA0FF87EA2817EA36C6F1D1F23
-F07E827E223F6D6E1EE0A26D6E1D7F23C06D6E1DFF7F705213806D806D55130070646D6F
-646D6F515A6E6E1B1F6E6E515A6E6E515A6E6E1BFF6E6E505B6E6E505B6E6F4F5B6E03E0
-4F90C7FC6F6EF13FFE6F02FC4F5A030F02FF4E485A6F03C005075B030103F0051F5B6F03
-FE057F1380043FDAFFE00303B5C8FC040F03FE033F13FC0403DBFFF80107B55A040093B8
-12E0053F1A80050F4FC9FC050119F8DD003F18C0060795CAFCDE007F16F0070393CBFCDF
-000314C0>141 146 115 271 168 I[<BE12FEF5FFFCF6FFC01FFCF7FF8020E020FC20FF
-21C0C700030380C8000116F0E2000F810B0015FE0C1F800C0315C00C00810D3F8079800D
-0714FE79807981796C808C7A807A808F7A807A808C8F7A818DA17E8DA17E8DA17EA27B80
-A2A17E8DA17EA28DA17EA3A113808DA3A113C0A57B15E0A6A113F0B3A2A113E0A569A113
-C0A5A11380A269A2A11300A3575CA2A15AA269A15A69A15AA2575CA15A69A15A9EB6FC56
-92C7FC6B565C68565C565C565C565C9DB65A5592C8FC0D075C555C0D3F5C9CB65A0C0315
-C00C0F5D0C7F92C9FC0B07B612FC52B712F0C212C09ECAFC20FC20F020800DFCCBFC1FE0
-0CFCCCFC53CDFC>156 142 120 269 178 I[<BC12C0A9C7000103E0C8FCB3B3B3B3B3B3
-B0BC12C0A9>74 142 122 269 87 73 D[<BC12F8A9C7000303C0CEFCB3B3B3B3A5F8FF
-80A4672100A667A368A21F07A41F0FA3555AA21F3FA21F7FA21FFFA26666686666666666
-53B5FC65650B1F5C1D7F0A03B6FC1C1F0903B7FCC1FCA468A5>121
-142 120 269 140 76 D[<B900C00C7FB812E0729BB9FC72657265A37265A27265C70003
-A101F8C8FC72F51FEFA2706EF43FCFA3706EF47F8FA2706EF4FF0FA2706EF301FEA3706E
-F303FCA2706EF307F8A2706EF30FF0A2706EF31FE0A3716EF23FC0A2716EF27F80A2716E
-F2FF00A2716E4F5AA3716E4F5AA2716E4F5AA2716E4F5AA3716E4F5AA2726E4E5AA2726E
-4E5AA2726E4EC7FCA3726E4D5AA2726E4D5AA2726E4D5AA2726E4D5AA3726E4D5AA2736E
-4C5AA2736E4C5AA3736E4CC8FCA2736E4B5AA2736E4B5AA2736E4B5AA3736E4B5AA2736E
-4B5AA2746E4A5AA2746E4A5AA3746E4AC9FCA2746E495AA2746E495AA3746E495AA2746E
-495AA2746E495AA2756E485AA3756E485AA2756E48CAFCA275ECF1FEA275ECFBFCA375EC
-FFF8A2755DA2755DA3765CA2765CA27691CBFCA2765BA34A6D715B49B512FEB900FC6F49
-0303BB12E0A2765BA2765BA3775A0B1FC9FC>203 142 120 269
-220 I[<BE12F8F5FFF01EFF1FE01FFCF7FF8020E020F820FEC700030380C8000781E200
-3F15C00B03810B00810C3F8078800C07807880788178818E8B8E8B8E8B8EA28EA28B8EA4
-2380AC2300A46A67A26AA26A676A676A9CB65A6A665492C7FC545C0C1F5C545C9BB612E0
-0B075D0B3F5D0A07B648C8FC95BB12F820E0208055C9FC1FF09CCAFC1EF00BF8CBFC06C0
-D0FCB3B3B2BCFCA9>137 142 120 269 159 80 D[<93260FFFF8163E4BB600E0153F03
-1F03FE5D037FDBFFC05C0203B800F05B020F05FC5B4A05FF5B027FF0C00F91B526FE000F
-ECF01F010302C0D9007F6D5A4991C800076D5A4901FC030090B6FC4901F0163F4949160F
-4901808290B5170192CBFC4849844849181F87484984A2484984874886A248498588A248
-87A388A2B58680A36E85A280A26E8580A2818103F0725A6C6E96C7FC15FE8116E06C15FE
-EEFFE017FF6C17F0F0FF806C18F8F1FFC06C19FCF2FF806C1AE01BF86C1AFE6C747E6D1A
-E0886D866D866D1AFF6D876D87010087806E86020F86020386020086153F030F851501DB
-001F19801601DC000F18C0EF007F060717E0F0003F070316F0F1003F1A0F080315F81A00
-871B1F877514FCA287007F86486C85A288A388A36D86A31EF87FA37F1EF0A26D626D1CE0
-A27F6D5013C0A26E1B806E96B5FC6E1B0002F8606E4E5B6E626E6C5F03E04D5B03F84D5B
-03FE057F5BDBFFC093B55A04F803035C496CD9FF80021F91C7FCD9FC1F02FF49B55AD9F8
-0792B75A496C19F049C66149011F18804901074DC8FC90C817F848031F16C048030003FC
-C9FC007C04011480>102 146 115 271 129 83 D[<BC040FB912C0A9C7000303C0CD00
-1F02E0C7FC9E26007FF8C8FC7C5AB3B3B3B3B36E555AA3848022FF6BA26F65726481696F
-9CC9FC72626F66210F6F6E505AA26F6E505A6F535A6F6E1AFF734E5B706E4E5B70637002
-F04E5B706E063F90CAFC706E4E5A7002FF4D485A04006F04075B7102E0043F5B7102FC4B
-B55A050FDAFF80020F14807103FC0103B6CBFC050192B812FC716C61061F19E006031980
-060006FCCCFC071F17F007011780DF001F03F8CDFCE0001F49CEFC>162
-144 120 269 179 85 D[<BB00E0050FB812F0A9C7001F92CE00014AC7FCE7000F13C072
-09035B6E5590C8FC846E555A846E555AA2846E555A846E555A846F545A84A26F535B846F
-535B856F5390C9FC856F66210F856F535A856F535A856F66217F8570525A8570515B8570
-656886705190CAFC8670515A867064201F8670515A8670515A86716320FF86714F5B8671
-4F5B877198CBFC6787714F5A87714F5A8771621F3F87714F5A87724E5A87724D5B87A272
-4D5B88724D90CCFC88724D5A8872601E1F88724D5A88724D5A88735F1EFF88734B5B1CFF
-734B5B1D837394CDFC1D871DC773EDCFFE1DEF73EDFFFCA2735EA3735EA2745DA2745DA3
-745DA27492CEFCA2745CA3745CA2745CA2745CA3755BA2755BA2755BA27590CFFCA2F303
-FC>164 144 123 269 175 I<93B512FC037FECFFF00207B8FC023F17E091B912F84918
-FE0107727E499126C0007F14E04901E0C7000F80496D020380496D020014FE6F6F7F90B5
-70806F6F8085486E6F807380A27380A28885886C5CA26D4982886D5B6D5B010713C00101
-90CAFC90CCFCA90603B7FC050FB8FC0403B9FC167F0307BAFC153F4AB7EA807F020FEDE0
-00023F02FCC7FC91B612E0010392C8FC4914FC011F14F04914C0495C90B548C9FC485C48
-5C485C485C5A5D485CA24891CAFCA3B6FC5CA397B6FCA461806C60F107EF6C6E150F6F16
-CF6C183F6FDB7F8F806C6EDBFF0F14E06C02FCDA03FE15FE6C6E91260FFC0791B5FC6C6E
-6CD93FF817806C923AF803FFF003013F91B6487E010FEF8000010394C77E010004FC141F
-021F03F0140702010380DA007F1400DA000701F8CDFC695F79DD71>97
-D[<ED1FF0017FB5FCB7FCA9EA003F1307A27FB3B296383FFFC00607B512FE063FECFFE0
-4DB712F8050716FF051F17C0057F17F094B5D8C00F8004F301FCC714FE04F701E0023F7F
-93B50080020F804DC86C14E005F80301804D6F804D707F05808294CA804C717F4C7180A2
-4C71808BA27680A28B88A28BA28BA3888BA52080B02000A56764A267A3676467A2525CA2
-67647062704D91C7FC704D5BA2714C5B7193B55A05F04B5CDCBFF84B5CDC1FFC030F5C4B
-6CB44B91C8FC7001C0027F5B4B6C01F00103B55A4BC601FF013F14F04B6D90B712C04B01
-1F94C9FC4B6D16FC4B010316F092C86C15804A030F02F8CAFC90CB49CBFC>113
-144 121 270 129 I<94387FFFF0041FB612E093B712FE0307707E031F17F092B97E4A18
-FE020784021F9126F8000F14804A0280010014C04A49C74814E049B500F85C494A17F049
-4A5C495C494A4A14F84991C8FC5D495B90B5FC5D5A485C7314F05A4B6F14E05A7314C048
-7214804B93383FFE00F20FF84896C8FCA4485CA5B6FCB07EA281A37EA36C80A37E6F18FE
-6CF201FFA26C6E5F1CFE6C801B076C6EEF0FFC6D7F70EE1FF86DF13FF06D6E167F6D6EEE
-FFE06D02F84B13C06D6E5D6D02FF030F13806D03C0023F1300023F02F0903801FFFC6E91
-26FF801F5B020792B65A6E18C0020060033F4CC7FC030716F8030016C0041F4AC8FCDC00
-7F13C0585F78DD67>I[<F53FE098B6FC4FB7FCA996C77E1B0FA287B3B294383FFF80040F
-B512FC93B71280030716E0031F16F8037F16FE4AB9128702074AC66C13C7021F02E00107
-13F74A91C890B6FC4A01FC153F49B548150F4902E081494A81494A814991CA7E495B8749
-498390B548835A5D5AA2485CA25A5D5AA35AA25D5AA5B6FCB07EA57E81A37EA27EA2817E
-A26C80A26C626C6E5F636D7F6D6D94B6FC6D606D6D1607705D6D6E4B81010102F0157F6D
-6E92B712FE6E01FE020301EF91B512806E6D6C011F13CF020FDAF801B5120F020391B612
-FE6E17F86E6C16E0030F16800301EDFC00DB003F14E0040049C74AC8FC>113
-144 120 270 129 I<94387FFFC0040FB6FC93B712E0030716FC031F16FF037F17C04AB9
-12F00207DAF80380021F912680003F13FE4A49C7000F7F4A01F802038049B5486E804902
-C06E6C7F494A6F7F4991C9FC49727F4949707F4B84498490B548707F5A4B198048855D48
-1CC086481CE05D5A871DF05AA25D5AA21DF887A2B6FCA392BBFCA51DF00380CDFCA77EA4
-817EA37EA2817EA26CF307F06FF00FF87E816C1B1F6F19F06C1B3F6D6DF07FE06D7FF4FF
-C06D6E4C13806D6E5E6D02F04C13006D6EEE1FFE6D6E4C5A6D6C01FFEEFFF86E02E00203
-5B6E02FC021F5B02079126FFC003B55A6E92B7C7FC020060033F17F8030F17E003011780
-DB003F03FCC8FC040315C0DC000F01F8C9FC5D5F7ADD6A>I<F5FFC093260FFFFC030F13
-F04BB600E0027F7F031F03FE49B512FE037F9226FF8007800203B8EAF01F020FDDFC3F15
-804A7148133F027FDA003F90B500F014C091B500F80107ED807F4902E00101ECFC000107
-02806D6C5B93C87E49496F7F49496F7F49496F6D6D1380491A8077130090B5486F6E6C5A
-F503F84875C8FCA2484A6F80A44887AB6C63A46C6E4B5CA26C63A26D6D4B5CA26D97C9FC
-6D6D4B5B6D6D4B5B6D6D4B5B705C010102E049B512E06D02F801075C4902FF013F5C4992
-B648CAFC496002F317F090260FE07F1680031F4BCBFC90261FC00115E0DB000F01FCCCFC
-013F91CFFCA3137FA280A380A28080806E7E15F092B812F06DF0FFE01BFEF3FFC06D1AF8
-1CFE767E6D1BE06D87896D1BFE6D877F6E878A0103BD7E130F013F8890BEFC4802E0C900
-3F814891CBFC4801FC180F48490601804849727E484985884849737F88A2B55A88A66E61
-6C65A26E616C6D4F5B6C656E616C6D4F5B6C6D96B55A6C6D6C05035C6F5FC602F0051F49
-C7FC6D01FC057F5B6DD9FF800303B55A010F02F8033F14E06DDAFFE0010FB65A010192B9
-C8FCD9003F19F8020F19E0020196C9FCDA001F17F0030194CAFCDB000192CBFC6A887ADD
-74>103 D[<ED1FF0017FB5FCB7FCA9EA003F1307A27FB3B2963803FFFC073FEBFFE096B6
-12F8060715FE061F6F7E4E16E095B87E4DD9FC03804DD9C000804D48C76C7FDD0FF880DD
-1FE0824D486E804D5A05FEC881DCF1FC815F04F385EEF7F04D81EEFFC0A24D84A294C9FC
-A25EA35EA45EB3B3AFB9D8E001B912C0A9>114 143 119 270 129
-I[<EC3FC0ECFFF0010313FC497F497F498049804980A290B67EA24881A86C5DA26D5CA2
-6D5C6D5C6D91C8FC6D5B6D5B010013F0EC3FC091CAFCB3A3ED1FF0017FB5FCB7FCA9EA00
-3F1307A27FB3B3B3B0B91280A9>49 144 119 271 65 I[<ED1FF0017FB5FCB7FCA9EA00
-3F1307A27FB3B3B3B3B3B3ACB912C0A9>50 143 119 270 65 108
-D<DB3FE0913803FFFC017FB5033FEBFFE0B792B612F8060715FE061F6F7E4E16E095B87E
-4DD9FC03804DD9C000804D48C76C7FDD0FF880D8003FDB1FE08201074B486E804D5A6D03
-FEC881DCE1FC815F04E385EEE7F04D81EEEFC0A2DCFF8084A294C9FCA25EA35EA45EB3B3
-AFB9D8E001B912C0A9725D77DC81>110 D<94381FFFF00407B612C0047F15FC0303B87E
-030F17E0037F17FC4ABAFC4A9126FC007F80020F02C0010714E04A49C880027F01F8033F
-13FC91B5486F7F4902C003077F494A6F804991C96C80494970804949717F49874949717F
-A290B548717F48884B83481D80A2481DC04B83481DE0A2481DF0A3484A7114F8A4481DFC
-A5B61BFEAF6C1DFCA56C6E4D14F8A36C1DF0A36C1DE06F5F6C1DC0A26C6E4D1480A26C1D
-006F5F6C646D6D4D5B6F94B5FC6D636D6D4C5C6D6E4B5C6D6E4B5C6D02F0031F5C6D6E4B
-91C7FC6D6C01FE92B512FC6ED9FFC001075C6E02FC017F5C020791B812C0020196C8FC6E
-6C17FC031F17F003031780DB007F03FCC9FC040715C0DC001F01F0CAFC675F7ADD74>I<
-DB1FF091381FFFC0017FB50203B6FCB7021F15E095B712FC050316FF050F17C0053F17F0
-94B912FC04F1DAC01F8004F79026FC00018093B500E06D6C14C0D8003F93C86C8001074B
-030F8005F86F806D03E06F804D6F804D8194CA6C7F4C864C71805E7680A27680A27680A2
-8B88A28BA288A28BA4882080B0200064A467A26467A3525CA26764676467647062704D91
-C7FC7094B55AA2714B5C714B5C714B5C05F84B5C71033F5C05FF4B91C8FC06C049B55A04
-FB01F001075C04F801FF017F14F07190B712C0051F94C9FC7116FC050316F0DD007F1580
-060F02F8CAFC060049CBFC96CDFCB3ACB912E0A9718579DC81>I<DD7FFFEE1FE0040FB5
-00F0153F93B600FE157F03076F7E031F04E014FF92B800F85B0203834A715B021F923A00
-7FFF80074A02F0010F13C091B600C001036D5A4992C86D5A4902FCED3FF8494A031F5B49
-4A6F6C5A494AED07FE494A6FB6FC494A8193C9FC90B682484A83A2484A83A2484A83A248
-4A83A25A4B83A25AA25D5AA5B65AB07E81A47EA3817EA26C80A36C62816C62816C626C6E
-5F98B6FC6D7F6D6E5D6D606D6E5D6D6E151F6D6E5D6D6E5D6D02FE913801FFEF6E6D0207
-13CF6E02C0011F138F020F913AFC01FFFE0F020391B612FC020017F0033F16C0030F1600
-030115FCDB003F14E0040049C7FC94C9FCB3AC0703B91280A9718578DC7B>I<DB7FC049
-B47E90B6021F13F8B7027F13FE4DB67E4D15E04D814D814D01077F94263FF00F7F94387F
-C01F4D48487FD8003F16000107DAC1FE491480EEC3FC6D5DEEC7F05F16CF5F16DF4D6D14
-00A204FFC76C5BA2735B4C6E5B735B070013C04C92C8FCA45EA65EB3B3AAB912FCA9515D
-79DC5F>I<92261FFFF814F80203B638C001FC023FEDFC0791B8121F010317FF130F013F
-9038F8001F4990C8FCD9FFF8153F4801E0150F484915034849814890CAFC197F4848173F
-191F485AA2007F180FA31907487EA27FA28002E0705A6E93C8FC14FC14FF15F06CECFF80
-16FCEEFFF06CEEFF8018F06C17FE727E6C18E0856C18FC6C846C727E6C856D84011F846D
-841303010084023F83140F020183EC001FDB007F16801603DC000F15C01700183F060F14
-E0007F1703486C82727E857F85857FA2857F1BC07FA27F1B806D5F7F1B006E5E6E5F6E16
-3F6E4C5A02FC4C5A6E03035B6E6C4A5B03F0023F5B03FF0107B55A01F991B7C7FCD9F07F
-16FCD9E01F16F0D9800716C0D9000193C8FC48D9003F14F8007C020349C9FC4B5F78DD5C
->I[<ED03FEA81507A5150FA4151FA3153FA2157FA215FFA25CA25C5CA25C5C5C5C91B5FC
-13035B131F017F91B712F00007BAFCBBFCA7C74AC9FCB3B3AAF101FFB1616E17FE82A219
-076E17FC836EEE0FF871131F6E6EEB3FF071137F6E6EEBFFE06EDAFF0313C06E92B51280
-6E1700033F5D6F5D03075D030015E0041F1480040001FCC7FC>72
-132 124 258 90 I<DB0FF8F01FF0017FB594B6FCB74BB7FCA9D8003F94C77E0107190F
-A26D85B3B3B063A463A263A27F6398B6FCA26DF001FB7015036EEF07F3E00FE3806E6D15
-1FE07FC314FF6E6D6CDAFF83EDFFC06E6E010313036E02FCEB3FFE6E91B612FC020017F8
-6F16E0031F16800303EDFE00DB007F14F8040102C093C8FC725E77DC81>I<B800FE017F
-B700F8023FB612F8A9D8000F02F0C8000702C0C9003FEBF800100313806D6E6F7390C7FC
-775E6D69706F6E1607A26D6E6F6277160F6D6970706D161FA26E6E6F61516D163F6E6871
-92B6167FA26E68714A6F15FF6E68714A608A6E9DC8FC714A6F5C6E6771DA0FFD17078A6E
-06F86071021F6F140F6E67714A486C161F8A6F4D6C5F72017F6F143F6F667249486C167F
-8A6F4D6C5F72487113FFA26F02F04A6C4B5B4F17C06F4C6D94C9FCDEF807715AA26F02FC
-496D4B5A070F17F06F4C6D5EDEFE1FEFF80FA26F02FF496E4A5A073F17FC704B6E5D07FF
-EFFE3FA2704B6E4A5A1FFF704B6E5D20FFA27092C86C5DA2704A6F92CAFCA3704A6F5CA2
-704A6F5CA3704A705BA27149705BA37149705BA27149705BA37190CA6C5BA271487190CB
-FC7148715A9D5D7BDBA8>119 D<007FB800C04AB71280A9D800034ACA000791C7FC6D08
-0013F0775A6D6E4E5AA26E6E6064836E4F90C8FC836E4F5A836E4F5AA26E6E4C5AA26E6E
-5F1C3F6E6E5F1C7F836E4F5A846F4D5B846F4D90C9FCA26F6E4A5AA26F6E5D1B0F846F4D
-5A846F4D5A846F4D5AA26F6E4A5AA2706E5C627002C091CAFC6219E0704B5A19F0704B5A
-A2706E485AA2706E485AA27002FE5B1A7F19FF704B5AA2715DA27192CBFCA2715CA2715C
-A3715CA2715CA2715CA2715CA2725BA27290CCFCA3725AA2725AA24E5AA24E5AA261187F
-A24E5AA24D5B13FE2603FF804A90CDFC000F13E0486D4A5A487F486D4A5AA260B56C141F
-4D5AA24D5A17FF604C5B4A4990CEFC6C5D4C5A6C49EB3FFC4A495A6C4948485A9026FE80
-075B270FFFC03F5B6C90B6CFFC6C5D6C15F86C6C5C011F14C0010749D0FC9038007FE071
-857CDB7B>121 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fz cmsy10 10 1
-/Fz 1 14 df<923803FFC0033F13FC4AB67E020715E0913A1FFE007FF8DA7FE0EB07FE4A
-C87ED903FCED3FC0D907F0ED0FE0D90FC0ED03F049486F7E49CA7E017E177E4983498348
-48EF0F80000319C04917074848EF03E0000F19F049170148CC12F8A2001E1978003E197C
-A2003C193C007C193EA20078191EA300F8191FA248190FAA6C191FA20078191EA3007C19
-3EA2003C193C003E197CA2001E1978001F19F8A26C6CEF01F06D1703000719E06C6CEF07
-C06D170F000119806C6CEF1F006D5F017E177E6D5F6D6C4B5A6D6C4B5AD907F0ED0FE0D9
-03FCED3FC0D900FF03FFC7FCDA7FE0EB07FEDA1FFEEB7FF80207B612E002011580DA003F
-01FCC8FC030313C0484E7BBB53>13 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: FA cmr10 10 66
-/FA 66 124 df<EC0FF8EC7FFE903901F80780903907E001C090391F8000E090383F0007
-017E497EA25BA2485A6F5AED018092C8FCA9ED03F0B7FCA33901F8000F1503B3AA486C49
-7E267FFFE0B512C0A32A3B7FBA2E>12 D<DA0FF0EB1FF0DA7FFEEBFFFC903B01F80F83F0
-0F903C07E001CFC00380903C1F8000FF0001C090273F0007FE130F017E4948497EA2495C
-A248485C03076E5A03030203C7FC95C8FCA9F007E0BAFCA33C01F80003F0001F1807B3AA
-486C496C497E267FFFE0B500C1B51280A3413B7FBA45>14 D<121C127FEAFF80A213C0A3
-127F121C1200A412011380A2120313005A1206120E5A5A5A12600A1979B917>39
-D<146014E0EB01C0EB0380EB0700130E131E5B5BA25B485AA2485AA212075B120F90C7FC
-A25A121EA2123EA35AA65AB2127CA67EA3121EA2121F7EA27F12077F1203A26C7EA26C7E
-1378A27F7F130E7FEB0380EB01C0EB00E01460135278BD20>I<12C07E12707E7E7E120F
-6C7E6C7EA26C7E6C7EA21378A2137C133C133E131EA2131F7FA21480A3EB07C0A6EB03E0
-B2EB07C0A6EB0F80A31400A25B131EA2133E133C137C1378A25BA2485A485AA2485A48C7
-FC120E5A5A5A5A5A13527CBD20>I<121C127FEAFF80A213C0A3127F121C1200A4120113
-80A2120313005A1206120E5A5A5A12600A19798817>44 D<B512FCA516057F941C>I<12
-1C127FEAFF80A5EA7F00121C0909798817>I<150C151E153EA2153C157CA2157815F8A2
-15F01401A215E01403A215C01407A21580140FA215005CA2141E143EA2143C147CA21478
-14F8A25C1301A25C1303A2495AA25C130FA291C7FC5BA2131E133EA2133C137CA2137813
-F8A25B1201A25B1203A25B1207A25B120FA290C8FC5AA2121E123EA2123C127CA2127812
-F8A25A12601F537BBD2A>I<EB03F8EB1FFF90387E0FC09038F803E03901E000F0484813
-780007147C48487FA248C77EA2481580A3007EEC0FC0A600FE15E0B3007E15C0A4007F14
-1F6C1580A36C15006D5B000F143EA26C6C5B6C6C5B6C6C485A6C6C485A90387E0FC0D91F
-FFC7FCEB03F8233A7DB72A>I<EB01C013031307131F13FFB5FCA2131F1200B3B3A8497E
-007FB512F0A31C3879B72A>I<EB0FF0EB7FFE48B57E3903E03FE0390F000FF0000E6D7E
-486D7E486D7E123000706D7E126012FCB4EC7F807FA56CC7FC121CC8FCEDFF00A34A5A5D
-14035D4A5A5D140F4A5A4A5A92C7FC147C5C495A495A495A495A91C8FC011EEB01805B5B
-49130348481400485A485A000EC75A000FB6FC5A5A485CB6FCA321387CB72A>I<EB07F8
-EB3FFF4913C03901F80FF03903C007F848486C7E380E0001000F80381FE0006D7FA56C5A
-6C5AC85A1401A25D4A5AA24A5A5DEC0F80027EC7FCEB1FFCECFF809038000FE06E7EEC01
-FC816E7EED7F80A216C0A2153F16E0A2121EEA7F80487EA416C049137F007F1580007EC7
-FC0070ECFF006C495A121E390F8003F83907F00FF00001B512C06C6C90C7FCEB0FF8233A
-7DB72A>I<1538A2157815F8A2140114031407A2140F141F141B14331473146314C31301
-1483EB030313071306130C131C131813301370136013C01201EA038013005A120E120C5A
-123812305A12E0B712F8A3C73803F800AB4A7E0103B512F8A325397EB82A>I<0006140C
-D80780133C9038F003F890B5FC5D5D158092C7FC14FC38067FE090C9FCABEB07F8EB3FFE
-9038780F803907E007E090388003F0496C7E12066E7EC87EA28181A21680A4123E127F48
-7EA490C71300485C12E000605C12700030495A00385C6C1303001E495A6C6C485A3907E0
-3F800001B5C7FC38007FFCEB1FE0213A7CB72A>I<EC3FC0903801FFF0010713FC90380F
-E03E90383F800790387E001F49EB3F804848137F485AA2485A000FEC3F0049131E001F91
-C7FCA2485AA3127F90C9FCEB01FC903807FF8039FF1E07E090383801F0496C7E01607F01
-E0137E497FA249148016C0151FA290C713E0A57EA56C7E16C0A2121FED3F807F000F1500
-6C6C5B15FE6C6C5B6C6C485A3900FE07F090383FFFC06D90C7FCEB03FC233A7DB72A>I<
-12301238123E003FB612E0A316C05A168016000070C712060060140E5D151800E0143848
-5C5D5DC712014A5A92C7FC5C140E140C141C5CA25CA214F0495AA21303A25C1307A2130F
-A3495AA3133FA5137FA96DC8FC131E233B7BB82A>I<EB03F8EB1FFF017F13C09038FC07
-F03901E001F848486C7E4848137C90C77E48141E000E141F001E80A3121FA27F5D01E013
-1E6C6C133E01FC133C6D5B6C6C6C5AECC1E06CEBF3C06C01FFC7FC6C5BEB3FFF6D13C081
-017F13F801F07F3903E07FFE3907801FFF48486C1380481303003E6D13C0003CEB007F00
-7C143F0078EC0FE000F814075A1503A21501A36C15C012781503007C15806CEC07006C5C
-6C6C131ED807E0137C3903F803F0C6B55A013F1380D907FCC7FC233A7DB72A>I<EB03F8
-EB1FFF017F13C09038FC07E03903F803F048486C7E48486C7E49137E121F48487FA2007F
-158090C7FCA248EC1FC0A616E0A56C143FA27F123F001F147FA26C6C13FF3907E001DF00
-03149F3801F0033900FC0F1FD93FFC13C0EB07F090C7FC153F1680A316005D000F147E48
-7E486C5BA24A5A4A5A49485A6C48485A001C495A260F807FC7FC3807FFFC000113F03800
-3FC0233A7DB72A>I<121C127FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A5EA7F00
-121C092479A317>I<EC03FF021F13E09138FC00FCD901E0131ED90780EB0780011EC7EA
-01E00138EC00704981498148488148488190C97E48D901FC1480000ED907FFEB01C0000C
-90391F03C000001C90267E00E013E000184901701360263801F86D13700030496D133001
-03EC0FE0267007E00107133800601718495AA200E0171C484848150CAA6C6C7E1260A26D
-6C151C00701718263003F0130F0101141F00386D013F1338261800FC01771330001C017E
-9038E3F070000C90261F03C113E0000E903A07FF00FFC06CD901FCEB3F006C90CAFC7F6C
-7E6C7E13706D167C011EED03FCD90780EC1FF0D901E0ECFF80D900FC90383FFC00021FB5
-1280020301E0C7FC363C7BBA41>64 D<1538A3157CA315FEA34A7EA34A6C7EA202077FEC
-063FA2020E7FEC0C1FA2021C7FEC180FA202387FEC3007A202707FEC6003A202C07F1501
-A2D901807F81A249C77F167FA20106810107B6FCA24981010CC7121FA2496E7EA3496E7E
-A3496E7EA213E0707E1201486C81D80FFC02071380B56C90B512FEA3373C7DBB3E>I<B7
-12E016FC16FF0001903980007FC06C90C7EA1FE0707E707E707EA2707EA283A75F16035F
-4C5A4C5A4C5A4C5AEEFF8091B500FCC7FCA291C7EA7F80EE1FE0EE07F0707E707E83707E
-A21880177F18C0A7188017FFA24C13005F16034C5AEE1FF8486DEB7FF0B812C094C7FC16
-F832397DB83B>I<913A01FF800180020FEBE003027F13F8903A01FF807E07903A03FC00
-0F0FD90FF0EB039F4948EB01DFD93F80EB00FF49C8127F01FE153F12014848151F484815
-0FA248481507A2485A1703123F5B007F1601A35B00FF93C7FCAD127F6DED0180A3123F7F
-001F160318006C7E5F6C7E17066C6C150E6C6C5D00001618017F15386D6C5CD91FE05C6D
-6CEB03C0D903FCEB0F80902701FF803FC7FC9039007FFFFC020F13F002011380313D7BBA
-3C>I<B712C016F816FE000190398001FF806C90C7EA3FE0EE0FF0EE03F8707E707E177F
-A2EF3F8018C0171F18E0170F18F0A3EF07F8A418FCAC18F8A4EF0FF0A218E0A2171F18C0
-EF3F80A2EF7F0017FE4C5A4C5AEE0FF0EE3FE0486DEBFF80B8C7FC16F816C036397DB83F
->I<B812FCA30001903880000F6C90C71201EE007E173E171E170EA31706A317078316C0
-A394C7FCA31501A21503150F91B5FCA3EC000F15031501A21500A21860A318E093C712C0
-A41701A3EF0380A21707A2170F173F177F486D903807FF00B9FCA333397DB839>I<B812
-F8A30001903880001F6C90C71201EE00FC177C173C171CA2170CA4170E1706A2ED0180A2
-1700A41503A21507151F91B5FCA3EC001F15071503A21501A692C8FCAD4813C0B612C0A3
-2F397DB836>I<DBFF8013C0020FEBF001023F13FC9139FF803F03903A03FC000787D90F
-F0EB03CF4948EB00EF4948147F4948143F49C8121F485A4848150F48481507A248481503
-A2485A1701123F5B007F1600A448481600AB93B6FCA26C7E9338007FE0EF3FC0A2123F7F
-121FA26C7EA26C7EA26C7E6C7E6C6C157F6D7E6D6C14FF6D6C14EFD90FF8EB03C7D903FE
-EB0783903A00FFC03F0191393FFFFC00020F01F0130002001380383D7CBA41>I<B648B5
-12FEA30001902680000313006C90C76C5AB3A491B6FCA391C71201B3A6486D497EB648B5
-12FEA337397DB83E>I<B612C0A3C6EBC0006D5AB3B3AD497EB612C0A31A397EB81E>I<01
-3FB512E0A39039001FFC00EC07F8B3B3A3123FEA7F80EAFFC0A44A5A1380D87F005B0070
-131F6C5C6C495A6C49C7FC380781FC3801FFF038007F80233B7DB82B>I<B649B5FCA300
-0101809038007FF06C90C8EA3F80053EC7FC173C17385F5F4C5A4C5A4CC8FC160E5E5E5E
-5E4B5AED0780030EC9FC5D153E157E15FF5C4A7F4A6C7E140E4A6C7E4A6C7E14704A6C7E
-4A6C7E14804A6C7E6F7EA26F7F707EA2707E707EA2707EA2707E707EA2707E707F848448
-6D497FB6011FEBFF80A339397DB841>I<B612E0A3000101C0C8FC6C90C9FCB3AD1718A5
-17381730A31770A317F0A216011603160FEE1FE0486D13FFB8FCA32D397DB834>I<B593
-3807FFF86E5DA20001F0FC002600DFC0ED1BF8A2D9CFE01533A3D9C7F01563A3D9C3F815
-C3A2D9C1FCEC0183A3D9C0FEEC0303A2027F1406A36E6C130CA36E6C1318A26E6C1330A3
-6E6C1360A26E6C13C0A3913901FC0180A3913900FE0300A2ED7F06A3ED3F8CA2ED1FD8A3
-ED0FF0A3486C6D5A487ED80FFC6D48497EB500C00203B512F8A2ED018045397DB84C>I<
-B5913807FFFE8080C69238007FE06EEC1F80D9DFF0EC0F001706EBCFF8EBC7FCA2EBC3FE
-EBC1FFA201C07F6E7EA26E7E6E7E81140F6E7E8114036E7E168080ED7FC016E0153FED1F
-F0ED0FF8A2ED07FCED03FEA2ED01FF6F1386A2EE7FC6EE3FE6A2EE1FF6EE0FFEA2160716
-03A216011600A2177E486C153E487ED80FFC151EB500C0140EA2170637397DB83E>I<EC
-03FF021F13E09138FE01FC903901F8007ED907E0EB1F8049486D7ED93F80EB07F049C76C
-7E01FE6E7E48486E7E49157E0003167F4848ED3F80A24848ED1FC0A2001F17E049150F00
-3F17F0A3007F17F8491507A300FF17FCAC007F17F86D150FA3003F17F0A26C6CED1FE0A3
-6C6CED3FC0000717806D157F000317006C6C15FEA26C6C4A5A017F4A5A6D6C495A6D6C49
-5AD907E0EB1F80D903F8017FC7FC903900FE01FC91381FFFE0020390C8FC363D7BBA41>
-I<B712C016F816FE000190398001FF806C90C7EA3FC0EE0FE0EE07F0EE03F817FC17FE16
-01A217FFA717FEA2EE03FCA2EE07F817F0EE0FE0EE3FC0923801FF0091B512FC16F091C9
-FCB3A5487FB6FCA330397DB839>I<B612FEEDFFE016F8000190388007FE6C90C76C7EEE
-3FC0707E707E707EA2707EA283A65FA24C5AA24C5A4C5AEE3F8004FFC8FCED07FC91B512
-E05E9138000FF0ED03F8ED00FE82707E707EA2161F83A583A6F00180A217F8160F180348
-6D01071400B66D6C5A04011306933800FE0ECAEA3FFCEF07F0393B7DB83D>82
-D<D90FF813C090383FFE0190B512813903F807E33907E000F74848137F4848133F48C712
-1F003E140F007E1407A2007C140312FC1501A36C1400A37E6D14006C7E7F13F86CB47E6C
-13F8ECFF806C14E06C14F86C14FEC680013F1480010714C0EB007F020713E0EC007FED3F
-F0151F150FED07F8A200C01403A21501A37EA216F07E15036C15E06C14076C15C06C140F
-6DEB1F80D8FBF0EB3F00D8F0FE13FE39E03FFFF8010F13E0D8C00190C7FC253D7CBA2E>
-I<003FB812E0A3D9C003EB001F273E0001FE130348EE01F00078160000701770A3006017
-30A400E01738481718A4C71600B3B0913807FF80011FB612E0A335397DB83C>I<B69038
-07FFFEA3000101809038007FE06C90C8EA1F80EF0F001706B3B2170E6D150C80171C133F
-17186D6C14385F6D6C14F06D6C5C6D6C495A6D6CEB07806D6C49C7FC91387F807E91381F
-FFF8020713E09138007F80373B7DB83E>I<007FB590383FFFFCA3C601F801071380D97F
-E0D903FCC7FC013FEC01F06D6C5C5F6D6C5C6D6C13034CC8FC6D6C1306160E6D6C5B6DEB
-8018163891387FC0306E6C5A16E06E6C5A91380FF18015FB6EB4C9FC5D14036E7EA26E7F
-6F7EA24B7E15DF9138019FF09138038FF8150F91380607FC91380E03FE140C4A6C7EEC38
-000230804A6D7E14E04A6D7E49486D7E130391C76C7E01066E7E130E010C6E7E011C1401
-013C8101FE822607FF80010713E0B500E0013FEBFF80A339397EB83E>88
-D<EB1FE0EBFFFC3803E03F3907000F80390F8007E0486C6C7E13E06E7EA26E7E6C5A6C5A
-C8FCA4147FEB07FFEB3FE0EBFE00EA03F8EA0FF0EA1FC0123F485A90C7FC160C12FEA314
-01A26C13036CEB077C903980063E18383FC01E3A0FE0781FF03A03FFF00FE03A007F8007
-C026277DA52A>97 D<EA03F012FFA3120F1203B0EC1FE0EC7FF89038F1E03E9039F3801F
-809039F7000FC001FEEB07E049EB03F049EB01F85BED00FCA216FEA2167E167FAA167E16
-FEA216FC15016D14F8ED03F07F01EEEB07E001C6EB0FC09039C7801F00903881E07E9038
-00FFF8C7EA1FC0283B7EB92E>I<EB03FC90381FFF8090387E03E03901F80070484813F8
-3907E001FC380FC003A2EA1F80123F90380001F848EB00F01500A2127E12FEAA127E127F
-A26C14067F001F140E6D130C000F141C6C6C13386C6C13706C6C13E039007C07C090381F
-FF00EB07F81F277DA525>I<ED0FC0EC03FFA3EC003F150FB0EB03F8EB1FFF90387E078F
-9038F801EF3903F0007F4848133F4848131FA24848130F123F90C7FC5AA2127E12FEAA12
-7E127FA27EA26C6C131FA26C6C133F6C6C137F6C6CEBEFF03A01F801CFFF39007C078F90
-381FFE0FD907F813C0283B7DB92E>I<EB07F8EB1FFF90387C0FC03901F803E03903F001
-F0D807E013F8380FC0004848137CA248C7127E153E5A153F127E12FEA3B7FCA248C8FCA5
-127EA2127FA26C14037F001F14076C6C13060007140E6D131CD801F013386C6C13709038
-7E03E090381FFF80903803FC0020277EA525>I<147E903803FF8090380FC1E0EB1F8790
-383F0FF0137EA213FCA23901F803C091C7FCADB512FCA3D801F8C7FCB3AB487E387FFFF8
-A31C3B7FBA19>I<ED03F090390FF00FF890393FFC3C3C9039F81F707C3901F00FE03903
-E007C03A07C003E010000FECF000A248486C7EA86C6C485AA200075C6C6C485A6D485A6D
-48C7FC38073FFC38060FF0000EC9FCA4120FA213C06CB512C015F86C14FE6CECFF804815
-C03A0F80007FE048C7EA0FF0003E140348140116F8481400A56C1401007C15F06CEC03E0
-003F1407D80F80EB0F80D807E0EB3F003901FC01FC39007FFFF0010790C7FC26387EA52A
->I<EA03F012FFA3120F1203B0EC0FF0EC3FFCECF03F9039F1C01F809039F3800FC0EBF7
-0013FE496D7EA25BA35BB3A3486C497EB500C1B51280A3293A7EB92E>I<EA0380EA0FE0
-487EA56C5AEA0380C8FCAAEA03F012FFA312071203B3AA487EB512C0A312387EB717>I<
-EA03F012FFA3120F1203B1913801FFFCA39138007FC01600157C15705D4A5A4A5A4AC7FC
-141E1438147814FC13F1EBF3FEEBF73F01FE7FEBF81F496C7E8114076E7E6E7E81140015
-7E157F811680ED1FC0486CEB3FF0B500C0B5FCA3283A7EB92C>107
-D<EA03F012FFA3120F1203B3B3AD487EB512C0A3123A7EB917>I<2703F00FF0EB1FE000
-FFD93FFCEB7FF8913AF03F01E07E903BF1C01F83803F3D0FF3800FC7001F802603F70013
-CE01FE14DC49D907F8EB0FC0A2495CA3495CB3A3486C496CEB1FE0B500C1B50083B5FCA3
-40257EA445>I<3903F00FF000FFEB3FFCECF03F9039F1C01F803A0FF3800FC03803F700
-13FE496D7EA25BA35BB3A3486C497EB500C1B51280A329257EA42E>I<EB03FE90380FFF
-8090383E03E09038F800F84848137C48487F48487F4848EB0F80001F15C090C712074815
-E0A2007EEC03F0A400FE15F8A9007E15F0A2007F14076C15E0A26C6CEB0FC0000F15806D
-131F6C6CEB3F006C6C137EC66C13F890387E03F090381FFFC0D903FEC7FC25277EA52A>
-I<3903F01FE000FFEB7FF89038F1E07E9039F3801F803A0FF7000FC0D803FEEB07E049EB
-03F04914F849130116FC150016FEA3167FAA16FEA3ED01FCA26DEB03F816F06D13076DEB
-0FE001F614C09039F7803F009038F1E07E9038F0FFF8EC1FC091C8FCAB487EB512C0A328
-357EA42E>I<3807E01F00FFEB7FC09038E1E3E09038E387F0380FE707EA03E613EE9038
-EC03E09038FC0080491300A45BB3A2487EB512F0A31C257EA421>114
-D<EBFF03000313E7380F80FF381E003F487F487F00707F12F0A2807EA27EB490C7FCEA7F
-E013FF6C13E06C13F86C7F00037FC67F01071380EB007F141F00C0EB0FC01407A26C1303
-A37E15806C13077EEC0F00B4131E38F3C07C38E1FFF038C03F801A277DA521>I<1318A5
-1338A31378A313F8120112031207001FB5FCB6FCA2D801F8C7FCB215C0A93800FC011580
-EB7C03017E13006D5AEB0FFEEB01F81A347FB220>I<D803F0EB07E000FFEB01FFA3000F
-EB001F00031407B3A4150FA3151F12016D133F0000EC77F86D9038E7FF8090383F03C790
-381FFF87903A03FC07E00029267EA42E>I<B538803FFEA33A0FF8000FF06C48EB07E000
-03EC03C06D148000011500A26C6C1306A26D130E017E130CA26D5BA2EC8038011F1330A2
-6D6C5AA214E001075BA2903803F180A3D901FBC7FCA214FF6D5AA2147CA31438A227257E
-A32C>I<B53A1FFFE03FFEA3260FF8009038000FF86C48017EEB03E018C00003023EEB01
-80A26C6C013FEB0300A36C6CEC8006156FA2017E9038EFC00C15C7A2D93F016D5A158302
-81EBF038D91F831430150102C3EBF87090260FC6001360A2D907E66D5A02EC137CA2D903
-FCEB7F804A133FA2010192C7FC4A7FA20100141E4A130E0260130C37257EA33C>I<B538
-807FFFA33A03FE003FF00001EC1F80000092C7FC017E131C6D13186D6C5AECC070010F5B
-6D6C5AECF180EB03FB6DB4C8FC6D5AA2147F804A7E8114CF903801C7E090380383F09038
-0703F8EB0601496C7E011C137E49137F01787F496D7E486C80000FEC3FF0D8FFFE90B512
-80A329247FA32C>I<B538803FFEA33A0FF8000FF06C48EB07C00003EC03806C7E16007F
-00001406A2017E5BA2137F6D5BA26D6C5AA2ECC070010F1360A26D6C5AA214F101035BA2
-D901FBC7FCA214FF6D5AA2147CA31438A21430A214701460A25CA2EA7C0100FE5B130391
-C8FC1306EAFC0EEA701C6C5AEA1FF0EA0FC027357EA32C>I<B81280A2290280962A>123
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: FB cmr7 7 3
-/FB 3 52 df<13381378EA01F8121F12FE12E01200B3AB487EB512F8A215267BA521>49
-D<13FF000313E0380E03F0381800F848137C48137E00787F12FC6CEB1F80A4127CC7FC15
-005C143E147E147C5C495A495A5C495A010EC7FC5B5B903870018013E0EA018039030003
-0012065A001FB5FC5A485BB5FCA219267DA521>I<13FF000313E0380F01F8381C007C00
-30137E003C133E007E133FA4123CC7123E147E147C5C495AEB07E03801FF8091C7FC3800
-01E06D7E147C80143F801580A21238127C12FEA21500485B0078133E00705B6C5B381F01
-F03807FFC0C690C7FC19277DA521>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: FC cmr8 8 13
-/FC 13 118 df<13031307130E131C1338137013F0EA01E013C01203EA0780A2EA0F00A2
-121EA35AA45AA512F8A25AAB7EA21278A57EA47EA37EA2EA0780A2EA03C0120113E0EA00
-F013701338131C130E1307130310437AB11B>40 D<12C07E12707E7E7E120FEA07801203
-13C0EA01E0A2EA00F0A21378A3133CA4131EA5131FA2130FAB131FA2131EA5133CA41378
-A313F0A2EA01E0A2EA03C013801207EA0F00120E5A5A5A5A5A10437CB11B>I<EC0380B3
-A4B812FCA3C7D80380C7FCB3A42E2F7CA737>43 D<EB3FC0EBFFF03803E07C48487E4848
-7E497E001EEB0780A2003E14C0A248EB03E0A500FC14F0B0007C14E0A3007E1307003E14
-C0A36CEB0F806C14006D5A3807C03E3803F0FC3800FFF0EB3FC01C2D7DAB23>48
-D<130C133C137CEA03FC12FFEAFC7C1200B3B113FE387FFFFEA2172C7AAB23>I<EB7F80
-3801FFF0380780FC380E003F48EB1F8048EB0FC05A0060EB07E012F000FC14F07E1403A3
-007C1307C7FCA215E0140F15C0141F1580EC3F00147E147C5C495A495A495A495A011EC7
-FC5B5B4913305B485A4848136048C7FC000E14E0001FB5FC5A4814C0B6FCA21C2C7DAB23
->I<EB3FC03801FFF03807C0FC380E007E487FEC1F80003F14C0A2EB800F1300A2000C13
-1FC7FC1580A2EC3F00143E5C5CEB03F0EBFFC014F0EB00FC143FEC1F8015C0140F15E0A2
-EC07F0A21238127C12FEA3EC0FE012F8006014C00070131F6C1480001EEB3F00380780FC
-3801FFF038007FC01C2D7DAB23>I<EB03F8EB0FFE90383E0780EBF8013901F007C03803
-E00FEA07C0EA0F80A2391F00078091C7FC123EA2127EA2127CEB0FC038FC3FF0EBF07C38
-FDC01EB4487E01001380EC07C04814E0A214034814F0A4127CA3127EA2003E14E0140712
-1E001F14C06CEB0F803907801F003803C03E6C6C5A38007FF0EB1FC01C2D7DAB23>54
-D<B812FCA3CBFCADB812FCA32E137C9937>61 D<EB1F80EBFFF03803E0783807C03E380F
-801E381F001FEC0F80123E007E130715C0127C12FCA3B6FCA200FCC8FCA5127EA2003E14
-C0123F6C1301390F80038001C013003803E00F3801F03C38007FF8EB1FC01A207E9E1F>
-101 D<380781F838FF87FEEB8E3FEA0F9CEA07B813B0EBF01EEBE000A45BB0487EB5FCA2
-181E7E9D1C>114 D<1360A413E0A312011203A21207121FB512F0A23803E000AF1418A7
-14383801F03014703800F860EB3FE0EB0F80152A7FA81B>116 D<D807C013F800FF131F
-A2000F130100071300B21401A314033803E007EC0EFC3A01F81CFFC038007FF890391FE0
-F800221F7E9D27>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: FD cmr12 12 34
-/FD 34 122 df<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A3120113
-80120313005A1206120E5A5A5A12600B1D78891B>44 D<121EEA7F80A2EAFFC0A4EA7F80
-A2EA1E000A0A78891B>46 D<14FF010713E090381F81F890383E007C01FC133F4848EB1F
-8049130F4848EB07C04848EB03E0A2000F15F0491301001F15F8A2003F15FCA390C8FC48
-15FEA54815FFB3A46C15FEA56D1301003F15FCA3001F15F8A26C6CEB03F0A36C6CEB07E0
-000315C06D130F6C6CEB1F806C6CEB3F00013E137C90381F81F8903807FFE0010090C7FC
-28447CC131>48 D<143014F013011303131F13FFB5FC13E713071200B3B3B0497E497E00
-7FB6FCA3204278C131>I<EB03FE90381FFFC0017F13F03901F80FFC3903C001FE48486C
-7E000EC7EA7F8048EC3FC0ED1FE04815F00030140F007015F800601407126CB415FC7F7F
-1503A46C4813076CC7FCC8FC16F8A2150F16F0151F16E0A2ED3FC0ED7F8016005D5D4A5A
-4A5A4A5A5D4A5A4A5A4AC7FC147C5C5C495A495A495A49C7120C131E5B013814185B5B48
-5A4848143848C81230000E1570001FB612F0A25A5AB712E0A326427BC131>I<49B4FC01
-0F13E0013F13FC9038FE01FE3A01F0007F80D803C0EB3FC048C7EA1FE0120EED0FF0EA0F
-E0486C14F8A215077F5BA26C48130FEA03C0C813F0A3ED1FE0A2ED3FC01680ED7F0015FE
-4A5AEC03F0EC1FC0D90FFFC7FC15F090380001FCEC007FED3F80ED1FC0ED0FE016F0ED07
-F816FC150316FEA2150116FFA3121EEA7F80487EA416FE491303A2007EC713FC00701407
-003015F80038140F6C15F06CEC1FE06C6CEB3FC0D803E0EB7F803A01FE01FE0039007FFF
-F8010F13E0010190C7FC28447CC131>I<14FF010713E0011F13F890387F80FC9038FC00
-7E48487F4848EB1F804848EB0FC0000FEC07E0485AED03F0485A16F8007F140190C713FC
-A25AA216FE1500A516FFA46C5CA36C7E5D121F7F000F5C6C6C130E150C6C6C131C6C6C5B
-D8007C5B90383F01E090390FFF80FE903801FE0090C8FC150116FCA4ED03F8A216F0D80F
-801307486C14E0486C130F16C0ED1F80A249EB3F0049137E001EC75A001C495A000F495A
-3907E01FE06CB51280C649C7FCEB1FF028447CC131>57 D<121EEA7F80A2EAFFC0A4EA7F
-80A2EA1E00C7FCB3A5121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A2B78AA1B>I<B8FC17
-F017FC00019039C00007FF6C499038007FC0017FED1FE0EF07F0EF03FC717E717E84727E
-727E727EA2727E85180385A2180185A38584A31A80AD1A00A36061A36118036118076118
-0F614E5A183F614EC7FC18FEEF03FC4D5AEF1FE001FFED7FC0486DD907FFC8FCB812FC17
-F094C9FC41447CC34B>68 D<DB0FFE146092B500C013E0020314F0913A0FFC01FC019139
-3FC0003E02FFC7EA0F83D903FCEC03C74948EC01E74948EC00FF4948157F4948153F4948
-151F49C9120F485A491607120348481603A248481601A248481600A2123FA2491760127F
-A396C7FC485AAD4CB612C06C7EA293C7387FF000725A003F171F7FA2121F7F120FA26C7E
-A26C7E6C7EA26C7E6D7E6D6C153F6D7E6D6C157F6D6C15E7D903FEEC01C7D900FFEC0383
-DA3FE0EB0F01DA0FFCEBFE000203B500F81360020002E090C7FCDB0FFEC9FC42487BC54D
->71 D<010FB512FEA3D9000313806E130080B3B3AB123F487E487EA44A5A13801300006C
-495A00705C6C13076C5C6C495A6CEB1F802603E07FC7FC3800FFFCEB1FE027467BC332>
-74 D<B612F8A3000101E0C9FC6C6C5A5CB3B31830A418701860A518E0A3EF01C0A21703
-1707A2170F173F177FEE01FF48486C011F1380B9FCA334447CC33D>76
-D<ED1FFC4AB512C0913907F007F091391F8000FC027EC7123FD901F8EC0FC049486E7E49
-486E7E49486E7E49486E7E49C9127E017E8201FE834848707E4848707EA24848707EA200
-0F84491603001F84A24848707EA3007F84A24982A300FF1980AD6C6C4C1300A4003F606D
-1603A2001F60A26C6C4C5AA26C6C4C5AA20003606D161F6C6C4C5A000060017F4CC7FC6E
-5D013F5E6D6C4A5AD907E0EC03F06D6C4A5AD901FCEC1FC0D9007E4AC8FCDA1F8013FC91
-3907F007F00201B512C09126001FFCC9FC41487BC54C>79 D<B712E016FF17C000019039
-C0003FF86C6C48EB03FCEE00FF717E717E717E717E717EA284170384A760A21707604D5A
-A24D5A4D5A4DC8FCEE01FEEE07F8EE3FE091B6C9FC16FC913980007F80EE0FE0707EEE03
-FC707E160083717EA2717EA784A71A6084171FA21AE0716C13C02601FFE002071301B600
-C01680943801FC03943900FE0700CBEA3FFEF007F843467CC348>82
-D<49B41303010FEBE007013F13F89039FE00FE0FD801F8131FD807E0EB079F49EB03DF48
-486DB4FC48C8FC4881003E81127E82127C00FC81A282A37E82A27EA26C6C91C7FC7F7FEA
-3FF813FE381FFFE06C13FE6CEBFFE06C14FC6C14FF6C15C0013F14F0010F80010180D900
-1F7F14019138001FFF03031380816F13C0167F163F161F17E000C0150FA31607A37EA36C
-16C0160F7E17806C151F6C16006C5D6D147ED8FBC05CD8F9F0495AD8F07C495A90393FC0
-0FE0D8E00FB51280010149C7FC39C0003FF02B487BC536>I<B60107B500F890380FFFFE
-A3000301E0D9001F90C813F06C0180DA0FFCED3FC091C86C48ED1F006C871C0E6D6C6E7E
-1C0CA26D6C6F5DA36EDA06FF1538011F1A30A26E020E6D1470010FDB0C7F1560A26E021C
-7F0107DB183F5DA2856D6CDA301F4A5AA36D6C4A6C6C49C7FCA36D6C4A6C6C1306A3DB80
-016E130E027FDA8003140CA2DBC00380023FDA00015CA203E081021F01066D5CA36E6C48
-6E6C5AA36E6C486E6C5AA36F48EC1FE1020360A2DBFE7015F302010160020F90C8FCA2DB
-FFE015FB6E49EC07FEA36F486E5AA36FC86C5AA3031E6F5AA4030C16605F467EC364>87
-D<003FB500E0011FB5FCA3C691C7000713E0D93FFC020190C7FC6D4815FC010F6F5A6D6C
-15E0A26D6C4A5A6D6C5D4DC8FC6D6D5B6E6C13065F6E6C131C6E6C13185F6E6C13706E6C
-13605F913803FE01DA01FF5B4CC9FC6E1387ED7FC616CCED3FFC6F5A5E6F7E6F7EA26F7E
-82A203067F150E92380C7FC04B6C7E15389238301FF04B6C7E15E04B6C7E4A486C7E1403
-4B6C7E02066D7F140E020C6E7E4A6E7E143802306E7E4A6E7E14E04A6E7E49486E7E1303
-49C86C7E496F7F5B496C8201FF83000701E0020313F8B500F8021FEBFFF0A344447EC349
->I<EB07FC90383FFF809038F80FE03903C003F048C66C7E000E6D7ED80FC0137E486C13
-7F6D6D7EA36F7EA26C5AEA0380C8FCA4EC0FFF49B5FC90380FFE1FEB3FC0EBFF00EA03FC
-485A485A485A485A127F5B176048C7FCA3153FA36D137F007F14EF6D9038C7E0C0003F13
-013A1FE00783F13B07F81E03FF802701FFFC0113003A001FE0007C2B2E7CAC31>97
-D<EA01FC12FFA3120712031201B3EC03FC91380FFF8091383C07E091387001F89039FDE0
-007E02807F01FFEC1F8091C713C049EC0FE049140717F0A2EE03F8A217FCA2160117FEAB
-17FC1603A217F8A2EE07F0A26DEC0FE017C06D141F01FBEC3F80D9F380EB7E00D9E1C05B
-9039E0F001F89039C03C07E09039801FFF80C7D803FCC7FC2F467DC436>I<EC7F809038
-03FFF090380FC07C90383F000F01FCEB03804848EB01C00003140F4848EB1FE049133F12
-0F485AA2485AED1FC0007FEC070092C7FCA290C9FC5AAB7E7FA2123F16307F001F15706C
-6C146016E06C6C14C06C6C13010001EC03806C6CEB0700013F131E90381FC078903807FF
-F001001380242E7DAC2B>I<167FED3FFFA315018182B3EC7F80903803FFF090380FC07C
-90383F000E017E1307496D5AD803F87F48487F5B000F81485AA2485AA2127FA290C8FC5A
-AB7E7FA2123FA26C7EA2000F5D7F6C6C5B00035C6C6C9038077F806C6C010E13C0013F01
-1C13FE90380FC0F8903803FFE09026007F0013002F467DC436>I<EB01FE903807FFC090
-381F03F090387E00FC49137E48487F485A4848EB1F80000F15C049130F121F484814E015
-07A2007F15F090C7FCA25AA390B6FCA290C9FCA67EA27FA2123F16306C7E1670000F1560
-6D14E06C6C14C0000314016C6CEB03806C6CEB0700013E131E90381F80F8903803FFE001
-0090C7FC242E7DAC2B>I<EA01FC12FFA3120712031201B3EC01FE913807FFC091381E07
-F091383801F802707FECE000D9FDC07F5C01FF147F91C7FCA25BA35BB3A8486CECFF80B5
-D8F83F13FEA32F457DC436>104 D<EA01E0EA07F8A2487EA46C5AA2EA01E0C8FCADEA01
-FC12FFA3120712031201B3B0487EB512F8A315437DC21C>I<EA01FC12FFA31207120312
-01B3B3B3A5487EB512F8A315457DC41C>108 D<D801FC01FFEC1FE000FF010701E0EBFF
-FC913B0F03F801E07F913C3C01FC07803F800007903C7000FE0E001FC0000349D97E1C13
-0F2601FDC0D97F38804A143001FFDA3FF06D7E91C75BA2495DA3495DB3A8486C4A6C497E
-B5D8F81FB50003B512E0A34B2C7DAB52>I<3901FC01FE00FF903807FFC091381E07F091
-383801F8000701707F0003EBE0002601FDC07F5C01FF147F91C7FCA25BA35BB3A8486CEC
-FF80B5D8F83F13FEA32F2C7DAB36>I<EC7F80903803FFF090380FC0FC90383E001F496D
-7E496D7E48486D7E48486D7E48486D7E000F81A24848147E003F157FA290C87E481680A4
-4816C0AA6C1680A26D147F003F1600A2001F157E6D14FE000F5D6D130100075D6C6C495A
-6C6C495A6C6C495A013E49C7FC90381FC0FE903807FFF89038007F802A2E7DAC31>I<39
-01FC03FC00FF90380FFF8091383C07E091387001F83A07FDE000FE00030180137FD801FF
-EC3F8091C7EA1FC04915E049140F17F0160717F8160317FCA3EE01FEABEE03FCA3EE07F8
-A217F0160F6D15E0EE1FC06D143F17806EEB7E00D9FDC05B9039FCF003F891383C0FE091
-381FFF80DA03FCC7FC91C9FCAE487EB512F8A32F3F7DAB36>I<3903F803F000FFEB1FFC
-EC3C3EEC707F0007EBE0FF3803F9C000015B13FBEC007E153C01FF13005BA45BB3A748B4
-FCB512FEA3202C7DAB26>114 D<90383FE0183901FFFC383907E01F78390F0003F8001E
-1301481300007C1478127800F81438A21518A27EA27E6C6C13006C7E13FC383FFFE06C13
-FC6C13FF6C14C06C14E0C614F0011F13F81300EC0FFC140300C0EB01FE1400157E7E153E
-A27EA36C143C6C147C15786C14F86CEB01F039F38003E039F1F00F8039E07FFE0038C00F
-F01F2E7DAC26>I<1306A5130EA4131EA3133E137EA213FE12011207001FB512F0B6FCA2
-C648C7FCB3A4150CAA017E131C017F1318A26D133890381F8030ECC070903807E0E09038
-01FFC09038007F001E3E7EBC26>I<D801FC147F00FFEC3FFFA300071401000380000181
-B3A85EA35DA212006D5B017E9038077F80017F010E13C06D011C13FE90380FC078903803
-FFF09026007F8013002F2D7DAB36>I<B539F001FFFCA3000790C7EA7FE06C48EC1F8000
-011600160E0000150C6D141C6D1418A26E1338013F1430A26D6C5BA26E13E0010F5CA26D
-6C485AA2ECF803010391C7FCA2903801FC06A2ECFE0E0100130CA2EC7F18A215B8EC3FB0
-A2EC1FE0A36E5AA26E5AA36EC8FCA21406A35CA25CA2123C007E5BB4FC5CA25CEAFE0138
-7C0380D87007C9FCEA3C1EEA0FFCEA03F02E3F7EAA33>121 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: FE cmr17 17.28 12
-/FE 12 118 df<120FEA3FC0EA7FE0EAFFF0A213F8A313FC127FEA3FDCEA0F1C1200A713
-3C1338A31378A2137013F0A213E01201EA03C0A2EA078013005A121E5A5AA212300E2874
-E324>39 D<DDFFF015C0040F01FF1401047F14E00303B600F81303030F9038E003FEDB3F
-FCC7007F1307DBFFE0EC0FC002030180913803E00F4A48C83801F01F4A48ED0078DA3FF0
-EE3C3F4A48161E4A48EE0F7F4949EE07FF4990CA7E495A4948834948835C013F197F4948
-183F495A1B1F485B1B0F4890CCFCA248481907A2485A1B03121F5BA2123F1B015BA2127F
-98C8FCA35B12FFB06C7EA24EB712E0A3123F95C7000FEBF0006D06015B64001F857FA212
-0F7F1207A26C7EA26C7FA26C7FA26D7E6D7E131F806D7E6D6C5F6D7E6D6D5E6D7F6E6CEE
-07BFDA3FF8EE0F3FDA0FFCEE1F1F6EB4163E6E01C0EDFC0F020001F0913801F807DB3FFE
-EC0FE092260FFFF09038FF8003030390B538FE0001DB007F02F81300040F02C091C7FC04
-0001F8CAFC5B667AE368>71 D<B712E0A4C60280CAFCD93FFCCBFC131F5CB3B3B21A1CA6
-1A3C1A38A61A78A41AF8A21AF01901A219031907A2190F191F193F197FF001FF1807013F
-043F13E0D9FFFC0203B5FCBBFCA4466279E153>76 D<DA07FF1403023F01F05B49B512FC
-010702FF5B90260FFC0013C0D93FE090380FF01FD97F80EB03F801FEC86C5A4848157E48
-48ED1F7F48486F5A4848815B001F824981003F8290CAFC4883A2007E83A212FE84A384A2
-7EA36D82A26C7EA26D93C7FC6C7E7F7F6C7E6D7E6C13E06C13FCECFFC06C14F86CECFF80
-6C15F86DECFF80011F15E06D15F8010315FE01006F7E021F81020181DA003F80030380DB
-003F7F04037FEE007FEF1FFF71138017037113C083A2F07FE0183FA2181F00E018F0180F
-A41807A27EA47E19E0180F7E19C07E6C171F19806D163F6D17006D5E6D16FE486C5E6D4B
-5AD8FC7F1503D91F80EC0FF026F80FE04A5AD907FCEC7F8029F001FFE003FFC7FC6D6CB5
-12FC48011F14F0020314C0489026001FFEC8FC3C667AE349>83 D<B7031FB512F0A4C691
-CAEBFE00D93FFCEF3FF86D48EF0FE0A2745AA2745AB3B3B3A71A07010F96C7FC80A30107
-601A0E6E171E13031A1C6D6C173C1A386D6D1678626E7E023F4C5A6F4B5A6E6C15076E6C
-4B5A6E6C4BC8FC6E6C153E6E6C15FC9126007FC0495ADB3FF0EB0FF0DB0FFEEB7FC00303
-B6C9FC030014FC043F13F004031380546479E163>85 D<181EEF3FFEEE07FFA4EE000F17
-03A21701B3AAEDFF80020F13F8023F13FE9139FF803F81903A03FC0007C14948EB01E1D9
-1FE0EB00F94948147D4948143D49C8121F4848150F491507120348481503491501120F12
-1F5BA2123F5B127FA45B12FFAD127F7FA3123FA27F121FA26C6C1503A26C6C150712036D
-150F6C6C151F0000163D137F6D6CECF9FF6D6CEB01F1D90FF0D903C113C06D6CD90F81EB
-FF80D901FFEB7F019039007FFFFC021F13E00201010091C7FC41657CE349>100
-D<EC03FE91381FFFE091B512F8903901FE03FE903A07F0007F8049486D7ED93FC06D7E49
-C76C7E496E7E49140348488148481401000782491400000F8283485A1880123F49153FA2
-007F17C0A35BA212FF90B8FCA30180CAFCA9127F7FA3123FA27F121FEF01C06C7E17036C
-6C1680A26C6C15070001EE0F006D150E6C6C151E6D6C5C6D6C5C6D6C5CD907F0EB03E0D9
-03FC495A902700FF803FC7FC91383FFFFC020F13F00201138032417CBF3A>I<133C13FF
-487F487FA66C5B6C90C7FC133C90C8FCB3A2EB03C0EA07FF127FA41201EA007FA2133FB3
-B3AC497E497EB612E0A41B5F7DDE23>105 D<D903C0EB7FC0D807FF903807FFFCB5011F
-13FFDB7F0013C003F8EB1FF0DAC3E0EB07F80001D9C7806D7E26007FCFC76C7E02DE6E7E
-D93FFC6F7E4A6F7E4A82181F4A82727E5C727EA2727EA3727EA41A8084AC4E1300A54E5A
-A2611807A24E5A6E5E181F6E4B5A6E5E187F6E4B5A02DE4A90C7FC02CF4A5ADAC780495A
-DAC3C0EB0FF0DAC1F0EB3FE0913AC07E01FF806FB448C8FC030F13F80300138093CAFCB3
-A3497E497EB612F0A4415B7DBE49>112 D<9039078003F8D807FFEB0FFFB5013F13C092
-387C0FE0913881F01F9238E03FF00001EB838039007F8700148FEB3F8E029CEB1FE0EE0F
-C00298EB030002B890C7FCA214B014F0A25CA55CB3B0497EEBFFF8B612FCA42C3F7CBE33
->114 D<9139FFE00180010FEBFC03017FEBFF073A01FF001FCFD803F8EB03EFD807E0EB
-01FF48487F4848147F48C8123F003E151F007E150F127CA200FC1507A316037EA27E7F6C
-7E6D91C7FC13F8EA3FFE381FFFF06CEBFF806C14F86C14FF6C15C06C6C14F0011F800107
-14FED9007F7F02031480DA003F13C01503030013E0167F00E0ED1FF0160F17F86C150716
-03A36C1501A37EA26C16F016037E17E06D14076DEC0FC06D1580D8FDF0141FD8F8F8EC7F
-00013E14FC3AF01FC00FF80107B512E0D8E001148027C0003FF8C7FC2D417DBF34>I<D9
-03C0150FD807FFED1FFFB50203B5FCA40001ED0007D8007F1501A2013F81B3B25FA35FA3
-5F011F15066E140E5F130F6E4A7F01075D6D6C494813E0D901FE4948EBFFC0903A00FFC0
-1F8091393FFFFE00020F13F8020001C0EC800042407DBE49>117
-D E
-%EndDVIPSBitmapFont
-end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
-
-%%EndSetup
-%%Page: 0 1
-0 0 bop 1303 1746 a FE(Sup)t(erLU)44 b(Users')f(Guide)807
-2135 y FD(James)33 b(W.)f(Demmel)1614 2099 y FC(1)1916
-2135 y FD(John)g(R.)h(Gilb)s(ert)2596 2099 y FC(2)2897
-2135 y FD(Xiao)m(y)m(e)g(S.)f(Li)3419 2099 y FC(3)1598
-2388 y FD(Septem)m(b)s(er,)h(1999)1358 2504 y(Last)g(up)s(date:)44
-b(Octob)s(er,)33 b(2003)112 4407 y FB(1)149 4437 y FA(Computer)h
-(Science)g(Division,)h(Univ)n(ersit)n(y)e(of)h(California,)h(Berk)n
-(eley)-7 b(,)34 b(CA)g(94720.)53 b(\(demmel at cs.b)r(erk)n(eley)-7
-b(.edu\).)0 4537 y(The)27 b(researc)n(h)d(of)j(Demmel)g(and)g(Li)g(w)n
-(as)e(supp)r(orted)i(in)g(part)f(b)n(y)g(NSF)i(gran)n(t)d(ASC{9313958,)
-e(DOE)k(gran)n(t)e(DE{F)n(G03{)0 4637 y(94ER25219,)d(UT)j(Sub)r(con)n
-(tract)g(No.)g(ORA4466)e(from)i(ARP)-7 b(A)25 b(Con)n(tract)f(No.)h(D)n
-(AAL03{91{C0047,)c(DOE)k(gran)n(t)f(DE{)0 4736 y(F)n(G03{94ER25206,)e
-(and)28 b(NSF)g(Infrastructure)f(gran)n(ts)f(CD)n(A{8722788)e(and)j(CD)
-n(A{9401156.)112 4804 y FB(2)149 4834 y FA(Departmen)n(t)86
-b(of)g(Computer)g(Science,)100 b(Univ)n(ersit)n(y)85
-b(of)h(California,)99 b(San)n(ta)85 b(Barbara,)98 b(CA)86
-b(93106.)0 4933 y(\(gilb)r(ert at cs.ucsb.edu\).)42 b(The)30
-b(researc)n(h)d(of)i(this)h(author)f(w)n(as)f(supp)r(orted)i(in)f(part)
-g(b)n(y)g(the)h(Institute)g(for)f(Mathematics)0 5033
-y(and)20 b(Its)g(Applications)f(at)h(the)g(Univ)n(ersit)n(y)f(of)h
-(Minnesota)f(and)h(in)g(part)f(b)n(y)g(D)n(ARP)-7 b(A)21
-b(Con)n(tract)d(No.)34 b(D)n(ABT63-95-C0087.)0 5133 y(Cop)n(yrigh)n(t)
-413 5130 y(c)390 5133 y Fz(\015)28 b FA(1994-1997)23
-b(b)n(y)k(Xero)n(x)g(Corp)r(oration.)35 b(All)28 b(righ)n(ts)e(reserv)n
-(ed.)112 5200 y FB(3)149 5230 y FA(La)n(wrence)19 b(Berk)n(eley)f
-(National)h(Lab,)i(MS)f(50F1650,)e(1)h(Cyclotron)g(Rd,)i(Berk)n(eley)-7
-b(,)20 b(CA)g(94720.)32 b(\(xiao)n(y)n(e at nersc.go)n(v\).)0
-5330 y(This)21 b(w)n(ork)e(w)n(as)h(supp)r(orted)h(in)g(part)g(b)n(y)g
-(the)g(Director,)h(O\016ce)e(of)h(Adv)-5 b(anced)21 b(Scien)n(ti\014c)g
-(Computing)g(Researc)n(h,)g(Division)0 5429 y(of)g(Mathematical,)i
-(Information,)f(and)f(Computational)g(Sciences)g(of)g(the)h(U.S.)g
-(Departmen)n(t)g(of)f(Energy)f(under)h(con)n(tract)0
-5529 y(n)n(um)n(b)r(er)27 b(DE-A)n(C03-76SF00098.)p eop
-%%Page: 1 2
-1 1 bop 0 945 a Fy(Con)-6 b(ten)g(ts)0 1480 y Fx(1)84
-b(In)m(tro)s(duction)3136 b(3)136 1593 y Fw(1.1)94 b(Purp)s(ose)29
-b(of)i(Sup)s(erLU)66 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(3)136 1706 y(1.2)94
-b(Ov)m(erall)30 b(Algorithm)82 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(4)136 1819
-y(1.3)94 b(What)32 b(the)e(three)h(libraries)c(ha)m(v)m(e)32
-b(in)d(common)85 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(5)345
-1932 y(1.3.1)106 b(Input)29 b(and)h(Output)f(Data)j(F)-8
-b(ormats)66 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(5)345
-2045 y(1.3.2)106 b(T)-8 b(uning)29 b(P)m(arameters)j(for)e(BLAS)55
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(6)345 2158
-y(1.3.3)106 b(P)m(erformance)31 b(Statistics)50 b(.)c(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(6)345 2271 y(1.3.4)106
-b(Error)30 b(Handling)51 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(6)345 2384 y(1.3.5)106
-b(Ordering)29 b(the)h(Columns)f(of)h Fv(A)h Fw(for)f(Sparse)f(F)-8
-b(actors)94 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)131 b(7)345 2497 y(1.3.6)106 b(Iterativ)m(e)32
-b(Re\014nemen)m(t)57 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)131 b(7)345 2610 y(1.3.7)106 b(Error)30 b(Bounds)46
-b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)131 b(8)345 2722 y(1.3.8)106 b(Solving)29 b(a)i(Sequence)f(of)h
-(Related)f(Linear)g(Systems)e(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(9)345 2835 y(1.3.9)106
-b(In)m(terfacing)31 b(to)g(other)f(languages)35 b(.)46
-b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(9)136 2948 y(1.4)94
-b(Ho)m(w)32 b(the)e(three)h(libraries)c(di\013er)81 b(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131
-b(9)345 3061 y(1.4.1)106 b(Input)29 b(and)h(Output)f(Data)j(F)-8
-b(ormats)66 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(9)345
-3174 y(1.4.2)106 b(P)m(arallelism)77 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(10)345
-3287 y(1.4.3)106 b(Piv)m(oting)30 b(Strategies)h(for)f(Stabilit)m(y)i
-(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(10)345 3400 y(1.4.4)106
-b(Memory)31 b(Managemen)m(t)75 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)f(.)85 b(11)345 3513 y(1.4.5)106 b(In)m(terfacing)31
-b(to)g(other)f(languages)35 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(11)136 3626 y(1.5)94 b(P)m(erformance)30 b(.)46 b(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(11)136 3739 y(1.6)94 b(Soft)m(w)m(are)32 b(Status)e(and)g(Av)-5
-b(ailabilit)m(y)81 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(11)136 3852 y(1.7)94 b(Ac)m(kno)m(wledgemen)m(t)25
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)85 b(13)0 4055 y Fx(2)f(Sequen)m(tial)35
-b(Sup)s(erLU)g(\(V)-9 b(ersion)36 b(3.0\))2114 b(14)136
-4168 y Fw(2.1)94 b(Ab)s(out)30 b Fu(SuperLU)49 b Fw(.)c(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(14)136 4281 y(2.2)94 b(Ho)m(w)32 b(to)f(call)e(a)i
-Fu(SuperLU)d Fw(routine)c(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)f(.)85 b(14)136 4394 y(2.3)94 b(Matrix)31 b(data)g(structures)43
-b(.)j(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-85 b(17)136 4507 y(2.4)94 b Fu(Options)29 b Fw(argumen)m(t)68
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)f(.)85 b(20)136 4620 y(2.5)94 b(P)m(erm)m(utations)65
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)85 b(22)345 4733 y(2.5.1)106 b(Ordering)29
-b(for)h(sparsit)m(y)38 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)85 b(22)345 4846 y(2.5.2)106 b(P)m(artial)30
-b(piv)m(oting)g(with)f(threshold)62 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)85 b(23)136 4959 y(2.6)94 b(Symmetric)30 b(Mo)s(de)58
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)85 b(23)136 5072 y(2.7)94 b(Memory)31
-b(managemen)m(t)h(for)e Fv(L)g Fw(and)g Fv(U)83 b Fw(.)46
-b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(23)136 5185
-y(2.8)94 b(User-callable)30 b(routines)91 b(.)46 b(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(24)345
-5297 y(2.8.1)106 b(Driv)m(er)30 b(routines)57 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(24)345 5410 y(2.8.2)106 b(Computational)30 b(routines)66
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(25)345 5523 y(2.8.3)106 b(Utilit)m(y)30 b(routines)48
-b(.)e(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-85 b(25)1927 5778 y(1)p eop
-%%Page: 2 3
-2 2 bop 136 280 a Fw(2.9)94 b(Matlab)31 b(in)m(terface)84
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)85 b(27)136 393 y(2.10)49 b(Installation)72
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(28)345 506 y(2.10.1)61
-b(File)30 b(structure)48 b(.)d(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(28)345 619 y(2.10.2)61
-b(T)-8 b(esting)86 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(30)345 732 y(2.10.3)61
-b(P)m(erformance-tuning)30 b(parameters)41 b(.)k(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)85 b(31)136 845 y(2.11)49 b(Example)30 b(programs)61
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)f(.)85 b(32)136 958 y(2.12)49 b(Calling)29 b(from)g(F)-8
-b(ortran)53 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)f(.)85 b(32)0 1162 y Fx(3)f(Multithreaded)35
-b(Sup)s(erLU)g(\(V)-9 b(ersion)36 b(1.1\))1925 b(38)136
-1275 y Fw(3.1)94 b(Ab)s(out)30 b(Sup)s(erLU)p 990 1275
-28 4 v 31 w(MT)60 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)f(.)85 b(38)136 1387 y(3.2)94 b(Storage)32
-b(t)m(yp)s(es)e(for)h Fv(L)f Fw(and)f Fv(U)53 b Fw(.)46
-b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(38)136 1500 y(3.3)94 b(User-callable)30 b(routines)91
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)85 b(39)345 1613 y(3.3.1)106 b(Driv)m(er)30 b(routines)57
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)85 b(40)345 1726 y(3.3.2)106 b(Computational)30 b(routines)66
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(40)136 1839 y(3.4)94 b(Installation)72 b(.)46 b(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(41)345 1952 y(3.4.1)106 b(File)30 b(structure)48 b(.)d(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(41)345 2065 y(3.4.2)106 b(P)m(erformance)31 b(issues)49
-b(.)d(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(41)136 2178 y(3.5)94 b(Example)30 b(programs)61 b(.)46
-b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)85 b(44)136 2291 y(3.6)94 b(P)m(orting)31 b(to)g(other)f(platforms)
-38 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(44)345 2404 y(3.6.1)106 b(Creating)30 b(m)m(ultiple)e(threads)60
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(44)345
-2517 y(3.6.2)106 b(Use)31 b(of)g(m)m(utexes)57 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(45)0 2720 y Fx(4)f(Distributed)35 b(Sup)s(erLU)h(with)e(MPI)h(\(V)-9
-b(ersion)35 b(2.0\))1577 b(46)136 2833 y Fw(4.1)94 b(Ab)s(out)30
-b Fu(SuperLU)p 970 2833 29 4 v 33 w(DIST)36 b Fw(.)45
-b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-85 b(46)136 2946 y(4.2)94 b(F)-8 b(ormats)32 b(of)f(the)f(input)f
-(matrices)h Fv(A)g Fw(and)g Fv(B)90 b Fw(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-85 b(46)345 3059 y(4.2.1)106 b(Global)30 b(input)81 b(.)45
-b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-85 b(46)345 3172 y(4.2.2)106 b(Distributed)29 b(input)i(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(46)136 3285 y(4.3)94 b(Distributed)29 b(data)i(structures)f(for)g
-Fv(L)g Fw(and)g Fv(U)69 b Fw(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(47)136 3398 y(4.4)94 b(Pro)s(cess)31 b(grid)e(and)h(MPI)g(comm)m
-(unicator)52 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(48)345 3511 y(4.4.1)106 b(2D)32 b(pro)s(cess)d(grid)39
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)85 b(48)345 3624 y(4.4.2)106 b(Arbitrary)29 b(grouping)g(of)i(pro)s
-(cesses)40 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(49)136
-3737 y(4.5)94 b(Basic)31 b(steps)f(to)i(solv)m(e)e(a)h(linear)e(system)
-41 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(50)136
-3850 y(4.6)94 b(Algorithmic)29 b(bac)m(kground)58 b(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(54)136 3962 y(4.7)94 b(User-callable)30 b(routines)91
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)85 b(55)345 4075 y(4.7.1)106 b(Driv)m(er)30 b(routine)23
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)85 b(55)345 4188 y(4.7.2)106 b(Computational)30
-b(routines)66 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(57)345 4301 y(4.7.3)106 b(Utilit)m(y)30 b(routines)48
-b(.)e(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-85 b(57)136 4414 y(4.8)94 b(Installation)72 b(.)46 b(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-85 b(58)345 4527 y(4.8.1)106 b(File)30 b(structure)48
-b(.)d(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)85 b(58)345 4640 y(4.8.2)106 b(P)m(erformance-tuning)30
-b(parameters)41 b(.)k(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(59)136 4753 y(4.9)94 b(Example)30 b(programs)61 b(.)46
-b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)85 b(59)136 4866 y(4.10)49 b(F)-8 b(ortran)32 b(90)f(In)m(terface)
-83 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)f(.)85 b(60)345 4979 y(4.10.1)61 b(Callable)29 b(functions)g(in)g
-(the)h(F)-8 b(ortran)31 b(90)h(mo)s(dule)c(\014le)i Ft(spuerlu)p
-2837 4979 28 4 v 33 w(mo)s(d.f90)g Fw(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)
-85 b(64)345 5092 y(4.10.2)61 b(C)30 b(wrapp)s(er)f(functions)g
-(callable)g(b)m(y)h(F)-8 b(ortran)31 b(in)e(\014le)h
-Ft(spuerlu)p 2792 5092 V 33 w(c2f)p 2938 5092 V 33 w(wrap.c)60
-b Fw(.)46 b(.)g(.)f(.)h(.)g(.)f(.)85 b(65)1927 5778 y(2)p
-eop
-%%Page: 3 4
-3 3 bop 0 903 a Fs(Chapter)65 b(1)0 1318 y Fy(In)-6 b(tro)6
-b(duction)0 1800 y Fr(1.1)135 b(Purp)t(ose)45 b(of)g(Sup)t(erLU)0
-2003 y Fw(This)24 b(do)s(cumen)m(t)h(describ)s(es)f(a)i(collection)f
-(of)h(three)f(related)h(ANSI)f(C)g(subroutine)e(libraries)g(for)i
-(solving)f(sparse)0 2116 y(linear)42 b(systems)h(of)h(equations)f
-Fv(AX)55 b Fw(=)47 b Fv(B)5 b Fw(.)80 b(Here)44 b Fv(A)f
-Fw(is)g(a)h(square,)j(nonsingular,)d Fv(n)29 b Fq(\002)f
-Fv(n)43 b Fw(sparse)g(matrix,)0 2228 y(and)c Fv(X)48
-b Fw(and)39 b Fv(B)45 b Fw(are)40 b(dense)g Fv(n)26 b
-Fq(\002)h Fv(nr)s(hs)39 b Fw(matrices,)k(where)c Fv(nr)s(hs)g
-Fw(is)g(the)i(n)m(um)m(b)s(er)d(of)j(righ)m(t-hand)e(sides)g(and)0
-2341 y(solution)g(v)m(ectors.)72 b(Matrix)40 b Fv(A)h
-Fw(need)f(not)h(b)s(e)e(symmetric)h(or)g(de\014nite;)45
-b(indeed,)d(Sup)s(erLU)c(is)h(particularly)0 2454 y(appropriate)h(for)h
-(matrices)g(with)f(v)m(ery)i(unsymmetric)d(structure.)73
-b(All)40 b(three)h(libraries)e(use)i(v)-5 b(ariations)40
-b(of)0 2567 y(Gaussian)28 b(elimination)f(optimized)h(to)h(tak)m(e)i
-(adv)-5 b(an)m(tage)31 b(b)s(oth)e(of)g(sparsit)m(y)f(and)h(the)g
-(computer)g(arc)m(hitecture,)0 2680 y(in)g(particular)g(memory)h
-(hierarc)m(hies)f(\(cac)m(hes\))k(and)c(parallelism.)141
-2793 y(In)34 b(this)f(in)m(tro)s(duction)g(w)m(e)h(refer)g(to)i(all)d
-(three)h(libraries)e(collectiv)m(ely)i(as)h(Sup)s(erLU.)d(The)i(three)h
-(libraries)0 2906 y(within)28 b(Sup)s(erLU)g(are)j(as)g(follo)m(ws.)39
-b(Detailed)31 b(references)f(are)h(also)g(giv)m(en)f(\(see)h(also)g
-([21)q(]\).)136 3094 y Fq(\017)46 b Fx(Sequen)m(tial)24
-b(Sup)s(erLU)d Fw(is)f(designed)f(for)i(sequen)m(tial)f(pro)s(cessors)g
-(with)f(one)i(or)g(more)g(la)m(y)m(ers)g(of)g(memory)227
-3206 y(hierarc)m(h)m(y)30 b(\(cac)m(hes\))j([5].)136
-3394 y Fq(\017)46 b Fx(Multithreaded)j(Sup)s(erLU)g(\()p
-Fu(SuperLU)p 1780 3394 29 4 v 33 w(MT)p Fx(\))41 b Fw(is)h(designed)g
-(for)g(shared)g(memory)h(m)m(ultipro)s(cessors)227 3507
-y(\(SMPs\),)26 b(and)d(can)g(e\013ectiv)m(ely)i(use)e(up)f(to)j(16)f
-(or)g(32)g(parallel)e(pro)s(cessors)h(on)g(su\016cien)m(tly)f(large)i
-(matrices)227 3620 y(in)29 b(order)h(to)h(sp)s(eed)f(up)f(the)i
-(computation)f([6)q(].)136 3808 y Fq(\017)46 b Fx(Distributed)29
-b(Sup)s(erLU)h(\(Sup)s(erLU)p 1681 3808 32 4 v 37 w(DIST\))25
-b Fw(is)f(designed)g(for)h(distributed)e(memory)i(parallel)e(pro-)227
-3920 y(cessors,)41 b(using)36 b(MPI)i([26)q(])g(for)g(in)m(terpro)s
-(cess)f(comm)m(unication.)63 b(It)38 b(can)h(e\013ectiv)m(ely)f(use)g
-(h)m(undreds)e(of)227 4033 y(parallel)29 b(pro)s(cessors)h(on)g
-(su\016cien)m(tly)f(large)h(matrices)h([23)q(,)f(24)q(].)141
-4221 y(T)-8 b(able)34 b(1.1)h(summarizes)e(the)h(curren)m(t)f(status)i
-(of)f(the)g(soft)m(w)m(are.)53 b(All)32 b(the)j(routines)d(are)j
-(implemen)m(ted)d(in)0 4334 y(C,)j(with)g(parallel)e(extensions)i
-(using)f(Pthreads)h(\(POSIX)g(threads)g(for)g(shared-memory)g
-(programming\))g(or)0 4447 y(MPI)30 b(\(for)h(distributed-memory)c
-(programming\).)40 b(W)-8 b(e)32 b(pro)m(vide)d(F)-8
-b(ortran)31 b(in)m(terface)g(for)f(all)g(three)g(libraries.)p
-178 4572 3515 4 v 176 4685 4 113 v 1222 4685 V 1274 4652
-a(Sequen)m(tial)f Fu(SuperLU)p 2095 4685 V 98 w(SuperLU)p
-2489 4652 29 4 v 32 w(MT)p 2804 4685 4 113 v 245 w(SuperLU)p
-3198 4652 29 4 v 32 w(DIST)p 3690 4685 4 113 v 178 4689
-3515 4 v 176 4802 4 113 v 227 4768 a Fw(Platform)p 1222
-4802 V 694 w(serial)p 2095 4802 V 664 w(shared-memory)p
-2804 4802 V 99 w(distributed-memory)p 3690 4802 V 178
-4805 3515 4 v 176 4918 4 113 v 227 4884 a(Language)p
-1222 4918 V 668 w(C)p 2095 4918 V 807 w(C)h(+)g(Pthreads)p
-2804 4918 V 156 w(C)g(+)g(MPI)p 3690 4918 V 176 5031
-V 227 4997 a(\(with)g(F)-8 b(ortran)31 b(in)m(terface\))p
-1222 5031 V 2095 5031 V 974 w(\(or)f(pragmas\))p 2804
-5031 V 3690 5031 V 178 5034 3515 4 v 176 5147 4 113 v
-227 5113 a(Data)i(t)m(yp)s(e)p 1222 5147 V 647 w(real/complex)p
-2095 5147 V 355 w(real)p 2804 5147 V 562 w(real/complex)p
-3690 5147 V 176 5260 V 1222 5260 V 1274 5226 a(single/double)p
-2095 5260 V 340 w(double)p 2804 5260 V 445 w(double)p
-3690 5260 V 178 5263 3515 4 v 1231 5418 a(T)-8 b(able)30
-b(1.1:)42 b(Sup)s(erLU)28 b(soft)m(w)m(are)k(status.)1927
-5778 y(3)p eop
-%%Page: 4 5
-4 4 bop 141 280 a Fw(The)33 b(rest)h(of)f(the)h(In)m(tro)s(duction)e
-(is)h(organized)g(as)h(follo)m(ws.)49 b(Section)34 b(1.2)g(describ)s
-(es)e(the)i(high-lev)m(el)e(algo-)0 393 y(rithm)f(used)h(b)m(y)h(all)e
-(three)i(libraries,)e(p)s(oin)m(ting)f(out)j(some)g(common)g(features)g
-(and)f(di\013erences.)47 b(Section)33 b(1.3)0 506 y(describ)s(es)21
-b(the)i(detailed)e(algorithms,)i(data)h(structures,)f(and)f(in)m
-(terface)h(issues)f(common)g(to)i(all)d(three)i(routines.)0
-619 y(Section)k(1.4)h(describ)s(es)d(ho)m(w)i(the)g(three)h(routines)e
-(di\013er,)g(emphasizing)g(the)h(di\013erences)f(that)i(most)f
-(a\013ect)i(the)0 732 y(user.)38 b(Section)25 b(1.6)h(describ)s(es)d
-(the)i(soft)m(w)m(are)h(status,)h(including)21 b(planned)i(dev)m
-(elopmen)m(ts,)j(bug)f(rep)s(orting,)g(and)0 845 y(licensing.)0
-1131 y Fr(1.2)135 b(Ov)l(erall)47 b(Algorithm)0 1334
-y Fw(A)30 b(simple)f(description)f(of)j(sparse)f(Gaussian)f
-(elimination)f(is)h(as)i(follo)m(ws:)111 1522 y(1.)46
-b(Compute)23 b(a)g Fp(triangular)k(factorization)e Fv(P)1679
-1536 y Fo(r)1718 1522 y Fv(D)1793 1536 y Fo(r)1831 1522
-y Fv(AD)1974 1536 y Fo(c)2009 1522 y Fv(P)2067 1536 y
-Fo(c)2127 1522 y Fw(=)g Fv(LU)10 b Fw(.)38 b(Here)24
-b Fv(D)2703 1536 y Fo(r)2764 1522 y Fw(and)e Fv(D)3008
-1536 y Fo(c)3066 1522 y Fw(are)h(diagonal)f(matrices)227
-1635 y(to)44 b(equilibrate)d(the)j(system,)j Fv(P)1387
-1649 y Fo(r)1468 1635 y Fw(and)c Fv(P)1716 1649 y Fo(c)1794
-1635 y Fw(are)g Fp(p)-5 b(ermutation)47 b(matric)-5 b(es)p
-Fw(.)81 b(Prem)m(ultiplying)39 b Fv(A)44 b Fw(b)m(y)f
-Fv(P)3862 1649 y Fo(r)227 1748 y Fw(reorders)d(the)g(ro)m(ws)g(of)h
-Fv(A)p Fw(,)i(and)c(p)s(ostm)m(ultiplying)d Fv(A)41 b
-Fw(b)m(y)f Fv(P)2376 1762 y Fo(c)2451 1748 y Fw(reorders)f(the)i
-(columns)e(of)h Fv(A)p Fw(.)70 b Fv(P)3675 1762 y Fo(r)3754
-1748 y Fw(and)227 1861 y Fv(P)285 1875 y Fo(c)361 1861
-y Fw(are)41 b(c)m(hosen)g(to)h(enhance)e(sparsit)m(y)-8
-b(,)44 b(n)m(umerical)39 b(stabilit)m(y)-8 b(,)42 b(and)f(parallelism.)
-68 b Fv(L)41 b Fw(is)e(a)i(unit)f(lo)m(w)m(er)227 1974
-y(triangular)30 b(matrix)h(\()p Fv(L)1047 1988 y Fo(ii)1127
-1974 y Fw(=)c(1\))33 b(and)e Fv(U)41 b Fw(is)31 b(an)h(upp)s(er)d
-(triangular)h(matrix.)44 b(The)32 b(factorization)g(can)g(also)227
-2086 y(b)s(e)e(applied)e(to)j(non-square)f(matrices.)111
-2274 y(2.)46 b(Solv)m(e)21 b Fv(AX)32 b Fw(=)25 b Fv(B)g
-Fw(b)m(y)20 b(ev)-5 b(aluating)20 b Fv(X)33 b Fw(=)25
-b Fv(A)1635 2241 y Fn(\000)p FC(1)1729 2274 y Fv(B)30
-b Fw(=)25 b(\()p Fv(D)2037 2241 y Fn(\000)p FC(1)2034
-2297 y Fo(r)2131 2274 y Fv(P)2202 2241 y Fn(\000)p FC(1)2189
-2297 y Fo(r)2297 2274 y Fv(LU)10 b(P)2502 2241 y Fn(\000)p
-FC(1)2489 2297 y Fo(c)2596 2274 y Fv(D)2674 2241 y Fn(\000)p
-FC(1)2671 2297 y Fo(c)2768 2274 y Fw(\))2803 2241 y Fn(\000)p
-FC(1)2898 2274 y Fv(B)29 b Fw(=)c Fv(D)3167 2288 y Fo(c)3202
-2274 y Fw(\()p Fv(P)3295 2288 y Fo(c)3331 2274 y Fw(\()p
-Fv(U)3438 2241 y Fn(\000)p FC(1)3532 2274 y Fw(\()p Fv(L)3629
-2241 y Fn(\000)p FC(1)3724 2274 y Fw(\()p Fv(P)3817 2288
-y Fo(r)3856 2274 y Fw(\()p Fv(D)3966 2288 y Fo(r)4004
-2274 y Fv(B)5 b Fw(\)\)\)\)\).)227 2387 y(This)26 b(is)g(done)i
-(e\016cien)m(tly)f(b)m(y)g(m)m(ultiplying)d(from)j(righ)m(t)g(to)h
-(left)f(in)f(the)i(last)f(expression:)38 b(Scale)27 b(the)h(ro)m(ws)227
-2500 y(of)k Fv(B)k Fw(b)m(y)31 b Fv(D)639 2514 y Fo(r)678
-2500 y Fw(.)44 b(Multiplying)28 b Fv(P)1301 2514 y Fo(r)1339
-2500 y Fv(B)36 b Fw(means)31 b(p)s(erm)m(uting)f(the)i(ro)m(ws)f(of)h
-Fv(D)2713 2514 y Fo(r)2751 2500 y Fv(B)5 b Fw(.)44 b(Multiplying)28
-b Fv(L)3452 2467 y Fn(\000)p FC(1)3546 2500 y Fw(\()p
-Fv(P)3639 2514 y Fo(r)3678 2500 y Fv(D)3753 2514 y Fo(r)3791
-2500 y Fv(B)5 b Fw(\))227 2613 y(means)27 b(solving)e
-Fv(nr)s(hs)g Fw(triangular)g(systems)i(of)f(equations)g(with)g(matrix)f
-Fv(L)i Fw(b)m(y)f(substitution.)37 b(Similarly)-8 b(,)227
-2726 y(m)m(ultiplying)27 b Fv(U)784 2693 y Fn(\000)p
-FC(1)878 2726 y Fw(\()p Fv(L)975 2693 y Fn(\000)p FC(1)1070
-2726 y Fw(\()p Fv(P)1163 2740 y Fo(r)1202 2726 y Fv(D)1277
-2740 y Fo(r)1315 2726 y Fv(B)5 b Fw(\)\))30 b(means)h(solving)e
-(triangular)f(systems)j(with)e Fv(U)10 b Fw(.)141 2913
-y(The)37 b(simplest)f(implemen)m(tation,)j(used)e(b)m(y)g(the)h
-(\\simple)e(driv)m(er)h(routines")g(within)e(Sup)s(erLU)h(and)h(Su-)0
-3026 y(p)s(erLU)p 260 3026 28 4 v 32 w(MT,)30 b(is)g(as)g(follo)m(ws:)0
-3199 y Fx(Simple)k(Driv)m(er)h(Algorithm)111 3387 y Fw(1.)46
-b Fp(Cho)-5 b(ose)29 b Fv(P)591 3401 y Fo(c)652 3387
-y Fp(to)e(or)-5 b(der)29 b(the)e(c)-5 b(olumns)28 b(of)f
-Fv(A)d Fw(to)g(increase)g(the)g(sparsit)m(y)f(of)h(the)g(computed)g
-Fv(L)g Fw(and)f Fv(U)34 b Fw(factors,)227 3500 y(and)c(hop)s(efully)e
-(increase)i(parallelism)d(\(for)k(Sup)s(erLU)p 2142 3500
-V 30 w(MT\).)111 3687 y(2.)46 b Fp(Compute)e(the)f(LU)f(factorization)j
-(of)d Fv(AP)1734 3701 y Fo(c)1770 3687 y Fp(.)72 b Fw(Sup)s(erLU)40
-b(and)g(Sup)s(erLU)p 2816 3687 V 31 w(MT)h(can)g(p)s(erform)f(dynamic)
-227 3800 y(piv)m(oting)33 b(of)h(the)h(ro)m(ws)e(during)f
-(factorization)j(for)e(n)m(umerical)g(stabilit)m(y)-8
-b(,)34 b(computing)f Fv(P)3339 3814 y Fo(r)3377 3800
-y Fw(,)i Fv(L)f Fw(and)f Fv(U)44 b Fw(at)227 3913 y(the)31
-b(same)g(time.)111 4101 y(3.)46 b Fp(Solve)33 b(the)g(system)e
-Fw(using)e Fv(P)1206 4115 y Fo(r)1245 4101 y Fw(,)h Fv(P)1358
-4115 y Fo(c)1393 4101 y Fw(,)h Fv(L)f Fw(and)g Fv(U)40
-b Fw(as)31 b(describ)s(ed)d(ab)s(o)m(v)m(e.)42 b(\()p
-Fv(D)2737 4115 y Fo(r)2801 4101 y Fw(=)25 b Fv(D)2972
-4115 y Fo(c)3032 4101 y Fw(=)g Fv(I)7 b Fw(\))141 4288
-y(The)35 b(simple)d(driv)m(er)i(subroutines)f(for)h(double)g(precision)
-f(real)h(data)i(are)f(called)f Fu(dgssv)g Fw(and)g Fu(pdgssv)f
-Fw(for)0 4401 y(Sup)s(erLU)41 b(and)i(Sup)s(erLU)p 950
-4401 V 31 w(MT,)h(resp)s(ectiv)m(ely)-8 b(.)79 b(The)43
-b(letter)h Fu(d)f Fw(in)f(the)h(subroutine)f(names)h(means)g(double)0
-4514 y(precision)26 b(real;)j(other)f(options)g(are)g
-Fu(s)g Fw(for)g(single)f(precision)f(real,)j Fu(c)e Fw(for)h(single)f
-(precision)f(complex,)j(and)e Fu(z)h Fw(for)0 4627 y(double)23
-b(precision)g(complex.)39 b(The)24 b(subroutine)e(naming)i(sc)m(heme)h
-(is)f(analogous)h(to)h(the)e(one)h(used)f(in)g(LAP)-8
-b(A)m(CK)0 4740 y([1)q(].)141 4853 y(Sup)s(erLU)p 503
-4853 V 31 w(DIST)30 b(do)s(es)g(not)g(include)e(this)i(simple)e(driv)m
-(er.)141 4966 y(There)h(is)f(also)i(an)f(\\exp)s(ert)g(driv)m(er)f
-(subroutine")g(that)i(can)g(pro)m(vide)e(more)i(accurate)g(solutions,)f
-(compute)0 5079 y(error)k(b)s(ounds,)f(and)h(solv)m(e)h(a)g(sequence)g
-(of)g(related)f(linear)f(systems)h(more)h(economically)-8
-b(.)50 b(It)34 b(is)e(a)m(v)-5 b(ailable)33 b(in)0 5192
-y(all)c(three)i(libraries.)0 5365 y Fx(Exp)s(ert)j(Driv)m(er)i
-(Algorithm)1927 5778 y Fw(4)p eop
-%%Page: 5 6
-5 5 bop 111 280 a Fw(1.)46 b Fp(Equilibr)-5 b(ate)33
-b Fw(the)g(matrix)f Fv(A)p Fw(,)i(i.e.)48 b(compute)33
-b(diagonal)f(matrices)g Fv(D)2611 294 y Fo(r)2682 280
-y Fw(and)h Fv(D)2937 294 y Fo(c)3004 280 y Fw(so)g(that)3342
-257 y(^)3318 280 y Fv(A)c Fw(=)g Fv(D)3590 294 y Fo(r)3628
-280 y Fv(AD)3771 294 y Fo(c)3839 280 y Fw(is)227 393
-y(\\b)s(etter)34 b(conditioned")e(than)h Fv(A)p Fw(,)h(i.e.)1615
-370 y(^)1591 393 y Fv(A)1659 360 y Fn(\000)p FC(1)1787
-393 y Fw(is)e(less)g(sensitiv)m(e)h(to)h(p)s(erturbations)c(in)3237
-370 y(^)3213 393 y Fv(A)k Fw(than)e Fv(A)3597 360 y Fn(\000)p
-FC(1)3725 393 y Fw(is)g(to)227 506 y(p)s(erturbations)c(in)i
-Fv(A)p Fw(.)111 693 y(2.)46 b Fp(Pr)-5 b(e)g(or)g(der)27
-b(the)e(r)-5 b(ows)27 b(of)1059 670 y Fw(^)1035 693 y
-Fv(A)e Fp(\(Sup)-5 b(erLU)p 1517 693 28 4 v 34 w(DIST)25
-b(only\))p Fw(,)g(i.e.)37 b(replace)2518 670 y(^)2494
-693 y Fv(A)22 b Fw(b)m(y)f Fv(P)2759 707 y Fo(r)2822
-670 y Fw(^)2798 693 y Fv(A)h Fw(where)f Fv(P)3200 707
-y Fo(r)3260 693 y Fw(is)g(a)h(p)s(erm)m(utation)227 806
-y(matrix.)59 b(W)-8 b(e)38 b(call)d(this)h(step)g(\\static)i(piv)m
-(oting",)g(and)e(it)g(is)g(only)f(done)i(in)e(the)h(distributed)e
-(memory)227 919 y(algorithm.)111 1107 y(3.)46 b Fp(Or)-5
-b(der)47 b(the)g(c)-5 b(olumns)47 b(of)1176 1084 y Fw(^)1152
-1107 y Fv(A)e Fw(to)h(increase)f(the)g(sparsit)m(y)f(of)i(the)f
-(computed)g Fv(L)f Fw(and)h Fv(U)55 b Fw(factors,)50
-b(and)227 1219 y(hop)s(efully)22 b(increase)i(parallelism)d(\(for)k
-(Sup)s(erLU)p 1941 1219 V 30 w(MT)g(and)e(Sup)s(erLU)p
-2672 1219 V 31 w(DIST\).)h(In)g(other)h(w)m(ords,)g(replace)251
-1309 y(^)227 1332 y Fv(A)31 b Fw(b)m(y)476 1309 y(^)452
-1332 y Fv(AP)591 1299 y Fo(T)578 1355 y(c)677 1332 y
-Fw(in)e(Sup)s(erLU)f(and)i(Sup)s(erLU)p 1707 1332 V 31
-w(MT,)g(or)h(replace)2381 1309 y(^)2357 1332 y Fv(A)g
-Fw(b)m(y)f Fv(P)2640 1346 y Fo(c)2699 1309 y Fw(^)2675
-1332 y Fv(AP)2814 1299 y Fo(T)2801 1355 y(c)2900 1332
-y Fw(in)f(Sup)s(erLU)p 3368 1332 V 30 w(DIST,)h(where)227
-1445 y Fv(P)285 1459 y Fo(c)351 1445 y Fw(is)f(a)i(p)s(erm)m(utation)e
-(matrix.)111 1633 y(4.)46 b Fp(Compute)31 b(the)f(LU)g(factorization)i
-(of)1569 1610 y Fw(^)1545 1633 y Fv(A)p Fp(.)39 b Fw(Sup)s(erLU)25
-b(and)i(Sup)s(erLU)p 2598 1633 V 31 w(MT)g(can)h(p)s(erform)e(dynamic)g
-(piv)m(ot-)227 1745 y(ing)k(of)h(the)g(ro)m(ws)g(during)e
-(factorization)i(for)g(n)m(umerical)e(stabilit)m(y)-8
-b(.)42 b(In)30 b(con)m(trast,)i(Sup)s(erLU)p 3462 1745
-V 31 w(DIST)e(uses)227 1858 y(the)36 b(order)f(computed)g(b)m(y)h(the)g
-(preordering)d(step)j(but)f(replaces)g(tin)m(y)g(piv)m(ots)g(b)m(y)h
-(larger)f(n)m(um)m(b)s(ers)f(for)227 1971 y(stabilit)m(y)-8
-b(.)111 2158 y(5.)46 b Fp(Solve)33 b(the)g(system)e Fw(using)e(the)i
-(computed)f(triangular)f(factors.)111 2346 y(6.)46 b
-Fp(Iter)-5 b(atively)31 b(r)-5 b(e\014ne)30 b(the)f(solution)p
-Fw(,)g(again)e(using)e(the)i(computed)g(triangular)e(factors.)41
-b(This)25 b(is)g(equiv)-5 b(alen)m(t)227 2459 y(to)31
-b(Newton's)g(metho)s(d.)111 2646 y(7.)46 b Fp(Compute)30
-b(err)-5 b(or)31 b(b)-5 b(ounds.)40 b Fw(Both)27 b(forw)m(ard)f(and)g
-(bac)m(kw)m(ard)h(error)g(b)s(ounds)d(are)j(computed,)g(as)g(describ)s
-(ed)227 2759 y(b)s(elo)m(w.)141 2945 y(The)36 b(exp)s(ert)g(driv)m(er)g
-(subroutines)e(for)i(double)f(precision)g(real)h(data)i(are)f(called)e
-Fu(dgssvx)p Fw(,)i Fu(pdgssvx)e Fw(and)0 3058 y Fu(pdgssvx)h
-Fw(for)h(Sup)s(erLU,)f(Sup)s(erLU)p 1298 3058 V 31 w(MT)h(and)g(Sup)s
-(erLU)p 2056 3058 V 31 w(DIST,)g(resp)s(ectiv)m(ely)-8
-b(.)63 b(Sequen)m(tial)36 b(Sup)s(erLU)g(also)0 3171
-y(pro)m(vides)f(single)f(precision)g(real)h(\()p Fu(s)p
-Fw(\),)i(single)e(precision)e(complex)j(\()p Fu(c)p Fw(\),)h(and)e
-(double)f(precision)g(complex)i(\()p Fu(z)p Fw(\))0 3284
-y(v)m(ersions.)79 b(Sup)s(erLU)p 781 3284 V 30 w(MT)44
-b(only)e(pro)m(vides)g(double)g(precision)f(real)i(\()p
-Fu(d)p Fw(\).)80 b(Sup)s(erLU)p 3056 3284 V 31 w(DIST)42
-b(pro)m(vides)h(b)s(oth)0 3397 y(double)29 b(precision)f(real)i(\()p
-Fu(d)p Fw(\))h(and)f(complex)g(\()p Fu(z)p Fw(\).)141
-3510 y(The)j(driv)m(er)f(routines)g(are)i(comp)s(osed)f(of)g(sev)m
-(eral)h(lo)m(w)m(er)g(lev)m(el)f(computational)g(routines)f(for)h
-(computing)0 3623 y(p)s(erm)m(utations,)e(computing)f(LU)i
-(factorization,)g(solving)e(triangular)g(systems,)i(and)e(so)i(on.)44
-b(The)30 b(LU)i(factor-)0 3736 y(ization)g(routine)g(for)h(all)f(three)
-h(libraries)d(also)j(handles)e(nonsquare)h(matrices.)48
-b(F)-8 b(or)34 b(large)f(matrices,)h(the)f(LU)0 3849
-y(factorization)f(steps)g(tak)m(es)h(most)f(of)g(the)g(time,)g
-(although)f(c)m(ho)s(osing)h Fv(P)2523 3863 y Fo(c)2590
-3849 y Fw(to)g(order)f(the)h(columns)f(can)h(also)g(b)s(e)0
-3962 y(time-consuming.)0 4248 y Fr(1.3)135 b(What)46
-b(the)f(three)g(libraries)i(ha)l(v)l(e)e(in)g(common)0
-4454 y Fm(1.3.1)112 b(Input)38 b(and)g(Output)g(Data)g(F)-9
-b(ormats)0 4626 y Fw(All)41 b(three)h(libraries)e(accept)j
-Fv(A)g Fw(and)e Fv(B)47 b Fw(as)c(double)d(precision)h(real.)76
-b(\(Sequen)m(tial)42 b(Sup)s(erLU)e(additionally)0 4739
-y(accepts)f(single)d(precision)f(real)i(and)g(b)s(oth)g(single)f(and)h
-(double)e(precision)h(complex.)61 b(Sup)s(erLU)p 3466
-4739 V 31 w(DIST)37 b(also)0 4852 y(accepts)32 b(double)d(precision)f
-(complex.\))141 4965 y Fv(A)j Fw(is)e(stored)h(in)f(a)i(sparse)f(data)h
-(structure)e(according)i(to)g(the)f(struct)g Fu(SuperMatrix)p
-Fw(,)e(whic)m(h)h(is)g(describ)s(ed)0 5077 y(in)36 b(section)h(3.2.)61
-b(In)36 b(particular,)h Fv(A)g Fw(ma)m(y)g(b)s(e)f(supplied)e(in)h
-(either)i(column-compressed)e(format)j(\(\\Harw)m(ell-)0
-5190 y(Bo)s(eing)i(format"\),)j(or)d(ro)m(w-compressed)g(format)g
-(\(i.e.)68 b Fv(A)2105 5157 y Fo(T)2200 5190 y Fw(stored)40
-b(in)e(column-compressed)h(format\).)69 b Fv(B)5 b Fw(,)0
-5303 y(whic)m(h)38 b(is)g(o)m(v)m(erwritten)h(b)m(y)g(the)h(solution)d
-Fv(X)7 b Fw(,)42 b(is)c(stored)h(as)h(a)f(dense)g(matrix)f(in)g
-(column-ma)5 b(jor)38 b(order.)67 b(In)0 5416 y(Sup)s(erLU)p
-362 5416 V 31 w(DIST,)30 b Fv(A)g Fw(and)g Fv(B)35 b
-Fw(can)c(b)s(e)e(either)h(replicated)g(or)g(distributed)d(across)k(all)
-e(pro)s(cesses.)141 5529 y(\(The)h(storage)i(of)f Fv(L)f
-Fw(and)g Fv(U)40 b Fw(di\013ers)29 b(among)i(the)f(three)h(libraries,)d
-(as)i(discussed)f(in)g(section)h(1.4.\))1927 5778 y(5)p
-eop
-%%Page: 6 7
-6 6 bop 0 280 a Fm(1.3.2)112 b(T)-9 b(uning)37 b(P)m(arameters)g(for)h
-(BLAS)0 452 y Fw(All)d(three)h(libraries)d(dep)s(end)i(on)h(ha)m(ving)f
-(high)g(p)s(erformance)g(BLAS)h(\(Basic)h(Linear)e(Algebra)h
-(Subroutine\))0 565 y(libraries)31 b([20)r(,)j(8)q(,)g(7)q(])g(in)f
-(order)h(to)h(get)h(high)d(p)s(erformance.)52 b(In)33
-b(particular,)h(they)h(dep)s(end)d(on)j(matrix-v)m(ector)0
-678 y(m)m(ultiplication)22 b(or)k(matrix-matrix)e(m)m(ultiplication)f
-(of)i(relativ)m(ely)g(small)f(dense)h(matrices.)39 b(The)25
-b(sizes)g(of)g(these)0 791 y(small)41 b(dense)h(matrices)h(can)g(b)s(e)
-e(tuned)h(to)h(matc)m(h)h(the)f(\\sw)m(eet)h(sp)s(ot")e(of)h(the)g
-(BLAS)f(b)m(y)g(setting)h(certain)0 904 y(tuning)30 b(parameters)i
-(describ)s(ed)d(in)h(section)h(2.10.3)j(for)d(Sup)s(erLU,)f(in)g
-(section)h(3.4.2)i(for)e(Sup)s(erLU)p 3522 904 28 4 v
-31 w(MT,)h(and)0 1017 y(in)d(section)i(4.8.2)h(for)e(Sup)s(erLU)p
-1128 1017 V 31 w(DIST.)141 1129 y(\(In)d(addition,)g(Sup)s(erLU)p
-1031 1129 V 30 w(MT)h(and)e(Sup)s(erLU)p 1768 1129 V
-31 w(DIST)h(let)g(one)h(con)m(trol)g(the)f(n)m(um)m(b)s(er)f(of)i
-(parallel)d(pro)s(cesses)0 1242 y(to)31 b(b)s(e)f(used,)g(as)g(describ)
-s(ed)f(in)g(section)h(1.4.\))0 1486 y Fm(1.3.3)112 b(P)m(erformance)37
-b(Statistics)0 1657 y Fw(Most)24 b(of)f(the)g(computational)f(routines)
-g(use)g(a)i(struct)e(to)i(record)f(certain)f(kinds)f(of)i(p)s
-(erformance)f(data,)k(namely)0 1770 y(the)g(time)f(and)g(n)m(um)m(b)s
-(er)f(of)i(\015oating)f(p)s(oin)m(t)g(op)s(erations)g(in)f(eac)m(h)j
-(phase)e(of)h(the)f(computation,)i(and)e(data)h(ab)s(out)0
-1883 y(the)f(sizes)f(of)g(the)h(matrices)f Fv(L)g Fw(and)g
-Fv(U)10 b Fw(.)39 b(These)24 b(statistics)g(are)h(collected)g(during)d
-(the)j(computation.)38 b(A)25 b(statistic)0 1996 y(v)-5
-b(ariable)29 b(is)h(declared)f(with)g(the)i(follo)m(wing)e(t)m(yp)s(e:)
-191 2184 y Fu(typedef)46 b(struct)g({)382 2297 y(int)238
-b(*panel_histo;)44 b(/*)j(histogram)e(of)i(panel)g(size)f(distribution)
-f(*/)382 2410 y(double)94 b(*utime;)332 b(/*)47 b(time)g(spent)f(in)h
-(various)f(phases)g(*/)382 2523 y(float)142 b(*ops;)428
-b(/*)47 b(floating-point)d(operations)h(at)i(various)f(phases)g(*/)382
-2635 y(int)238 b(TinyPivots;)140 b(/*)47 b(number)f(of)h(tiny)g(pivots)
-f(*/)382 2748 y(int)238 b(RefineSteps;)92 b(/*)47 b(number)f(of)h
-(iterative)f(refinement)f(steps)h(*/)191 2861 y(})h(SuperLUStat_t;)141
-3049 y Fw(F)-8 b(or)36 b(b)s(oth)f(Sup)s(erLU)e(and)i(Sup)s(erLU)p
-1463 3049 V 31 w(MT,)h(there)f(is)g(only)f(one)i(cop)m(y)g(of)g(these)g
-(statistics)f(v)-5 b(ariable.)55 b(But)0 3162 y(for)29
-b(Sup)s(erLU)p 500 3162 V 30 w(DIST,)g(eac)m(h)h(pro)s(cess)e(k)m(eeps)
-i(a)f(lo)s(cal)f(cop)m(y)i(of)f(this)e(v)-5 b(ariable,)29
-b(and)f(records)g(its)h(lo)s(cal)f(statistics.)0 3275
-y(W)-8 b(e)41 b(need)e(to)h(use)f(MPI)g(reduction)g(routines)f(to)i
-(\014nd)e(an)m(y)i(global)e(information,)i(suc)m(h)g(as)f(the)h(sum)e
-(of)i(the)0 3388 y(\015oating-p)s(oin)m(t)30 b(op)s(eration)f(coun)m(t)
-i(on)g(all)e(pro)s(cesses.)141 3501 y(Before)37 b(the)f(computation,)h
-(routine)e Fu(StatInit\(\))e Fw(should)h(b)s(e)h(called)g(to)h(mallo)s
-(c)f(storage)i(and)e(p)s(erform)0 3613 y(initialization)21
-b(for)j(the)h(\014elds)d Fu(panel)p 1280 3613 29 4 v
-33 w(histo)p Fw(,)j Fu(utime)p Fw(,)f(and)g Fu(ops)p
-Fw(.)37 b(The)24 b(algorithmic)f(phases)h(are)h(de\014ned)e(b)m(y)h
-(the)0 3726 y(en)m(umeration)32 b(t)m(yp)s(e)g Fu(PhaseType)d
-Fw(in)i Fu(SRC/util.h)p Fw(.)43 b(In)31 b(the)h(end,)g(routine)f
-Fu(StatFree\(\))f Fw(should)g(b)s(e)h(called)g(to)0 3839
-y(free)e(storage)i(of)e(the)g(ab)s(o)m(v)m(e)h(statistics)f(\014elds.)
-39 b(After)29 b(deallo)s(cation,)g(the)g(statistics)g(are)g(no)g
-(longer)g(accessible.)0 3952 y(Therefore,)f(users)d(should)g(extract)k
-(the)e(information)e(they)i(need)f(b)s(efore)h(calling)e
-Fu(StatFree\(\))p Fw(,)g(whic)m(h)g(can)j(b)s(e)0 4065
-y(accomplished)h(b)m(y)h(calling)f Fu(\(P\)StatPrint\(\))p
-Fw(.)141 4178 y(An)42 b(inquiry)d(function)i Fu(dQuerySpace\(\))d
-Fw(is)j(pro)m(vided)g(to)i(compute)f(memory)g(usage)h(statistics.)76
-b(This)0 4291 y(routine)28 b(should)f(b)s(e)h(called)g(after)h(the)g
-Fv(LU)39 b Fw(factorization.)i(It)29 b(calculates)g(the)g(storage)h
-(requiremen)m(t)f(based)f(on)0 4404 y(the)j(size)f(of)g(the)h
-Fv(L)f Fw(and)g Fv(U)40 b Fw(data)31 b(structures)f(and)g(w)m(orking)f
-(arra)m(ys.)0 4647 y Fm(1.3.4)112 b(Error)37 b(Handling)0
-4819 y Fx(In)m(v)-6 b(alid)35 b(argumen)m(ts)f(and)h(\(P\)XERBLA)0
-4991 y Fw(Similar)e(to)j(LAP)-8 b(A)m(CK,)36 b(for)g(all)e(the)i(Sup)s
-(erLU)e(routines,)i(w)m(e)g(c)m(hec)m(k)h(the)f(v)-5
-b(alidit)m(y)34 b(of)i(the)g(input)e(argumen)m(ts)0 5103
-y(to)39 b(eac)m(h)g(routine.)62 b(If)37 b(an)h(illegal)e(v)-5
-b(alue)38 b(is)e(supplied)f(to)k(one)f(of)g(the)g(input)e(argumen)m
-(ts,)k(the)e(error)g(handler)0 5216 y(XERBLA)d(is)f(called,)i(and)e(a)h
-(message)h(is)e(written)g(to)i(the)f(standard)f(output,)i(indicating)d
-(whic)m(h)g(argumen)m(t)0 5329 y(has)f(an)h(illegal)d(v)-5
-b(alue.)47 b(The)32 b(program)g(returns)f(immediately)g(from)h(the)h
-(routine,)f(with)f(a)i(negativ)m(e)h(v)-5 b(alue)32 b(of)0
-5442 y(INF)m(O.)1927 5778 y(6)p eop
-%%Page: 7 8
-7 7 bop 0 280 a Fx(Computational)33 b(failures)i(with)f(INF)m(O)25
-b Fv(>)f Fw(0)0 452 y(A)k(p)s(ositiv)m(e)e(v)-5 b(alue)27
-b(of)h(INF)m(O)g(on)f(return)g(from)g(a)h(routine)e(indicates)h(a)h
-(failure)d(in)h(the)i(course)g(of)g(the)f(computa-)0
-565 y(tion,)j(suc)m(h)h(as)f(a)h(matrix)f(b)s(eing)f(singular,)g(or)h
-(the)h(amoun)m(t)g(of)g(memory)f(\(in)g(b)m(ytes\))h(already)f(allo)s
-(cated)h(when)0 678 y(mallo)s(c)e(fails.)0 918 y Fx(ABOR)-9
-b(T)35 b(on)g(unreco)m(v)m(erable)h(errors)0 1090 y Fw(A)d(macro)g
-Fu(ABORT)e Fw(is)g(de\014ned)h(in)f Fu(SRC/util.h)f Fw(to)j(handle)e
-(unreco)m(v)m(erable)i(errors)f(that)h(o)s(ccur)f(in)g(the)g(middle)0
-1202 y(of)f(the)f(computation,)h(suc)m(h)f(as)g Fu(malloc)f
-Fw(failure.)39 b(The)30 b(default)f(action)i(of)g Fu(ABORT)e
-Fw(is)g(to)i(call)141 1315 y Fu(superlu)p 483 1315 29
-4 v 33 w(abort)p 756 1315 V 33 w(and)p 933 1315 V 33
-w(exit\(char)45 b(*msg\))0 1428 y Fw(whic)m(h)33 b(prin)m(ts)g(an)h
-(error)g(message,)j(the)d(line)f(n)m(um)m(b)s(er)g(and)h(the)h(\014le)e
-(name)h(at)i(whic)m(h)d(the)h(error)g(o)s(ccurs,)i(and)0
-1541 y(calls)30 b(the)g Fu(exit)f Fw(function)g(to)i(terminate)g(the)f
-(program.)141 1654 y(If)d(this)f(t)m(yp)s(e)i(of)g(termination)e(is)g
-(not)i(appropriate)f(in)f(some)i(en)m(vironmen)m(t,)f(users)g(can)h
-(alter)f(the)h(b)s(eha)m(vior)0 1767 y(of)j(the)g(ab)s(ort)g(function.)
-41 b(When)30 b(compiling)f(the)i(Sup)s(erLU)e(library)-8
-b(,)29 b(users)h(ma)m(y)h(c)m(ho)s(ose)h(the)f(C)g(prepro)s(cessor)0
-1880 y(de\014nition)141 1993 y Fu(-DUSER)p 435 1993 V
-33 w(ABORT)46 b(=)i(my)p 946 1993 V 33 w(abort)0 2106
-y Fw(A)m(t)31 b(the)g(same)g(time,)f(users)g(w)m(ould)f(supply)f(the)i
-(follo)m(wing)f Fu(my)p 2175 2106 V 34 w(abort)g Fw(function)141
-2219 y Fu(my)p 243 2219 V 34 w(abort\(char)45 b(*msg\))0
-2332 y Fw(whic)m(h)29 b(o)m(v)m(errides)h(the)h(b)s(eha)m(vior)e(of)i
-Fu(superlu)p 1616 2332 V 32 w(abort)p 1888 2332 V 33
-w(and)p 2065 2332 V 34 w(exit)p Fw(.)0 2575 y Fm(1.3.5)112
-b(Ordering)37 b(the)h(Columns)e(of)i Fl(A)g Fm(for)f(Sparse)h(F)-9
-b(actors)0 2747 y Fw(There)23 b(is)f(a)h(c)m(hoice)h(of)f(orderings)f
-(for)h(the)g(columns)f(of)h Fv(A)g Fw(b)s(oth)f(in)g(the)h(simple)e(or)
-i(exp)s(ert)g(driv)m(er,)h(in)d(section)j(1.2:)136 2934
-y Fq(\017)46 b Fw(Natural)30 b(ordering,)136 3122 y Fq(\017)46
-b Fw(Multiple)28 b(Minim)m(um)h(Degree)j(\(MMD\))g([25)q(])e(applied)f
-(to)i(the)f(structure)g(of)h Fv(A)2966 3089 y Fo(T)3021
-3122 y Fv(A)p Fw(,)136 3310 y Fq(\017)46 b Fw(Multiple)28
-b(Minim)m(um)h(Degree)j(\(MMD\))g([25)q(])e(applied)f(to)i(the)f
-(structure)g(of)h Fv(A)2966 3277 y Fo(T)3041 3310 y Fw(+)20
-b Fv(A)p Fw(,)136 3497 y Fq(\017)46 b Fw(Column)29 b(Appro)m(ximate)h
-(Minim)m(um)e(Degree)k(\(COLAMD\))f([4)q(],)g(and)136
-3685 y Fq(\017)46 b Fw(Use)31 b(a)g Fv(P)536 3699 y Fo(c)601
-3685 y Fw(supplied)c(b)m(y)k(the)f(user)g(as)g(input.)141
-3872 y(COLAMD)k(is)f(designed)g(particularly)f(for)i(unsymmetric)e
-(matrices)i(when)f(partial)g(piv)m(oting)g(is)g(needed,)0
-3985 y(and)27 b(do)s(es)h(not)g(require)f(explicit)f(formation)i(of)g
-Fv(A)1742 3952 y Fo(T)1797 3985 y Fv(A)p Fw(.)40 b(It)28
-b(usually)e(giv)m(es)i(comparable)g(orderings)f(as)h(MMD)h(on)0
-4098 y Fv(A)68 4065 y Fo(T)123 4098 y Fv(A)p Fw(,)i(and)f(is)f(faster.)
-141 4211 y(The)39 b(orderings)f(based)h(on)g(graph)f(partitioning)g
-(heuristics)f(are)i(also)h(p)s(opular,)f(as)h(exempli\014ed)d(in)h(the)
-0 4324 y(METIS)d(pac)m(k)-5 b(age)39 b([19)q(].)59 b(The)35
-b(user)h(can)h(simply)c(input)i(this)g(ordering)g(in)g(the)h(p)s(erm)m
-(utation)g(v)m(ector)i(for)e Fv(P)3840 4338 y Fo(c)3875
-4324 y Fw(.)0 4437 y(Note)30 b(that)f(man)m(y)g(graph)f(partitioning)f
-(algorithms)g(are)i(designed)f(for)g(symmetric)g(matrices.)40
-b(The)28 b(user)g(ma)m(y)0 4550 y(still)e(apply)g(them)i(to)h(the)f
-(structures)f(of)h Fv(A)1507 4517 y Fo(T)1562 4550 y
-Fv(A)g Fw(or)g Fv(A)1835 4517 y Fo(T)1905 4550 y Fw(+)15
-b Fv(A)p Fw(.)40 b(Our)27 b(routines)g Fu(getata\(\))e
-Fw(and)j Fu(at)p 3342 4550 V 33 w(plus)p 3567 4550 V
-34 w(a)f Fw(in)g(the)0 4663 y(\014le)i Fu(get)p 296 4663
-V 34 w(perm)p 522 4663 V 33 w(c.c)h Fw(can)g(b)s(e)g(used)g(to)h(form)f
-Fv(A)1615 4630 y Fo(T)1670 4663 y Fv(A)g Fw(or)h Fv(A)1948
-4630 y Fo(T)2023 4663 y Fw(+)20 b Fv(A)p Fw(.)0 4906
-y Fm(1.3.6)112 b(Iterativ)m(e)36 b(Re\014nemen)m(t)0
-5078 y Fw(Step)45 b(6)g(of)h(the)f(exp)s(ert)g(driv)m(er)f(algorithm,)k
-(iterativ)m(e)e(re\014nemen)m(t,)j(serv)m(es)c(to)h(increase)f
-(accuracy)h(of)g(the)0 5191 y(computed)31 b(solution.)41
-b(Giv)m(en)31 b(the)g(initial)d(appro)m(ximate)k(solution)d
-Fv(x)i Fw(from)g(step)g(5,)g(the)h(algorithm)e(for)g(step)i(6)0
-5304 y(is)d(as)i(follo)m(ws)f(\(where)g Fv(x)g Fw(and)g
-Fv(b)g Fw(are)h(single)e(columns)g(of)h Fv(X)38 b Fw(and)30
-b Fv(B)5 b Fw(,)30 b(resp)s(ectiv)m(ely\):)1927 5778
-y(7)p eop
-%%Page: 8 9
-8 8 bop 190 280 a Fw(Compute)30 b(residual)e Fv(r)g Fw(=)d
-Fv(Ax)20 b Fq(\000)g Fv(b)190 393 y Fw(While)29 b(residual)f(to)s(o)j
-(large)380 506 y(Solv)m(e)f Fv(Ad)c Fw(=)f Fv(r)33 b
-Fw(for)d(correction)h Fv(d)380 619 y Fw(Up)s(date)f(solution)f
-Fv(x)c Fw(=)g Fv(x)20 b Fq(\000)g Fv(d)380 732 y Fw(Up)s(date)30
-b(residual)e Fv(r)g Fw(=)d Fv(Ax)20 b Fq(\000)g Fv(b)190
-845 y Fw(end)30 b(while)141 1057 y(If)e Fv(r)i Fw(and)d(then)h
-Fv(d)g Fw(w)m(ere)g(computed)g(exactly)-8 b(,)30 b(the)e(up)s(dated)f
-(solution)f Fv(x)15 b Fq(\000)g Fv(d)29 b Fw(w)m(ould)d(b)s(e)i(the)g
-(exact)h(solution.)0 1170 y(Roundo\013)h(prev)m(en)m(ts)h(immediate)e
-(con)m(v)m(ergence.)141 1283 y(The)e(criterion)f(\\residual)g(to)s(o)i
-(large")g(in)e(the)i(iterativ)m(e)g(re\014nemen)m(t)f(algorithm)g(ab)s
-(o)m(v)m(e)h(is)f(essen)m(tially)f(that)1537 1488 y Fv(B)5
-b(E)g(R)q(R)25 b Fq(\021)g Fw(max)2016 1545 y Fo(i)2127
-1488 y Fq(j)p Fv(r)2193 1502 y Fo(i)2222 1488 y Fq(j)p
-Fv(=s)2335 1502 y Fo(i)3713 1488 y Fw(\(1.1\))0 1716
-y(exceeds)i(the)f(mac)m(hine)g(roundo\013)g(lev)m(el,)h(or)f(is)f(con)m
-(tin)m(uing)g(to)i(decrease)g(quic)m(kly)e(enough.)39
-b(Here)27 b Fv(s)3419 1730 y Fo(i)3473 1716 y Fw(is)e(the)i(scale)0
-1829 y(factor)1126 1942 y Fv(s)1169 1956 y Fo(i)1222
-1942 y Fw(=)e(\()p Fq(j)p Fv(A)p Fq(j)d(\001)e(j)p Fv(x)p
-Fq(j)h Fw(+)f Fq(j)p Fv(b)p Fq(j)p Fw(\))1876 1956 y
-Fo(i)1930 1942 y Fw(=)2026 1861 y Fk(X)2070 2044 y Fo(j)2161
-1942 y Fq(j)p Fv(A)2254 1956 y Fo(ij)2315 1942 y Fq(j)g(\001)h(j)p
-Fv(x)2483 1956 y Fo(j)2520 1942 y Fq(j)f Fw(+)g Fq(j)p
-Fv(b)2720 1956 y Fo(i)2748 1942 y Fq(j)0 2195 y Fw(In)42
-b(this)f(expression)h Fq(j)p Fv(A)p Fq(j)h Fw(is)e(the)i
-Fv(n)p Fw(-b)m(y-)p Fv(n)f Fw(matrix)g(with)f(en)m(tries)i
-Fq(j)p Fv(A)p Fq(j)2456 2209 y Fo(ij)2562 2195 y Fw(=)j
-Fq(j)p Fv(A)2772 2209 y Fo(ij)2833 2195 y Fq(j)p Fw(,)g
-Fq(j)p Fv(b)p Fq(j)d Fw(and)e Fq(j)p Fv(x)p Fq(j)i Fw(are)g(similarly)0
-2308 y(column)38 b(v)m(ectors)j(of)f(absolute)f(en)m(tries)g(of)g
-Fv(b)h Fw(and)e Fv(x)p Fw(,)k(resp)s(ectiv)m(ely)-8 b(,)42
-b(and)d Fq(j)p Fv(A)p Fq(j)26 b(\001)h(j)p Fv(x)p Fq(j)40
-b Fw(is)e(con)m(v)m(en)m(tional)i(matrix-)0 2421 y(v)m(ector)32
-b(m)m(ultiplication.)141 2534 y(The)e(purp)s(ose)f(of)h(this)f
-(stopping)h(criterion)f(is)g(explained)g(in)g(the)h(next)h(section.)0
-2777 y Fm(1.3.7)112 b(Error)37 b(Bounds)0 2949 y Fw(Step)30
-b(7)h(of)f(the)h(exp)s(ert)f(driv)m(er)f(algorithm)h(computes)g(error)g
-(b)s(ounds.)141 3062 y(It)g(is)f(sho)m(wn)g(in)f([2)q(,)i(27)q(])f
-(that)i Fv(B)5 b(E)g(R)q(R)30 b Fw(de\014ned)e(in)g(Equation)h(1.1)i
-(measures)f(the)f Fp(c)-5 b(omp)g(onentwise)35 b(r)-5
-b(elative)0 3175 y(b)g(ackwar)g(d)46 b(err)-5 b(or)43
-b Fw(of)f(the)h(computed)e(solution.)75 b(This)40 b(means)i(that)h(the)
-f(computed)g Fv(x)g Fw(satis\014es)f(a)i(sligh)m(tly)0
-3288 y(p)s(erturb)s(ed)34 b(linear)h(system)i(of)g(equations)f(\()p
-Fv(A)25 b Fw(+)f Fv(E)5 b Fw(\))p Fv(x)37 b Fw(=)e Fv(b)25
-b Fw(+)f Fv(f)10 b Fw(,)37 b(where)g Fq(j)p Fv(E)2684
-3302 y Fo(ij)2745 3288 y Fq(j)f(\024)f Fv(B)5 b(E)g(R)q(R)25
-b Fq(\001)f(j)p Fv(A)3364 3302 y Fo(ij)3425 3288 y Fq(j)37
-b Fw(and)f Fq(j)p Fv(f)3740 3302 y Fo(i)3768 3288 y Fq(j)g(\024)0
-3401 y Fv(B)5 b(E)g(R)q(R)27 b Fq(\001)f(j)p Fv(b)427
-3415 y Fo(i)456 3401 y Fq(j)40 b Fw(for)f(all)g Fv(i)h
-Fw(and)f Fv(j)5 b Fw(.)69 b(It)39 b(is)g(sho)m(wn)g(in)g([2,)h(30)q(])g
-(that)g(one)g(step)g(of)g(iterativ)m(e)g(re\014nemen)m(t)f(usually)0
-3514 y(reduces)32 b Fv(B)5 b(E)g(R)q(R)33 b Fw(to)g(near)f(mac)m(hine)h
-(epsilon.)45 b(F)-8 b(or)33 b(example,)g(if)e Fv(B)5
-b(E)g(R)q(R)33 b Fw(is)f(4)h(times)f(mac)m(hine)g(epsilon,)f(then)0
-3627 y(the)f(computed)f(solution)f Fv(x)i Fw(is)e(iden)m(tical)h(to)h
-(the)g(solution)e(one)i(w)m(ould)e(get)j(b)m(y)f(c)m(hanging)f(eac)m(h)
-i(nonzero)f(en)m(try)0 3739 y(of)h Fv(A)g Fw(and)f Fv(b)h
-Fw(b)m(y)g(at)h(most)f(4)g(units)f(in)f(their)h(last)h(places,)g(and)f
-(then)h(solving)f(this)g(p)s(erturb)s(ed)e(system)j Fp(exactly)p
-Fw(.)0 3852 y(If)25 b(the)i(nonzero)f(en)m(tries)f(of)h
-Fv(A)g Fw(and)g Fv(b)g Fw(are)g(uncertain)f(in)f(their)h(b)s(ottom)i(2)
-f(bits,)g(then)f(one)i(should)d(generally)h(not)0 3965
-y(exp)s(ect)35 b(a)g(more)g(accurate)h(solution.)52 b(Th)m(us)33
-b Fv(B)5 b(E)g(R)q(R)35 b Fw(is)f(a)g(measure)h(of)g(bac)m(kw)m(ard)g
-(error)f(sp)s(eci\014cally)e(suited)0 4078 y(to)i(solving)f(sparse)g
-(linear)f(systems)i(of)g(equations.)51 b(Despite)34 b(roundo\013,)f
-Fv(B)5 b(E)g(R)q(R)34 b Fw(itself)f(is)g(alw)m(a)m(ys)h(computed)0
-4191 y(to)h(within)d(ab)s(out)h Fq(\006)p Fv(n)h Fw(times)g(mac)m(hine)
-f(epsilon)g(\(and)h(usually)e(m)m(uc)m(h)i(more)g(accurately\))h(and)f
-(so)g Fv(B)5 b(E)g(R)q(R)35 b Fw(is)0 4304 y(quite)30
-b(accurate.)141 4417 y(In)g(addition)e(to)j(bac)m(kw)m(ard)g(error,)g
-(the)f(exp)s(ert)g(driv)m(er)f(computes)i(a)g Fp(forwar)-5
-b(d)35 b(err)-5 b(or)34 b(b)-5 b(ound)1361 4621 y Fv(F)13
-b(E)5 b(R)q(R)26 b Fq(\025)f(k)p Fv(x)1862 4635 y FC(true)2013
-4621 y Fq(\000)20 b Fv(x)p Fq(k)2201 4635 y Fn(1)2276
-4621 y Fv(=)p Fq(k)p Fv(x)p Fq(k)2463 4635 y Fn(1)0 4825
-y Fw(Here)34 b Fq(k)p Fv(x)p Fq(k)360 4839 y Fn(1)466
-4825 y Fq(\021)29 b Fw(max)736 4839 y Fo(i)779 4825 y
-Fq(j)p Fv(x)856 4839 y Fo(i)884 4825 y Fq(j)p Fw(.)50
-b(Th)m(us,)33 b(if)g Fv(F)13 b(E)5 b(R)q(R)31 b Fw(=)f(10)1834
-4792 y Fn(\000)p FC(6)1962 4825 y Fw(then)j(eac)m(h)i(comp)s(onen)m(t)e
-(of)h Fv(x)f Fw(has)g(an)g(error)g(b)s(ounded)0 4938
-y(b)m(y)k(ab)s(out)h(10)491 4905 y Fn(\000)p FC(6)624
-4938 y Fw(times)f(the)g(largest)h(comp)s(onen)m(t)g(of)g
-Fv(x)p Fw(.)62 b(The)37 b(algorithm)g(used)g(to)h(compute)g
-Fv(F)13 b(E)5 b(R)q(R)38 b Fw(is)f(an)0 5051 y(appro)m(ximation;)e(see)
-g([2,)g(17])g(for)e(a)i(discussion.)49 b(Generally)33
-b Fv(F)13 b(E)5 b(R)q(R)35 b Fw(is)e(accurate)i(to)g(within)d(a)i
-(factor)h(of)f(10)0 5164 y(or)c(b)s(etter,)h(whic)m(h)e(is)h(adequate)h
-(to)g(sa)m(y)g(ho)m(w)g(man)m(y)f(digits)f(of)i(the)f(large)h(en)m
-(tries)f(of)g Fv(x)h Fw(are)f(correct.)141 5277 y(\(Sup)s(erLU)p
-538 5277 28 4 v 31 w(DIST's)g(algorithm)g(for)g Fv(F)13
-b(E)5 b(R)q(R)31 b Fw(is)e(sligh)m(tly)g(less)h(reliable)e([24)q(].\))
-1927 5778 y(8)p eop
-%%Page: 9 10
-9 9 bop 0 280 a Fm(1.3.8)112 b(Solving)37 b(a)h(Sequence)g(of)g
-(Related)f(Linear)g(Systems)0 452 y Fw(It)25 b(is)e(v)m(ery)i(common)g
-(to)g(solv)m(e)g(a)g(sequence)g(of)f(related)h(linear)d(systems)j
-Fv(A)2534 419 y FC(\(1\))2628 452 y Fv(X)2710 419 y FC(\(1\))2830
-452 y Fw(=)g Fv(B)3000 419 y FC(\(1\))3094 452 y Fw(,)h
-Fv(A)3213 419 y FC(\(2\))3308 452 y Fv(X)3390 419 y FC(\(2\))3510
-452 y Fw(=)f Fv(B)3680 419 y FC(\(2\))3773 452 y Fw(,)h(...)0
-565 y(rather)j(than)g(just)g(one.)40 b(When)29 b Fv(A)1195
-532 y FC(\(1\))1319 565 y Fw(and)f Fv(A)1562 532 y FC(\(2\))1686
-565 y Fw(are)h(similar)e(enough)i(in)f(sparsit)m(y)g(pattern)h(and/or)g
-(n)m(umerical)0 678 y(en)m(tries,)41 b(it)d(is)g(p)s(ossible)e(to)k(sa)
-m(v)m(e)g(some)g(of)f(the)g(w)m(ork)f(done)h(when)f(solving)f(with)h
-Fv(A)3013 645 y FC(\(1\))3146 678 y Fw(to)i(solv)m(e)f(with)e
-Fv(A)3780 645 y FC(\(2\))3875 678 y Fw(.)0 791 y(This)32
-b(can)j(result)e(in)g(signi\014can)m(t)g(sa)m(vings.)52
-b(Here)35 b(are)g(the)f(options,)h(in)e(increasing)g(order)g(of)i
-(\\reuse)f(of)h(prior)0 904 y(information":)111 1116
-y(1.)46 b Fp(F)-7 b(actor)42 b(fr)-5 b(om)42 b(scr)-5
-b(atch.)67 b Fw(No)39 b(previous)e(information)g(is)h(used.)65
-b(If)38 b(one)h(w)m(ere)g(solving)e(just)i(one)g(linear)227
-1229 y(system,)31 b(or)f(a)h(sequence)g(of)f(unrelated)g(linear)f
-(systems,)h(this)f(is)h(the)g(option)g(to)h(use.)111
-1417 y(2.)46 b Fp(R)-5 b(euse)39 b Fv(P)555 1431 y Fo(c)590
-1417 y Fp(,)h(the)f(c)-5 b(olumn)40 b(p)-5 b(ermutation.)63
-b Fw(The)36 b(user)h(ma)m(y)g(sa)m(v)m(e)i(the)e(column)f(p)s(erm)m
-(utation)g(and)g(reuse)227 1530 y(it.)k(This)27 b(is)h(most)h(useful)e
-(when)h Fv(A)1433 1497 y FC(\(2\))1556 1530 y Fw(has)h(the)g(same)g
-(sparsit)m(y)f(structure)h(as)g Fv(A)3003 1497 y FC(\(1\))3097
-1530 y Fw(,)h(but)e(not)h(necessarily)227 1643 y(the)42
-b(same)g(\(or)g(similar\))e(n)m(umerical)g(en)m(tries.)75
-b(Reusing)40 b Fv(P)2341 1657 y Fo(c)2418 1643 y Fw(sa)m(v)m(es)j(the)f
-(sometimes)g(quite)f(exp)s(ensiv)m(e)227 1755 y(op)s(eration)30
-b(of)h(computing)e(it.)111 1943 y(3.)46 b Fp(R)-5 b(euse)30
-b Fv(P)546 1957 y Fo(c)581 1943 y Fp(,)f Fv(P)696 1957
-y Fo(r)764 1943 y Fp(and)h(data)h(structur)-5 b(es)30
-b(al)5 b(lo)-5 b(c)g(ate)g(d)32 b(for)e Fv(L)f Fp(and)h
-Fv(U)10 b Fp(.)39 b Fw(If)26 b Fv(P)2609 1957 y Fo(r)2674
-1943 y Fw(and)g Fv(P)2905 1957 y Fo(c)2967 1943 y Fw(do)h(not)g(c)m
-(hange,)h(then)f(the)227 2056 y(w)m(ork)i(of)g(building)d(the)j(data)g
-(structures)g(asso)s(ciated)g(with)f Fv(L)h Fw(and)f
-Fv(U)39 b Fw(\(including)26 b(the)j(elimination)d(tree)227
-2169 y([14)q(]\))d(can)g(b)s(e)e(a)m(v)m(oided.)39 b(This)20
-b(is)i(most)g(useful)f(when)g Fv(A)2111 2136 y FC(\(2\))2228
-2169 y Fw(has)h(the)g(same)h(sparsit)m(y)e(structure)h(and)g(similar)
-227 2282 y(n)m(umerical)32 b(en)m(tries)g(as)h Fv(A)1122
-2249 y FC(\(1\))1217 2282 y Fw(.)48 b(When)33 b(the)g(n)m(umerical)e
-(en)m(tries)i(are)g(not)g(similar,)e(one)j(can)f(still)d(use)j(this)227
-2395 y(option,)26 b(but)f(at)h(a)g(higher)e(risk)g(of)i(n)m(umerical)e
-(instabilit)m(y)f(\()p Fv(B)5 b(E)g(R)q(R)26 b Fw(will)d(alw)m(a)m(ys)j
-(rep)s(ort)e(whether)h(or)h(not)227 2508 y(the)31 b(solution)e(w)m(as)i
-(computed)f(stably)-8 b(,)30 b(so)h(one)f(cannot)h(get)h(an)e(unstable)
-f(answ)m(er)i(without)e(w)m(arning\).)111 2695 y(4.)46
-b Fp(R)-5 b(euse)46 b Fv(P)562 2709 y Fo(c)597 2695 y
-Fp(,)j Fv(P)732 2709 y Fo(r)770 2695 y Fp(,)g Fv(L)c
-Fp(and)i Fv(U)10 b Fp(.)83 b Fw(In)44 b(other)g(w)m(ords,)k(w)m(e)d
-(reuse)g(essen)m(tially)e(ev)m(erything.)83 b(This)43
-b(is)h(most)227 2808 y(commonly)27 b(used)f(when)g Fv(A)1167
-2775 y FC(\(2\))1287 2808 y Fw(=)f Fv(A)1451 2775 y FC(\(1\))1546
-2808 y Fw(,)j(but)e Fv(B)1836 2775 y FC(\(2\))1955 2808
-y Fq(6)p Fw(=)f Fv(B)2125 2775 y FC(\(1\))2219 2808 y
-Fw(,)j(i.e.)39 b(when)26 b(only)h(the)g(righ)m(t-hand)f(sides)g
-(di\013er.)227 2921 y(It)40 b(could)e(also)h(b)s(e)f(used)h(when)f
-Fv(A)1440 2888 y FC(\(2\))1573 2921 y Fw(and)h Fv(A)1827
-2888 y FC(\(1\))1961 2921 y Fw(di\013ered)e(just)i(sligh)m(tly)e(in)h
-(n)m(umerical)g(v)-5 b(alues,)41 b(in)d(the)227 3034
-y(hop)s(es)27 b(that)i(iterativ)m(e)f(re\014nemen)m(t)f(con)m(v)m
-(erges)j(\(using)d Fv(A)2219 3001 y FC(\(2\))2341 3034
-y Fw(to)h(compute)g(residuals)e(but)h(the)h(triangular)227
-3147 y(factorization)j(of)g Fv(A)927 3114 y FC(\(1\))1052
-3147 y Fw(to)g(solv)m(e\).)141 3359 y(Because)j(of)e(the)g(di\013eren)m
-(t)g(w)m(a)m(ys)h Fv(L)f Fw(and)g Fv(U)42 b Fw(are)32
-b(computed)g(and)g(stored)g(in)f(the)h(three)h(libraries,)d(these)j(4)0
-3472 y(options)d(are)g(sp)s(eci\014ed)f(sligh)m(tly)g(di\013eren)m
-(tly;)g(see)i(Chapters)f(2)h(through)e(4)i(for)f(details.)0
-3716 y Fm(1.3.9)112 b(In)m(terfacing)37 b(to)g(other)g(languages)0
-3887 y Fw(It)23 b(is)f(p)s(ossible)e(to)k(call)e(all)g(the)h(driv)m
-(ers)e(and)i(the)g(computational)f(routines)g(from)g(F)-8
-b(ortran.)39 b(Ho)m(w)m(ev)m(er,)27 b(curren)m(tly)0
-4000 y(the)37 b(F)-8 b(ortran)38 b(wrapp)s(er)d(functions)g(are)i(not)h
-(complete.)60 b(The)37 b(users)f(are)h(exp)s(ected)g(to)h(lo)s(ok)f(at)
-g(the)g(F)-8 b(ortran)0 4113 y(example)33 b(programs)h(in)e(the)i(F)m
-(OR)-8 b(TRAN/)35 b(directory)-8 b(,)35 b(together)g(with)d(the)i(C)g
-(\\bridge")f(routine,)h(and)f(learn)0 4226 y(ho)m(w)j(to)g(call)f(Sup)s
-(erLU)e(from)i(a)h(F)-8 b(ortran)37 b(program.)56 b(The)35
-b(users)f(can)i(mo)s(dify)e(the)i(C)f(bridge)f(routine)h(to)h(\014t)0
-4339 y(their)29 b(needs.)0 4625 y Fr(1.4)135 b(Ho)l(w)46
-b(the)f(three)h(libraries)g(di\013er)0 4832 y Fm(1.4.1)112
-b(Input)38 b(and)g(Output)g(Data)g(F)-9 b(ormats)0 5003
-y Fw(All)27 b(Sequen)m(tial)g(Sup)s(erLU)e(routines)i(are)i(a)m(v)-5
-b(ailable)27 b(in)g(single)f(and)h(double)g(precision)f(\(real)i(or)g
-(complex\),)h(but)0 5116 y(Sup)s(erLU)p 362 5116 28 4
-v 31 w(MT)h(routines)e(are)j(only)e(a)m(v)-5 b(ailable)29
-b(in)f(double)h(precision)f(real,)i(and)f(Sup)s(erLU)p
-3156 5116 V 31 w(DIST)g(routines)g(are)0 5229 y(a)m(v)-5
-b(ailable)30 b(in)f(double)g(precision)f(\(real)j(or)f(complex\).)141
-5342 y Fv(L)g Fw(and)g Fv(U)40 b Fw(are)31 b(stored)g(in)e(di\013eren)m
-(t)h(formats)g(in)f(the)i(three)f(libraries:)1927 5778
-y(9)p eop
-%%Page: 10 11
-10 10 bop 136 280 a Fq(\017)46 b Fv(L)23 b Fp(and)i Fv(U)33
-b Fp(in)23 b(Se)-5 b(quential)24 b(Sup)-5 b(erLU.)20
-b Fv(L)h Fw(is)e(a)h(\\column-sup)s(erno)s(dal")e(matrix,)k(in)d
-(storage)j(t)m(yp)s(e)e Fu(SCformat)p Fw(.)227 393 y(This)30
-b(means)i(it)f(is)g(stored)h(sparsely)-8 b(,)32 b(with)e(sup)s(erno)s
-(des)f(\(consecutiv)m(e)k(columns)e(with)f(iden)m(tical)h(struc-)227
-506 y(tures\))44 b(stored)g(as)h(dense)e(blo)s(c)m(ks.)81
-b Fv(U)54 b Fw(is)43 b(stored)h(in)f(column-compressed)g(format)h
-Fu(NCformat)p Fw(.)80 b(See)227 619 y(section)31 b(2.3)g(for)f
-(details.)136 807 y Fq(\017)46 b Fv(L)g Fp(and)g Fv(U)56
-b Fp(in)46 b(Sup)-5 b(erLU)p 1119 807 28 4 v 34 w(MT.)44
-b Fw(Because)i(of)e(parallelism,)i(the)f(columns)e(of)i
-Fv(L)f Fw(and)g Fv(U)55 b Fw(ma)m(y)45 b(not)g(b)s(e)227
-920 y(computed)26 b(in)f(consecutiv)m(e)h(order,)h(so)f(they)g(ma)m(y)h
-(b)s(e)e(allo)s(cated)h(and)f(stored)h(out)g(of)g(order.)39
-b(This)24 b(means)227 1033 y(w)m(e)30 b(use)f(the)g(\\column-sup)s
-(erno)s(dal-p)s(erm)m(uted")d(format)k Fu(SCPformat)c
-Fw(for)j Fv(L)g Fw(and)g(\\column-p)s(erm)m(uted")227
-1145 y(format)i Fu(NCPformat)d Fw(for)i Fv(U)10 b Fw(.)41
-b(See)30 b(section)h(3.2)g(for)f(details.)136 1333 y
-Fq(\017)46 b Fv(L)41 b Fp(and)g Fv(U)50 b Fp(in)41 b(Sup)-5
-b(erLU)p 1098 1333 V 34 w(DIST.)38 b Fw(No)m(w)i Fv(L)f
-Fw(and)f Fv(U)49 b Fw(are)39 b(distributed)d(across)j(m)m(ultiple)e
-(pro)s(cessors.)66 b(As)227 1446 y(describ)s(ed)30 b(in)h(detail)g(in)g
-(Sections)h(4.3)h(and)e(4.4,)j(w)m(e)e(use)g(a)h(2D)f(blo)s(c)m
-(k-cyclic)g(format,)h(whic)m(h)e(has)h(b)s(een)227 1559
-y(used)e(for)f(dense)h(matrices)g(in)f(libraries)e(lik)m(e)j(ScaLAP)-8
-b(A)m(CK)30 b([3)q(].)41 b(But)30 b(for)g(sparse)g(matrices,)g(the)h
-(blo)s(c)m(ks)227 1672 y(are)d(no)g(longer)f(iden)m(tical)g(in)f(size,)
-j(and)e(v)-5 b(ary)27 b(dep)s(ending)e(on)j(the)g(sparsit)m(y)f
-(structure)g(of)h Fv(L)g Fw(and)f Fv(U)10 b Fw(.)39 b(The)227
-1785 y(detailed)30 b(storage)i(format)e(is)g(discussed)e(in)h(section)i
-(4.3)g(and)f(illustrated)e(in)h(Figure)h(4.1.)0 2028
-y Fm(1.4.2)112 b(P)m(arallelism)0 2200 y Fw(Sequen)m(tial)40
-b(Sup)s(erLU)f(has)h(no)h(explicit)e(parallelism.)69
-b(Some)41 b(parallelism)c(ma)m(y)42 b(still)c(b)s(e)j(exploited)e(on)i
-(an)0 2313 y(SMP)35 b(b)m(y)g(using)e(a)j(m)m(ultithreaded)d(BLAS)i
-(library)e(if)h(a)m(v)-5 b(ailable.)54 b(But)35 b(it)g(is)f(lik)m(ely)g
-(to)i(b)s(e)e(more)h(e\013ectiv)m(e)i(to)0 2426 y(use)30
-b(Sup)s(erLU)p 519 2426 V 31 w(MT)g(on)g(an)h(SMP)-8
-b(,)30 b(describ)s(ed)f(next.)141 2539 y(Sup)s(erLU)p
-503 2539 V 31 w(MT)f(lets)f(the)h(user)f(c)m(ho)s(ose)i(the)f(n)m(um)m
-(b)s(er)e(of)i(parallel)e(threads)h(to)i(use.)39 b(The)27
-b(mec)m(hanism)g(v)-5 b(aries)0 2651 y(from)30 b(platform)f(to)i
-(platform)f(and)g(is)f(describ)s(ed)f(in)h(section)i(3.6.)141
-2764 y(Sup)s(erLU)p 503 2764 V 31 w(DIST)44 b(not)i(only)e(lets)h(the)h
-(user)e(sp)s(ecify)g(the)h(n)m(um)m(b)s(er)f(of)i(pro)s(cessors,)i(but)
-d(ho)m(w)g(they)h(are)0 2877 y(arranged)32 b(in)m(to)g(a)h(2D)g(grid.)
-45 b(F)-8 b(urthermore,)33 b(MPI)f(p)s(ermits)f(an)m(y)h(subset)g(of)g
-(the)h(pro)s(cessors)f(allo)s(cated)g(to)h(the)0 2990
-y(user)g(ma)m(y)i(b)s(e)e(used)g(for)h(Sup)s(erLU)p 1240
-2990 V 30 w(DIST,)g(not)g(just)f(consecutiv)m(ely)i(n)m(um)m(b)s(ered)d
-(pro)s(cessors)h(\(sa)m(y)i(0)g(through)0 3103 y(P-1\).)42
-b(See)30 b(section)h(4.4)g(for)f(details.)0 3347 y Fm(1.4.3)112
-b(Piv)m(oting)36 b(Strategies)g(for)i(Stabilit)m(y)0
-3518 y Fw(Sequen)m(tial)27 b(Sup)s(erLU)f(and)i(Sup)s(erLU)p
-1357 3518 V 31 w(MT)g(use)g(the)g(same)h(piv)m(oting)e(strategy)-8
-b(,)31 b(called)c Fp(thr)-5 b(eshold)34 b(pivoting)p
-Fw(,)29 b(to)0 3631 y(determine)f(the)h(ro)m(w)g(p)s(erm)m(utation)e
-Fv(P)1327 3645 y Fo(r)1366 3631 y Fw(.)40 b(Supp)s(ose)27
-b(w)m(e)i(ha)m(v)m(e)h(factored)g(the)f(\014rst)f Fv(i)17
-b Fq(\000)g Fw(1)29 b(columns)e(of)i Fv(A)p Fw(,)g(and)g(are)0
-3744 y(seeking)j(the)g(piv)m(ot)h(for)f(column)f Fv(i)p
-Fw(.)46 b(Let)33 b Fv(a)1487 3758 y Fo(mi)1610 3744 y
-Fw(b)s(e)e(a)i(largest)g(en)m(try)f(in)f(magnitude)g(on)i(or)f(b)s(elo)
-m(w)f(the)i(diagonal)0 3857 y(of)c(the)h(partially)d(factored)j
-Fv(A)p Fw(:)40 b Fq(j)p Fv(a)1179 3871 y Fo(mi)1270 3857
-y Fq(j)25 b Fw(=)g(max)1586 3871 y Fo(j)t Fn(\025)p Fo(i)1716
-3857 y Fq(j)p Fv(a)1789 3871 y Fo(j)t(i)1850 3857 y Fq(j)p
-Fw(.)41 b(Dep)s(ending)27 b(on)i(a)h(threshold)d(0)f
-Fv(<)f(u)g Fq(\024)g Fw(1)30 b(input)d(b)m(y)i(the)0
-3970 y(user,)e(the)f(co)s(de)h(will)d(use)i(the)h(diagonal)e(en)m(try)i
-Fv(a)1688 3984 y Fo(ii)1767 3970 y Fw(as)f(the)h(piv)m(ot)f(in)g
-(column)f Fv(i)i Fw(as)f(long)g(as)h Fq(j)p Fv(a)3211
-3984 y Fo(ii)3263 3970 y Fq(j)f(\025)f Fv(u)12 b Fq(\001)g(j)p
-Fv(a)3584 3984 y Fo(mi)3676 3970 y Fq(j)p Fw(,)28 b(and)0
-4083 y(otherwise)i(use)g Fv(a)610 4097 y Fo(mi)701 4083
-y Fw(.)40 b(So)30 b(if)g(the)g(user)g(sets)h Fv(u)25
-b Fw(=)g(1,)31 b Fv(a)1825 4097 y Fo(mi)1946 4083 y Fw(\(or)g(an)f
-(equally)f(large)i(en)m(try\))g(will)c(b)s(e)j(selected)h(as)g(the)0
-4196 y(piv)m(ot;)f(this)f(corresp)s(onds)g(to)i(the)f(classical)g
-Fp(p)-5 b(artial)34 b(pivoting)f(str)-5 b(ate)g(gy)p
-Fw(.)43 b(If)29 b(the)h(user)g(has)g(ordered)f(the)i(matrix)0
-4309 y(so)c(that)g(c)m(ho)s(osing)f(diagonal)g(piv)m(ots)g(is)g
-(particularly)e(go)s(o)s(d)i(for)h(sparsit)m(y)e(or)i(parallelism,)d
-(then)j(smaller)e(v)-5 b(alues)0 4421 y(of)33 b Fv(u)g
-Fw(will)d(tend)i(to)i(c)m(ho)s(ose)g(those)f(diagonal)f(piv)m(ots,)h
-(at)h(the)f(risk)e(of)i(less)f(n)m(umerical)f(stabilit)m(y)-8
-b(.)47 b(Using)32 b Fv(u)e Fw(=)f(0)0 4534 y(guaran)m(tees)35
-b(that)f(the)f(piv)m(ots)h(on)f(the)g(diagonal)g(will)e(b)s(e)i(c)m
-(hosen,)h(unless)e(they)i(are)g(zero.)50 b(The)33 b(error)g(b)s(ound)0
-4647 y Fv(B)5 b(E)g(R)q(R)31 b Fw(measure)f(ho)m(w)g(m)m(uc)m(h)h
-(stabilit)m(y)e(is)g(actually)h(lost.)141 4760 y(Threshold)22
-b(piv)m(oting)h(turns)g(out)i(to)g(b)s(e)f(hard)f(to)i(parallelize)d
-(on)i(distributed)e(memory)i(mac)m(hines,)h(b)s(ecause)0
-4873 y(of)33 b(the)g(\014ne-grain)e(comm)m(unication)i(and)f(dynamic)f
-(data)j(structures)e(required.)46 b(So)32 b(Sup)s(erLU)p
-3382 4873 V 31 w(DIST)g(uses)h(a)0 4986 y(new)f(sc)m(heme)i(called)e
-Fp(static)j(pivoting)f Fw(instead.)47 b(In)32 b(static)h(piv)m(oting)f
-(the)h(piv)m(ot)g(order)f(\()p Fv(P)3163 5000 y Fo(r)3202
-4986 y Fw(\))h(is)f(c)m(hosen)h(b)s(efore)0 5099 y(n)m(umerical)38
-b(factorization,)43 b(using)38 b(a)i(w)m(eigh)m(ted)g(p)s(erfect)g
-(matc)m(hing)f(algorithm)g([9)q(],)j(and)d(k)m(ept)h(\014xed)f(during)0
-5212 y(factorization.)k(Since)31 b(b)s(oth)f(ro)m(w)h(and)g(column)e
-(orders)i(\()p Fv(P)2058 5226 y Fo(r)2128 5212 y Fw(and)f
-Fv(P)2363 5226 y Fo(c)2398 5212 y Fw(\))h(are)h(\014xed)e(b)s(efore)h
-(n)m(umerical)f(factoriza-)0 5325 y(tion,)e(w)m(e)h(can)g(extensiv)m
-(ely)f(optimize)f(the)i(data)f(la)m(y)m(out,)i(load)e(balance,)h(and)e
-(comm)m(unication)h(sc)m(hedule.)39 b(The)0 5438 y(price)e(is)g(a)h
-(higher)f(risk)g(of)h(n)m(umeric)f(instabilit)m(y)-8
-b(,)38 b(whic)m(h)e(is)h(mitigated)h(b)m(y)g(diagonal)f(scaling,)i
-(setting)g(v)m(ery)1905 5778 y(10)p eop
-%%Page: 11 12
-11 11 bop 0 280 a Fw(tin)m(y)27 b(piv)m(ots)h(to)h(larger)e(v)-5
-b(alues,)28 b(and)f(iterativ)m(e)i(re\014nemen)m(t)e([24)q(].)40
-b(Again,)29 b(error)e(b)s(ound)f Fv(B)5 b(E)g(R)q(R)28
-b Fw(measure)g(ho)m(w)0 393 y(m)m(uc)m(h)i(stabilit)m(y)f(is)h
-(actually)g(lost.)0 637 y Fm(1.4.4)112 b(Memory)38 b(Managemen)m(t)0
-808 y Fw(Because)25 b(of)f(\014ll-in)d(of)j(en)m(tries)f(during)f
-(Gaussian)h(elimination,)g Fv(L)g Fw(and)g Fv(U)34 b
-Fw(t)m(ypically)23 b(ha)m(v)m(e)i(man)m(y)f(more)g(nonzero)0
-921 y(en)m(tries)i(than)f Fv(A)p Fw(.)39 b(If)26 b Fv(P)771
-935 y Fo(r)835 921 y Fw(and)f Fv(P)1065 935 y Fo(c)1126
-921 y Fw(are)h(not)g(already)f(kno)m(wn,)h(w)m(e)h(cannot)f(determine)f
-(the)h(n)m(um)m(b)s(er)e(and)h(lo)s(cations)0 1034 y(of)39
-b(these)g(nonzeros)g(b)s(efore)f(p)s(erforming)f(the)i(n)m(umerical)e
-(factorization.)67 b(This)37 b(means)h(that)i(some)f(kind)e(of)0
-1147 y(dynamic)29 b(memory)h(allo)s(cation)g(is)g(needed.)141
-1260 y(Sequen)m(tial)d(Sup)s(erLU)f(lets)h(the)h(user)f(either)h
-(supply)d(a)j(preallo)s(cated)f(space)i Fu(work[])d Fw(of)i(length)f
-Fu(lwork)p Fw(,)g(or)0 1373 y(dep)s(end)h(on)i(mallo)s(c/free.)41
-b(The)29 b(v)-5 b(ariable)29 b Fu(FILL)g Fw(can)i(b)s(e)e(used)g(to)i
-(help)e(the)h(co)s(de)h(predict)e(the)h(amoun)m(t)g(of)h(\014ll,)0
-1486 y(whic)m(h)25 b(can)i(reduce)f(b)s(oth)g(fragmen)m(tation)h(and)f
-(the)g(n)m(um)m(b)s(er)f(of)i(calls)f(to)h(mallo)s(c/free.)39
-b(If)26 b(the)g(initial)e(estimate)0 1599 y(of)39 b(the)g(size)f(of)h
-Fv(L)g Fw(and)f Fv(U)48 b Fw(from)38 b Fu(FILL)g Fw(is)g(to)s(o)h
-(small,)h(the)e(routine)g(allo)s(cates)h(more)g(space)g(and)f(copies)h
-(the)0 1712 y(curren)m(t)34 b Fv(L)g Fw(and)g Fv(U)45
-b Fw(factors)35 b(to)g(the)g(new)f(space)h(and)e(frees)i(the)f(old)g
-(space.)53 b(If)34 b(the)h(routine)e(cannot)i(allo)s(cate)0
-1825 y(enough)30 b(space,)h(it)f(calls)g(a)h(user-sp)s(eci\014able)d
-(routine)h(ABOR)-8 b(T.)31 b(See)f(sections)h(1.3.4)h(for)e(details.)
-141 1937 y(Sup)s(erLU)p 503 1937 28 4 v 31 w(MT)e(is)g(similar,)e
-(except)k(that)f(the)g(curren)m(t)f(alpha)f(v)m(ersion)h(cannot)h
-(reallo)s(cate)g(more)g(space)g(for)0 2050 y Fv(L)f Fw(and)f
-Fv(U)37 b Fw(if)27 b(the)h(initial)d(size)j(estimate)g(from)g
-Fu(FILL)e Fw(is)h(to)s(o)h(small.)39 b(Instead,)28 b(the)g(program)g
-(calls)f(ABOR)-8 b(T)28 b(and)0 2163 y(the)j(user)e(m)m(ust)h(start)h
-(o)m(v)m(er)h(with)d(a)i(larger)f(v)-5 b(alue)30 b(of)g
-Fu(FILL)p Fw(.)g(See)g(section)h(3.4.2.)141 2276 y(Sup)s(erLU)p
-503 2276 V 31 w(DIST)d(actually)g(has)h(a)g(simpler)d(memory)j
-(managemen)m(t)h(c)m(hore,)g(b)s(ecause)e(once)i Fv(P)3415
-2290 y Fo(r)3482 2276 y Fw(and)e Fv(P)3715 2290 y Fo(c)3779
-2276 y Fw(are)0 2389 y(determined,)k(the)g(structures)g(of)g
-Fv(L)g Fw(and)g Fv(U)42 b Fw(can)33 b(b)s(e)e(determined)g(e\016cien)m
-(tly)h(and)g(just)g(the)g(righ)m(t)g(amoun)m(t)h(of)0
-2502 y(memory)k(allo)s(cated)h(using)d(mallo)s(c)i(and)g(later)g(free.)
-62 b(So)37 b(it)g(will)e(call)h(ABOR)-8 b(T)38 b(only)e(if)h(there)g
-(is)f(really)h(not)0 2615 y(enough)30 b(memory)g(a)m(v)-5
-b(ailable)30 b(to)h(solv)m(e)g(the)g(problem.)0 2858
-y Fm(1.4.5)112 b(In)m(terfacing)37 b(to)g(other)g(languages)0
-3030 y Fw(Sequen)m(tial)26 b(Sup)s(erLU)e(has)i(a)h(Matlab)g(in)m
-(terface)g(to)h(the)e(driv)m(er)g(via)g(a)h(MEX)g(\014le.)38
-b(See)27 b(section)g(2.9)g(for)g(details.)0 3316 y Fr(1.5)135
-b(P)l(erformance)0 3519 y Fw(Sup)s(erLU)35 b(library)f(incorp)s(orates)
-i(a)h(n)m(um)m(b)s(er)f(of)h(no)m(v)m(el)g(algorithmic)e(ideas)i(dev)m
-(elop)s(ed)f(recen)m(tly)-8 b(.)60 b(These)37 b(al-)0
-3632 y(gorithms)31 b(also)g(exploit)f(the)i(features)f(of)h(mo)s(dern)e
-(computer)h(arc)m(hitectures,)i(in)d(particular,)g(the)h(m)m(ulti-lev)m
-(el)0 3745 y(cac)m(he)42 b(organization)f(and)g(parallelism.)69
-b(W)-8 b(e)42 b(ha)m(v)m(e)g(conducted)f(extensiv)m(e)h(exp)s(erimen)m
-(ts)d(on)i(v)-5 b(arious)40 b(plat-)0 3858 y(forms,)29
-b(with)g(a)g(large)h(collection)f(of)h(test)g(matrices.)41
-b(The)29 b(Sequen)m(tial)f(Sup)s(erLU)g(ac)m(hiev)m(ed)i(up)f(to)h
-(40\045)g(of)g(the)0 3971 y(theoretical)37 b(\015oating-p)s(oin)m(t)g
-(rate)g(on)g(a)h(n)m(um)m(b)s(er)e(of)h(pro)s(cessors,)h(see)g([5,)g
-(21)q(].)60 b(The)37 b(mega\015op)g(rate)h(usually)0
-4084 y(increases)24 b(with)f(increasing)g(ratio)i(of)f(\015oating-p)s
-(oin)m(t)g(op)s(erations)f(coun)m(t)i(o)m(v)m(er)h(the)f(n)m(um)m(b)s
-(er)e(of)h(nonzeros)h(in)e(the)0 4197 y Fv(L)31 b Fw(and)f
-Fv(U)41 b Fw(factors.)j(The)31 b(parallel)e(LU)i(factorization)g(in)f
-(Sup)s(erLU)p 2372 4197 V 31 w(MT)h(demonstrated)g(5{10)i(fold)d(sp)s
-(eedups)0 4310 y(on)j(a)h(range)g(of)f(commercially)g(p)s(opular)e
-(SMPs,)i(and)g(up)g(to)h(2.5)g(Giga\015ops)f(factorization)h(rate,)h
-(see)f([6)q(,)g(21].)0 4423 y(The)24 b(parallel)f(LU)i(factorization)g
-(in)f(Sup)s(erLU)p 1634 4423 V 30 w(DIST)h(ac)m(hiev)m(ed)g(up)f(to)h
-(100)h(fold)e(sp)s(eedup)f(on)i(a)g(512-pro)s(cessor)0
-4536 y(Cra)m(y)30 b(T3E,)h(and)f(10.2)i(Giga\015ops)e(factorization)h
-(rate,)g(see)g([23)q(].)0 4822 y Fr(1.6)135 b(Soft)l(w)l(are)47
-b(Status)e(and)g(Av)-7 b(ailabilit)l(y)0 5025 y Fw(All)37
-b(three)h(libraries)e(are)j(freely)e(a)m(v)-5 b(ailable)38
-b(for)g(all)f(uses,)j(commercial)f(or)f(noncommercial,)i(sub)5
-b(ject)38 b(to)h(the)0 5138 y(follo)m(wing)f(ca)m(v)m(eats.)69
-b(No)40 b(w)m(arran)m(t)m(y)g(is)e(expressed)g(or)h(implied)d(b)m(y)j
-(the)h(authors,)h(although)d(w)m(e)i(will)c(gladly)0
-5251 y(answ)m(er)43 b(questions)e(and)h(try)h(to)g(\014x)g(all)e(rep)s
-(orted)h(bugs.)77 b(W)-8 b(e)44 b(ask)f(that)g(prop)s(er)e(credit)i(b)s
-(e)f(giv)m(en)g(to)i(the)0 5364 y(authors)30 b(and)g(that)h(a)g(notice)
-f(b)s(e)g(included)e(if)h(an)m(y)i(mo)s(di\014cations)d(are)j(made.)141
-5477 y(The)f(follo)m(wing)f(Cop)m(yrigh)m(t)h(applies)e(to)k(the)e
-(whole)g(Sup)s(erLU)e(soft)m(w)m(are.)1905 5778 y(11)p
-eop
-%%Page: 12 13
-12 12 bop 227 280 a Fw(Cop)m(yrigh)m(t)43 b(\(c\))h(2003,)k(The)43
-b(Regen)m(ts)h(of)f(the)g(Univ)m(ersit)m(y)g(of)g(California,)h
-(through)e(La)m(wrence)227 393 y(Berk)m(eley)36 b(National)e(Lab)s
-(oratory)h(\(sub)5 b(ject)34 b(to)i(receipt)e(of)h(an)m(y)g(required)d
-(appro)m(v)-5 b(als)34 b(from)h(U.S.)227 506 y(Dept.)42
-b(of)30 b(Energy\))227 653 y(All)f(righ)m(ts)h(reserv)m(ed.)227
-800 y(Redistribution)i(and)j(use)f(in)g(source)h(and)g(binary)e(forms,)
-j(with)e(or)h(without)f(mo)s(di\014cation,)h(are)227
-913 y(p)s(ermitted)29 b(pro)m(vided)g(that)i(the)g(follo)m(wing)e
-(conditions)f(are)j(met:)227 1060 y(\(1\))46 b(Redistributions)41
-b(of)j(source)h(co)s(de)g(m)m(ust)f(retain)g(the)h(ab)s(o)m(v)m(e)g
-(cop)m(yrigh)m(t)g(notice,)k(this)43 b(list)227 1172
-y(of)e(conditions)f(and)g(the)h(follo)m(wing)f(disclaimer.)70
-b(\(2\))42 b(Redistributions)37 b(in)j(binary)f(form)i(m)m(ust)227
-1285 y(repro)s(duce)24 b(the)g(ab)s(o)m(v)m(e)i(cop)m(yrigh)m(t)f
-(notice,)h(this)d(list)g(of)i(conditions)e(and)g(the)i(follo)m(wing)e
-(disclaimer)227 1398 y(in)e(the)h(do)s(cumen)m(tation)g(and/or)h(other)
-f(materials)f(pro)m(vided)g(with)g(the)h(distribution.)35
-b(\(3\))23 b(Neither)227 1511 y(the)41 b(name)f(of)g(La)m(wrence)h
-(Berk)m(eley)g(National)f(Lab)s(oratory)-8 b(,)43 b(U.S.)e(Dept.)71
-b(of)40 b(Energy)g(nor)f(the)227 1624 y(names)g(of)f(its)g(con)m
-(tributors)g(ma)m(y)h(b)s(e)e(used)h(to)h(endorse)f(or)h(promote)g(pro)
-s(ducts)e(deriv)m(ed)g(from)227 1737 y(this)30 b(soft)m(w)m(are)h
-(without)f(sp)s(eci\014c)f(prior)g(written)g(p)s(ermission.)227
-1884 y(THIS)37 b(SOFTW)-10 b(ARE)37 b(IS)g(PR)m(O)m(VIDED)i(BY)f(THE)f
-(COPYRIGHT)g(HOLDERS)g(AND)h(CON-)227 1997 y(TRIBUTORS)48
-b("AS)i(IS")f(AND)h(ANY)f(EXPRESS)f(OR)h(IMPLIED)g(W)-10
-b(ARRANTIES,)49 b(IN-)227 2110 y(CLUDING,)f(BUT)f(NOT)f(LIMITED)h(TO,)f
-(THE)g(IMPLIED)h(W)-10 b(ARRANTIES)46 b(OF)h(MER-)227
-2223 y(CHANT)-8 b(ABILITY)21 b(AND)g(FITNESS)e(F)m(OR)h(A)h(P)-8
-b(AR)g(TICULAR)20 b(PURPOSE)f(ARE)h(DISCLAIMED.)227 2335
-y(IN)32 b(NO)f(EVENT)g(SHALL)g(THE)g(COPYRIGHT)g(O)m(WNER)h(OR)e
-(CONTRIBUTORS)g(BE)i(LI-)227 2448 y(ABLE)40 b(F)m(OR)f(ANY)h(DIRECT,)f
-(INDIRECT,)f(INCIDENT)-8 b(AL,)40 b(SPECIAL,)e(EXEMPLAR)-8
-b(Y,)227 2561 y(OR)30 b(CONSEQUENTIAL)f(D)m(AMA)m(GES)j(\(INCLUDING,)f
-(BUT)g(NOT)f(LIMITED)g(TO,)f(PR)m(O-)227 2674 y(CUREMENT)c(OF)h
-(SUBSTITUTE)e(GOODS)h(OR)g(SER)-10 b(VICES;)24 b(LOSS)h(OF)g(USE,)h(D)m
-(A)-8 b(T)g(A,)27 b(OR)227 2787 y(PR)m(OFITS;)k(OR)g(BUSINESS)f(INTERR)
-m(UPTION\))g(HO)m(WEVER)i(CA)m(USED)f(AND)h(ON)f(ANY)227
-2900 y(THEOR)-8 b(Y)36 b(OF)f(LIABILITY,)g(WHETHER)g(IN)h(CONTRA)m(CT,)
-e(STRICT)g(LIABILITY,)h(OR)227 3013 y(TOR)-8 b(T)44 b(\(INCLUDING)g
-(NEGLIGENCE)g(OR)g(OTHER)-10 b(WISE\))43 b(ARISING)h(IN)g(ANY)h(W)-10
-b(A)i(Y)227 3126 y(OUT)37 b(OF)g(THE)f(USE)h(OF)g(THIS)f(SOFTW)-10
-b(ARE,)36 b(EVEN)i(IF)f(AD)m(VISED)g(OF)g(THE)g(POSSI-)227
-3239 y(BILITY)30 b(OF)h(SUCH)e(D)m(AMA)m(GE.)141 3409
-y(Some)i(routines)e(carry)h(the)h(additional)d(notices)j(as)f(follo)m
-(ws.)111 3579 y(1.)46 b(Some)31 b(subroutines)d(carry)i(the)h(follo)m
-(wing)e(notice:)427 3760 y(Cop)m(yrigh)m(t)h(\(c\))i(1994)g(b)m(y)e
-(Xero)m(x)h(Corp)s(oration.)40 b(All)29 b(righ)m(ts)h(reserv)m(ed.)427
-3886 y(THIS)20 b(MA)-8 b(TERIAL)20 b(IS)g(PR)m(O)m(VIDED)h(AS)f(IS,)g
-(WITH)g(ABSOLUTEL)-8 b(Y)20 b(NO)g(W)-10 b(ARRANTY)427
-3999 y(EXPRESSED)30 b(OR)g(IMPLIED.)g(ANY)h(USE)f(IS)f(A)-8
-b(T)31 b(YOUR)f(O)m(WN)h(RISK.)427 4125 y(P)m(ermission)24
-b(is)h(hereb)m(y)h(gran)m(ted)h(to)f(use)g(or)g(cop)m(y)h(this)d
-(program)i(for)g(an)m(y)g(purp)s(ose,)f(pro)m(vided)427
-4238 y(the)30 b(ab)s(o)m(v)m(e)h(notices)f(are)h(retained)e(on)h(all)f
-(copies.)40 b(P)m(ermission)28 b(to)j(mo)s(dify)d(the)i(co)s(de)g(and)f
-(to)427 4351 y(distribute)e(mo)s(di\014ed)g(co)s(de)i(is)f(gran)m(ted,)
-i(pro)m(vided)e(the)h(ab)s(o)m(v)m(e)h(notices)g(are)f(retained,)g(and)
-g(a)427 4464 y(notice)i(that)g(the)f(co)s(de)h(w)m(as)g(mo)s(di\014ed)d
-(is)h(included)f(with)h(the)i(ab)s(o)m(v)m(e)g(cop)m(yrigh)m(t)g
-(notice.)111 4645 y(2.)46 b(The)30 b(MC64)h(routine)f(\()p
-Fx(only)35 b(used)h(in)f(Sup)s(erLU)p 2042 4645 32 4
-v 38 w(DIST)p Fw(\))30 b(carries)g(the)g(follo)m(wing)f(notice:)427
-4825 y(COPYRIGHT)h(\(c\))h(1999)h(Council)d(for)h(the)h(Cen)m(tral)f
-(Lab)s(oratory)g(of)h(the)f(Researc)m(h)i(Coun-)427 4938
-y(cils.)k(All)19 b(righ)m(ts)h(reserv)m(ed.)37 b(P)-8
-b(A)m(CKA)m(GE)22 b(MC64A/AD)g(A)m(UTHORS)e(Iain)f(Du\013)i
-(\(i.du\013 at rl.ac.uk\))427 5051 y(and)30 b(Jac)m(k)m(o)i(Koster)f
-(\(jak at ii.uib.no\))d(LAST)i(UPD)m(A)-8 b(TE)31 b(20/09/99)427
-5177 y(***)h(Conditions)c(on)i(external)h(use)f(***)427
-5303 y(The)j(user)g(shall)f(ac)m(kno)m(wledge)j(the)f(con)m(tribution)e
-(of)i(this)e(pac)m(k)-5 b(age)36 b(in)c(an)m(y)i(publication)d(of)427
-5416 y(material)40 b(dep)s(enden)m(t)f(up)s(on)f(the)i(use)f(of)i(the)f
-(pac)m(k)-5 b(age.)71 b(The)39 b(user)g(shall)g(use)g(reasonable)427
-5529 y(endea)m(v)m(ours)31 b(to)g(notify)f(the)h(authors)f(of)g(the)h
-(pac)m(k)-5 b(age)32 b(of)f(this)e(publication.)1905
-5778 y(12)p eop
-%%Page: 13 14
-13 13 bop 427 280 a Fw(The)31 b(user)f(can)i(mo)s(dify)d(this)h(co)s
-(de)i(but,)f(at)h(no)f(time)g(shall)e(the)j(righ)m(t)e(or)i(title)e(to)
-i(all)e(or)i(an)m(y)427 393 y(part)g(of)g(this)f(pac)m(k)-5
-b(age)34 b(pass)d(to)i(the)f(user.)45 b(The)31 b(user)g(shall)f(mak)m
-(e)j(a)m(v)-5 b(ailable)32 b(free)g(of)g(c)m(harge)427
-506 y(to)26 b(the)g(authors)f(for)g(an)m(y)g(purp)s(ose)f(all)g
-(information)g(relating)g(to)i(an)m(y)g(alteration)f(or)h(addition)427
-619 y(made)36 b(to)h(this)e(pac)m(k)-5 b(age)38 b(for)e(the)g(purp)s
-(oses)e(of)j(extending)e(the)h(capabilities)e(or)i(enhancing)427
-732 y(the)31 b(p)s(erformance)f(of)g(this)f(pac)m(k)-5
-b(age.)427 862 y(The)26 b(user)g(shall)f(not)i(pass)f(this)f(co)s(de)i
-(directly)e(to)i(a)g(third)e(part)m(y)h(without)g(the)h(express)f
-(prior)427 974 y(consen)m(t)35 b(of)f(the)g(authors.)52
-b(Users)33 b(w)m(an)m(ting)h(to)h(licence)f(their)f(o)m(wn)h(cop)m(y)g
-(of)h(these)f(routines)427 1087 y(should)29 b(send)g(email)h(to)h
-(hsl at aeat.co.uk)427 1217 y(None)c(of)g(the)f(commen)m(ts)i(from)e(the)g
-(Cop)m(yrigh)m(t)g(notice)h(up)f(to)h(and)f(including)d(this)i(one)i
-(shall)427 1330 y(b)s(e)j(remo)m(v)m(ed)h(or)g(altered)f(in)f(an)m(y)i
-(w)m(a)m(y)-8 b(.)141 1517 y(All)29 b(three)i(libraries)c(can)k(b)s(e)f
-(obtained)f(from)h(the)h(follo)m(wing)e(URLs:)382 1705
-y Fu(http://crd.lbl.gov/~xiao)o(ye/)o(Supe)o(rLU/)382
-1818 y(http://www.netlib.org/sc)o(ala)o(pack)o(/pro)o(tot)o(ype/)141
-2006 y Fw(In)e(the)h(future,)f(w)m(e)i(will)c(add)i(more)h
-(functionalit)m(y)e(in)g(the)i(soft)m(w)m(are,)i(suc)m(h)d(as)h(sequen)
-m(tial)f(and)g(parallel)f(in-)0 2119 y(complete)d(LU)f(factorizations,)
-j(as)e(w)m(ell)e(as)i(parallel)e(sym)m(b)s(olic)g(and)h(ordering)f
-(algorithms)g(for)i(Sup)s(erLU)p 3631 2119 28 4 v 30
-w(DIST;)0 2231 y(these)31 b(latter)g(routines)e(w)m(ould)g(replace)h
-(MC64)h(and)f(ha)m(v)m(e)i(no)e(restrictions)f(on)i(external)f(use.)141
-2344 y(All)e(bugs)g(rep)s(orts)g(and)g(queries)f(can)i(b)s(e)g
-(e-mailed)f(to)h Fu(xsli at lbl.gov)d Fw(and)i Fu(demmel at cs.berkeley.edu)p
-Fw(.)0 2631 y Fr(1.7)135 b(Ac)l(kno)l(wledgemen)l(t)0
-2834 y Fw(With)34 b(great)i(gratitude,)g(w)m(e)f(ac)m(kno)m(wledge)h
-(Stan)e(Eisenstat)h(and)f(Jo)s(esph)g(Liu)f(for)h(their)g(signi\014can)
-m(t)g(con)m(tri-)0 2947 y(butions)29 b(to)i(the)f(dev)m(elopmen)m(t)h
-(of)g(Sequen)m(tial)e(Sup)s(erLU.)141 3060 y(W)-8 b(e)39
-b(w)m(ould)e(lik)m(e)g(to)i(thank)f(Jinqc)m(hong)f(T)-8
-b(eo)39 b(for)f(helping)d(generate)40 b(the)e(co)s(de)g(in)f(Sequen)m
-(tial)g(Sup)s(erLU)0 3172 y(to)j(w)m(ork)g(with)e(four)h(\015oating-p)s
-(oin)m(t)g(data)h(t)m(yp)s(es.)68 b(W)-8 b(e)41 b(thank)e(Tim)f(Da)m
-(vis)i(for)g(his)e(con)m(tribution)g(of)i(some)0 3285
-y(subroutines)29 b(related)j(to)g(column)e(ordering)g(and)h
-(suggestions)h(on)f(impro)m(ving)f(the)i(routines')e(in)m(terfaces.)45
-b(W)-8 b(e)0 3398 y(thank)34 b(Ed)f(Roth)m(b)s(erg)h(of)g(Silicon)e
-(Graphics)g(for)i(discussions)d(and)j(pro)m(viding)e(us)h(access)i(to)g
-(the)f(SGI)g(P)m(o)m(w)m(er)0 3511 y(Challenge.)53 b(W)-8
-b(e)36 b(Thank)e(Y)-8 b(u)35 b(W)-8 b(ang)37 b(and)d(William)e(F.)k
-(Mitc)m(hell)e(for)h(dev)m(eloping)f(the)h(F)-8 b(ortran)36
-b(90)f(in)m(terface)0 3624 y(for)30 b Fu(SuperLU)p 481
-3624 29 4 v 33 w(DIST)p Fw(.)141 3737 y(W)-8 b(e)35 b(ac)m(kno)m
-(wledge)h(the)e(follo)m(wing)f(organizations)h(that)g(pro)m(vided)f
-(the)h(computer)g(resources)h(during)c(our)0 3850 y(co)s(de)k(dev)m
-(elopmen)m(t:)49 b(NERSC)34 b(at)h(La)m(wrence)h(Berk)m(eley)f
-(National)f(Lab)s(oratory)-8 b(,)37 b(Liv)m(ermore)d(Computing)f(at)0
-3963 y(La)m(wrence)j(Liv)m(ermore)f(National)h(Lab)s(oratory)-8
-b(,)37 b(NCSA)e(at)h(Univ)m(ersit)m(y)f(of)h(Illinois)c(at)k
-(Urbana-Champaign,)0 4076 y(Silicon)30 b(Graphics,)i(and)g(Xero)m(x)i
-(P)m(alo)f(Alto)f(Researc)m(h)i(Cen)m(ter.)48 b(W)-8
-b(e)33 b(thank)g(UC)f(Berk)m(eley)h(and)f(NSF)h(Infras-)0
-4189 y(tructure)d(gran)m(t)h(CD)m(A-9401156)k(for)30
-b(pro)m(viding)e(Berk)m(eley)j(NO)m(W.)1905 5778 y(13)p
-eop
-%%Page: 14 15
-14 14 bop 0 903 a Fs(Chapter)65 b(2)0 1318 y Fy(Sequen)-6
-b(tial)76 b(Sup)6 b(erLU)78 b(\(V)-19 b(ersion)77 b(3.0\))0
-1800 y Fr(2.1)135 b(Ab)t(out)44 b Fj(SuperLU)0 2003 y
-Fw(In)27 b(this)g(c)m(hapter,)j(Sup)s(erLU)25 b(will)h(alw)m(a)m(ys)i
-(mean)g(Sequen)m(tial)f(Sup)s(erLU.)g Fu(SuperLU)f Fw(pac)m(k)-5
-b(age)30 b(con)m(tains)e(a)g(set)h(of)0 2116 y(subroutines)f(to)j(solv)
-m(e)g(sparse)f(linear)f(systems)i Fv(AX)i Fw(=)25 b Fv(B)5
-b Fw(.)41 b(Here)31 b Fv(A)f Fw(is)g(a)h(square,)f(nonsingular,)e
-Fv(n)20 b Fq(\002)g Fv(n)30 b Fw(sparse)0 2228 y(matrix,)i(and)f
-Fv(X)39 b Fw(and)32 b Fv(B)k Fw(are)c(dense)g Fv(n)20
-b Fq(\002)h Fv(nr)s(hs)31 b Fw(matrices,)i(where)e Fv(nr)s(hs)g
-Fw(is)g(the)h(n)m(um)m(b)s(er)e(of)i(righ)m(t-hand)f(sides)0
-2341 y(and)f(solution)f(v)m(ectors.)42 b(Matrix)31 b
-Fv(A)f Fw(need)h(not)f(b)s(e)g(symmetric)g(or)g(de\014nite;)g(indeed,)f
-Fu(SuperLU)g Fw(is)g(particularly)0 2454 y(appropriate)g(for)i
-(matrices)f(with)f(v)m(ery)i(unsymmetric)d(structure.)141
-2567 y(The)40 b(pac)m(k)-5 b(age)42 b(uses)d Fv(LU)50
-b Fw(decomp)s(osition)39 b(with)g(partial)g(\(or)h(threshold\))f(piv)m
-(oting,)j(and)d(forw)m(ard/bac)m(k)0 2680 y(substitutions.)k(The)31
-b(columns)g(of)h Fv(A)g Fw(ma)m(y)h(b)s(e)e(preordered)g(b)s(efore)h
-(factorization)g(\(either)g(b)m(y)g(the)g(user)f(or)h(b)m(y)0
-2793 y Fu(SuperLU)p Fw(\);)g(this)g(preordering)g(for)h(sparsit)m(y)f
-(is)h(completely)g(separate)h(from)f(the)g(factorization.)50
-b(T)-8 b(o)34 b(impro)m(v)m(e)0 2906 y(bac)m(kw)m(ard)42
-b(stabilit)m(y)-8 b(,)44 b(w)m(e)e(pro)m(vide)e(w)m(orking)h(precision)
-f(iterativ)m(e)i(re\014nemen)m(t)f(subroutines)f([2].)75
-b(Routines)0 3019 y(are)34 b(also)f(a)m(v)-5 b(ailable)33
-b(to)h(equilibrate)d(the)j(system,)h(estimate)f(the)f(condition)f(n)m
-(um)m(b)s(er,)h(calculate)h(the)g(relativ)m(e)0 3132
-y(bac)m(kw)m(ard)40 b(error,)h(and)d(estimate)i(error)f(b)s(ounds)e
-(for)i(the)g(re\014ned)f(solutions.)66 b(W)-8 b(e)40
-b(also)f(include)e(a)j(Matlab)0 3245 y(MEX-\014le)27
-b(in)m(terface,)i(so)e(that)h(our)f(factor)h(and)e(solv)m(e)i(routines)
-e(can)i(b)s(e)e(called)h(as)g(alternativ)m(es)g(to)h(those)g(built)0
-3358 y(in)m(to)38 b(Matlab.)63 b(The)38 b Fv(LU)47 b
-Fw(factorization)39 b(routines)d(can)j(handle)d(non-square)h(matrices,)
-j(but)e(the)g(triangular)0 3470 y(solv)m(es)31 b(are)f(p)s(erformed)f
-(only)h(for)g(square)g(matrices.)141 3583 y(The)e(factorization)i
-(algorithm)d(uses)h(a)h(graph)g(reduction)e(tec)m(hnique)i(to)g(reduce)
-f(graph)g(tra)m(v)m(ersal)i(time)e(in)0 3696 y(the)h(sym)m(b)s(olic)e
-(analysis.)39 b(W)-8 b(e)30 b(exploit)e(dense)h(submatrices)e(in)h(the)
-h(n)m(umerical)e(k)m(ernel,)i(and)g(organize)g(compu-)0
-3809 y(tational)i(lo)s(ops)f(in)g(a)h(w)m(a)m(y)h(that)g(reduces)e
-(data)i(mo)m(v)m(emen)m(t)h(b)s(et)m(w)m(een)f(lev)m(els)e(of)i(the)f
-(memory)g(hierarc)m(h)m(y)-8 b(.)42 b(The)0 3922 y(resulting)26
-b(algorithm)h(is)g(highly)e(e\016cien)m(t)k(on)f(mo)s(dern)e(arc)m
-(hitectures.)41 b(The)27 b(p)s(erformance)g(gains)g(are)i(particu-)0
-4035 y(larly)e(eviden)m(t)h(for)h(large)f(problems.)39
-b(There)28 b(are)h(\\tuning)e(parameters")i(to)h(optimize)e(the)g(p)s
-(eak)h(p)s(erformance)0 4148 y(as)i(a)f(function)f(of)i(cac)m(he)h
-(size.)40 b(F)-8 b(or)32 b(a)e(detailed)g(description)e(of)j(the)f
-(algorithm,)g(see)h(reference)g([5].)141 4261 y Fu(SuperLU)e
-Fw(is)h(implemen)m(ted)f(in)h(ANSI)g(C,)h(and)f(m)m(ust)g(b)s(e)h
-(compiled)e(with)g(a)i(standard)f(ANSI)h(C)f(compiler.)0
-4374 y(It)j(includes)d(v)m(ersions)i(for)h(b)s(oth)e(real)i(and)f
-(complex)g(matrices,)i(in)d(b)s(oth)h(single)f(and)h(double)g
-(precision.)45 b(The)0 4487 y(\014le)38 b(names)i(for)f(the)g
-(single-precision)e(real)i(v)m(ersion)g(start)h(with)e(letter)h(\\s")h
-(\(suc)m(h)g(as)f Fu(sgstrf.c)p Fw(\);)j(the)e(\014le)0
-4600 y(names)27 b(for)g(the)g(double-precision)e(real)h(v)m(ersion)h
-(start)h(with)d(letter)j(\\d")f(\(suc)m(h)h(as)f Fu(dgstrf.c)p
-Fw(\);)f(the)i(\014le)e(names)0 4712 y(for)i(the)g(single-precision)d
-(complex)i(v)m(ersion)g(start)i(with)d(letter)i(\\c")i(\(suc)m(h)d(as)h
-Fu(cgstrf.c)p Fw(\);)f(the)i(\014le)d(names)i(for)0 4825
-y(the)j(double-precision)c(complex)j(v)m(ersion)g(start)h(with)e
-(letter)i(\\z")g(\(suc)m(h)g(as)f Fu(zgstrf.c)p Fw(\).)0
-5112 y Fr(2.2)135 b(Ho)l(w)46 b(to)f(call)h(a)f Fj(SuperLU)d
-Fr(routine)0 5315 y Fw(As)26 b(a)g(simple)e(example,)j(let)e(us)h
-(consider)e(ho)m(w)i(to)h(solv)m(e)f(a)g(5)11 b Fq(\002)g
-Fw(5)27 b(sparse)f(linear)e(system)i Fv(AX)33 b Fw(=)25
-b Fv(B)5 b Fw(,)26 b(b)m(y)g(calling)f(a)0 5428 y(driv)m(er)h(routine)h
-Fu(dgssv\(\))p Fw(.)38 b(Figure)27 b(2.1)h(sho)m(ws)f(matrix)g
-Fv(A)p Fw(,)i(and)e(its)g Fv(L)g Fw(and)g Fv(U)37 b Fw(factors.)k(This)
-25 b(sample)i(program)1905 5778 y(14)p eop
-%%Page: 15 16
-15 15 bop 770 300 a Fk(0)770 446 y(B)770 496 y(B)770
-546 y(B)770 596 y(B)770 646 y(B)770 699 y(@)868 368 y
-Fv(s)151 b(u)50 b(u)881 481 y(l)i(u)983 594 y(l)58 b(p)1173
-706 y(e)51 b(u)881 819 y(l)75 b(l)264 b(r)1343 300 y
-Fk(1)1343 446 y(C)1343 496 y(C)1343 546 y(C)1343 596
-y(C)1343 646 y(C)1343 699 y(A)2048 300 y(0)2048 446 y(B)2048
-496 y(B)2048 546 y(B)2048 596 y(B)2048 646 y(B)2048 699
-y(@)2146 368 y Fw(19)p Fv(:)p Fw(00)379 b(21)p Fv(:)p
-Fw(00)123 b(21)p Fv(:)p Fw(00)2191 481 y(0)p Fv(:)p Fw(63)52
-b(21)p Fv(:)p Fw(00)g Fq(\000)p Fw(13)p Fv(:)p Fw(26)f
-Fq(\000)p Fw(13)p Fv(:)p Fw(26)2448 594 y(0)p Fv(:)p
-Fw(57)122 b(23)p Fv(:)p Fw(58)168 b(7)p Fv(:)p Fw(58)3103
-706 y(5)p Fv(:)p Fw(00)52 b(21)p Fv(:)p Fw(00)2191 819
-y(0)p Fv(:)p Fw(63)97 b(0)p Fv(:)p Fw(57)g Fq(\000)p
-Fw(0)p Fv(:)p Fw(24)g Fq(\000)p Fw(0)p Fv(:)p Fw(77)51
-b(34)p Fv(:)p Fw(20)3547 300 y Fk(1)3547 446 y(C)3547
-496 y(C)3547 546 y(C)3547 596 y(C)3547 646 y(C)3547 699
-y(A)764 1045 y Fw(Original)28 b(matrix)i Fv(A)894 b Fw(F)-8
-b(actors)32 b Fv(F)38 b Fw(=)25 b Fv(L)20 b Fw(+)g Fv(U)31
-b Fq(\000)19 b Fv(I)281 1158 y(s)25 b Fw(=)g(19)p Fv(;)15
-b(u)26 b Fw(=)f(21)p Fv(;)15 b(p)26 b Fw(=)f(16)p Fv(;)15
-b(e)27 b Fw(=)e(5)p Fv(;)15 b(r)29 b Fw(=)c(18)p Fv(;)15
-b(l)28 b Fw(=)d(12)919 1368 y(Figure)30 b(2.1:)42 b(A)31
-b(5)20 b Fq(\002)g Fw(5)31 b(matrix)f(and)f(its)h Fv(L)g
-Fw(and)g Fv(U)40 b Fw(factors.)0 1643 y(is)29 b(lo)s(cated)i(in)e
-Fu(SuperLU/EXAMPLE/superlu.c)o(.)141 1755 y Fw(The)h(program)g(\014rst)
-g(initializes)e(the)i(three)h(arra)m(ys,)g Fu(a[],)47
-b(asub[])28 b Fw(and)i Fu(xa[])p Fw(,)g(whic)m(h)f(store)i(the)g
-(nonzero)0 1868 y(co)s(e\016cien)m(ts)23 b(of)f(matrix)f
-Fv(A)p Fw(,)j(their)d(ro)m(w)i(indices,)f(and)f(the)h(indices)f
-(indicating)e(the)k(b)s(eginning)c(of)j(eac)m(h)h(column)e(in)0
-1981 y(the)29 b(co)s(e\016cien)m(t)g(and)f(ro)m(w)h(index)e(arra)m(ys.)
-40 b(This)27 b(storage)j(format)f(is)e(called)h(compressed)g(column)g
-(format,)h(also)0 2094 y(kno)m(wn)k(as)i(Harw)m(ell-Bo)s(eing)e(format)
-h([10)q(].)52 b(Next,)36 b(the)e(t)m(w)m(o)h(utilit)m(y)d(routines)h
-Fu(dCreate)p 3123 2094 29 4 v 33 w(CompCol)p 3492 2094
-V 32 w(Matrix\(\))0 2207 y Fw(and)28 b Fu(dCreate)p 517
-2207 V 32 w(Dense)p 789 2207 V 33 w(Matrix\(\))e Fw(are)j(called)e(to)i
-(set)g(up)f(the)g(matrix)g(structures)f(for)h Fv(A)h
-Fw(and)f Fv(B)5 b Fw(,)28 b(resp)s(ectiv)m(ely)-8 b(.)0
-2320 y(The)29 b(routine)f Fu(set)p 648 2320 V 34 w(default)p
-1018 2320 V 32 w(options\(\))f Fw(sets)j(the)g(default)e(v)-5
-b(alues)29 b(to)h(the)g(input)d Fu(options)h Fw(argumen)m(t.)41
-b(This)0 2433 y(con)m(trols)d(ho)m(w)f(the)g(matrix)g(will)e(b)s(e)h
-(factorized)i(and)f(ho)m(w)g(the)g(system)h(will)c(b)s(e)j(solv)m(ed.)
-61 b(After)38 b(calling)e(the)0 2546 y Fu(SuperLU)c Fw(routine)h
-Fu(dgssv\(\))p Fw(,)g(the)i Fv(B)j Fw(matrix)c(is)f(o)m(v)m(erwritten)h
-(b)m(y)g(the)h(solution)d(matrix)i Fv(X)7 b Fw(.)52 b(In)33
-b(the)h(end,)h(all)0 2659 y(the)c(dynamically)d(allo)s(cated)i(data)h
-(structures)f(are)h(de-allo)s(cated)f(b)m(y)g(calling)f(v)-5
-b(arious)30 b(utilit)m(y)e(routines.)141 2772 y Fu(SuperLU)h
-Fw(can)h(p)s(erform)f(more)i(general)f(tasks,)h(whic)m(h)e(will)f(b)s
-(e)i(explained)e(later.)0 2984 y Fu(#include)46 b("dsp_defs.h")0
-3210 y(main\(int)g(argc,)g(char)h(*argv[]\))0 3323 y({)0
-3436 y(/*)48 3549 y(*)g(Purpose)48 3662 y(*)g(=======)48
-3775 y(*)48 3887 y(*)g(This)g(is)g(the)g(small)f(5x5)h(example)f(used)h
-(in)g(the)g(Sections)e(1)j(and)f(2)g(of)g(the)48 4000
-y(*)g(User's)f(Guide)h(to)g(illustrate)e(how)i(to)g(call)g(a)g(SuperLU)
-f(routine,)f(and)i(the)48 4113 y(*)g(matrix)f(data)h(structures)e(used)
-i(by)g(SuperLU.)48 4226 y(*)48 4339 y(*/)191 4452 y(SuperMatrix)e(A,)i
-(L,)g(U,)g(B;)191 4565 y(double)141 b(*a,)47 b(*rhs;)191
-4678 y(double)141 b(s,)48 b(u,)f(p,)g(e,)g(r,)g(l;)191
-4791 y(int)285 b(*asub,)47 b(*xa;)191 4904 y(int)285
-b(*perm_r;)46 b(/*)h(row)g(permutations)e(from)h(partial)g(pivoting)g
-(*/)191 5017 y(int)285 b(*perm_c;)46 b(/*)h(column)f(permutation)f
-(vector)h(*/)191 5130 y(int)285 b(nrhs,)47 b(info,)f(i,)h(m,)h(n,)f
-(nnz,)f(permc_spec;)191 5242 y(superlu_options_t)d(options;)191
-5355 y(SuperLUStat_t)h(stat;)1905 5778 y Fw(15)p eop
-%%Page: 16 17
-16 16 bop 191 280 a Fu(/*)47 b(Initialize)e(matrix)h(A.)h(*/)191
-393 y(m)g(=)h(n)f(=)h(5;)191 506 y(nnz)f(=)g(12;)191
-619 y(if)g(\()h(!\(a)e(=)i(doubleMalloc\(nnz\)\))43 b(\))k
-(ABORT\("Malloc)d(fails)j(for)g(a[]."\);)191 732 y(if)g(\()h(!\(asub)e
-(=)h(intMalloc\(nnz\)\))d(\))j(ABORT\("Malloc)d(fails)j(for)g
-(asub[]."\);)191 845 y(if)g(\()h(!\(xa)e(=)i(intMalloc\(n+1\)\))43
-b(\))48 b(ABORT\("Malloc)c(fails)i(for)h(xa[]."\);)191
-958 y(s)g(=)h(19.0;)e(u)i(=)f(21.0;)f(p)i(=)f(16.0;)g(e)g(=)h(5.0;)e(r)
-i(=)f(18.0;)g(l)g(=)g(12.0;)191 1071 y(a[0])g(=)g(s;)g(a[1])g(=)g(l;)g
-(a[2])g(=)h(l;)f(a[3])f(=)i(u;)f(a[4])g(=)g(l;)g(a[5])g(=)g(l;)191
-1184 y(a[6])g(=)g(u;)g(a[7])g(=)g(p;)g(a[8])g(=)h(u;)f(a[9])f(=)i(e;)f
-(a[10]=)f(u;)h(a[11]=)f(r;)191 1297 y(asub[0])g(=)h(0;)g(asub[1])f(=)i
-(1;)f(asub[2])f(=)h(4;)g(asub[3])f(=)i(1;)191 1409 y(asub[4])e(=)h(2;)g
-(asub[5])f(=)i(4;)f(asub[6])f(=)h(0;)g(asub[7])f(=)i(2;)191
-1522 y(asub[8])e(=)h(0;)g(asub[9])f(=)i(3;)f(asub[10]=)e(3;)i
-(asub[11]=)f(4;)191 1635 y(xa[0])g(=)i(0;)f(xa[1])f(=)i(3;)f(xa[2])f(=)
-i(6;)f(xa[3])f(=)i(8;)f(xa[4])f(=)i(10;)f(xa[5])f(=)h(12;)191
-1861 y(/*)g(Create)f(matrix)g(A)i(in)f(the)g(format)f(expected)f(by)j
-(SuperLU.)d(*/)191 1974 y(dCreate_CompCol_Matrix\(&)o(A,)d(m,)47
-b(n,)g(nnz,)g(a,)g(asub,)f(xa,)h(SLU_NC,)f(SLU_D,)g(SLU_GE\);)191
-2200 y(/*)h(Create)f(right-hand)f(side)i(matrix)f(B.)h(*/)191
-2313 y(nrhs)g(=)g(1;)191 2426 y(if)g(\()h(!\(rhs)e(=)h(doubleMalloc\(m)
-d(*)k(nrhs\)\))e(\))h(ABORT\("Malloc)d(fails)j(for)g(rhs[]."\);)191
-2539 y(for)g(\(i)g(=)g(0;)h(i)f(<)h(m;)f(++i\))f(rhs[i])g(=)i(1.0;)191
-2652 y(dCreate_Dense_Matrix\(&B,)41 b(m,)47 b(nrhs,)g(rhs,)f(m,)h
-(SLU_DN,)f(SLU_D,)g(SLU_GE\);)191 2877 y(if)h(\()h(!\(perm_r)d(=)j
-(intMalloc\(m\)\))c(\))j(ABORT\("Malloc)d(fails)j(for)g(perm_r[]."\);)
-191 2990 y(if)g(\()h(!\(perm_c)d(=)j(intMalloc\(n\)\))c(\))j
-(ABORT\("Malloc)d(fails)j(for)g(perm_c[]."\);)191 3216
-y(/*)g(Set)g(the)g(default)f(input)g(options.)g(*/)191
-3329 y(set_default_options\(&opt)o(ions)o(\);)191 3442
-y(options.ColPerm)e(=)j(NATURAL;)191 3668 y(/*)g(Initialize)e(the)i
-(statistics)e(variables.)g(*/)191 3781 y(StatInit\(&stat\);)191
-4006 y(dgssv\(&options,)f(&A,)i(perm_c,)g(perm_r,)g(&L,)h(&U,)g(&B,)g
-(&stat,)f(&info\);)191 4232 y(dPrint_CompCol_Matrix\("A)o(",)c(&A\);)
-191 4345 y(dPrint_CompCol_Matrix\("U)o(",)g(&U\);)191
-4458 y(dPrint_SuperNode_Matrix\()o("L",)f(&L\);)191 4571
-y(print_int_vec\("\\nperm_r")o(,)h(m,)47 b(perm_r\);)191
-4797 y(/*)g(De-allocate)e(storage)h(*/)191 4910 y(SUPERLU_FREE)e
-(\(rhs\);)191 5023 y(SUPERLU_FREE)g(\(perm_r\);)191 5136
-y(SUPERLU_FREE)g(\(perm_c\);)191 5248 y(Destroy_CompCol_Matrix\(&)o
-(A\);)191 5361 y(Destroy_SuperMatrix_Stor)o(e\(&B)o(\);)191
-5474 y(Destroy_SuperNode_Matrix)o(\(&L\))o(;)1905 5778
-y Fw(16)p eop
-%%Page: 17 18
-17 17 bop 191 280 a Fu(Destroy_CompCol_Matrix\(&)o(U\);)191
-393 y(StatFree\(&stat\);)0 506 y(})0 793 y Fr(2.3)135
-b(Matrix)46 b(data)f(structures)0 996 y Fu(SuperLU)22
-b Fw(uses)i(a)g(principal)d(data)k(structure)e Fu(SuperMatrix)e
-Fw(\(de\014ned)j(in)e Fu(SRC/supermatrix.h)p Fw(\))e(to)25
-b(represen)m(t)0 1108 y(a)30 b(general)g(matrix,)f(sparse)g(or)h
-(dense.)40 b(Figure)29 b(2.2)i(giv)m(es)f(the)g(sp)s(eci\014cation)e
-(of)i(the)g Fu(SuperMatrix)c Fw(structure.)0 1221 y(The)34
-b Fu(SuperMatrix)d Fw(structure)j(con)m(tains)h(t)m(w)m(o)h(lev)m(els)e
-(of)g(\014elds.)51 b(The)34 b(\014rst)g(lev)m(el)g(de\014nes)g(all)f
-(the)i(prop)s(erties)0 1334 y(of)j(a)f(matrix)g(whic)m(h)f(are)i(indep)
-s(enden)m(t)e(of)h(ho)m(w)h(it)f(is)f(stored)i(in)e(memory)-8
-b(.)62 b(In)37 b(particular,)h(it)f(sp)s(eci\014es)f(the)0
-1447 y(follo)m(wing)22 b(three)h(orthogonal)h(prop)s(erties:)36
-b(storage)25 b(t)m(yp)s(e)e(\()p Fu(Stype)p Fw(\))g(indicates)f(the)i
-(t)m(yp)s(e)f(of)h(the)f(storage)i(sc)m(heme)0 1560 y(in)d
-Fu(*Store)p Fw(;)i(data)g(t)m(yp)s(e)g(\()p Fu(Dtype)p
-Fw(\))e(enco)s(des)i(the)f(four)g(precisions;)h(mathematical)f(t)m(yp)s
-(e)h(\()p Fu(Mtype)p Fw(\))f(sp)s(eci\014es)f(some)0
-1673 y(mathematical)30 b(prop)s(erties.)39 b(The)30 b(second)g(lev)m
-(el)g(\()p Fu(*Store)p Fw(\))f(p)s(oin)m(ts)g(to)i(the)f(actual)g
-(storage)i(used)d(to)i(store)g(the)0 1786 y(matrix.)60
-b(W)-8 b(e)38 b(asso)s(ciate)g(with)e(eac)m(h)j Fu(Stype)46
-b(XX)36 b Fw(a)i(storage)g(format)g(called)e Fu(XXformat)p
-Fw(,)h(suc)m(h)g(as)g Fu(NCformat)p Fw(,)0 1899 y Fu(SCformat)p
-Fw(,)28 b(etc.)141 2012 y(The)40 b Fu(SuperMatrix)e Fw(t)m(yp)s(e)j(so)
-g(de\014ned)e(can)i(accommo)s(date)i(v)-5 b(arious)40
-b(t)m(yp)s(es)g(of)h(matrix)f(structures)h(and)0 2125
-y(appropriate)i(op)s(erations)h(to)h(b)s(e)e(applied)f(on)i(them,)k
-(although)c(curren)m(tly)f Fu(SuperLU)g Fw(implemen)m(ts)f(only)i(a)0
-2238 y(subset)30 b(of)g(this)g(collection.)40 b(Sp)s(eci\014cally)-8
-b(,)28 b(matrices)j Fv(A)p Fw(,)g Fv(L)p Fw(,)f Fv(U)10
-b Fw(,)31 b Fv(B)5 b Fw(,)30 b(and)f Fv(X)38 b Fw(can)31
-b(ha)m(v)m(e)g(the)g(follo)m(wing)e(t)m(yp)s(es:)p 536
-2367 2799 4 v 534 2479 4 113 v 912 2479 V 1273 2446 a
-Fv(A)p 1699 2479 V 563 w(L)p 2167 2479 V 377 w(U)p 2587
-2479 V 333 w(B)p 2960 2479 V 300 w(X)p 3333 2479 V 536
-2483 2799 4 v 534 2596 4 113 v 585 2562 a Fu(Stype)p
-912 2596 V 138 w(SLU)p 1113 2562 29 4 v 34 w(NC)g Fw(or)i
-Fu(SLU)p 1528 2562 V 33 w(NR)p 1699 2596 4 113 v 147
-w(SLU)p 1948 2562 29 4 v 34 w(SC)p 2167 2596 4 113 v
-170 w(SLU)p 2392 2562 29 4 v 34 w(NC)p 2587 2596 4 113
-v 123 w(SLU)p 2789 2562 29 4 v 33 w(DN)p 2960 2596 4
-113 v 99 w(SLU)p 3161 2562 29 4 v 34 w(DN)p 3333 2596
-4 113 v 534 2709 V 585 2675 a(Dtype)825 2642 y FC(1)p
-912 2709 V 1236 2675 a Fw(an)m(y)p 1699 2709 V 487 w(an)m(y)p
-2167 2709 V 303 w(an)m(y)p 2587 2709 V 256 w(an)m(y)p
-2960 2709 V 231 w(an)m(y)p 3333 2709 V 534 2821 V 585
-2788 a Fu(Mtype)p 912 2821 V 345 w(SLU)p 1320 2788 29
-4 v 34 w(GE)p 1699 2821 4 113 v 306 w(SLU)p 1900 2788
-29 4 v 34 w(TRLU)p 2167 2821 4 113 v 98 w(SLU)p 2368
-2788 29 4 v 34 w(TRU)p 2587 2821 4 113 v 99 w(SLU)p 2789
-2788 29 4 v 33 w(GE)p 2960 2821 4 113 v 99 w(SLU)p 3161
-2788 29 4 v 34 w(GE)p 3333 2821 4 113 v 536 2825 2799
-4 v 141 2996 a Fw(In)f(what)g(follo)m(ws,)g(w)m(e)h(illustrate)d(the)j
-(storage)h(sc)m(hemes)f(de\014ned)e(b)m(y)h Fu(Stype)p
-Fw(.)40 b(F)-8 b(ollo)m(wing)29 b(C's)i(con)m(v)m(en)m(tion,)0
-3109 y(all)e(arra)m(y)i(indices)e(and)g(lo)s(cations)h(b)s(elo)m(w)g
-(are)h(zero-based.)136 3321 y Fq(\017)46 b Fv(A)33 b
-Fw(ma)m(y)f(ha)m(v)m(e)i(storage)f(t)m(yp)s(e)g Fu(SLU)p
-1410 3321 29 4 v 33 w(NC)f Fw(or)g Fu(SLU)p 1828 3321
-V 34 w(NR)o Fw(.)46 b(The)32 b Fu(SLU)p 2361 3321 V 33
-w(NC)g Fw(format)g(is)g(the)g(same)h(as)f(the)g(Harw)m(ell-)227
-3434 y(Bo)s(eing)f(sparse)f(matrix)f(format)i([10)q(],)g(that)g(is,)f
-(the)g(compressed)g(column)f(storage.)418 3659 y Fu(typedef)46
-b(struct)g({)609 3772 y(int)95 b(nnz;)237 b(/*)47 b(number)g(of)g
-(nonzeros)e(in)i(the)g(matrix)f(*/)609 3885 y(void)h(*nzval;)93
-b(/*)47 b(array)g(of)g(nonzero)f(values)g(packed)g(by)h(column)f(*/)609
-3998 y(int)95 b(*rowind;)45 b(/*)i(array)g(of)g(row)g(indices)f(of)h
-(the)g(nonzeros)e(*/)609 4111 y(int)95 b(*colptr;)45
-b(/*)i(colptr[j])f(stores)g(the)h(location)e(in)i(nzval[])f(and)h
-(rowind[])1420 4224 y(which)g(starts)f(column)g(j.)h(It)g(has)g(ncol+1)
-f(entries,)1420 4337 y(and)h(colptr[ncol])e(=)i(nnz.)g(*/)418
-4450 y(})h(NCformat;)227 4675 y Fw(The)30 b Fu(SLU)p
-564 4675 V 34 w(NR)f Fw(format)i(is)f(the)g(compressed)g(ro)m(w)h
-(storage)h(de\014ned)d(b)s(elo)m(w.)418 4900 y Fu(typedef)46
-b(struct)g({)609 5012 y(int)95 b(nnz;)237 b(/*)47 b(number)g(of)g
-(nonzeros)e(in)i(the)g(matrix)f(*/)609 5125 y(void)h(*nzval;)93
-b(/*)47 b(array)g(of)g(nonzero)f(values)g(packed)g(by)h(row)g(*/)609
-5238 y(int)95 b(*colind;)45 b(/*)i(array)g(of)g(column)f(indices)g(of)h
-(the)g(nonzeros)f(*/)609 5351 y(int)95 b(*rowptr;)45
-b(/*)i(rowptr[j])f(stores)g(the)h(location)e(in)i(nzval[])f(and)h
-(colind[])p 0 5433 1560 4 v 104 5487 a Fi(1)138 5518
-y Fh(Dtype)27 b Fg(can)f(b)r(e)f(one)h(of)h Fh(SLU)p
-956 5518 24 4 v 29 w(S)p Fg(,)f Fh(SLU)p 1188 5518 V
-29 w(D)p Fg(,)g Fh(SLU)p 1420 5518 V 29 w(C)g Fg(or)g
-Fh(SLU)p 1725 5518 V 28 w(Z)q Fg(.)1905 5778 y Fw(17)p
-eop
-%%Page: 18 19
-18 18 bop 0 606 a Fu(typedef)46 b(struct)g({)191 719
-y(Stype_t)g(Stype;)g(/*)h(Storage)f(type:)g(indicates)f(the)i(storage)f
-(format)g(of)h(*Store.)f(*/)191 832 y(Dtype_t)g(Dtype;)g(/*)h(Data)g
-(type.)f(*/)191 944 y(Mtype_t)g(Mtype;)g(/*)h(Mathematical)d(type)j(*/)
-191 1057 y(int)95 b(nrow;)237 b(/*)47 b(number)f(of)h(rows)g(*/)191
-1170 y(int)95 b(ncol;)237 b(/*)47 b(number)f(of)h(columns)f(*/)191
-1283 y(void)h(*Store;)141 b(/*)47 b(pointer)f(to)h(the)g(actual)f
-(storage)g(of)h(the)g(matrix)f(*/)0 1396 y(})h(SuperMatrix;)0
-1622 y(typedef)f(enum)g({)191 1735 y(SLU_NC,)380 b(/*)47
-b(column-wise,)d(not)j(supernodal)e(*/)191 1848 y(SLU_NR,)380
-b(/*)47 b(row-wise,)e(not)i(supernodal)e(*/)191 1961
-y(SLU_SC,)380 b(/*)47 b(column-wise,)d(supernodal)h(*/)191
-2074 y(SLU_SR,)380 b(/*)47 b(row-wise,)e(supernodal)g(*/)191
-2186 y(SLU_NCP,)332 b(/*)47 b(column-wise,)d(not)j(supernodal,)e
-(permuted)h(by)h(columns)1002 2299 y(\(After)f(column)g(permutation,)f
-(the)i(consecutive)e(columns)g(of)1050 2412 y(nonzeros)h(may)g(not)h
-(be)h(stored)e(contiguously.)e(*/)191 2525 y(SLU_DN,)380
-b(/*)47 b(Fortran)f(style)g(column-wise)f(storage)h(for)h(dense)f
-(matrix)g(*/)191 2638 y(SLU_NR_loc)236 b(/*)47 b(distributed)e
-(compressed)g(row)i(format)f(*/)0 2751 y(})h(Stype_t;)0
-2977 y(typedef)f(enum)g({)191 3090 y(SLU_S,)428 b(/*)47
-b(single)f(*/)191 3203 y(SLU_D,)428 b(/*)47 b(double)f(*/)191
-3316 y(SLU_C,)428 b(/*)47 b(single-complex)d(*/)191 3428
-y(SLU_Z)476 b(/*)47 b(double-complex)d(*/)0 3541 y(})j(Dtype_t;)0
-3767 y(typedef)f(enum)g({)191 3880 y(SLU_GE,)380 b(/*)47
-b(general)f(*/)191 3993 y(SLU_TRLU,)284 b(/*)47 b(lower)f(triangular,)f
-(unit)i(diagonal)e(*/)191 4106 y(SLU_TRUU,)284 b(/*)47
-b(upper)f(triangular,)f(unit)i(diagonal)e(*/)191 4219
-y(SLU_TRL,)332 b(/*)47 b(lower)f(triangular)f(*/)191
-4332 y(SLU_TRU,)332 b(/*)47 b(upper)f(triangular)f(*/)191
-4445 y(SLU_SYL,)332 b(/*)47 b(symmetric,)e(store)h(lower)h(half)f(*/)
-191 4558 y(SLU_SYU,)332 b(/*)47 b(symmetric,)e(store)h(upper)h(half)f
-(*/)191 4670 y(SLU_HEL,)332 b(/*)47 b(Hermitian,)e(store)h(lower)h
-(half)f(*/)191 4783 y(SLU_HEU)380 b(/*)47 b(Hermitian,)e(store)h(upper)
-h(half)f(*/)0 4896 y(})h(Mtype_t;)1142 5305 y Fw(Figure)30
-b(2.2:)42 b Fu(SuperMatrix)27 b Fw(data)k(structure.)1905
-5778 y(18)p eop
-%%Page: 19 20
-19 19 bop 1420 280 a Fu(which)47 b(starts)f(row)h(j.)g(It)g(has)g
-(nrow+1)f(entries,)1420 393 y(and)h(rowptr[nrow])e(=)i(nnz.)g(*/)418
-506 y(})h(NRformat;)227 700 y Fw(The)31 b(factorization)i(and)e(solv)m
-(e)g(routines)g(in)f Fu(SuperLU)g Fw(are)i(designed)e(to)i(handle)f
-(column-wise)e(storage)227 813 y(only)-8 b(.)41 b(If)30
-b(the)g(input)f(matrix)g Fv(A)i Fw(is)e(in)g(ro)m(w-orien)m(ted)i
-(storage,)h(i.e.,)f(in)e Fu(SLU)p 2829 813 29 4 v 34
-w(NR)g Fw(format,)i(then)g(the)f(driv)m(er)227 926 y(routines)35
-b(\()p Fu(dgssv\(\))f Fw(and)h Fu(dgssvx\(\))p Fw(\))e(actually)i(p)s
-(erform)g(the)g Fv(LU)46 b Fw(decomp)s(osition)34 b(on)h
-Fv(A)3456 893 y Fo(T)3512 926 y Fw(,)i(whic)m(h)d(is)227
-1038 y(column-wise,)26 b(and)h(solv)m(e)g(the)g(system)g(using)e(the)j
-Fv(L)2059 1005 y Fo(T)2140 1038 y Fw(and)f Fv(U)2386
-1005 y Fo(T)2467 1038 y Fw(factors.)41 b(The)26 b(data)i(structures)e
-(holding)227 1151 y Fv(L)e Fw(and)f Fv(U)33 b Fw(on)24
-b(output)f(are)h(di\013eren)m(t)f(\(sw)m(app)s(ed\))g(from)h(the)f
-(data)i(structures)e(y)m(ou)h(get)g(from)g(column-wise)227
-1264 y(input.)37 b(F)-8 b(or)25 b(more)f(detailed)f(descriptions)f(ab)s
-(out)i(this)f(pro)s(cess,)i(please)f(refer)g(to)h(the)f(leading)f
-(commen)m(ts)227 1377 y(of)31 b(the)f(routines)g Fu(dgssv\(\))e
-Fw(and)i Fu(dgssvx\(\))p Fw(.)227 1522 y(Alternativ)m(ely)-8
-b(,)45 b(the)d(users)f(ma)m(y)i(call)e(a)h(utilit)m(y)e(routine)h
-Fu(dCompRow)p 2691 1522 V 32 w(to)p 2819 1522 V 34 w(CompCol\(\))f
-Fw(to)i(con)m(v)m(ert)i(the)227 1635 y(input)30 b(matrix)h(in)f
-Fu(SLU)p 1025 1635 V 34 w(NR)h Fw(format)h(to)h(another)e(matrix)h(in)e
-Fu(SLU)p 2479 1635 V 33 w(NC)i Fw(format,)g(b)s(efore)f(calling)g(Sup)s
-(erLU.)227 1748 y(The)f(de\014nition)e(of)j(this)e(routine)g(is)418
-1942 y Fu(void)47 b(dCompRow_to_CompCol\(int)41 b(m,)47
-b(int)g(n,)h(int)e(nnz,)1611 2054 y(double)g(*a,)h(int)g(*colind,)f
-(int)h(*rowptr,)1611 2167 y(double)f(**at,)h(int)g(**rowind,)e(int)i
-(**colptr\);)227 2361 y Fw(This)25 b(con)m(v)m(ersion)i(tak)m(es)h
-(time)e(prop)s(ortional)e(to)j(the)g(n)m(um)m(b)s(er)e(of)i(nonzeros)f
-(in)f Fv(A)p Fw(.)40 b(Ho)m(w)m(ev)m(er,)29 b(it)d(requires)227
-2474 y(storage)32 b(for)e(a)h(separate)g(cop)m(y)h(of)e(matrix)g
-Fv(A)p Fw(.)136 2651 y Fq(\017)46 b Fv(L)32 b Fw(is)f(a)i(sup)s(erno)s
-(dal)c(matrix)j(with)f(the)h(storage)i(t)m(yp)s(e)e Fu(SLU)p
-2296 2651 V 33 w(SC)p Fw(.)46 b(Due)32 b(to)h(the)g(sup)s(erno)s(dal)c
-(structure,)j Fv(L)227 2764 y Fw(is)e(in)f(fact)i(stored)g(as)f(a)h
-(sparse)f(blo)s(c)m(k)g(lo)m(w)m(er)g(triangular)f(matrix)h([5)q(].)418
-2977 y Fu(typedef)46 b(struct)g({)609 3090 y(int)95 b(nnz;)524
-b(/*)47 b(number)f(of)h(nonzeros)f(in)h(the)g(matrix)f(*/)609
-3203 y(int)95 b(nsuper;)380 b(/*)47 b(index)f(of)h(the)g(last)g
-(supernode)e(*/)609 3316 y(void)i(*nzval;)380 b(/*)47
-b(array)f(of)h(nonzero)f(values)g(packed)g(by)i(column)e(*/)609
-3429 y(int)95 b(*nzval_colptr;)44 b(/*)j(nzval_colptr[j])c(stores)k
-(the)f(location)g(in)1707 3542 y(nzval[])g(which)g(starts)g(column)g(j)
-i(*/)609 3655 y(int)95 b(*rowind;)332 b(/*)47 b(array)f(of)h
-(compressed)e(row)i(indices)f(of)1707 3767 y(rectangular)f(supernodes)g
-(*/)609 3880 y(int)95 b(*rowind_colptr;/*)43 b(rowind_colptr[j])g
-(stores)j(the)h(location)f(in)1707 3993 y(rowind[])f(which)i(starts)f
-(column)g(j)h(*/)609 4106 y(int)95 b(*col_to_sup;)140
-b(/*)47 b(col_to_sup[j])d(is)j(the)g(supernode)e(number)h(to)1707
-4219 y(which)g(column)g(j)i(belongs)e(*/)609 4332 y(int)95
-b(*sup_to_col;)140 b(/*)47 b(sup_to_col[s])d(points)i(to)h(the)g
-(starting)f(column)1707 4445 y(of)h(the)g(s-th)g(supernode)e(*/)418
-4558 y(})j(SCformat;)136 4771 y Fq(\017)e Fw(Both)25
-b Fv(B)j Fw(and)23 b Fv(X)31 b Fw(are)24 b(stored)g(as)g(con)m(v)m(en)m
-(tional)h(t)m(w)m(o-dimensional)e(arra)m(ys)h(in)e(column-ma)5
-b(jor)23 b(order,)i(with)227 4884 y(the)31 b(storage)h(t)m(yp)s(e)e
-Fu(SLU)p 1052 4884 V 34 w(DN)o Fw(.)418 5077 y Fu(typedef)46
-b(struct)g({)609 5190 y(int)h(lda;)238 b(/*)47 b(leading)f(dimension)f
-(*/)609 5303 y(void)i(*nzval;)f(/*)h(array)f(of)h(size)g(lda-by-ncol)e
-(to)i(represent)1373 5416 y(a)g(dense)g(matrix)f(*/)418
-5529 y(})i(DNformat;)1905 5778 y Fw(19)p eop
-%%Page: 20 21
-20 20 bop 141 280 a Fw(Figure)30 b(2.3)h(sho)m(ws)g(the)f(data)h
-(structures)f(for)g(the)h(example)f(matrices)g(in)f(Figure)h(2.1.)141
-393 y(F)-8 b(or)31 b(a)g(description)d(of)j Fu(NCPformat)p
-Fw(,)d(see)j(section)g(2.5.1.)0 680 y Fr(2.4)135 b Fj(Options)42
-b Fr(argumen)l(t)0 883 y Fu(Options)33 b Fx(Argumen)m(t)0
-1054 y Fw(The)g Fu(options)f Fw(argumen)m(t)i(is)e(the)i(input)e
-(argumen)m(t)i(to)g(con)m(trol)g(the)g(b)s(eha)m(viour)e(of)i(the)g
-(libraries.)48 b(The)33 b(user)0 1167 y(can)27 b(tell)f(the)h(solv)m
-(ers)f(ho)m(w)h(the)g(linear)e(systems)i(should)e(b)s(e)h(solv)m(ed)g
-(based)h(on)f(some)h(kno)m(wn)f(c)m(haracteristics)i(of)0
-1280 y(the)34 b(system.)49 b(F)-8 b(or)34 b(example,)g(for)g
-(diagonally)d(dominan)m(t)i(matrices,)h(c)m(ho)s(osing)g(the)f
-(diagonal)g(piv)m(ots)g(ensures)0 1393 y(stabilit)m(y;)i(there)f(is)g
-(no)g(need)g(for)g(n)m(umerical)e(piv)m(oting)i(\(i.e.,)i
-Fv(P)2254 1407 y Fo(r)2326 1393 y Fw(can)e(b)s(e)g(an)g(Iden)m(tit)m(y)
-g(matrix\).)52 b(In)34 b(another)0 1506 y(situation)42
-b(where)g(a)i(sequence)f(of)g(matrices)g(with)e(the)i(same)h(sparsit)m
-(y)e(pattern)h(need)g(b)s(e)f(factorized,)47 b(the)0
-1619 y(column)25 b(p)s(erm)m(utation)h Fv(P)889 1633
-y Fo(c)951 1619 y Fw(\(and)g(also)h(the)g(ro)m(w)f(p)s(erm)m(utation)g
-Fv(P)2236 1633 y Fo(r)2275 1619 y Fw(,)h(if)f(the)h(n)m(umerical)e(v)-5
-b(alues)26 b(are)h(similar\))d(need)0 1732 y(b)s(e)g(computed)f(only)h
-(once,)i(and)e(reused)f(thereafter.)39 b(In)24 b(these)g(cases,)j(the)d
-(solv)m(ers')g(p)s(erformance)g(can)g(b)s(e)g(m)m(uc)m(h)0
-1845 y(impro)m(v)m(ed)30 b(o)m(v)m(er)i(using)d(the)i(default)f
-(settings.)41 b Fu(Options)29 b Fw(is)g(implemen)m(ted)g(as)i(a)g(C)f
-(structure)h(con)m(taining)f(the)0 1958 y(follo)m(wing)f(\014elds:)136
-2145 y Fq(\017)46 b Fu(Fact)227 2258 y Fw(Sp)s(eci\014es)32
-b(whether)h(or)h(not)g(the)g(factored)h(form)e(of)h(the)g(matrix)f
-Fv(A)h Fw(is)f(supplied)d(on)k(en)m(try)-8 b(,)36 b(and)d(if)f(not,)227
-2371 y(ho)m(w)c(the)f(matrix)g Fv(A)g Fw(will)e(b)s(e)h(factorized)i
-(base)f(on)h(the)f(previous)f(history)-8 b(,)27 b(suc)m(h)g(as)h
-(factor)g(from)f(scratc)m(h,)227 2484 y(reuse)j Fv(P)518
-2498 y Fo(c)584 2484 y Fw(and/or)g Fv(P)945 2498 y Fo(r)983
-2484 y Fw(,)h(or)f(reuse)g(the)h(data)g(structures)f(of)g
-Fv(L)g Fw(and)g Fv(U)10 b Fw(.)136 2672 y Fq(\017)46
-b Fu(Trans)227 2784 y Fw(Sp)s(eci\014es)29 b(whether)h(to)h(solv)m(e)g
-(the)f(transp)s(osed)f(system.)136 2972 y Fq(\017)46
-b Fu(Equil)227 3085 y Fw(Sp)s(eci\014es)29 b(whether)h(to)h
-(equilibrate)d(the)j(system)f(\(scale)h Fv(A)p Fw('s)g(ro)m(ws)f(and)g
-(columns)f(to)i(ha)m(v)m(e)h(unit)d(norm\).)136 3273
-y Fq(\017)46 b Fu(ColPerm)227 3386 y Fw(Sp)s(eci\014es)29
-b(ho)m(w)h(to)h(p)s(erm)m(ute)f(the)h(columns)e(of)h(the)h(matrix)f
-(for)g(sparsit)m(y)f(preserv)-5 b(ation.)136 3573 y Fq(\017)46
-b Fu(IterRefine)227 3686 y Fw(Sp)s(eci\014es)d(whether)h(to)i(p)s
-(erform)d(iterativ)m(e)i(re\014nemen)m(t,)j(and)d(in)e(what)h
-(precision)f(to)j(compute)f(the)227 3799 y(residual.)136
-3987 y Fq(\017)h Fu(SymmetricMode)227 4100 y Fw(Sp)s(eci\014es)29
-b(whether)h(to)h(use)f(the)g(symmetric)g(mo)s(de.)136
-4287 y Fq(\017)46 b Fu(DiagPivotThresh)227 4400 y Fw(Sp)s(eci\014es)29
-b(the)i(threshold)d(used)i(for)g(a)h(diagonal)e(en)m(try)i(to)g(b)s(e)f
-(an)g(acceptable)i(piv)m(ot.)136 4588 y Fq(\017)46 b
-Fu(PrintStat)227 4701 y Fw(Sp)s(eci\014es)29 b(whether)h(to)h(prin)m(t)
-e(the)h(solv)m(er's)h(statistics.)141 4888 y(The)f(routine)f
-Fu(set)p 791 4888 29 4 v 34 w(default)p 1161 4888 V 32
-w(options\(\))f Fw(sets)j(the)g(follo)m(wing)d(default)i(v)-5
-b(alues:)191 5076 y Fu(Fact)667 b(=)47 b(DOFACT)476 b(/*)47
-b(factor)f(from)h(scratch)f(*/)191 5189 y(Trans)619 b(=)47
-b(NOTRANS)191 5302 y(Equil)619 b(=)47 b(YES)191 5415
-y(ColPerm)523 b(=)47 b(COLAMD)191 5528 y(SymmetricMode)235
-b(=)47 b(NO)1905 5778 y Fw(20)p eop
-%%Page: 21 22
-21 21 bop 136 1014 a Fq(\017)46 b Fu(A)i(=)f({)h(Stype)e(=)h(SLU_NC;)f
-(Dtype)h(=)g(SLU_D;)f(Mtype)h(=)g(SLU_GE;)f(nrow)g(=)i(5;)f(ncol)g(=)g
-(5;)514 1127 y(*Store)f(=)h({)h(nnz)f(=)g(12;)1039 1240
-y(nzval)f(=)h([)h(19.00,)e(12.00,)g(12.00,)g(21.00,)g(12.00,)g(12.00,)g
-(21.00,)1516 1353 y(16.00,)g(21.00,)g(5.00,)g(21.00,)h(18.00)f(];)1039
-1466 y(rowind)g(=)h([)h(0,)f(1,)g(4,)g(1,)g(2,)h(4,)f(0,)g(2,)g(0,)g
-(3,)g(3,)h(4)f(];)1039 1579 y(colptr)f(=)h([)h(0,)f(3,)g(6,)g(8,)g(10,)
-g(12)g(];)943 1692 y(})418 1805 y(})136 2105 y Fq(\017)f
-Fu(U)i(=)f({)h(Stype)e(=)h(SLU_NC;)f(Dtype)h(=)g(SLU_D;)f(Mtype)h(=)g
-(SLU_TRU;)f(nrow)g(=)i(5;)f(ncol)f(=)i(5;)514 2218 y(*Store)e(=)h({)h
-(nnz)f(=)g(11;)1039 2331 y(nzval)f(=)h([)h(21.00,)e(-13.26,)g(7.58,)g
-(21.00)h(];)1039 2444 y(rowind)f(=)h([)h(0,)f(1,)g(2,)g(0)h(];)1039
-2557 y(colptr)e(=)h([)h(0,)f(0,)g(0,)g(1,)g(4,)h(4)f(];)943
-2670 y(})418 2783 y(})136 3083 y Fq(\017)f Fu(L)i(=)f({)h(Stype)e(=)h
-(SLU_SC;)f(Dtype)h(=)g(SLU_D;)f(Mtype)h(=)g(SLU_TRLU;)e(nrow)i(=)g(5;)h
-(ncol)e(=)i(5;)514 3196 y(*Store)e(=)h({)h(nnz)f(=)g(11;)1039
-3309 y(nsuper)f(=)h(2;)1039 3422 y(nzval)f(=)h([)h(19.00,)e(0.63,)g
-(0.63,)h(21.00,)f(0.57,)g(0.57,)h(-13.26,)1516 3535 y(23.58,)f(-0.24,)g
-(5.00,)g(-0.77,)h(21.00,)f(34.20)g(];)1039 3648 y(nzval_colptr)e(=)k([)
-f(0)g(3,)h(6,)f(9,)g(11,)g(13)g(];)1039 3761 y(rowind)f(=)h([)h(0,)f
-(1,)g(4,)g(1,)g(2,)h(4,)f(3,)g(4)g(];)1039 3873 y(rowind_colptr)d(=)j
-([)h(0,)f(3,)g(6,)g(6,)g(8,)h(8)f(];)1039 3986 y(col_to_sup)e(=)i([)h
-(0,)f(1,)g(1,)g(2,)g(2)h(];)1039 4099 y(sup_to_col)d(=)i([)h(0,)f(1,)g
-(3,)g(5)h(];)943 4212 y(})418 4325 y(})0 4734 y Fw(Figure)43
-b(2.3:)69 b(The)44 b(data)g(structures)g(for)g(a)g(5)30
-b Fq(\002)f Fw(5)44 b(matrix)f(and)h(its)f Fv(LU)54 b
-Fw(factors,)48 b(as)c(represen)m(ted)g(in)f(the)0 4846
-y Fu(SuperMatrix)27 b Fw(data)k(structure.)41 b(Zero-based)30
-b(indexing)e(is)i(used.)1905 5778 y(21)p eop
-%%Page: 22 23
-22 22 bop 191 280 a Fu(DiagPivotThresh)139 b(=)47 b(1.0)620
-b(/*)47 b(partial)f(pivoting)g(*/)191 393 y(IterRefine)379
-b(=)47 b(NOREFINE)191 506 y(PrintStat)427 b(=)47 b(YES)141
-694 y Fw(The)34 b(other)h(p)s(ossible)d(v)-5 b(alues)35
-b(for)f(eac)m(h)i(\014eld)d(are)i(do)s(cumen)m(ted)g(in)e(the)i(source)
-g(co)s(de)g Fu(SRC/util.h)p Fw(.)50 b(The)0 807 y(users)30
-b(can)g(reset)h(eac)m(h)h(default)d(v)-5 b(alue)30 b(according)g(to)i
-(their)d(needs.)0 1093 y Fr(2.5)135 b(P)l(erm)l(utations)0
-1296 y Fw(Tw)m(o)28 b(p)s(erm)m(utation)f(matrices)g(are)h(in)m(v)m
-(olv)m(ed)g(in)e(the)i(solution)e(pro)s(cess.)40 b(In)27
-b(fact,)i(the)f(actual)g(factorization)g(w)m(e)0 1409
-y(p)s(erform)h(is)h Fv(P)494 1423 y Fo(r)532 1409 y Fv(AP)671
-1376 y Fo(T)658 1432 y(c)752 1409 y Fw(=)c Fv(LU)10 b
-Fw(,)30 b(where)h Fv(P)1360 1423 y Fo(r)1428 1409 y Fw(is)f(determined)
-f(from)i(partial)e(piv)m(oting)h(\(with)g(a)h(threshold)e(piv)m(oting)0
-1522 y(option\),)f(and)e Fv(P)572 1536 y Fo(c)634 1522
-y Fw(is)f(a)i(column)f(p)s(erm)m(utation)g(c)m(hosen)h(either)f(b)m(y)h
-(the)g(user)f(or)h Fu(SuperLU)p Fw(,)e(usually)f(to)k(mak)m(e)g(the)0
-1635 y Fv(L)j Fw(and)g Fv(U)41 b Fw(factors)33 b(as)e(sparse)g(as)h(p)s
-(ossible.)42 b Fv(P)1611 1649 y Fo(r)1680 1635 y Fw(and)31
-b Fv(P)1916 1649 y Fo(c)1983 1635 y Fw(are)g(represen)m(ted)h(b)m(y)f
-(t)m(w)m(o)i(in)m(teger)f(v)m(ectors)h Fu(perm)p 3730
-1635 29 4 v 33 w(r[])0 1748 y Fw(and)d Fu(perm)p 375
-1748 V 33 w(c[])p Fw(,)g(whic)m(h)f(are)i(the)f(p)s(erm)m(utations)g
-(of)g(the)h(in)m(tegers)f(\(0)c(:)g Fv(m)20 b Fq(\000)g
-Fw(1\))31 b(and)f(\(0)c(:)f Fv(n)20 b Fq(\000)g Fw(1\),)31
-b(resp)s(ectiv)m(ely)-8 b(.)0 1991 y Fm(2.5.1)112 b(Ordering)37
-b(for)h(sparsit)m(y)0 2163 y Fw(Column)i(reordering)h(for)g(sparsit)m
-(y)g(is)g(completely)h(separate)h(from)e(the)h Fv(LU)52
-b Fw(factorization.)76 b(The)41 b(column)0 2276 y(p)s(erm)m(utation)32
-b Fv(P)581 2290 y Fo(c)649 2276 y Fw(should)f(b)s(e)i(applied)d(b)s
-(efore)j(calling)e(the)j(factorization)f(routine)f Fu(dgstrf\(\))p
-Fw(.)47 b(In)32 b(principle,)0 2389 y(an)m(y)27 b(ordering)e(heuristic)
-f(used)i(for)g(symmetric)g(matrices)g(can)h(b)s(e)e(applied)f(to)k
-Fv(A)2798 2356 y Fo(T)2853 2389 y Fv(A)e Fw(\(or)h Fv(A)12
-b Fw(+)g Fv(A)3321 2356 y Fo(T)3403 2389 y Fw(if)25 b(the)i(matrix)0
-2502 y(is)d(nearly)g(structurally)e(symmetric\))j(to)g(obtain)f
-Fv(P)1756 2516 y Fo(c)1791 2502 y Fw(.)39 b(Curren)m(tly)-8
-b(,)25 b(w)m(e)g(pro)m(vide)f(the)h(follo)m(wing)e(ordering)h(options)0
-2614 y(through)30 b Fu(options)e Fw(argumen)m(t.)41 b(The)30
-b Fu(options.ColPerm)c Fw(\014eld)j(can)i(tak)m(e)h(the)e(follo)m(wing)
-f(v)-5 b(alues:)136 2802 y Fq(\017)46 b Fu(NATURAL)p
-Fw(:)29 b(use)h(natural)f(ordefring)g(\(i.e.,)i Fv(P)1744
-2816 y Fo(c)1805 2802 y Fw(=)25 b Fv(I)7 b Fw(\).)136
-2990 y Fq(\017)46 b Fu(MMD)p 377 2990 V 34 w(AT)p 507
-2990 V 34 w(PLUS)p 733 2990 V 33 w(A)p Fw(:)30 b(use)g(minim)m(um)e
-(degree)j(ordering)e(on)h(the)h(structure)f(of)g Fv(A)2913
-2957 y Fo(T)2989 2990 y Fw(+)20 b Fv(A)p Fw(.)136 3177
-y Fq(\017)46 b Fu(MMD)p 377 3177 V 34 w(ATA)p Fw(:)30
-b(use)g(minim)m(um)d(degree)k(ordering)e(on)i(the)f(structure)g(of)h
-Fv(A)2654 3144 y Fo(T)2709 3177 y Fv(A)p Fw(.)136 3365
-y Fq(\017)46 b Fu(COLAMD)p Fw(:)29 b(use)h(appro)m(ximate)h(minim)m(um)
-c(degree)k(column)f(ordering.)136 3553 y Fq(\017)46 b
-Fu(MY)p 329 3553 V 34 w(PERMC)p Fw(:)30 b(use)h(the)g(ordering)f(giv)m
-(en)i(in)e(the)h(p)s(erm)m(utation)f(v)m(ector)j Fu(perm)p
-2823 3553 V 33 w(c[])p Fw(,)e(whic)m(h)f(is)g(input)g(b)m(y)h(the)227
-3666 y(user.)141 3853 y(If)23 b Fu(options.ColPerm)18
-b Fw(is)k(set)h(to)h(the)f(last)g(v)-5 b(alue,)24 b(the)f(library)d
-(will)h(use)h(the)h(p)s(erm)m(utation)f(v)m(ector)j Fu(perm)p
-3730 3853 V 33 w(c[])0 3966 y Fw(as)32 b(an)f(input,)g(whic)m(h)f(ma)m
-(y)i(b)s(e)f(obtained)g(from)h(an)m(y)g(other)g(ordering)e(algorithm.)
-43 b(F)-8 b(or)33 b(example,)f(the)g(nested-)0 4079 y(dissection)d(t)m
-(yp)s(e)i(of)f(ordering)f(co)s(des)i(include)d(Metis)i([18)r(],)g
-(Chaco)h([15)q(])g(and)f(Scotc)m(h)h([28)q(].)141 4192
-y(Alternativ)m(ely)-8 b(,)44 b(the)d(users)g(can)g(pro)m(vide)f(their)h
-(o)m(wn)g(column)f(p)s(erm)m(utation)g(v)m(ector.)75
-b(F)-8 b(or)42 b(example,)h(it)0 4305 y(ma)m(y)32 b(b)s(e)f(an)g
-(ordering)f(suitable)g(for)h(the)g(underlying)e(ph)m(ysical)g(problem.)
-42 b(Both)32 b(driv)m(er)e(routines)h Fu(dgssv)f Fw(and)0
-4418 y Fu(dgssvx)f Fw(tak)m(e)j Fu(perm)p 712 4418 V
-33 w(c[])d Fw(as)i(an)f(input)f(argumen)m(t.)141 4531
-y(After)f(p)s(erm)m(utation)f Fv(P)952 4545 y Fo(c)1015
-4531 y Fw(is)f(applied)g(to)i Fv(A)p Fw(,)h(w)m(e)f(use)f
-Fu(SLU)p 2084 4531 V 34 w(NCP)g Fw(format)h(to)g(represen)m(t)g(the)g
-(p)s(erm)m(uted)f(matrix)0 4644 y Fv(AP)139 4611 y Fo(T)126
-4666 y(c)194 4644 y Fw(,)39 b(in)c(whic)m(h)g(the)i(consecutiv)m(e)h
-(columns)d(of)i(nonzeros)f(ma)m(y)i(not)e(b)s(e)g(stored)h(con)m
-(tiguously)f(in)f(memory)-8 b(.)0 4756 y(Therefore,)37
-b(w)m(e)e(need)g(t)m(w)m(o)i(separate)f(arra)m(ys)g(of)f(p)s(oin)m
-(ters,)h Fu(colbeg[])d Fw(and)i Fu(colend[])p Fw(,)f(to)i(indicate)f
-(the)g(b)s(e-)0 4869 y(ginning)28 b(and)i(end)g(of)g(eac)m(h)i(column)d
-(in)g Fu(nzval[])f Fw(and)i Fu(rowind[])p Fw(.)191 5057
-y Fu(typedef)46 b(struct)g({)382 5170 y(int)94 b(nnz;)238
-b(/*)47 b(number)f(of)h(nonzeros)f(in)h(the)g(matrix)f(*/)382
-5283 y(void)g(*nzval;)94 b(/*)47 b(array)g(of)g(nonzero)f(values,)f
-(packed)h(by)i(column)e(*/)382 5396 y(int)94 b(*rowind;)46
-b(/*)h(array)g(of)g(row)g(indices)e(of)j(the)f(nonzeros)e(*/)382
-5509 y(int)94 b(*colbeg;)46 b(/*)h(colbeg[j])e(points)i(to)g(the)g
-(location)e(in)i(nzval[])f(and)h(rowind[])1905 5778 y
-Fw(22)p eop
-%%Page: 23 24
-23 23 bop 1193 280 a Fu(which)47 b(starts)f(column)g(j)h(*/)382
-393 y(int)94 b(*colend;)46 b(/*)h(colend[j])e(points)i(to)g(one)g(past)
-f(the)h(location)f(in)h(nzval[])1193 506 y(and)g(rowind[])f(which)g
-(ends)h(column)f(j)h(*/)191 619 y(})g(NCPformat;)0 858
-y Fm(2.5.2)112 b(P)m(artial)36 b(piv)m(oting)g(with)g(threshold)0
-1030 y Fw(W)-8 b(e)41 b(ha)m(v)m(e)f(included)d(a)j(threshold)e(piv)m
-(oting)h(parameter)h Fv(u)g Fq(2)h Fw([0)p Fv(;)15 b
-Fw(1])41 b(to)f(con)m(trol)g(n)m(umerical)e(stabilit)m(y)-8
-b(.)67 b(The)0 1142 y(user)42 b(can)h(c)m(ho)s(ose)g(to)g(use)g(a)f(ro)
-m(w)h(p)s(erm)m(utation)f(obtained)g(from)g(a)h(previous)e
-(factorization.)77 b(\(The)43 b(argu-)0 1255 y(men)m(t)38
-b Fu(options.Fact)45 b(=)i(SamePattern)p 1487 1255 29
-4 v 32 w(SameRowPerm)34 b Fw(should)i(b)s(e)h(passed)h(to)g(the)g
-(factorization)h(routine)0 1368 y Fu(dgstrf\(\))p Fw(.\))59
-b(The)36 b(piv)m(oting)g(subroutine)f Fu(dpivotL\(\))g
-Fw(c)m(hec)m(ks)j(whether)e(this)g(c)m(hoice)i(of)f(piv)m(ot)g
-(satis\014es)g(the)0 1481 y(threshold;)g(if)d(not,)k(it)d(will)e(try)j
-(the)f(diagonal)g(elemen)m(t.)57 b(If)35 b(neither)g(of)h(the)g(ab)s(o)
-m(v)m(e)g(satis\014es)f(the)h(threshold,)0 1594 y(the)30
-b(maxim)m(um)e(magnitude)g(elemen)m(t)i(in)e(the)i(column)e(will)f(b)s
-(e)h(used)h(as)g(the)h(piv)m(ot.)40 b(The)29 b(pseudo-co)s(de)g(of)h
-(the)0 1707 y(piv)m(oting)g(p)s(olicy)e(for)i(column)g
-Fv(j)35 b Fw(is)30 b(giv)m(en)g(b)s(elo)m(w.)207 1890
-y(\(1\))92 b(compute)31 b Fv(thr)s(esh)25 b Fw(=)g Fv(u)30
-b Fq(j)p Fv(a)1325 1904 y Fo(mj)1425 1890 y Fq(j)p Fw(,)h(where)e
-Fq(j)p Fv(a)1841 1904 y Fo(mj)1941 1890 y Fq(j)c Fw(=)g(max)2256
-1904 y Fo(i)p Fn(\025)p Fo(j)2387 1890 y Fq(j)p Fv(a)2460
-1904 y Fo(ij)2521 1890 y Fq(j)p Fw(;)207 2116 y(\(2\))92
-b Fx(if)30 b Fw(user)g(sp)s(eci\014es)f(piv)m(ot)h(ro)m(w)h
-Fv(k)i Fx(and)e Fq(j)p Fv(a)1808 2131 y Fo(k)r(j)1883
-2116 y Fq(j)26 b(\025)f Fv(thr)s(esh)30 b Fx(and)g Fv(a)2571
-2131 y Fo(k)r(j)2672 2116 y Fq(6)p Fw(=)24 b(0)31 b Fx(then)621
-2229 y Fw(piv)m(ot)g(ro)m(w)f(=)25 b Fv(k)s Fw(;)414
-2342 y Fx(else)35 b(if)65 b Fq(j)p Fv(a)814 2356 y Fo(j)t(j)883
-2342 y Fq(j)26 b(\025)f Fv(thr)s(esh)30 b Fx(and)h Fv(a)1572
-2356 y Fo(j)t(j)1666 2342 y Fq(6)p Fw(=)25 b(0)30 b Fx(then)621
-2455 y Fw(piv)m(ot)h(ro)m(w)f(=)25 b Fv(j)5 b Fw(;)414
-2568 y Fx(else)621 2681 y Fw(piv)m(ot)31 b(ro)m(w)f(=)25
-b Fv(m)p Fw(;)414 2793 y Fx(endif)p Fw(;)141 2977 y(Tw)m(o)31
-b(sp)s(ecial)e(v)-5 b(alues)29 b(of)i Fv(u)f Fw(result)g(in)f(the)h
-(follo)m(wing)f(t)m(w)m(o)j(strategies:)136 3140 y Fq(\017)46
-b Fv(u)26 b Fw(=)f(0)p Fv(:)p Fw(0:)41 b(either)30 b(use)g(user-sp)s
-(eci\014ed)f(piv)m(ot)h(order)g(if)f(a)m(v)-5 b(ailable,)30
-b(or)g(else)h(use)f(diagonal)f(piv)m(ot;)136 3318 y Fq(\017)46
-b Fv(u)26 b Fw(=)f(1)p Fv(:)p Fw(0:)41 b(classical)30
-b(partial)f(piv)m(oting.)0 3599 y Fr(2.6)135 b(Symmetric)46
-b(Mo)t(de)0 3802 y Fw(In)34 b(man)m(y)i(applications,)f(matrix)f
-Fv(A)h Fw(ma)m(y)h(b)s(e)f(diagonally)e(dominan)m(t)i(or)g(nearly)f
-(so.)56 b(In)34 b(this)g(case,)k(piv)m(oting)0 3915 y(on)d(the)g
-(diagonal)f(is)g(su\016cien)m(t)h(for)g(stabilit)m(y)e(and)i(is)f
-(preferable)g(for)g(sparsit)m(y)h(than)f(o\013-diagonal)i(piv)m(oting.)
-0 4028 y(T)-8 b(o)36 b(do)f(this,)g(the)h(user)e(can)h(set)h(a)g(small)
-d(\(less-than-one\))j(diagonal)f(piv)m(ot)g(threshold)e(\(e.g.,)39
-b(0.0,)e(0.01\))h(and)0 4141 y(c)m(ho)s(ose)d(an)f(\()p
-Fv(A)525 4108 y Fo(T)604 4141 y Fw(+)22 b Fv(A)p Fw(\){based)35
-b(column)e(p)s(erm)m(utation)g(algorithm.)51 b(W)-8 b(e)35
-b(call)f(this)f(setting)h Fp(symmetric)j(mo)-5 b(de)p
-Fw(.)0 4254 y(In)30 b(this)f(case,)j(the)e Fu(options.SymmetricMode)42
-b(=)48 b(YES)29 b Fw(m)m(ust)h(b)s(e)g(set.)141 4367
-y(Note)35 b(that,)g(when)e(an)g(diagonal)g(en)m(try)h(is)f(smaller)f
-(than)h(the)h(threshold,)f(the)h(co)s(de)g(will)d(still)g(c)m(ho)s(ose)
-k(an)0 4480 y(o\013-diagonal)g(piv)m(ot.)52 b(That)35
-b(is,)g(the)f(ro)m(w)h(p)s(erm)m(utation)e Fv(P)2051
-4494 y Fo(r)2124 4480 y Fw(ma)m(y)i(not)g(b)s(e)f(Iden)m(tit)m(y)-8
-b(.)53 b(Please)35 b(refer)f(to)h([22)r(])f(for)0 4593
-y(more)d(discussion)c(on)k(the)f(symmetric)g(mo)s(de.)0
-4874 y Fr(2.7)135 b(Memory)45 b(managemen)l(t)i(for)e
-Ff(L)g Fr(and)f Ff(U)0 5077 y Fw(In)33 b(the)i(sparse)e
-Fv(LU)44 b Fw(algorithm,)35 b(the)f(amoun)m(t)g(of)h(space)f(needed)g
-(to)h(hold)e(the)h(data)h(structures)e(of)i Fv(L)f Fw(and)f
-Fv(U)0 5190 y Fw(cannot)d(b)s(e)g(accurately)g(predicted)f(prior)f(to)i
-(the)g(factorization.)42 b(The)29 b(dynamically)e(gro)m(wing)j(arra)m
-(ys)g(include)0 5303 y(those)k(for)f(the)g(nonzero)h(v)-5
-b(alues)33 b(\()p Fu(nzval[])p Fw(\))f(and)h(the)g(compressed)g(ro)m(w)
-h(indices)d(\()p Fu(rowind[])p Fw(\))h(of)h Fv(L)p Fw(,)h(and)f(for)0
-5416 y(the)e(nonzero)f(v)-5 b(alues)30 b(\()p Fu(nzval[])p
-Fw(\))f(and)h(the)g(ro)m(w)h(indices)d(\()p Fu(rowind[])p
-Fw(\))h(of)i Fv(U)10 b Fw(.)141 5529 y(Tw)m(o)31 b(alternativ)m(e)f
-(memory)h(mo)s(dels)e(are)i(presen)m(ted)f(to)h(the)g(user:)1905
-5778 y(23)p eop
-%%Page: 24 25
-24 24 bop 136 280 a Fq(\017)46 b Fw(system-lev)m(el)31
-b({)g(based)f(on)g(C's)g(dynamic)f(allo)s(cation)h(capabilit)m(y)f(\()p
-Fu(malloc/free)p Fw(\);)136 467 y Fq(\017)46 b Fw(user-lev)m(el)34
-b({)h(based)g(on)f(a)i(user-supplied)31 b Fu(work[])i
-Fw(arra)m(y)i(of)g(size)f Fu(lwork)g Fw(\(in)f(b)m(ytes\).)55
-b(This)33 b(is)h(similar)227 579 y(to)g(F)-8 b(ortran-st)m(yle)33
-b(handling)d(of)j(w)m(ork)g(space.)48 b Fu(Work[])30
-b Fw(is)i(organized)h(as)f(a)h(t)m(w)m(o-ended)h(stac)m(k,)h(one)e(end)
-227 692 y(holding)i(the)j Fv(L)f Fw(and)f Fv(U)47 b Fw(data)38
-b(structures,)h(the)e(other)h(end)e(holding)f(the)j(auxiliary)d(arra)m
-(ys)i(of)g(kno)m(wn)227 805 y(size.)141 989 y(Except)45
-b(for)g(the)g(di\013eren)m(t)f(w)m(a)m(ys)h(to)h(allo)s(cate/deallo)s
-(cate)g(space,)j(the)c(logical)f(view)g(of)h(the)g(memory)0
-1102 y(organization)30 b(is)g(the)g(same)h(for)f(b)s(oth)g(sc)m(hemes.)
-41 b(No)m(w)31 b(w)m(e)g(describ)s(e)e(the)i(p)s(olicies)d(in)h(the)h
-(memory)h(mo)s(dule.)141 1215 y(A)m(t)k(the)f(outset)h(of)f(the)g
-(factorization,)h(w)m(e)g(guess)e(there)i(will)c(b)s(e)i
-Fu(FILL*nnz\(A\))e Fw(\014lls)g(in)i(the)h(factors)h(and)0
-1328 y(allo)s(cate)25 b(corresp)s(onding)d(storage)k(for)e(the)h(ab)s
-(o)m(v)m(e)h(four)d(arra)m(ys,)j(where)e Fu(nnz\(A\))f
-Fw(is)g(the)i(n)m(um)m(b)s(er)e(of)i(nonzeros)f(in)0
-1441 y(original)19 b(matrix)g Fv(A)p Fw(,)k(and)d Fu(FILL)f
-Fw(is)h(an)g(in)m(teger,)j(sa)m(y)e(20.)38 b(\(The)20
-b(v)-5 b(alue)20 b(of)h Fu(FILL)e Fw(can)i(b)s(e)f(set)g(in)g(an)g
-(inquiry)d(function)0 1554 y Fu(sp)p 102 1554 29 4 v
-34 w(ienv\(\))p Fw(,)32 b(see)h(section)g(2.10.3.\))50
-b(If)32 b(this)f(initial)f(request)j(exceeds)h(the)e(ph)m(ysical)g
-(memory)g(constrain)m(t,)i(the)0 1667 y Fu(FILL)22 b
-Fw(factor)j(is)d(rep)s(eatedly)h(reduced,)i(and)e(attempts)h(are)g
-(made)f(to)i(allo)s(cate)f(smaller)e(arra)m(ys,)j(un)m(til)d(the)i
-(initial)0 1780 y(allo)s(cation)30 b(succeeds.)141 1893
-y(During)c(the)i(factorization,)h(if)d(an)m(y)i(arra)m(y)g(size)f
-(exceeds)h(the)g(allo)s(cated)f(b)s(ound,)f(w)m(e)i(expand)f(it)g(as)h
-(follo)m(ws.)0 2006 y(W)-8 b(e)32 b(\014rst)f(allo)s(cate)g(a)h(c)m(h)m
-(unk)f(of)g(new)g(memory)g(of)g(size)g Fu(EXPAND)f Fw(times)h(the)g
-(old)f(size,)i(then)f(cop)m(y)h(the)f(existing)0 2118
-y(data)22 b(in)m(to)f(the)g(new)f(memory)-8 b(,)24 b(and)c(then)h(free)
-g(the)g(old)f(storage.)40 b(The)20 b(extra)i(cop)m(ying)f(is)f
-(necessary)-8 b(,)24 b(b)s(ecause)d(the)0 2231 y(factorization)27
-b(algorithm)f(requires)f(that)i(eac)m(h)h(of)f(the)g(aforemen)m(tioned)
-g(four)f(data)h(structures)f(b)s(e)g Fp(c)-5 b(ontiguous)0
-2344 y Fw(in)40 b(memory)-8 b(.)75 b(The)41 b(v)-5 b(alues)41
-b(of)h Fu(FILL)f Fw(and)g Fu(EXPAND)f Fw(are)i(normally)d(set)k(to)f
-(20)h(and)e(1.5,)k(resp)s(ectiv)m(ely)-8 b(.)75 b(See)0
-2457 y Fu(xmemory.c)28 b Fw(for)i(details.)141 2570 y(After)38
-b(factorization,)h(w)m(e)f(do)f(not)h(garbage-collect)h(the)e(extra)h
-(space)g(that)g(ma)m(y)g(ha)m(v)m(e)g(b)s(een)f(allo)s(cated.)0
-2683 y(Th)m(us,)24 b(there)f(will)e(b)s(e)h(external)i(fragmen)m
-(tation)f(in)f(the)i Fv(L)f Fw(and)f Fv(U)34 b Fw(data)23
-b(structures.)38 b(The)23 b(settings)g(of)g Fu(FILL)g
-Fw(and)0 2796 y Fu(EXPAND)30 b Fw(should)g(tak)m(e)j(in)m(to)f(accoun)m
-(t)i(the)e(trade-o\013)h(b)s(et)m(w)m(een)f(the)g(n)m(um)m(b)s(er)f(of)
-h(expansions)e(and)h(the)h(amoun)m(t)0 2909 y(of)f(fragmen)m(tation.)
-141 3022 y(Arra)m(ys)k(of)h(kno)m(wn)f(size,)h(suc)m(h)f(as)h(v)-5
-b(arious)34 b(column)g(p)s(oin)m(ters)g(and)h(w)m(orking)f(arra)m(ys,)k
-(are)d(allo)s(cated)h(just)0 3135 y(once.)41 b(All)29
-b(dynamically-allo)s(cated)g(w)m(orking)h(arra)m(ys)g(are)h(freed)f
-(after)h(factorization.)0 3420 y Fr(2.8)135 b(User-callable)47
-b(routines)0 3623 y Fw(The)40 b(naming)f(con)m(v)m(en)m(tions,)44
-b(calling)39 b(sequences)h(and)g(functionalit)m(y)f(of)h(these)h
-(routines)e(mimic)g(the)h(corre-)0 3736 y(sp)s(onding)24
-b(LAP)-8 b(A)m(CK)26 b(soft)m(w)m(are)i([1].)40 b(In)25
-b(the)i(routine)e(names,)i(suc)m(h)f(as)g Fu(dgstrf)p
-Fw(,)g(w)m(e)h(use)e(the)i(t)m(w)m(o)g(letters)g Fu(GS)e
-Fw(to)0 3849 y(denote)34 b Fp(gener)-5 b(al)36 b(sp)-5
-b(arse)35 b Fw(matrices.)50 b(The)33 b(leading)f(letter)p
-Fu(x)i Fw(stands)f(for)g Fu(S,)47 b(D,)g(C)p Fw(,)34
-b(or)f Fu(Z)p Fw(,)g(sp)s(ecifying)f(the)h(data)0 3962
-y(t)m(yp)s(e.)0 4205 y Fm(2.8.1)112 b(Driv)m(er)37 b(routines)0
-4376 y Fw(W)-8 b(e)27 b(pro)m(vide)f(t)m(w)m(o)i(t)m(yp)s(es)e(of)g
-(driv)m(er)f(routines)h(for)g(solving)f(systems)h(of)g(linear)f
-(equations.)39 b(The)26 b(driv)m(er)f(routines)0 4489
-y(can)31 b(handle)e(b)s(oth)g(column-)h(and)f(ro)m(w-orien)m(ted)i
-(storage)h(sc)m(hemes.)136 4673 y Fq(\017)46 b Fw(A)30
-b(simple)d(driv)m(er)i Fu(dgssv\(\))p Fw(,)f(whic)m(h)g(solv)m(es)i
-(the)g(system)f Fv(AX)k Fw(=)25 b Fv(B)34 b Fw(b)m(y)c(factorizing)f
-Fv(A)h Fw(and)f(o)m(v)m(erwriting)227 4786 y Fv(B)35
-b Fw(with)29 b(the)i(solution)e Fv(X)7 b Fw(.)136 4972
-y Fq(\017)46 b Fw(An)c(exp)s(ert)h(driv)m(er)e Fu(dgssvx\(\))p
-Fw(,)j(whic)m(h,)g(in)d(addition)g(to)i(the)g(ab)s(o)m(v)m(e,)k(also)c
-(p)s(erforms)e(the)h(follo)m(wing)227 5085 y(functions)29
-b(\(some)i(of)g(them)f(optionally\):)330 5271 y Fx({)45
-b Fw(solv)m(e)31 b Fv(A)718 5238 y Fo(T)773 5271 y Fv(X)i
-Fw(=)25 b Fv(B)5 b Fw(;)330 5416 y Fx({)45 b Fw(equilibrate)35
-b(the)i(system)g(\(scale)g Fv(A)p Fw('s)g(ro)m(ws)f(and)g(columns)g(to)
-h(ha)m(v)m(e)h(unit)d(norm\))i(if)e Fv(A)i Fw(is)f(p)s(o)s(orly)427
-5529 y(scaled;)1905 5778 y(24)p eop
-%%Page: 25 26
-25 25 bop 330 280 a Fx({)45 b Fw(estimate)h(the)e(condition)g(n)m(um)m
-(b)s(er)f(of)i Fv(A)p Fw(,)j(c)m(hec)m(k)e(for)f(near-singularit)m(y)-8
-b(,)47 b(and)c(c)m(hec)m(k)k(for)d(piv)m(ot)427 393 y(gro)m(wth;)330
-539 y Fx({)h Fw(re\014ne)30 b(the)h(solution)e(and)g(compute)i(forw)m
-(ard)f(and)g(bac)m(kw)m(ard)g(error)g(b)s(ounds.)141
-727 y(These)e(driv)m(er)f(routines)h(co)m(v)m(er)i(all)d(the)i
-(functionalit)m(y)e(of)h(the)h(computational)f(routines.)39
-b(W)-8 b(e)29 b(exp)s(ect)g(that)0 840 y(most)35 b(users)f(can)g
-(simply)e(use)j(these)g(driv)m(er)e(routines)g(to)j(ful\014ll)31
-b(their)i(tasks)i(with)e(no)i(need)f(to)h(b)s(other)f(with)0
-953 y(the)d(computational)f(routines.)0 1196 y Fm(2.8.2)112
-b(Computational)36 b(routines)0 1368 y Fw(The)22 b(users)g(can)i(in)m
-(v)m(ok)m(e)g(the)f(follo)m(wing)e(computational)i(routines,)g(instead)
-f(of)h(the)g(driv)m(er)f(routines,)i(to)f(directly)0
-1481 y(con)m(trol)43 b(the)g(b)s(eha)m(vior)f(of)h Fu(SuperLU)p
-Fw(.)f(The)g(computational)g(routines)g(can)h(only)f(handle)g
-(column-orien)m(ted)0 1594 y(storage.)136 1806 y Fq(\017)k
-Fu(dgstrf\(\))p Fw(:)39 b(F)-8 b(actorize.)227 1957 y(This)31
-b(implemen)m(ts)f(the)j(\014rst-time)e(factorization,)j(or)e(later)g
-(re-factorization)h(with)e(the)h(same)h(nonzero)227 2069
-y(pattern.)56 b(In)35 b(re-factorizations,)i(the)f(co)s(de)g(has)f(the)
-g(abilit)m(y)f(to)i(use)f(the)h(same)g(column)e(p)s(erm)m(utation)227
-2182 y Fv(P)285 2196 y Fo(c)349 2182 y Fw(and)27 b(ro)m(w)i(p)s(erm)m
-(utation)e Fv(P)1272 2196 y Fo(r)1339 2182 y Fw(obtained)h(from)g(a)g
-(previous)f(factorization.)41 b(Sev)m(eral)28 b(scalar)h(argumen)m(ts)
-227 2295 y(con)m(trol)21 b(ho)m(w)g(the)g Fv(LU)30 b
-Fw(decomp)s(osition)20 b(and)g(the)h(n)m(umerical)e(piv)m(oting)h
-(should)e(b)s(e)i(p)s(erformed.)36 b Fu(dgstrf\(\))227
-2408 y Fw(can)31 b(handle)e(non-square)h(matrices.)136
-2596 y Fq(\017)46 b Fu(dgstrs\(\))p Fw(:)39 b(T)-8 b(riangular)28
-b(solv)m(e.)227 2746 y(This)f(tak)m(es)j(the)f Fv(L)f
-Fw(and)h Fv(U)38 b Fw(triangular)27 b(factors,)j(the)f(ro)m(w)g(and)f
-(column)f(p)s(erm)m(utation)h(v)m(ectors,)j(and)d(the)227
-2859 y(righ)m(t-hand)h(side)h(to)h(compute)g(a)f(solution)f(matrix)h
-Fv(X)38 b Fw(of)30 b Fv(AX)j Fw(=)25 b Fv(B)35 b Fw(or)30
-b Fv(A)2823 2826 y Fo(T)2879 2859 y Fv(X)i Fw(=)25 b
-Fv(B)5 b Fw(.)136 3047 y Fq(\017)46 b Fu(dgscon\(\))p
-Fw(:)39 b(Estimate)30 b(condition)f(n)m(um)m(b)s(er.)227
-3197 y(Giv)m(en)41 b(the)g(matrix)f Fv(A)g Fw(and)g(its)g(factors)i
-Fv(L)e Fw(and)g Fv(U)10 b Fw(,)43 b(this)d(estimates)h(the)g(condition)
-e(n)m(um)m(b)s(er)g(in)h(the)227 3310 y(one-norm)30 b(or)g(in\014nit)m
-(y-norm.)38 b(The)29 b(algorithm)g(is)g(due)g(to)i(Hager)g(and)e
-(Higham)h([16)q(],)g(and)g(is)e(the)j(same)227 3423 y(as)g
-Fu(CONDEST)d Fw(in)h(sparse)h(Matlab.)136 3610 y Fq(\017)46
-b Fu(dgsequ\(\)/dlaqgs\(\))p Fw(:)36 b(Equilibrate.)227
-3761 y Fu(dgsequ)31 b Fw(\014rst)h(computes)g(the)h(ro)m(w)g(and)f
-(column)f(scalings)g Fv(D)2388 3775 y Fo(r)2459 3761
-y Fw(and)h Fv(D)2713 3775 y Fo(c)2780 3761 y Fw(whic)m(h)f(w)m(ould)h
-(mak)m(e)h(eac)m(h)h(ro)m(w)227 3874 y(and)28 b(eac)m(h)h(column)d(of)i
-(the)h(scaled)e(matrix)h Fv(D)1809 3888 y Fo(r)1847 3874
-y Fv(AD)1990 3888 y Fo(c)2053 3874 y Fw(ha)m(v)m(e)h(equal)e(norm.)39
-b Fu(dlaqgs)27 b Fw(then)g(applies)f(them)i(to)227 3986
-y(the)j(original)f(matrix)g Fv(A)h Fw(if)f(it)h(is)f(indeed)f(badly)h
-(scaled.)42 b(The)31 b(equilibrated)d Fv(A)j Fw(o)m(v)m(erwrites)h(the)
-f(original)227 4099 y Fv(A)p Fw(.)136 4287 y Fq(\017)46
-b Fu(dgsrfs\(\))p Fw(:)39 b(Re\014ne)30 b(solution.)227
-4437 y(Giv)m(en)g Fv(A)p Fw(,)h(its)f(factors)h Fv(L)f
-Fw(and)f Fv(U)10 b Fw(,)31 b(and)e(an)h(initial)e(solution)h
-Fv(X)7 b Fw(,)30 b(this)g(do)s(es)f(iterativ)m(e)i(re\014nemen)m(t,)f
-(using)227 4550 y(the)k(same)f(precision)e(as)j(the)f(input)e(data.)50
-b(It)33 b(also)g(computes)h(forw)m(ard)e(and)h(bac)m(kw)m(ard)g(error)g
-(b)s(ounds)227 4663 y(for)d(the)h(re\014ned)e(solution.)0
-4907 y Fm(2.8.3)112 b(Utilit)m(y)35 b(routines)0 5078
-y Fw(The)29 b(utilit)m(y)f(routines)h(can)g(help)g(users)f(create)k
-(and)c(destro)m(y)j(the)e Fu(SuperLU)f Fw(matrices)i(easily)-8
-b(.)40 b(These)29 b(routines)0 5191 y(reside)g(in)g(t)m(w)m(o)j
-(places:)41 b Fu(SRC/util.c)27 b Fw(con)m(tains)k(the)f(routines)g
-(that)h(are)f(precision-indep)s(enden)m(t;)0 5304 y Fu(SRC/)p
-Fq(f)p Fu(s,d,c,z)p Fq(g)p Fu(util.c)e Fw(con)m(tains)k(the)g(routines)
-f(dep)s(enden)m(t)g(on)g(precision.)44 b(Here,)33 b(w)m(e)f(list)e(the)
-j(protot)m(yp)s(es)0 5417 y(of)e(these)f(routines.)1905
-5778 y(25)p eop
-%%Page: 26 27
-26 26 bop 191 280 a Fu(/*)47 b(Create)f(a)i(supermatrix)c(in)k
-(compressed)d(column)h(format.)f(A)j(is)f(the)g(output.)f(*/)191
-393 y(dCreate_CompCol_Matrix\(S)o(uper)o(Mat)o(rix)41
-b(*A,)47 b(int)g(m,)g(int)g(n,)g(int)g(nnz,)1289 506
-y(double)f(*nzval,)g(int)g(*rowind,)g(int)h(*colptr,)1289
-619 y(Stype_t)e(stype,)i(Dtype_t)e(dtype,)h(Mtype_t)g(mtype\);)191
-845 y(/*)h(Create)f(a)i(supermatrix)c(in)k(compressed)d(row)h(format.)g
-(A)i(is)f(the)g(output.)f(*/)191 958 y(dCreate_CompRow_Matrix\(S)o
-(uper)o(Mat)o(rix)41 b(*A,)47 b(int)g(m,)g(int)g(n,)g(int)g(nnz,)1289
-1071 y(double)f(*nzval,)g(int)g(*colind,)g(int)h(*rowptr,)1289
-1184 y(Stype_t)e(stype,)i(Dtype_t)e(dtype,)h(Mtype_t)g(mtype\);)191
-1409 y(/*)h(Copy)g(matrix)f(A)h(into)g(matrix)f(B,)h(both)g(in)g
-(compressed)e(column)h(format.)g(*/)191 1522 y
-(dCopy_CompCol_Matrix\(Sup)o(erMa)o(tri)o(x)c(*A,)47
-b(SuperMatrix)e(*B\);)191 1748 y(/*)i(Create)f(a)i(supermatrix)c(in)k
-(dense)e(format.)g(X)h(is)g(the)g(output.*/)191 1861
-y(dCreate_Dense_Matrix\(Sup)o(erMa)o(tri)o(x)42 b(*X,)47
-b(int)g(m,)g(int)g(n,)g(double)f(*x,)h(int)g(ldx,)1193
-1974 y(Stype_t)f(stype,)g(Dtype_t)g(dtype,)g(Mtype_t)g(mtype\);)191
-2200 y(/*)h(Create)f(a)i(supermatrix)c(in)k(supernodal)d(format.)g(L)j
-(is)f(the)g(output.)f(*/)191 2313 y(dCreate_SuperNode_Matrix)o(\(Sup)o
-(erM)o(atri)o(x)c(*L,)47 b(int)g(m,)g(int)g(n,)g(int)g(nnz,)1384
-2426 y(double)f(*nzval,)g(int)h(*nzval_colptr,)d(int)j(*rowind,)1384
-2539 y(int)g(*rowind_colptr,)d(int)j(*col_to_sup,)d(int)j(*sup_to_col,)
-1384 2652 y(Stype_t)f(stype,)g(Dtype_t)g(dtype,)g(Mtype_t)g(mtype\);)
-191 2877 y(/*)h(Convert)f(the)h(compressed)e(row)i(fromat)f(to)h(the)g
-(compressed)e(column)h(format.)g(*/)191 2990 y
-(dCompRow_to_CompCol\(int)41 b(m,)48 b(int)e(n,)i(int)f(nnz,)1145
-3103 y(double)g(*a,)f(int)h(*colind,)f(int)h(*rowptr,)1145
-3216 y(double)g(**at,)f(int)h(**rowind,)e(int)i(**colptr\);)191
-3442 y(/*)g(Print)f(a)i(supermatrix)d(in)i(compressed)e(column)h
-(format.)g(*/)191 3555 y(dPrint_CompCol_Matrix\(ch)o(ar)c(*what,)k
-(SuperMatrix)e(*A\);)191 3781 y(/*)j(Print)f(a)i(supermatrix)d(in)i
-(supernodal)e(format.)h(*/)191 3894 y(dPrint_SuperNode_Matrix\()o(char)
-41 b(*what,)46 b(SuperMatrix)f(*A\);)191 4119 y(/*)i(Print)f(a)i
-(supermatrix)d(in)i(dense)f(format.)g(*/)191 4232 y
-(dPrint_Dense_Matrix\(char)41 b(*what,)46 b(SuperMatrix)f(*A\);)191
-4458 y(/*)i(Deallocate)e(the)i(storage)f(structure)f(*Store.)h(*/)191
-4571 y(Destroy_SuperMatrix_Stor)o(e\(Su)o(per)o(Matr)o(ix)c(*A\);)191
-4797 y(/*)47 b(Deallocate)e(the)i(supermatrix)e(structure)g(in)i
-(compressed)e(column)h(format.)g(*/)191 4910 y
-(Destroy_CompCol_Matrix\(S)o(uper)o(Mat)o(rix)41 b(*A\))191
-5136 y(/*)47 b(Deallocate)e(the)i(supermatrix)e(structure)g(in)i
-(supernodal)e(format.)h(*/)191 5248 y(Destroy_SuperNode_Matrix)o(\(Sup)
-o(erM)o(atri)o(x)c(*A\))191 5474 y(/*)47 b(Deallocate)e(the)i
-(supermatrix)e(structure)g(in)i(permuted)f(compressed)f(column)h
-(format.)g(*/)1905 5778 y Fw(26)p eop
-%%Page: 27 28
-27 27 bop 191 280 a Fu(Destroy_CompCol_Permuted)o(\(Sup)o(erM)o(atri)o
-(x)42 b(*A\))191 506 y(/*)47 b(Deallocate)e(the)i(supermatrix)e
-(structure)g(in)i(dense)g(format.)e(*/)191 619 y
-(Destroy_Dense_Matrix\(Sup)o(erMa)o(tri)o(x)d(*A\))0
-906 y Fr(2.9)135 b(Matlab)46 b(in)l(terface)0 1108 y
-Fw(In)36 b(the)h Fu(SuperLU)n(/MATLAB)e Fw(sub)s(directory)-8
-b(,)37 b(w)m(e)g(ha)m(v)m(e)h(dev)m(elop)s(ed)e(a)h(set)g(of)g
-(MEX-\014les)g(in)m(terface)g(to)g(Matlab.)0 1221 y(T)m(yping)23
-b Fu(make)h Fw(in)f(this)h(directory)g(pro)s(duces)f(executables)i(to)g
-(b)s(e)f(in)m(v)m(ok)m(ed)h(in)f(Matlab.)39 b(The)24
-b(curren)m(t)g Fu(Makefile)0 1334 y Fw(is)c(set)h(up)e(so)i(that)g(the)
-f(MEX-\014les)h(are)f(compatible)g(with)f(Matlab)i(V)-8
-b(ersion)20 b(5.)38 b(The)20 b(user)g(should)e(edit)i
-Fu(Makefile)0 1447 y Fw(for)34 b(Matlab)h(V)-8 b(ersion)34
-b(4)h(compatibilit)m(y)-8 b(.)52 b(Righ)m(t)35 b(no)m(w,)g(only)f(the)h
-(factor)g(routine)f Fu(dgstrf\(\))e Fw(and)i(the)h(simple)0
-1560 y(driv)m(er)42 b(routine)g Fu(dgssv\(\))f Fw(are)i(callable)f(b)m
-(y)g(in)m(v)m(oking)h Fu(superlu)e Fw(and)h Fu(lusolve)f
-Fw(in)g(Matlab,)47 b(resp)s(ectiv)m(ely)-8 b(.)0 1673
-y Fu(Superlu)26 b Fw(and)h Fu(lusolve)e Fw(corresp)s(ond)i(to)h(the)g
-(t)m(w)m(o)h(Matlab)e(built-in)e(functions)h Fu(lu)h
-Fw(and)g Fq(n)f Fw(.)39 b(In)27 b(Matlab,)i(when)0 1786
-y(y)m(ou)i(t)m(yp)s(e)381 1899 y Fu(help)47 b(superlu)0
-2012 y Fw(y)m(ou)31 b(will)c(\014nd)i(the)i(follo)m(wing)e(description)
-f(ab)s(out)i Fu(superlu)p Fw('s)f(functionalit)m(y)f(and)i(ho)m(w)h(to)
-g(use)f(it.)95 2199 y Fu(SUPERLU)46 b(:)i(Supernodal)d(LU)i
-(factorization)95 2425 y(Executive)f(summary:)95 2651
-y([L,U,p])g(=)i(superlu\(A\))474 b(is)47 b(like)g([L,U,P])f(=)h
-(lu\(A\),)f(but)h(faster.)95 2764 y([L,U,prow,pcol])d(=)k(superlu\(A\))
-92 b(preorders)46 b(the)g(columns)g(of)h(A)h(by)f(min)g(degree,)1718
-2877 y(yielding)f(A\(prow,pcol\))e(=)k(L*U.)95 3103 y(Details)e(and)h
-(options:)95 3329 y(With)g(one)g(input)f(and)h(two)g(or)g(three)g
-(outputs,)e(SUPERLU)h(has)h(the)g(same)g(effect)f(as)h(LU,)95
-3441 y(except)g(that)f(the)h(pivoting)f(permutation)e(is)k(returned)d
-(as)i(a)h(vector,)e(not)g(a)i(matrix:)95 3667 y([L,U,p])e(=)i
-(superlu\(A\))d(returns)h(unit)g(lower)h(triangular)e(L,)i(upper)f
-(triangular)f(U,)573 3780 y(and)i(permutation)d(vector)i(p)i(with)f
-(A\(p,:\))f(=)h(L*U.)95 3893 y([L,U])g(=)g(superlu\(A\))e(returns)h
-(permuted)g(triangular)f(L)i(and)g(upper)f(triangular)f(U)573
-4006 y(with)h(A)i(=)f(L*U.)95 4232 y(With)g(a)h(second)e(input,)g(the)h
-(columns)e(of)j(A)f(are)g(permuted)f(before)g(factoring:)95
-4458 y([L,U,prow])f(=)j(superlu\(A,psparse\))43 b(returns)j(triangular)
-f(L)i(and)g(U)g(and)g(permutation)573 4571 y(prow)f(with)h
-(A\(prow,psparse\))d(=)j(L*U.)95 4683 y([L,U])g(=)g
-(superlu\(A,psparse\))c(returns)j(permuted)f(triangular)g(L)j(and)f
-(triangular)e(U)573 4796 y(with)h(A\(:,psparse\))f(=)i(L*U.)95
-4909 y(Here)g(psparse)f(will)h(normally)e(be)i(a)h(user-supplied)c
-(permutation)h(matrix)h(or)h(vector)95 5022 y(to)h(be)f(applied)f(to)h
-(the)g(columns)f(of)h(A)g(for)g(sparsity.)93 b(COLMMD)46
-b(is)h(one)g(way)g(to)g(get)95 5135 y(such)g(a)h(permutation;)c(see)j
-(below)f(to)h(make)g(SUPERLU)f(compute)g(it)h(automatically.)95
-5248 y(\(If)g(psparse)f(is)h(a)h(permutation)d(matrix,)g(the)i(matrix)f
-(factored)g(is)h(A*psparse'.\))95 5474 y(With)g(a)h(fourth)e(output,)f
-(a)j(column)e(permutation)f(is)i(computed)e(and)i(applied:)1905
-5778 y Fw(27)p eop
-%%Page: 28 29
-28 28 bop 95 393 a Fu([L,U,prow,pcol])44 b(=)k(superlu\(A,psparse\))90
-b(returns)46 b(triangular)f(L)i(and)g(U)h(and)573 506
-y(permutations)c(prow)j(and)g(pcol)f(with)h(A\(prow,pcol\))d(=)k(L*U.)
-573 619 y(Here)e(psparse)g(is)h(a)h(user-supplied)c(column)i
-(permutation)f(for)i(sparsity,)573 732 y(and)g(the)g(matrix)f(factored)
-f(is)i(A\(:,psparse\))e(\(or)i(A*psparse')e(if)i(the)573
-845 y(input)f(is)h(a)h(permutation)c(matrix\).)94 b(Output)46
-b(pcol)g(is)i(a)f(permutation)573 958 y(that)f(first)h(performs)e
-(psparse,)h(then)g(postorders)f(the)i(etree)g(of)g(the)573
-1071 y(column)f(intersection)e(graph)j(of)g(A.)95 b(The)47
-b(postorder)e(does)i(not)f(affect)573 1184 y(sparsity,)f(but)i(makes)f
-(supernodes)f(in)i(L)h(consecutive.)95 1297 y([L,U,prow,pcol])c(=)k
-(superlu\(A,0\))c(is)j(the)g(same)g(as)g(...)g(=)g(superlu\(A,I\);)d
-(it)k(does)573 1409 y(not)f(permute)e(for)i(sparsity)f(but)h(it)g(does)
-g(postorder)e(the)i(etree.)95 1522 y([L,U,prow,pcol])d(=)k
-(superlu\(A\))d(is)i(the)g(same)f(as)h(...)g(=)h
-(superlu\(A,colmmd\(A\)\);)573 1635 y(it)f(uses)g(column)f(minimum)f
-(degree)i(to)g(permute)f(columns)f(for)i(sparsity,)573
-1748 y(then)f(postorders)f(the)i(etree)g(and)g(factors.)0
-1936 y Fw(F)-8 b(or)31 b(a)g(description)d(ab)s(out)i
-Fu(lusolve)p Fw('s)f(functionalit)m(y)g(and)g(ho)m(w)i(to)g(use)f(it,)g
-(y)m(ou)h(can)g(t)m(yp)s(e)381 2049 y Fu(help)47 b(lusolve)95
-2261 y(LUSOLVE)f(:)i(Solve)e(linear)g(systems)g(by)h(supernodal)e(LU)i
-(factorization.)95 2487 y(x)h(=)f(lusolve\(A,)e(b\))j(returns)d(the)i
-(solution)f(to)h(the)g(linear)f(system)g(A*x)h(=)g(b,)286
-2600 y(using)g(a)g(supernodal)e(LU)i(factorization)e(that)h(is)h
-(faster)f(than)h(Matlab's)286 2713 y(builtin)f(LU.)95
-b(This)46 b(m-file)h(just)f(calls)h(a)g(mex)g(routine)f(to)h(do)g(the)g
-(work.)95 2939 y(By)h(default,)d(A)j(is)f(preordered)e(by)i(column)f
-(minimum)g(degree)g(before)g(factorization.)95 3052 y(Optionally,)f
-(the)i(user)g(can)g(supply)f(a)h(desired)f(column)g(ordering:)95
-3277 y(x)i(=)f(lusolve\(A,)e(b,)j(pcol\))e(uses)h(pcol)f(as)h(a)h
-(column)e(permutation.)286 3390 y(It)i(still)e(returns)g(x)h(=)h(A\\b,)
-e(but)h(it)g(factors)f(A\(:,pcol\))f(\(if)i(pcol)g(is)g(a)286
-3503 y(permutation)e(vector\))h(or)h(A*Pcol)f(\(if)h(Pcol)g(is)g(a)g
-(permutation)e(matrix\).)95 3729 y(x)j(=)f(lusolve\(A,)e(b,)j(0\))f
-(suppresses)e(the)i(default)e(minimum)h(degree)g(ordering;)286
-3842 y(that)h(is,)g(it)g(forces)f(the)h(identity)f(permutation)e(on)k
-(columns.)141 4055 y Fw(Tw)m(o)35 b(M-\014les)g Fu(trysuperlu.m)d
-Fw(and)i Fu(trylusolve.m)e Fw(are)k(written)e(to)i(test)f(the)h
-(correctness)g(of)f Fu(superlu)0 4167 y Fw(and)i Fu(lusolve)p
-Fw(.)62 b(In)38 b(addition)e(to)j(testing)f(the)g(residual)e(norms,)k
-(they)e(also)g(test)h(the)f(function)f(in)m(v)m(o)s(cations)0
-4280 y(with)29 b(v)-5 b(arious)29 b(n)m(um)m(b)s(er)g(of)i
-(input/output)e(argumen)m(ts.)0 4567 y Fr(2.10)136 b(Installation)0
-4773 y Fm(2.10.1)113 b(File)36 b(structure)0 4945 y Fw(The)30
-b(top)g(lev)m(el)h(Sup)s(erLU/)d(directory)i(is)g(structured)f(as)i
-(follo)m(ws:)191 5132 y Fu(SuperLU/README)187 b(instructions)44
-b(on)k(installation)191 5245 y(SuperLU/CBLAS/)187 b(needed)46
-b(BLAS)h(routines)e(in)i(C,)h(not)f(necessarily)d(fast)191
-5358 y(SuperLU/EXAMPLE/)91 b(example)46 b(programs)191
-5471 y(SuperLU/INSTALL/)91 b(test)47 b(machine)e(dependent)h
-(parameters;)e(this)j(Users')f(Guide)1905 5778 y Fw(28)p
-eop
-%%Page: 29 30
-29 29 bop 191 280 a Fu(SuperLU/MAKE_INC/)43 b(sample)j
-(machine-specific)d(make.inc)j(files)191 393 y(SuperLU/MATLAB/)139
-b(Matlab)46 b(mex-file)g(interface)191 506 y(SuperLU/SRC/)283
-b(C)47 b(source)g(code,)f(to)h(be)g(compiled)f(into)g(the)h(superlu.a)f
-(library)191 619 y(SuperLU/TESTING/)91 b(driver)46 b(routines)g(to)h
-(test)f(correctness)191 732 y(SuperLU/Makefile)91 b(top)47
-b(level)f(Makefile)g(that)g(does)h(installation)e(and)h(testing)191
-845 y(SuperLU/make.inc)91 b(compiler,)45 b(compile)h(flags,)g(library)g
-(definitions)f(and)i(C)1050 958 y(preprocessor)d(definitions,)h
-(included)g(in)j(all)f(Makefiles)141 1145 y Fw(Before)34
-b(installing)29 b(the)k(pac)m(k)-5 b(age,)35 b(y)m(ou)e(ma)m(y)g(need)f
-(to)h(edit)f Fu(SuperLU/make.inc)c Fw(for)k(y)m(our)h(system.)47
-b(This)0 1258 y(mak)m(e)39 b(include)d(\014le)h(is)f(referenced)i
-(inside)e(eac)m(h)j(of)f(the)g Fu(Makefiles)d Fw(in)i(the)h(v)-5
-b(arious)37 b(sub)s(directories.)61 b(As)38 b(a)0 1371
-y(result,)25 b(there)g(is)f(no)h(need)f(to)i(edit)e(the)h
-Fu(Makefiles)d Fw(in)i(the)h(sub)s(directories.)36 b(All)24
-b(information)f(that)i(is)f(mac)m(hine)0 1484 y(sp)s(eci\014c)29
-b(has)h(b)s(een)g(de\014ned)f(in)g Fu(make.inc)p Fw(.)141
-1597 y(Sample)h(mac)m(hine-sp)s(eci\014c)g Fu(make.inc)f
-Fw(are)i(pro)m(vided)f(in)f(the)j Fu(MAKE)p 2535 1597
-29 4 v 33 w(INC/)e Fw(sub)s(directory)f(for)i(sev)m(eral)g(sys-)0
-1710 y(tems,)g(including)d(IBM)j(RS/6000,)i(DEC)d(Alpha,)g(SunOS)f
-(4.x,)i(SunOS)e(5.x)i(\(Solaris\),)f(HP-P)-8 b(A)32 b(and)e(SGI)g(Iris)
-0 1823 y(4.x.)40 b(When)27 b(y)m(ou)h(ha)m(v)m(e)h(selected)e(the)h
-(mac)m(hine)f(on)g(whic)m(h)f(y)m(ou)i(wish)d(to)j(install)e(Sup)s
-(erLU,)f(y)m(ou)j(ma)m(y)g(cop)m(y)g(the)0 1936 y(appropriate)j(sample)
-g(include)f(\014le)h(\(if)h(one)g(is)f(presen)m(t\))i(in)m(to)f
-Fu(make.inc)p Fw(.)43 b(F)-8 b(or)33 b(example,)g(if)e(y)m(ou)h(wish)f
-(to)h(run)0 2049 y(Sup)s(erLU)c(on)j(an)f(IBM)h(RS/6000,)h(y)m(ou)f
-(can)f(do:)381 2162 y Fu(cp)47 b(MAKE)p 722 2162 V 34
-w(INC/make.rs6k)d(make.inc)141 2275 y Fw(F)-8 b(or)36
-b(systems)e(other)h(than)g(those)g(listed)e(ab)s(o)m(v)m(e,)k(sligh)m
-(t)d(mo)s(di\014cations)f(to)i(the)g Fu(make.inc)d Fw(\014le)i(will)e
-(need)0 2387 y(to)f(b)s(e)f(made.)41 b(In)29 b(particular,)g(the)i
-(follo)m(wing)e(three)h(items)g(should)f(b)s(e)g(examined:)111
-2575 y(1.)46 b(The)30 b(BLAS)g(library)-8 b(.)227 2688
-y(If)20 b(there)h(is)e(a)i(BLAS)f(library)e(a)m(v)-5
-b(ailable)20 b(on)g(y)m(our)h(mac)m(hine,)h(y)m(ou)f(ma)m(y)g(de\014ne)
-e(the)i(follo)m(wing)e(in)g Fu(make.inc)p Fw(:)467 2838
-y Fu(BLASDEF)46 b(=)i(-DUSE)p 1191 2838 V 33 w(VENDOR)p
-1512 2838 V 32 w(BLAS)467 2939 y(BLASLIB)e(=)i(<BLAS)e(library)g(you)h
-(wish)f(to)h(link)g(with>)227 3089 y Fw(The)32 b Fu(CBLAS/)e
-Fw(sub)s(directory)g(con)m(tains)i(the)g(part)g(of)g(the)h(C)e(BLAS)h
-(needed)g(b)m(y)f(the)i Fu(SuperLU)d Fw(pac)m(k)-5 b(age.)227
-3202 y(Ho)m(w)m(ev)m(er,)43 b(these)c(co)s(des)f(are)h(in)m(tended)e
-(for)h(use)g(only)f(if)h(there)g(is)f(no)i(faster)f(implemen)m(tation)f
-(of)i(the)227 3315 y(BLAS)30 b(already)g(a)m(v)-5 b(ailable)30
-b(on)g(y)m(our)h(mac)m(hine.)40 b(In)30 b(this)f(case,)j(y)m(ou)e
-(should)f(do)h(the)h(follo)m(wing:)301 3502 y(1\))46
-b(In)30 b Fu(make.inc)p Fw(,)e(unde\014ne)h(\(commen)m(t)j(out\))f
-(BLASDEF,)g(de\014ne:)667 3632 y Fu(BLASLIB)46 b(=)i
-(../blas$\(PLAT\).a)301 3778 y Fw(2\))e(In)30 b(the)g
-Fu(SuperLU)p Fw(/)f(directory)-8 b(,)31 b(t)m(yp)s(e:)667
-3908 y Fu(make)47 b(blaslib)427 4037 y Fw(to)31 b(mak)m(e)h(the)e(BLAS)
-h(library)c(from)j(the)h(routines)e(in)g(the)i Fu(CBLAS/)d
-Fw(sub)s(directory)-8 b(.)111 4225 y(2.)46 b(C)30 b(prepro)s(cessor)g
-(de\014nition)e Fu(CDEFS)p Fw(.)227 4338 y(In)22 b(the)i(header)e
-(\014le)g Fu(SRC/Cnames.h)p Fw(,)g(w)m(e)h(use)g(macros)g(to)h
-(determine)e(ho)m(w)h(C)f(routines)g(should)f(b)s(e)h(named)227
-4451 y(so)31 b(that)g(they)f(are)h(callable)e(b)m(y)i(F)-8
-b(ortran.)1671 4418 y FC(2)1752 4451 y Fw(The)29 b(p)s(ossible)f
-(options)i(for)g Fu(CDEFS)f Fw(are:)336 4638 y Fq(\017)46
-b Fu(-DAdd)p 673 4638 V 33 w Fw(:)41 b(F)-8 b(ortran)31
-b(exp)s(ects)g(a)f(C)g(routine)g(to)h(ha)m(v)m(e)h(an)e(underscore)f(p)
-s(ost\014xed)h(to)h(the)f(name;)336 4784 y Fq(\017)46
-b Fu(-DNoChange)p Fw(:)38 b(F)-8 b(ortran)31 b(exp)s(ects)g(a)g(C)f
-(routine)f(name)i(to)g(b)s(e)e(iden)m(tical)h(to)h(that)g(compiled)d(b)
-m(y)j(C;)336 4930 y Fq(\017)46 b Fu(-DUpCase)p Fw(:)39
-b(F)-8 b(ortran)31 b(exp)s(ects)g(a)f(C)g(routine)g(name)g(to)h(b)s(e)f
-(all)f(upp)s(ercase.)111 5118 y(3.)46 b(The)30 b(Matlab)h(MEX-\014le)f
-(in)m(terface.)227 5231 y(The)25 b Fu(MATLAB/)e Fw(sub)s(directory)g
-(includes)g(Matlab)j(C)f(MEX-\014les,)h(so)f(that)h(our)f(factor)h(and)
-e(solv)m(e)i(routines)p 0 5310 1560 4 v 104 5364 a Fi(2)138
-5396 y Fg(Some)33 b(v)n(endor-supplied)g(BLAS)g(libraries)i(do)f(not)g
-(ha)n(v)n(e)f(C)h(in)n(terfaces.)61 b(So)34 b(the)f(re-naming)g(is)i
-(needed)e(in)h(order)g(for)g(the)0 5487 y Fh(SuperLU)27
-b Fg(BLAS)e(calls)j(\(in)d(C\))h(to)g(in)n(terface)g(with)g(the)g(F)-6
-b(ortran-st)n(yle)25 b(BLAS.)1905 5778 y Fw(29)p eop
-%%Page: 30 31
-30 30 bop 227 280 a Fw(can)27 b(b)s(e)f(called)g(as)h(alternativ)m(es)h
-(to)f(those)g(built)e(in)m(to)i(Matlab.)39 b(In)27 b(the)f(\014le)g
-Fu(SuperLU/make.inc)p Fw(,)e(de\014ne)227 393 y(MA)-8
-b(TLAB)32 b(to)f(b)s(e)e(the)i(directory)f(in)f(whic)m(h)g(Matlab)i(is)
-e(installed)f(on)i(y)m(our)h(system,)g(for)f(example:)467
-543 y Fu(MATLAB)46 b(=)i(/usr/local/matlab)227 693 y
-Fw(A)m(t)32 b(the)e(Sup)s(erLU/)f(directory)-8 b(,)31
-b(t)m(yp)s(e:)498 843 y Fu(make)46 b(matlabmex)227 993
-y Fw(to)25 b(build)20 b(the)k(MEX-\014le)g(in)m(terface.)39
-b(After)24 b(y)m(ou)g(ha)m(v)m(e)h(built)d(the)i(in)m(terface,)h(y)m
-(ou)g(ma)m(y)f(go)g(to)h(the)f Fu(MATLAB/)227 1106 y
-Fw(sub)s(directory)29 b(to)i(test)g(the)f(correctness)i(b)m(y)e(t)m
-(yping)g(\(in)f(Matlab\):)467 1256 y Fu(trysuperlu)467
-1406 y(trylusolve)141 1593 y Fw(A)36 b Fu(Makefile)e
-Fw(is)h(pro)m(vided)g(in)f(eac)m(h)j(sub)s(directory)-8
-b(.)56 b(The)36 b(installation)e(can)i(b)s(e)f(done)h(completely)g
-(auto-)0 1706 y(matically)29 b(b)m(y)i(simply)d(t)m(yping)h
-Fu(make)h Fw(at)h(the)f(top)h(lev)m(el.)0 1949 y Fm(2.10.2)113
-b(T)-9 b(esting)0 2121 y Fw(The)30 b(test)h(programs)f(in)f
-Fu(SuperLU/INSTALL)d Fw(sub)s(directory)j(test)i(t)m(w)m(o)h(routines:)
-136 2307 y Fq(\017)46 b Fu(slamch\(\)/dlamch\(\))23 b
-Fw(determines)j(prop)s(erties)g(of)h(the)h(\015oating-p)s(oin)m(t)f
-(arithmetic)f(at)i(run-time)e(\(b)s(oth)227 2420 y(single)45
-b(and)h(double)f(precision\),)k(suc)m(h)c(as)i(the)f(mac)m(hine)g
-(epsilon,)j(under\015o)m(w)c(threshold,)k(o)m(v)m(er\015o)m(w)227
-2533 y(threshold,)29 b(and)h(related)g(parameters;)136
-2720 y Fq(\017)46 b Fu(SuperLU)p 569 2720 29 4 v 33 w(timer)p
-842 2720 V 33 w(\(\))30 b Fw(returns)g(the)h(time)f(in)g(seconds)h
-(used)f(b)m(y)g(the)h(pro)s(cess.)42 b(This)29 b(function)h(ma)m(y)h
-(need)227 2833 y(to)g(b)s(e)f(mo)s(di\014ed)e(to)j(run)e(on)i(y)m(our)f
-(mac)m(hine.)141 3020 y(The)23 b(test)h(programs)f(in)f(the)i
-Fu(SuperLU/TESTING)19 b Fw(sub)s(directory)j(are)h(designed)g(to)h
-(test)g(all)e(the)i(functions)e(of)0 3133 y(the)28 b(driv)m(er)f
-(routines,)h(esp)s(ecially)f(the)h(exp)s(ert)g(driv)m(ers.)39
-b(The)27 b(Unix)h(shell)e(script)h(\014les)g Fu(xtest.csh)f
-Fw(are)j(used)e(to)0 3245 y(in)m(v)m(ok)m(e)33 b(tests)g(with)e(v)-5
-b(arying)31 b(parameter)i(settings.)46 b(The)31 b(input)f(matrices)i
-(include)e(an)i(actual)h(sparse)f(matrix)0 3358 y Fu
-(SuperLU/EXAMPLE/g10)i Fw(of)40 b(dimension)d(100)28
-b Fq(\002)e Fw(100,)1918 3325 y FC(3)2000 3358 y Fw(and)39
-b(n)m(umerous)g(matrices)g(with)f(sp)s(ecial)h(prop)s(erties)0
-3471 y(from)30 b(the)g(LAP)-8 b(A)m(CK)31 b(test)g(suite.)40
-b(T)-8 b(able)30 b(2.1)i(describ)s(es)c(the)j(prop)s(erties)e(of)h(the)
-h(test)g(matrices.)141 3584 y(F)-8 b(or)40 b(eac)m(h)g(command)f(line)f
-(option)g(sp)s(eci\014ed)g(in)g Fu(dtest.csh)p Fw(,)h(the)g(test)h
-(program)f Fu(ddrive)e Fw(reads)i(in)f(or)0 3697 y(generates)f(an)e
-(appropriate)g(matrix,)h(calls)f(the)g(driv)m(er)g(routines,)g(and)g
-(computes)h(a)g(n)m(um)m(b)s(er)e(of)i(test)g(ratios)0
-3810 y(to)k(v)m(erify)e(that)h(eac)m(h)h(op)s(eration)f(has)f(p)s
-(erformed)g(correctly)-8 b(.)67 b(If)38 b(the)h(test)h(ratio)f(is)f
-(smaller)f(than)i(a)g(preset)0 3923 y(threshold,)29 b(the)i(op)s
-(eration)f(is)f(considered)g(to)j(b)s(e)d(correct.)42
-b(Eac)m(h)32 b(test)f(matrix)f(is)f(sub)5 b(ject)30 b(to)i(the)e(tests)
-h(listed)0 4036 y(in)e(T)-8 b(able)30 b(2.2.)141 4149
-y(Let)k Fv(r)j Fw(b)s(e)c(the)h(residual)e Fv(r)h Fw(=)e
-Fv(b)22 b Fq(\000)h Fv(Ax)p Fw(,)35 b(and)e(let)h Fv(m)1921
-4163 y Fo(i)1982 4149 y Fw(b)s(e)g(the)g(n)m(um)m(b)s(er)e(of)i
-(nonzeros)g(in)f(ro)m(w)h Fv(i)g Fw(of)g Fv(A)p Fw(.)51
-b(Then)0 4262 y(the)31 b(comp)s(onen)m(t)m(wise)f(bac)m(kw)m(ard)h
-(error)f Fv(B)5 b(E)g(R)q(R)30 b Fw(and)g(forw)m(ard)g(error)g
-Fv(F)13 b(E)5 b(R)q(R)31 b Fw([1)q(])f(are)h(calculated)f(b)m(y:)1341
-4512 y Fv(B)5 b(E)g(R)q(R)26 b Fw(=)f(max)1820 4570 y
-Fo(i)2157 4451 y Fq(j)p Fv(r)s Fq(j)2251 4465 y Fo(i)p
-1942 4491 551 4 v 1942 4575 a Fw(\()p Fq(j)p Fv(A)p Fq(j)32
-b(j)p Fv(x)p Fq(j)20 b Fw(+)g Fq(j)p Fv(b)p Fq(j)p Fw(\))2464
-4589 y Fo(i)2533 4512 y Fv(:)1443 4833 y(F)13 b(E)5 b(R)q(R)26
-b Fw(=)1857 4771 y Fq(jj)31 b(j)p Fv(A)2031 4738 y Fn(\000)p
-FC(1)2126 4771 y Fq(j)f Fv(f)40 b Fq(jj)2316 4785 y Fn(1)p
-1857 4812 534 4 v 2010 4895 a Fq(jj)p Fv(x)p Fq(jj)2162
-4909 y Fn(1)2432 4833 y Fv(:)0 5048 y Fw(Here,)30 b Fv(f)38
-b Fw(is)28 b(a)h(nonnegativ)m(e)g(v)m(ector)h(whose)f(comp)s(onen)m(ts)
-g(are)g(computed)g(as)g Fv(f)2749 5062 y Fo(i)2801 5048
-y Fw(=)c Fq(j)p Fv(r)s Fq(j)2991 5062 y Fo(i)3037 5048
-y Fw(+)16 b Fv(m)3204 5062 y Fo(i)3261 5048 y Fv(")29
-b Fw(\()p Fq(j)p Fv(A)p Fq(j)h(j)p Fv(x)p Fq(j)17 b Fw(+)g
-Fq(j)p Fv(b)p Fq(j)p Fw(\))3846 5062 y Fo(i)3875 5048
-y Fw(,)0 5161 y(and)38 b(the)h(norm)f(in)g(the)h(n)m(umerator)g(is)f
-(estimated)h(using)e(the)j(same)f(subroutine)e(used)h(for)g(estimating)
-h(the)0 5274 y(condition)27 b(n)m(um)m(b)s(er.)38 b Fv(B)5
-b(E)g(R)q(R)29 b Fw(measures)f(the)g(smallest)f(relativ)m(e)h(p)s
-(erturbation)f(one)h(can)g(mak)m(e)i(to)e(eac)m(h)i(en)m(try)p
-0 5352 1560 4 v 104 5406 a Fi(3)138 5438 y Fg(Matrix)h
-Fh(g10)h Fg(is)f(\014rst)f(generated)h(with)g(the)f(structure)h(of)g
-(the)f(10-b)n(y-10)h(\014v)n(e-p)r(oin)n(t)e(grid,)j(and)f(random)e(n)n
-(umerical)i(v)l(alues.)0 5529 y(The)26 b(columns)f(are)h(then)f(p)r
-(erm)n(uted)f(b)n(y)h(COLMMD)h(ordering)g(from)g(Matlab.)1905
-5778 y Fw(30)p eop
-%%Page: 31 32
-31 31 bop 190 254 1541 4 v 188 367 4 113 v 239 333 a
-Fw(Matrix)31 b(t)m(yp)s(e)p 765 367 V 100 w(Description)p
-1729 367 V 190 370 1541 4 v 188 483 4 113 v 239 449 a(0)p
-765 483 V 533 w(sparse)f(matrix)f Fu(g10)p 1729 483 V
-188 596 V 239 562 a Fw(1)p 765 596 V 533 w(diagonal)p
-1729 596 V 188 709 V 239 675 a(2)p 765 709 V 533 w(upp)s(er)f
-(triangular)p 1729 709 V 188 822 V 239 788 a(3)p 765
-822 V 533 w(lo)m(w)m(er)i(triangular)p 1729 822 V 188
-935 V 239 901 a(4)p 765 935 V 533 w(random,)f Fv(\024)d
-Fw(=)f(2)p 1729 935 V 188 1048 V 239 1014 a(5)p 765 1048
-V 533 w(\014rst)k(column)g(zero)p 1729 1048 V 188 1161
-V 239 1127 a(6)p 765 1161 V 533 w(last)h(column)f(zero)p
-1729 1161 V 188 1274 V 239 1240 a(7)p 765 1274 V 533
-w(last)h Fv(n=)p Fw(2)h(columns)e(zero)p 1729 1274 V
-188 1387 4 114 v 239 1353 a(8)p 765 1387 V 533 w(random,)g
-Fv(\024)d Fw(=)1349 1280 y Fk(p)p 1432 1280 205 4 v 73
-x Fw(0)p Fv(:)p Fw(1)p Fv(=")p 1729 1387 4 114 v 188
-1500 4 113 v 239 1466 a Fw(9)p 765 1500 V 533 w(random,)j
-Fv(\024)d Fw(=)f(0)p Fv(:)p Fw(1)p Fv(=")p 1729 1500
-V 188 1613 V 239 1579 a Fw(10)p 765 1613 V 488 w(scaled)30
-b(near)g(under\015o)m(w)p 1729 1613 V 188 1726 V 239
-1692 a(11)p 765 1726 V 488 w(scaled)g(near)g(o)m(v)m(er\015o)m(w)p
-1729 1726 V 190 1729 1541 4 v 0 1983 a(T)-8 b(able)37
-b(2.1:)56 b(Prop)s(erties)36 b(of)i(the)g(test)g(matrices.)62
-b Fv(")38 b Fw(is)0 2096 y(the)30 b(mac)m(hine)f(epsilon)e(and)i
-Fv(\024)h Fw(is)f(the)g(condition)f(n)m(um-)0 2209 y(b)s(er)h(of)i
-(matrix)f Fv(A)p Fw(.)41 b(Matrix)31 b(t)m(yp)s(es)f(with)f(one)i(or)g
-(more)0 2322 y(columns)43 b(set)h(to)h(zero)g(are)g(used)e(to)i(test)g
-(the)f(error)0 2435 y(return)29 b(co)s(des.)p 1950 201
-2257 4 v 1948 314 4 113 v 2000 280 a(T)-8 b(est)31 b(T)m(yp)s(e)p
-2453 314 V 99 w(T)-8 b(est)31 b(ratio)p 3525 314 V 685
-w(Routines)p 4205 314 V 1950 317 2257 4 v 1948 430 4
-113 v 2000 396 a(0)p 2453 430 V 459 w Fq(jj)p Fv(LU)g
-Fq(\000)20 b Fv(A)p Fq(jj)p Fv(=)p Fw(\()p Fv(n)p Fq(jj)p
-Fv(A)p Fq(jj)p Fv(")p Fw(\))p 3525 430 V 278 w Fu(dgstrf)p
-4205 430 V 1948 543 V 2000 509 a Fw(1)p 2453 543 V 459
-w Fq(jj)p Fv(b)h Fq(\000)f Fv(Ax)p Fq(jj)p Fv(=)p Fw(\()p
-Fq(jj)p Fv(A)p Fq(jj)28 b(jj)p Fv(x)p Fq(jj)p Fv(")p
-Fw(\))p 3525 543 V 196 w Fu(dgssv)p Fw(,)h Fu(dgssvx)p
-4205 543 V 1948 656 V 2000 622 a Fw(2)p 2453 656 V 459
-w Fq(jj)p Fv(x)21 b Fq(\000)f Fv(x)2770 589 y Fn(\003)2809
-622 y Fq(jj)p Fv(=)p Fw(\()p Fq(jj)p Fv(x)3041 589 y
-Fn(\003)3082 622 y Fq(jj)p Fv(\024")p Fw(\))p 3525 656
-V 315 w Fu(dgssvx)p 4205 656 V 1948 769 V 2000 735 a
-Fw(3)p 2453 769 V 459 w Fq(jj)p Fv(x)h Fq(\000)f Fv(x)2770
-702 y Fn(\003)2809 735 y Fq(jj)p Fv(=)p Fw(\()p Fq(jj)p
-Fv(x)3041 702 y Fn(\003)3082 735 y Fq(jj)26 b Fv(F)13
-b(E)5 b(R)q(R)q Fw(\))p 3525 769 V 100 w Fu(dgssvx)p
-4205 769 V 1948 881 V 2000 848 a Fw(4)p 2453 881 V 459
-w Fv(B)g(E)g(R)q(R)q(=")p 3525 881 V 699 w Fu(dgssvx)p
-4205 881 V 1950 885 2257 4 v 1950 1140 a Fw(T)-8 b(able)26
-b(2.2:)39 b(T)m(yp)s(es)26 b(of)g(tests.)40 b Fv(x)3040
-1107 y Fn(\003)3105 1140 y Fw(is)25 b(the)h(true)f(solution,)1950
-1253 y Fv(F)13 b(E)5 b(R)q(R)46 b Fw(is)e(the)h(error)g(b)s(ound,)i
-(and)d Fv(B)5 b(E)g(R)q(R)45 b Fw(is)f(the)1950 1365
-y(bac)m(kw)m(ard)31 b(error.)0 2692 y(of)d(A)f(and)g(of)h(b)f(so)h
-(that)g(the)f(computed)h(solution)e(is)g(an)i(exact)h(solution)d(of)h
-(the)h(p)s(erturb)s(ed)d(problem.)38 b Fv(F)13 b(E)5
-b(R)q(R)0 2805 y Fw(is)35 b(an)g(estimated)h(b)s(ound)e(on)i(the)g
-(error)f Fq(k)p Fv(x)1553 2772 y Fn(\003)1617 2805 y
-Fq(\000)23 b Fv(x)p Fq(k)1808 2819 y Fn(1)1883 2805 y
-Fv(=)p Fq(k)p Fv(x)p Fq(k)2070 2819 y Fn(1)2146 2805
-y Fw(,)38 b(where)d Fv(x)2529 2772 y Fn(\003)2604 2805
-y Fw(is)g(the)h(true)f(solution.)56 b(F)-8 b(or)36 b(further)0
-2918 y(details)29 b(on)i(error)f(analysis)f(and)g(error)h(b)s(ounds)e
-(estimation,)j(see)g([1,)g(Chapter)f(4])h(and)60 b([2].)0
-3161 y Fm(2.10.3)113 b(P)m(erformance-tuning)36 b(parameters)0
-3333 y Fu(SuperLU)31 b Fw(c)m(ho)s(oses)k(suc)m(h)e(mac)m(hine-dep)s
-(enden)m(t)f(parameters)i(as)g(blo)s(c)m(k)f(size)g(b)m(y)g(calling)f
-(an)i(inquiry)c(function)0 3446 y Fu(sp)p 102 3446 29
-4 v 34 w(ienv\(\))p Fw(,)i(whic)m(h)g(ma)m(y)i(b)s(e)e(set)i(to)g
-(return)e(di\013eren)m(t)g(v)-5 b(alues)33 b(on)g(di\013eren)m(t)f(mac)
-m(hines.)49 b(The)32 b(declaration)h(of)0 3559 y(this)c(function)g(is)
-141 3732 y Fu(int)47 b(sp)p 434 3732 V 34 w(ienv\(int)e(ispec\);)141
-3905 y(Ispec)29 b Fw(sp)s(eci\014es)g(the)i(parameter)g(to)g(b)s(e)e
-(returned,)h(\(See)h(reference)g([5])g(for)f(their)f(de\014nitions.\))
-318 4092 y(isp)s(ec)d(=)k(1:)42 b(the)30 b(panel)g(size)g(\()p
-Fv(w)r Fw(\))540 4205 y(=)g(2:)42 b(the)30 b(relaxation)g(parameter)h
-(to)g(con)m(trol)g(sup)s(erno)s(de)d(amalgamation)j(\()p
-Fv(r)s(el)r(ax)p Fw(\))540 4318 y(=)f(3:)42 b(the)30
-b(maxim)m(um)f(allo)m(w)m(able)h(size)g(for)h(a)f(sup)s(erno)s(de)e(\()
-p Fv(maxsup)p Fw(\))540 4431 y(=)i(4:)42 b(the)30 b(minim)m(um)e(ro)m
-(w)i(dimension)e(for)i(2D)h(blo)s(c)m(king)e(to)j(b)s(e)d(used)h(\()p
-Fv(r)s(ow)r(bl)r(k)s Fw(\))540 4544 y(=)g(5:)42 b(the)30
-b(minim)m(um)e(column)h(dimension)f(for)i(2D)h(blo)s(c)m(king)e(to)i(b)
-s(e)f(used)g(\()p Fv(col)r(bl)r(k)s Fw(\))540 4657 y(=)g(6:)42
-b(the)30 b(estimated)h(\014lls)d(factor)j(for)f(L)h(and)e(U,)i
-(compared)f(with)f(A)141 4844 y(Users)e(are)g(encouraged)g(to)g(mo)s
-(dify)e(this)g(subroutine)g(to)i(set)g(the)g(tuning)e(parameters)i(for)
-f(their)g(o)m(wn)h(lo)s(cal)0 4957 y(en)m(vironmen)m(t.)53
-b(The)33 b(optimal)h(v)-5 b(alues)34 b(dep)s(end)e(mainly)h(on)h(the)h
-(cac)m(he)h(size)e(and)g(the)h(BLAS)f(sp)s(eed.)52 b(If)34
-b(y)m(our)0 5070 y(system)d(has)g(a)g(v)m(ery)h(small)d(cac)m(he,)34
-b(or)d(if)f(y)m(ou)h(w)m(an)m(t)h(to)g(e\016cien)m(tly)f(utilize)e(the)
-i(closest)h(cac)m(he)g(in)e(a)i(m)m(ultilev)m(el)0 5183
-y(cac)m(he)h(organization,)f(y)m(ou)g(should)d(pa)m(y)j(sp)s(ecial)e
-(atten)m(tion)i(to)g(these)g(parameter)g(settings.)43
-b(In)31 b(our)g(tec)m(hnical)0 5296 y(pap)s(er)e([5)q(],)i(w)m(e)g
-(describ)s(ed)d(a)i(detailed)g(metho)s(dology)g(for)g(setting)h(these)g
-(parameters)f(for)g(high)f(p)s(erformance.)141 5409 y(The)35
-b Fv(r)s(el)r(ax)g Fw(parameter)h(is)f(usually)e(set)j(b)s(et)m(w)m
-(een)g(4)g(and)f(8.)56 b(The)35 b(other)h(parameter)f(v)-5
-b(alues)35 b(whic)m(h)f(giv)m(e)0 5522 y(go)s(o)s(d)c(p)s(erformance)g
-(on)g(sev)m(eral)h(mac)m(hines)f(are)h(listed)e(in)g(T)-8
-b(able)30 b(2.3.)42 b(In)29 b(a)i(sup)s(erno)s(de-panel)d(up)s(date,)h
-(if)h(the)1905 5778 y(31)p eop
-%%Page: 32 33
-32 32 bop 616 292 2668 4 v 614 392 4 100 v 1181 392 V
-1299 362 a FA(On-c)n(hip)99 b(External)p 3282 392 V 614
-491 V 747 461 a(Mac)n(hine)p 1181 491 V 317 w(Cac)n(he)192
-b(Cac)n(he)120 b Fe(w)102 b(maxsup)d(r)r(ow)r(bl)r(k)104
-b(col)r(bl)r(k)p 3282 491 V 616 495 2668 4 v 614 594
-4 100 v 666 564 a FA(RS/6000-590)p 1181 594 V 175 w(256)26
-b(KB)371 b({)140 b(8)267 b(100)223 b(200)j(40)p 3282
-594 V 614 694 V 666 664 a(MIPS)27 b(R8000)p 1181 694
-V 223 w(16)f(KB)208 b(4)27 b(MB)100 b(20)266 b(100)223
-b(800)185 b(100)p 3282 694 V 614 793 V 666 764 a(Alpha)28
-b(21064)p 1181 793 V 272 w(8)f(KB)136 b(512)27 b(KB)140
-b(8)267 b(100)223 b(400)j(40)p 3282 793 V 614 893 V 666
-863 a(Alpha)28 b(21164)p 1181 893 V 151 w(8)f(KB-L1)207
-b(4)27 b(MB)100 b(16)308 b(50)223 b(100)j(40)p 3282 893
-V 614 993 V 1181 993 V 1233 963 a(96)26 b(KB-L2)p 3282
-993 V 614 1092 V 666 1062 a(Sparc)h(20)p 1181 1092 V
-373 w(16)f(KB)208 b(1)27 b(MB)141 b(8)267 b(100)223 b(400)j(50)p
-3282 1092 V 614 1192 V 666 1162 a(UltraSparc-I)p 1181
-1192 V 234 w(16)26 b(KB)136 b(512)27 b(KB)140 b(8)267
-b(100)223 b(400)j(40)p 3282 1192 V 614 1292 V 666 1262
-a(Cra)n(y)26 b(J90)p 1181 1292 V 550 w({)371 b({)140
-b(1)267 b(100)182 b(1000)i(100)p 3282 1292 V 616 1295
-2668 4 v 624 1489 a Fw(T)-8 b(able)30 b(2.3:)42 b(T)m(ypical)29
-b(blo)s(c)m(king)g(parameter)i(v)-5 b(alues)30 b(for)g(sev)m(eral)h
-(mac)m(hines.)0 1752 y(up)s(dating)i(sup)s(erno)s(de)f(is)i(to)s(o)i
-(large)f(to)h(\014t)e(in)g(cac)m(he,)k(then)c(a)h(2D)h(blo)s(c)m(k)e
-(partitioning)f(of)i(the)g(sup)s(erno)s(de)e(is)0 1865
-y(used,)e(in)f(whic)m(h)g Fv(r)s(ow)r(bl)r(k)35 b Fw(and)30
-b Fv(col)r(bl)r(k)35 b Fw(determine)30 b(that)i(a)g(blo)s(c)m(k)f(of)g
-(size)h Fv(r)s(ow)r(bl)r(k)24 b Fq(\002)c Fv(col)r(bl)r(k)35
-b Fw(is)30 b(used)h(to)h(up)s(date)0 1978 y(curren)m(t)e(panel.)141
-2091 y(If)25 b Fv(col)r(bl)r(k)k Fw(is)24 b(set)i(greater)g(than)f
-Fv(maxsup)p Fw(,)h(then)f(the)g(program)g(will)e(nev)m(er)i(use)g(2D)h
-(blo)s(c)m(king.)38 b(F)-8 b(or)26 b(example,)0 2204
-y(for)g(the)h(Cra)m(y)f(J90)h(\(whic)m(h)e(do)s(es)h(not)h(ha)m(v)m(e)g
-(cac)m(he\),)i Fv(w)f Fw(=)d(1)i(and)e(1D)j(blo)s(c)m(king)d(giv)m(e)h
-(go)s(o)s(d)h(p)s(erformance;)g(more)0 2317 y(lev)m(els)j(of)g(blo)s(c)
-m(king)g(only)f(increase)h(o)m(v)m(erhead.)0 2600 y Fr(2.11)136
-b(Example)46 b(programs)0 2803 y Fw(In)40 b(the)g Fu(SuperLU/EXAMPLE/)c
-Fw(sub)s(directory)-8 b(,)42 b(w)m(e)e(presen)m(t)h(a)f(few)h(sample)e
-(programs)h(to)h(illustrate)e(ho)m(w)h(to)0 2916 y(use)45
-b(v)-5 b(arious)44 b(functions)g(pro)m(vded)g(in)g Fu(SuperLU)p
-Fw(.)g(The)g(users)h(can)g(mo)s(dify)f(these)h(examples)g(to)h(suit)e
-(their)0 3029 y(applications.)39 b(Here)31 b(are)g(the)f(brief)f
-(descriptions)f(of)j(the)f(double)f(precision)g(v)m(ersion)h(of)g(the)h
-(examples:)136 3202 y Fq(\017)46 b Fu(dlinsol)p Fw(:)39
-b(use)30 b(simple)e(driv)m(er)i Fu(dgssv\(\))e Fw(to)j(solv)m(e)g(a)g
-(linear)d(system)j(one)f(time.)136 3384 y Fq(\017)46
-b Fu(dlinsol1)p Fw(:)39 b(use)30 b(simple)e(driv)m(er)h
-Fu(dgssv\(\))g Fw(in)g(the)h(symmetric)g(mo)s(de.)136
-3565 y Fq(\017)46 b Fu(dlinsolx)p Fw(:)39 b(use)30 b
-Fu(dgssvx\(\))e Fw(with)h(the)i(full)d(\(default\))i(set)h(of)f
-(options)g(to)h(solv)m(e)g(a)g(linear)d(system.)136 3747
-y Fq(\017)46 b Fu(dlinsolx1)p Fw(:)38 b(use)31 b Fu(dgssvx\(\))d
-Fw(to)j(factorize)g Fv(A)g Fw(\014rst,)f(then)g(solv)m(e)g(the)h
-(system)f(later.)136 3929 y Fq(\017)46 b Fu(dlinsolx2)p
-Fw(:)64 b(use)43 b Fu(dgssvx\(\))d Fw(to)k(solv)m(e)f(systems)h(rep)s
-(eatedly)e(with)g(the)h(same)g(sparsit)m(y)g(pattern)g(of)227
-4042 y(matrix)30 b(A.)136 4223 y Fq(\017)46 b Fu(superlu)p
-Fw(:)39 b(the)31 b(small)d(5x5)k(sample)d(program)h(in)f(Section)i
-(2.2.)141 4396 y(In)23 b(this)f(directory)-8 b(,)25 b(a)f
-Fu(Makefile)d Fw(is)h(pro)m(vided)g(to)i(generate)h(the)f(executables,)
-h(and)e(a)h Fu(README)d Fw(\014le)i(describ)s(es)0 4509
-y(ho)m(w)30 b(to)i(run)c(these)j(examples.)0 4793 y Fr(2.12)136
-b(Calling)46 b(from)f(F)-11 b(ortran)0 4996 y Fw(The)35
-b Fu(SuperLU/FORTRAN/)d Fw(sub)s(directory)h(con)m(tains)k(an)e
-(example)h(of)g(using)e Fu(SuperLU)g Fw(from)h(a)i(F)-8
-b(ortran)36 b(pro-)0 5109 y(gram.)41 b(The)30 b(General)g(rules)f(for)h
-(mixing)f(F)-8 b(ortran)31 b(and)e(C)h(programs)g(are)h(as)g(follo)m
-(ws.)136 5303 y Fq(\017)46 b Fw(Argumen)m(ts)31 b(in)e(C)h(are)g
-(passed)g(b)m(y)h(v)-5 b(alue,)30 b(while)e(in)h(F)-8
-b(ortran)31 b(are)g(passed)f(b)m(y)g(reference.)41 b(So)31
-b(w)m(e)f(alw)m(a)m(ys)227 5416 y(pass)23 b(the)h(address)e(\(as)i(a)f
-(p)s(oin)m(ter\))g(in)f(the)h(C)g(calling)f(routine.)37
-b(\(Y)-8 b(ou)24 b(cannot)g(mak)m(e)g(a)g(call)e(with)g(n)m(um)m(b)s
-(ers)227 5529 y(directly)29 b(in)g(the)i(parameters.\))1905
-5778 y(32)p eop
-%%Page: 33 34
-33 33 bop 136 280 a Fq(\017)46 b Fw(F)-8 b(ortran)44
-b(uses)f(1-based)g(arra)m(y)h(addressing,)h(while)c(C)i(uses)f
-(0-based.)80 b(Therefore,)46 b(the)e(ro)m(w)f(indices)227
-393 y(\()p Fu(rowind[])p Fw(\))26 b(and)h(the)g(in)m(teger)h(p)s(oin)m
-(ters)e(to)j(arra)m(ys)e(\()p Fu(colptr[])p Fw(\))f(should)g(b)s(e)g
-(adjusted)h(b)s(efore)g(they)h(are)227 506 y(passed)i(in)m(to)h(a)f(C)g
-(routine.)141 703 y(Because)25 b(of)f(the)g(ab)s(o)m(v)m(e)h(language)g
-(di\013erences,)f(in)f(order)g(to)i(em)m(b)s(ed)e Fu(SuperLU)f
-Fw(in)g(a)j(F)-8 b(ortran)24 b(en)m(vironmen)m(t,)0 816
-y(users)k(are)h(required)e(to)i(use)f(\\wrapp)s(er")g(routines)g(\(in)f
-(C\))i(for)f(all)g(the)g Fu(SuperLU)f Fw(routines)h(that)h(will)d(b)s
-(e)i(called)0 929 y(from)i(F)-8 b(ortran)32 b(programs.)41
-b(The)30 b(example)g Fu(c)p 1579 929 29 4 v 34 w(fortran)p
-1949 929 V 33 w(dgssv.c)f Fw(in)g(the)i Fu(FORTRAN/)d
-Fw(directory)i(sho)m(ws)h(ho)m(w)g(a)0 1042 y(wrapp)s(er)e(program)h
-(should)e(b)s(e)i(written.)40 b(This)28 b(program)i(is)g(listed)f(b)s
-(elo)m(w.)0 1238 y Fu(#include)46 b("dsp_defs.h")0 1464
-y(#define)g(HANDLE_SIZE)92 b(8)0 1690 y(typedef)46 b(struct)g({)191
-1803 y(SuperMatrix)f(*L;)191 1916 y(SuperMatrix)g(*U;)191
-2029 y(int)i(*perm_c;)191 2142 y(int)g(*perm_r;)0 2255
-y(})g(factors_t;)0 2480 y(int)0 2593 y(c_fortran_dgssv_\(int)42
-b(*iopt,)k(int)h(*n,)g(int)g(*nnz,)f(int)h(*nrhs,)f(double)h(*values,)
-811 2706 y(int)g(*rowind,)f(int)h(*colptr,)e(double)h(*b,)h(int)g
-(*ldb,)811 2819 y(int)g(factors[HANDLE_SIZE],)42 b(/*)47
-b(a)h(handle)e(containing)f(the)i(pointer)2195 2932 y(to)h(the)f
-(factored)e(matrices)h(*/)811 3045 y(int)h(*info\))0
-3271 y({)0 3384 y(/*)48 3497 y(*)g(This)g(routine)f(can)h(be)g(called)f
-(from)g(Fortran.)48 3610 y(*)48 3723 y(*)h(iopt)g(\(input\))f(int)48
-3835 y(*)286 b(Specifies)45 b(the)i(operation:)48 3948
-y(*)286 b(=)47 b(1,)g(performs)f(LU)h(decomposition)d(for)j(the)g
-(first)g(time)48 4061 y(*)286 b(=)47 b(2,)g(performs)f(triangular)f
-(solve)48 4174 y(*)286 b(=)47 b(3,)g(free)g(all)g(the)g(storage)f(in)h
-(the)g(end)48 4287 y(*)48 4400 y(*)g(factors)f(\(input/output\))e
-(integer)i(array)g(of)h(size)g(8)48 4513 y(*)286 b(If)47
-b(iopt)g(==)g(1,)g(it)g(is)g(an)h(output)e(and)h(contains)e(the)i
-(pointer)f(pointing)f(to)48 4626 y(*)954 b(the)47 b(structure)e(of)i
-(the)g(factored)f(matrices.)48 4739 y(*)286 b(Otherwise,)45
-b(it)i(it)g(an)g(input.)48 4852 y(*)48 4965 y(*/)191
-5077 y(SuperMatrix)e(A,)i(AC,)g(B;)191 5190 y(SuperMatrix)e(*L,)i(*U;)
-191 5303 y(int)g(*perm_r;)e(/*)j(row)e(permutations)f(from)i(partial)e
-(pivoting)h(*/)191 5416 y(int)h(*perm_c;)e(/*)j(column)e(permutation)e
-(vector)i(*/)191 5529 y(int)h(*etree;)93 b(/*)48 b(column)e
-(elimination)e(tree)j(*/)1905 5778 y Fw(33)p eop
-%%Page: 34 35
-34 34 bop 191 280 a Fu(SCformat)45 b(*Lstore;)191 393
-y(NCformat)g(*Ustore;)191 506 y(int)285 b(i,)48 b(panel_size,)c
-(permc_spec,)h(relax;)191 619 y(trans_t)93 b(trans;)191
-732 y(double)141 b(drop_tol)46 b(=)h(0.0;)191 845 y(mem_usage_t)140
-b(mem_usage;)191 958 y(superlu_options_t)43 b(options;)191
-1071 y(SuperLUStat_t)h(stat;)191 1184 y(factors_t)h(*LUfactors;)191
-1409 y(trans)h(=)i(NOTRANS;)191 1635 y(if)f(\()h(*iopt)e(==)h(1)h(\))f
-({)g(/*)h(LU)f(decomposition)d(*/)382 1861 y(/*)j(Set)g(the)g(default)f
-(input)g(options.)g(*/)382 1974 y(set_default_options\(&opt)o(ion)o
-(s\);)382 2200 y(/*)h(Initialize)e(the)i(statistics)e(variables.)g(*/)
-382 2313 y(StatInit\(&stat\);)382 2539 y(/*)i(Adjust)f(to)h(0-based)f
-(indexing)g(*/)382 2652 y(for)h(\(i)g(=)g(0;)h(i)f(<)g(*nnz;)g(++i\))f
-(--rowind[i];)382 2764 y(for)h(\(i)g(=)g(0;)h(i)f(<=)g(*n;)g(++i\))g
-(--colptr[i];)382 2990 y(dCreate_CompCol_Matrix\(&)o(A,)41
-b(*n,)47 b(*n,)g(*nnz,)g(values,)e(rowind,)h(colptr,)1480
-3103 y(SLU_NC,)f(SLU_D,)h(SLU_GE\);)382 3216 y(L)h(=)h(\(SuperMatrix)c
-(*\))j(SUPERLU_MALLOC\()d(sizeof\(SuperMatrix\))f(\);)382
-3329 y(U)k(=)h(\(SuperMatrix)c(*\))j(SUPERLU_MALLOC\()d
-(sizeof\(SuperMatrix\))f(\);)382 3442 y(if)k(\()g(!\(perm_r)f(=)h
-(intMalloc\(*n\)\))d(\))k(ABORT\("Malloc)c(fails)i(for)h(perm_r[]."\);)
-382 3555 y(if)g(\()g(!\(perm_c)f(=)h(intMalloc\(*n\)\))d(\))k
-(ABORT\("Malloc)c(fails)i(for)h(perm_c[]."\);)382 3668
-y(if)g(\()g(!\(etree)f(=)i(intMalloc\(*n\)\))c(\))j(ABORT\("Malloc)d
-(fails)j(for)g(etree[]."\);)382 3894 y(/*)430 4006 y(*)g(Get)g(column)f
-(permutation)f(vector)h(perm_c[],)f(according)g(to)j(permc_spec:)430
-4119 y(*)142 b(permc_spec)45 b(=)j(0:)f(natural)f(ordering)430
-4232 y(*)142 b(permc_spec)45 b(=)j(1:)f(minimum)f(degree)g(on)h
-(structure)e(of)j(A'*A)430 4345 y(*)142 b(permc_spec)45
-b(=)j(2:)f(minimum)f(degree)g(on)h(structure)e(of)j(A'+A)430
-4458 y(*)142 b(permc_spec)45 b(=)j(3:)f(approximate)e(minimum)h(degree)
-g(for)h(unsymmetric)d(matrices)430 4571 y(*/)382 4684
-y(permc_spec)h(=)i(3;)382 4797 y(get_perm_c\(permc_spec,)42
-b(&A,)k(perm_c\);)382 5023 y(sp_preorder\(&options,)c(&A,)47
-b(perm_c,)f(etree,)g(&AC\);)382 5248 y(panel_size)f(=)i(sp_ienv\(1\);)
-382 5361 y(relax)f(=)i(sp_ienv\(2\);)1905 5778 y Fw(34)p
-eop
-%%Page: 35 36
-35 35 bop 382 280 a Fu(dgstrf\(&options,)43 b(&AC,)k(drop_tol,)e
-(relax,)h(panel_size,)716 393 y(etree,)g(NULL,)g(0,)i(perm_c,)d
-(perm_r,)h(L,)h(U,)h(&stat,)e(info\);)382 619 y(if)h(\()g(*info)g(==)g
-(0)g(\))h({)573 732 y(Lstore)e(=)h(\(SCformat)f(*\))h(L->Store;)573
-845 y(Ustore)f(=)h(\(NCformat)f(*\))h(U->Store;)573 958
-y(printf\("No)e(of)i(nonzeros)e(in)j(factor)e(L)h(=)h(\045d\\n",)e
-(Lstore->nnz\);)573 1071 y(printf\("No)f(of)i(nonzeros)e(in)j(factor)e
-(U)h(=)h(\045d\\n",)e(Ustore->nnz\);)573 1184 y(printf\("No)f(of)i
-(nonzeros)e(in)j(L+U)f(=)g(\045d\\n",)f(Lstore->nnz)f(+)i
-(Ustore->nnz\);)573 1297 y(dQuerySpace\(L,)d(U,)j(&mem_usage\);)573
-1409 y(printf\("L\\\\U)d(MB)j(\045.3f\\ttotal)e(MB)i(needed)f
-(\045.3f\\texpansions)e(\045d\\n",)907 1522 y(mem_usage.for_lu/1e6,)e
-(mem_usage.total_needed/1)o(e6,)907 1635 y(mem_usage.expansions\);)382
-1748 y(})47 b(else)g({)573 1861 y(printf\("dgstrf\(\))c(error)j
-(returns)g(INFO=)h(\045d\\n",)f(*info\);)573 1974 y(if)h(\()g(*info)g
-(<=)g(*n)g(\))h({)f(/*)g(factorization)d(completes)i(*/)716
-2087 y(dQuerySpace\(L,)e(U,)j(&mem_usage\);)716 2200
-y(printf\("L\\\\U)d(MB)k(\045.3f\\ttotal)c(MB)j(needed)g
-(\045.3f\\texpansions)c(\045d\\n",)1002 2313 y(mem_usage.for_lu/1e6,)f
-(mem_usage.total_needed/1e)o(6,)1002 2426 y(mem_usage.expansions\);)573
-2539 y(})382 2652 y(})382 2877 y(/*)47 b(Restore)f(to)h(1-based)f
-(indexing)f(*/)382 2990 y(for)i(\(i)g(=)g(0;)h(i)f(<)g(*nnz;)g(++i\))f
-(++rowind[i];)382 3103 y(for)h(\(i)g(=)g(0;)h(i)f(<=)g(*n;)g(++i\))g
-(++colptr[i];)382 3329 y(/*)g(Save)g(the)g(LU)g(factors)f(in)h(the)g
-(factors)e(handle)i(*/)382 3442 y(LUfactors)e(=)j(\(factors_t*\))c
-(SUPERLU_MALLOC\(sizeof\(fa)o(ctor)o(s_t\))o(\);)382
-3555 y(LUfactors->L)g(=)k(L;)382 3668 y(LUfactors->U)c(=)k(U;)382
-3781 y(LUfactors->perm_c)43 b(=)k(perm_c;)382 3894 y(LUfactors->perm_r)
-c(=)k(perm_r;)382 4006 y(factors[0])e(=)i(\(int\))g(LUfactors;)382
-4232 y(/*)g(Free)g(un-wanted)e(storage)h(*/)382 4345
-y(SUPERLU_FREE\(etree\);)382 4458 y(Destroy_SuperMatrix_Stor)o(e\(&)o
-(A\);)382 4571 y(Destroy_CompCol_Permuted)o(\(&A)o(C\);)382
-4684 y(StatFree\(&stat\);)191 4910 y(})h(else)g(if)g(\()h(*iopt)e(==)h
-(2)h(\))f({)h(/*)f(Triangular)e(solve)h(*/)382 5023 y(/*)h(Initialize)e
-(the)i(statistics)e(variables.)g(*/)382 5136 y(StatInit\(&stat\);)382
-5361 y(/*)i(Extract)f(the)h(LU)g(factors)f(in)h(the)g(factors)f(handle)
-g(*/)382 5474 y(LUfactors)f(=)j(\(factors_t*\))c(factors[0];)1905
-5778 y Fw(35)p eop
-%%Page: 36 37
-36 36 bop 382 280 a Fu(L)47 b(=)h(LUfactors->L;)382 393
-y(U)f(=)h(LUfactors->U;)382 506 y(perm_c)e(=)h(LUfactors->perm_c;)382
-619 y(perm_r)f(=)h(LUfactors->perm_r;)382 845 y
-(dCreate_Dense_Matrix\(&B,)41 b(*n,)47 b(*nrhs,)f(b,)h(*ldb,)g(SLU_DN,)
-e(SLU_D,)h(SLU_GE\);)382 1071 y(/*)h(Solve)f(the)h(system)f(A*X=B,)g
-(overwriting)f(B)j(with)e(X.)h(*/)382 1184 y(dgstrs)f(\(trans,)g(L,)h
-(U,)g(perm_c,)f(perm_r,)g(&B,)h(&stat,)f(info\);)382
-1409 y(Destroy_SuperMatrix_Stor)o(e\(&)o(B\);)382 1522
-y(StatFree\(&stat\);)191 1748 y(})h(else)g(if)g(\()h(*iopt)e(==)h(3)h
-(\))f({)h(/*)f(Free)f(storage)g(*/)382 1861 y(/*)h(Free)g(the)g(LU)g
-(factors)f(in)h(the)g(factors)e(handle)i(*/)382 1974
-y(LUfactors)e(=)j(\(factors_t*\))c(factors[0];)382 2087
-y(SUPERLU_FREE)g(\(LUfactors->perm_r\);)382 2200 y(SUPERLU_FREE)g
-(\(LUfactors->perm_c\);)382 2313 y(Destroy_SuperNode_Matrix)o(\(LU)o
-(fact)o(ors-)o(>L\))o(;)382 2426 y(Destroy_CompCol_Matrix\(L)o(Ufa)o
-(ctor)o(s->U)o(\);)382 2539 y(SUPERLU_FREE)g(\(LUfactors->L\);)382
-2652 y(SUPERLU_FREE)g(\(LUfactors->U\);)382 2764 y(SUPERLU_FREE)g
-(\(LUfactors\);)191 2877 y(})j(else)g({)382 2990 y(fprintf\(stderr,)c
-("Invalid)j(iopt=\045d)g(passed)g(to)h(c_fortran_dgssv\(\)\\n"\);)382
-3103 y(exit\(-1\);)191 3216 y(})0 3329 y(})141 3526 y
-Fw(Since)25 b(the)h(matrix)g(structures)f(in)g(C)g(cannot)i(b)s(e)e
-(directly)g(returned)g(to)h(F)-8 b(ortran,)28 b(w)m(e)f(use)e(a)i
-(handle)d(named)0 3639 y Fu(factors)36 b Fw(to)i(access)h(those)f
-(structures.)61 b(The)37 b(handle)f(is)h(essen)m(tially)f(an)h(in)m
-(teger)h(p)s(oin)m(ter)f(p)s(oin)m(ting)f(to)i(the)0
-3752 y(factored)22 b(matrices)f(obtained)f(from)g Fu(SuperLU)p
-Fw(.)f(So)i(the)g(factored)h(matrices)f(are)g(opaque)g(ob)5
-b(jects)22 b(to)f(the)g(F)-8 b(ortran)0 3864 y(program,)30
-b(but)g(can)h(only)e(b)s(e)h(manipulated)e(from)i(the)h(C)f(wrapp)s(er)
-e(program.)141 3977 y(The)i(F)-8 b(ortran)31 b(program)f
-Fu(FORTRAN/f77)p 1556 3977 29 4 v 32 w(main.f)e Fw(sho)m(ws)i(ho)m(w)h
-(a)f(F)-8 b(ortran)32 b(program)e(ma)m(y)h(call)0 4090
-y Fu(c)p 54 4090 V 34 w(fortran)p 424 4090 V 33 w(dgssv\(\))p
-Fw(,)g(and)g(is)h(listed)f(b)s(elo)m(w.)46 b(A)32 b Fu(README)f
-Fw(\014le)h(in)f(this)g(directory)h(describ)s(es)e(ho)m(w)j(to)g
-(compile)0 4203 y(and)d(run)f(this)g(program.)286 4400
-y Fu(program)46 b(f77_main)286 4513 y(integer)g(maxn,)h(maxnz)286
-4626 y(parameter)f(\()h(maxn)g(=)g(10000,)f(maxnz)h(=)g(100000)f(\))286
-4739 y(integer)g(rowind\(maxnz\),)e(colptr\(maxn\))286
-4852 y(real*8)94 b(values\(maxnz\),)44 b(b\(maxn\))286
-4965 y(integer)i(n,)h(nnz,)g(nrhs,)f(ldb,)h(info)286
-5077 y(integer)f(factors\(8\),)f(iopt)0 5190 y(*)0 5303
-y(*)238 b(Read)47 b(the)g(matrix)f(file)h(in)g(Harwell-Boeing)d(format)
-286 5416 y(call)j(hbcode1\(n,)e(n,)i(nnz,)g(values,)f(rowind,)f
-(colptr\))0 5529 y(*)1905 5778 y Fw(36)p eop
-%%Page: 37 38
-37 37 bop 286 280 a Fu(nrhs)47 b(=)g(1)286 393 y(ldb)g(=)h(n)286
-506 y(do)g(i)f(=)g(1,)h(n)430 619 y(b\(i\))e(=)i(1)286
-732 y(enddo)0 845 y(*)0 958 y(*)f(First,)g(factorize)e(the)i(matrix.)f
-(The)g(factors)g(are)h(stored)f(in)h(factor\(\))f(handle.)286
-1071 y(iopt)h(=)g(1)286 1184 y(call)g(c_fortran_dgssv\()c(iopt,)k(n,)g
-(nnz,)g(nrhs,)f(values,)g(rowind,)g(colptr,)239 1297
-y($)1049 b(b,)48 b(ldb,)e(factors,)g(info)g(\))0 1409
-y(*)286 1522 y(if)i(\(info)e(.eq.)h(0\))g(then)430 1635
-y(write)f(\(*,*\))g('Factorization)e(succeeded')286 1748
-y(else)430 1861 y(write\(*,*\))h('INFO)h(from)h(factorization)d(=)j(',)
-g(info)286 1974 y(endif)0 2087 y(*)0 2200 y(*)g(Second,)f(solve)h(the)g
-(system)f(using)g(the)h(existing)e(factors.)286 2313
-y(iopt)i(=)g(2)286 2426 y(call)g(c_fortran_dgssv\()c(iopt,)k(n,)g(nnz,)
-g(nrhs,)f(values,)g(rowind,)g(colptr,)239 2539 y($)1049
-b(b,)48 b(ldb,)e(factors,)g(info)g(\))0 2652 y(*)286
-2764 y(if)i(\(info)e(.eq.)h(0\))g(then)430 2877 y(write)f(\(*,*\))g
-('Solve)g(succeeded')430 2990 y(write)g(\(*,*\))g(\(b\(i\),)g(i=1,)h
-(10\))286 3103 y(else)430 3216 y(write\(*,*\))e('INFO)h(from)h
-(triangular)e(solve)h(=)h(',)h(info)286 3329 y(endif)0
-3555 y(*)f(Last,)g(free)f(the)h(storage)f(allocated)f(inside)i(SuperLU)
-286 3668 y(iopt)g(=)g(3)286 3781 y(call)g(c_fortran_dgssv\()c(iopt,)k
-(n,)g(nnz,)g(nrhs,)f(values,)g(rowind,)g(colptr,)239
-3894 y($)1049 b(b,)48 b(ldb,)e(factors,)g(info)g(\))0
-4006 y(*)286 4119 y(stop)286 4232 y(end)1905 5778 y Fw(37)p
-eop
-%%Page: 38 39
-38 38 bop 0 903 a Fs(Chapter)65 b(3)0 1318 y Fy(Multithreaded)78
-b(Sup)6 b(erLU)77 b(\(V)-19 b(ersion)78 b(1.1\))0 1800
-y Fr(3.1)135 b(Ab)t(out)44 b(Sup)t(erLU)p 1262 1800 41
-4 v 48 w(MT)0 2003 y Fw(Among)34 b(the)g(v)-5 b(arious)33
-b(steps)h(of)h(the)f(solution)e(pro)s(cess)i(in)f(the)h(sequen)m(tial)f
-(Sup)s(erLU,)f(the)i Fv(LU)44 b Fw(factorization)0 2116
-y(dominates)38 b(the)i(computation;)j(it)38 b(usually)f(tak)m(es)k
-(more)e(than)f(95\045)i(of)f(the)g(sequen)m(tial)f(run)m(time)g(for)h
-(large)0 2228 y(sparse)22 b(linear)f(systems.)38 b(W)-8
-b(e)23 b(ha)m(v)m(e)h(designed)d(and)h(implemen)m(ted)e(an)j(algorithm)
-e(to)i(p)s(erform)e(the)h(factorization)0 2341 y(in)35
-b(parallel)f(on)i(mac)m(hines)g(with)f(a)i(shared)e(address)h(space)g
-(and)g(m)m(ultithreading.)56 b(The)36 b(parallel)e(algorithm)0
-2454 y(is)k(based)g(on)g(the)h(e\016cien)m(t)g(sequen)m(tial)f
-(algorithm)g(implemen)m(ted)f(in)g(Sup)s(erLU.)g(Although)h(w)m(e)h
-(attempted)0 2567 y(to)c(minimize)c(the)j(amoun)m(t)g(of)g(c)m(hanges)h
-(to)g(the)f(sequen)m(tial)f(co)s(de,)i(there)f(are)h(still)c(a)k(n)m
-(um)m(b)s(er)d(of)i(non-trivial)0 2680 y(mo)s(di\014cations)39
-b(to)i(the)g(serial)e(Sup)s(erLU,)g(mostly)h(related)g(to)h(the)g
-(matrix)f(data)h(structures)f(and)g(memory)0 2793 y(organization.)g
-(All)26 b(these)i(c)m(hanges)h(are)f(summarized)e(in)h(T)-8
-b(able)27 b(3.1)i(and)e(their)g(impacts)g(on)g(p)s(erformance)h(are)0
-2906 y(studied)j(thoroughly)h(in)f([6)q(,)i(21)q(].)48
-b(In)32 b(this)g(part)h(of)g(the)g(Users')g(Guide,)f(w)m(e)h(describ)s
-(e)f(only)g(the)h(c)m(hanges)g(that)0 3019 y(the)c(user)g(should)e(b)s
-(e)h(a)m(w)m(are)j(of.)40 b(Other)29 b(than)g(these)g(di\013erences,)g
-(most)h(of)f(the)g(material)g(in)f(c)m(hapter)h(2)h(is)e(still)0
-3132 y(applicable.)p 170 3340 3560 4 v 168 3453 4 113
-v 220 3419 a(Construct)p 987 3453 V 423 w(P)m(arallel)i(algorithm)p
-3728 3453 V 170 3456 3560 4 v 168 3569 4 113 v 220 3535
-a(panel)p 987 3569 V 605 w(restricted)g(so)h(it)f(do)s(es)g(not)g(con)m
-(tain)h(branc)m(hings)e(in)g(the)i(elimination)c(tree)p
-3728 3569 V 168 3682 V 220 3648 a(sup)s(erno)s(de)p 987
-3682 V 411 w(restricted)j(to)h(b)s(e)f(a)h(fundamen)m(tal)e(sup)s(erno)
-s(de)f(in)h(the)i(elimination)d(tree)p 3728 3682 V 168
-3795 V 220 3761 a(sup)s(erno)s(de)g(storage)p 987 3795
-V 101 w(use)i(either)g(static)h(or)f(dynamic)g(upp)s(er)e(b)s(ound)g
-(\(section)j(3.4.2\))p 3728 3795 V 168 3908 V 220 3874
-a(pruning)d(&)i(DFS)p 987 3908 V 199 w(use)g(b)s(oth)g
-Fv(G)p Fw(\()p Fv(L)1578 3841 y Fo(T)1634 3874 y Fw(\))g(and)g(pruned)e
-Fv(G)p Fw(\()p Fv(L)2352 3841 y Fo(T)2408 3874 y Fw(\))j(to)g(a)m(v)m
-(oid)g(lo)s(c)m(king)p 3728 3908 V 170 3911 3560 4 v
-402 4105 a(T)-8 b(able)30 b(3.1:)42 b(The)30 b(di\013erences)g(b)s(et)m
-(w)m(een)h(the)f(parallel)f(and)g(the)i(sequen)m(tial)f(algorithms.)0
-4473 y Fr(3.2)135 b(Storage)46 b(t)l(yp)t(es)g(for)f
-Ff(L)f Fr(and)h Ff(U)0 4676 y Fw(As)28 b(in)e(the)i(sequen)m(tial)f(co)
-s(de,)h(the)g(t)m(yp)s(e)g(for)f(the)h(factored)h(matrices)e
-Fv(L)h Fw(and)f Fv(U)38 b Fw(is)26 b Fu(SuperMatrix)f
-Fw(\(Figure)i(2.2\),)0 4789 y(ho)m(w)m(ev)m(er,)48 b(their)42
-b(storage)j(formats)e(\(stored)h(in)e Fu(*Store)p Fw(\))g(are)h(c)m
-(hanged.)80 b(In)42 b(the)i(parallel)d(algorithm,)46
-b(the)0 4902 y(adjacen)m(t)36 b(panels)e(of)h(the)g(columns)f(ma)m(y)h
-(b)s(e)g(assigned)f(to)i(di\013eren)m(t)e(pro)s(cesses,)i(and)f(they)g
-(ma)m(y)g(b)s(e)f(\014nished)0 5015 y(and)25 b(put)g(in)f(global)h
-(memory)h(out)g(of)g(order.)38 b(That)26 b(is,)g(the)g(consecutiv)m(e)g
-(columns)f(or)g(sup)s(erno)s(des)e(ma)m(y)k(not)f(b)s(e)0
-5128 y(stored)k(con)m(tiguously)g(in)f(memory)-8 b(.)41
-b(Th)m(us,)29 b(in)g(addition)g(to)i(the)f(p)s(oin)m(ters)f(to)i(the)g
-(b)s(eginning)c(of)k(eac)m(h)g(column)0 5240 y(or)h(sup)s(erno)s(de,)f
-(w)m(e)i(need)f(p)s(oin)m(ters)f(to)i(the)f(end)g(of)g(the)h(column)e
-(or)h(sup)s(erno)s(de.)44 b(In)32 b(particular,)f(the)h(storage)0
-5353 y(t)m(yp)s(e)f(for)f Fv(L)g Fw(is)f Fu(SCP)h Fw(\(Sup)s(erno)s
-(de,)e(Column-wise)g(and)i(P)m(erm)m(uted\),)h(de\014ned)e(as:)191
-5529 y Fu(typedef)46 b(struct)g({)1905 5778 y Fw(38)p
-eop
-%%Page: 39 40
-39 39 bop 382 280 a Fu(int)94 b(nnz;)477 b(/*)47 b(number)f(of)h
-(nonzeros)f(in)h(the)g(matrix)f(*/)382 393 y(int)94 b(nsuper;)333
-b(/*)47 b(number)f(of)h(supernodes)e(*/)382 506 y(void)h(*nzval;)333
-b(/*)47 b(pointer)f(to)h(array)f(of)h(nonzero)f(values,)1432
-619 y(packed)g(by)h(column)f(*/)382 732 y(int)h(*nzval_colbeg;)d(/*)j
-(nzval_colbeg[j])c(points)k(to)g(beginning)e(of)i(column)f(j)1432
-845 y(in)h(nzval[])f(*/)382 958 y(int)h(*nzval_colend;)d(/*)j
-(nzval_colend[j])c(points)k(to)g(one)g(past)f(the)h(last)1432
-1071 y(element)f(of)h(column)f(j)h(in)h(nzval[])d(*/)382
-1184 y(int)i(*rowind;)332 b(/*)47 b(pointer)f(to)h(array)f(of)h
-(compressed)e(row)i(indices)f(of)1432 1297 y(the)h(supernodes)e(*/)382
-1409 y(int)i(*rowind_colbeg;/*)c(rowind_colbeg[j])g(points)j(to)h
-(beginning)f(of)h(column)f(j)1432 1522 y(in)h(rowind[])f(*/)382
-1635 y(int)h(*rowind_colend;/*)c(rowind_colend[j])g(points)j(to)h(one)g
-(past)g(the)g(last)1432 1748 y(element)f(of)h(column)f(j)h(in)h
-(rowind[])d(*/)382 1861 y(int)i(*col_to_sup;)140 b(/*)47
-b(col_to_sup[j])d(is)j(the)g(supernode)e(number)h(to)i(which)1432
-1974 y(column)e(j)h(belongs)f(*/)382 2087 y(int)h(*sup_to_colbeg;/*)c
-(sup_to_colbeg[s])g(points)j(to)h(the)g(first)g(column)1432
-2200 y(of)g(the)g(s-th)g(supernode)e(/)382 2313 y(int)i
-(*sup_to_colend;/*)c(sup_to_colend[s])g(points)j(to)h(one)g(past)g(the)
-g(last)1432 2426 y(column)f(of)h(the)g(s-th)g(supernode)e(*/)191
-2539 y(})i(SCPformat;)141 2729 y Fw(The)30 b(storage)i(t)m(yp)s(e)e
-(for)h Fv(U)40 b Fw(is)29 b Fu(NCP)p Fw(,)h(de\014ned)f(as:)191
-2899 y Fu(typedef)46 b(struct)g({)382 3012 y(int)94 b(nnz;)238
-b(/*)47 b(number)f(of)h(nonzeros)f(in)h(the)g(matrix)f(*/)382
-3124 y(void)g(*nzval;)94 b(/*)47 b(pointer)f(to)h(array)g(of)g(nonzero)
-f(values,)f(packed)h(by)i(column)e(*/)382 3237 y(int)94
-b(*rowind;)46 b(/*)h(pointer)f(to)h(array)g(of)g(row)g(indices)e(of)j
-(the)f(nonzeros)e(*/)382 3350 y(int)94 b(*colbeg;)46
-b(/*)h(colbeg[j])e(points)i(to)g(the)g(location)e(in)i(nzval[])f(and)h
-(rowind[])1193 3463 y(which)g(starts)f(column)g(j)h(*/)382
-3576 y(int)94 b(*colend;)46 b(/*)h(colend[j])e(points)i(to)g(one)g
-(past)f(the)h(location)f(in)h(nzval[])1193 3689 y(and)g(rowind[])f
-(which)g(ends)h(column)f(j)h(*/)191 3802 y(})g(NCPformat;)141
-3971 y Fw(The)41 b(table)g(b)s(elo)m(w)f(summarizes)g(the)i(data)g(and)
-e(storage)j(t)m(yp)s(es)e(of)g(all)f(the)i(matrices)f(in)m(v)m(olv)m
-(ed)g(in)f(the)0 4084 y(parallel)28 b(routines:)p 570
-4191 2760 4 v 568 4304 4 113 v 907 4304 V 1268 4270 a
-Fv(A)p 1694 4304 V 563 w(L)p 2162 4304 V 377 w(U)p 2583
-4304 V 334 w(B)p 2955 4304 V 299 w(X)p 3328 4304 V 570
-4308 2760 4 v 568 4420 4 113 v 620 4387 a Fu(Stype)p
-907 4420 V 98 w(SLU)p 1108 4387 29 4 v 34 w(NC)i Fw(or)g
-Fu(SLU)p 1523 4387 V 34 w(NR)p 1694 4420 4 113 v 123
-w(SLU)p 1920 4387 29 4 v 33 w(SCP)p 2162 4420 4 113 v
-123 w(SLU)p 2364 4387 29 4 v 33 w(NCP)p 2583 4420 4 113
-v 99 w(SLU)p 2784 4387 29 4 v 34 w(DN)p 2955 4420 4 113
-v 99 w(SLU)p 3157 4387 29 4 v 33 w(DN)p 3328 4420 4 113
-v 568 4533 V 620 4500 a(Dtype)p 907 4533 V 330 w(SLU)p
-1340 4500 29 4 v 33 w(D)p 1694 4533 4 113 v 402 w(SLU)p
-1967 4500 29 4 v 34 w(D)p 2162 4533 4 113 v 219 w(SLU)p
-2412 4500 29 4 v 33 w(D)p 2583 4533 4 113 v 171 w(SLU)p
-2808 4500 29 4 v 34 w(D)p 2955 4533 4 113 v 147 w(SLU)p
-3181 4500 29 4 v 33 w(D)p 3328 4533 4 113 v 568 4646
-V 620 4612 a(Mtype)p 907 4646 V 306 w(SLU)p 1316 4612
-29 4 v 33 w(GE)p 1694 4646 4 113 v 307 w(SLU)p 1896 4612
-29 4 v 33 w(TRLU)p 2162 4646 4 113 v 99 w(SLU)p 2364
-4612 29 4 v 33 w(TRU)p 2583 4646 4 113 v 99 w(SLU)p 2784
-4612 29 4 v 34 w(GE)p 2955 4646 4 113 v 99 w(SLU)p 3157
-4612 29 4 v 33 w(GE)p 3328 4646 4 113 v 570 4650 2760
-4 v 0 4874 a Fr(3.3)135 b(User-callable)47 b(routines)0
-5077 y Fw(As)38 b(in)f(the)h(sequen)m(tial)g(Sup)s(erLU,)e(w)m(e)j(pro)
-m(vide)e(b)s(oth)h(computational)g(routines)f(and)g(driv)m(er)g
-(routines.)63 b(T)-8 b(o)0 5190 y(name)40 b(those)g(routines)f(that)i
-(in)m(v)m(olv)m(e)f(parallelization)d(in)i(the)h(call-graph,)i(w)m(e)e
-(prep)s(end)e(a)i(letter)h Fu(p)e Fw(to)i(the)0 5303
-y(names)34 b(of)h(their)e(sequen)m(tial)h(coun)m(terparts,)i(for)f
-(example)f Fu(pdgstrf)p Fw(.)51 b(F)-8 b(or)35 b(the)f(purely)f(sequen)
-m(tial)h(routines,)0 5416 y(w)m(e)44 b(use)f(the)g(same)g(names)h(as)f
-(b)s(efore.)79 b(Here,)47 b(w)m(e)d(only)e(list)g(the)h(routines)f
-(that)i(are)f(di\013eren)m(t)g(from)g(the)0 5529 y(sequen)m(tial)30
-b(ones.)1905 5778 y(39)p eop
-%%Page: 40 41
-40 40 bop 0 280 a Fm(3.3.1)112 b(Driv)m(er)37 b(routines)0
-452 y Fw(W)-8 b(e)27 b(pro)m(vide)f(t)m(w)m(o)i(t)m(yp)s(es)e(of)g
-(driv)m(er)f(routines)h(for)g(solving)f(systems)h(of)g(linear)f
-(equations.)39 b(The)26 b(driv)m(er)f(routines)0 565
-y(can)31 b(handle)e(b)s(oth)g(column-)h(and)f(ro)m(w-orien)m(ted)i
-(storage)h(sc)m(hemes.)136 753 y Fq(\017)46 b Fw(A)33
-b(simple)e(driv)m(er)g Fu(pdgssv)p Fw(,)h(whic)m(h)f(solv)m(es)i(the)g
-(system)f Fv(AX)37 b Fw(=)29 b Fv(B)37 b Fw(b)m(y)32
-b(factorizing)h Fv(A)g Fw(and)f(o)m(v)m(erwriting)227
-865 y Fv(B)j Fw(with)29 b(the)i(solution)e Fv(X)7 b Fw(.)136
-1053 y Fq(\017)46 b Fw(An)29 b(exp)s(ert)g(driv)m(er)f
-Fu(pdgssvx)p Fw(,)g(whic)m(h,)g(in)g(addition)g(to)i(the)f(ab)s(o)m(v)m
-(e,)i(also)f(p)s(erforms)d(the)j(follo)m(wing)e(func-)227
-1166 y(tions)i(\(some)h(of)g(them)f(optionally\):)330
-1354 y Fx({)45 b Fw(solv)m(e)31 b Fv(A)718 1321 y Fo(T)773
-1354 y Fv(X)i Fw(=)25 b Fv(B)5 b Fw(;)330 1500 y Fx({)45
-b Fw(equilibrate)35 b(the)i(system)g(\(scale)g Fv(A)p
-Fw('s)g(ro)m(ws)f(and)g(columns)g(to)h(ha)m(v)m(e)h(unit)d(norm\))i(if)
-e Fv(A)i Fw(is)f(p)s(o)s(orly)427 1613 y(scaled;)330
-1759 y Fx({)45 b Fw(estimate)h(the)e(condition)g(n)m(um)m(b)s(er)f(of)i
-Fv(A)p Fw(,)j(c)m(hec)m(k)e(for)f(near-singularit)m(y)-8
-b(,)47 b(and)c(c)m(hec)m(k)k(for)d(piv)m(ot)427 1872
-y(gro)m(wth;)330 2018 y Fx({)h Fw(re\014ne)30 b(the)h(solution)e(and)g
-(compute)i(forw)m(ard)f(and)g(bac)m(kw)m(ard)g(error)g(b)s(ounds.)0
-2261 y Fm(3.3.2)112 b(Computational)36 b(routines)0 2433
-y Fw(The)f(user)g(can)h(in)m(v)m(ok)m(e)g(the)g(follo)m(wing)e
-(computational)h(routines)f(to)j(directly)d(con)m(trol)i(the)f(b)s(eha)
-m(vior)g(of)h(Su-)0 2546 y(p)s(erLU.)30 b(The)h(computational)g
-(routines)f(can)h(only)g(handle)e(column-orien)m(ted)i(storage.)44
-b(Except)32 b(for)f(the)g(par-)0 2659 y(allel)37 b(factorization)i
-(routine)f Fu(pdgstrf)p Fw(,)h(all)e(the)i(other)g(routines)e(are)i
-(iden)m(tical)e(to)j(those)f(app)s(eared)f(in)f(the)0
-2772 y(sequen)m(tial)30 b(sup)s(erlu.)136 2984 y Fq(\017)46
-b Fu(pdgstrf)p Fw(:)39 b(F)-8 b(actorize)32 b(\(in)e(parallel\).)227
-3134 y(This)h(implemen)m(ts)f(the)j(\014rst-time)e(factorization,)j(or)
-e(later)g(re-factorization)h(with)e(the)h(same)h(nonzero)227
-3247 y(pattern.)56 b(In)35 b(re-factorizations,)i(the)f(co)s(de)g(has)f
-(the)g(abilit)m(y)f(to)i(use)f(the)h(same)g(column)e(p)s(erm)m(utation)
-227 3360 y Fv(P)285 3374 y Fo(c)349 3360 y Fw(and)27
-b(ro)m(w)i(p)s(erm)m(utation)e Fv(P)1272 3374 y Fo(r)1339
-3360 y Fw(obtained)h(from)g(a)g(previous)f(factorization.)41
-b(Sev)m(eral)28 b(scalar)h(argumen)m(ts)227 3473 y(con)m(trol)d(ho)m(w)
-e(the)i Fv(LU)34 b Fw(decomp)s(osition)24 b(and)g(the)h(n)m(umerical)e
-(piv)m(oting)h(should)f(b)s(e)i(p)s(erformed.)37 b Fu(pdgstrf)227
-3586 y Fw(can)31 b(handle)e(non-square)h(matrices.)136
-3774 y Fq(\017)46 b Fu(dgstrs)p Fw(:)39 b(T)-8 b(riangular)29
-b(solv)m(e.)227 3924 y(This)e(tak)m(es)j(the)f Fv(L)f
-Fw(and)h Fv(U)38 b Fw(triangular)27 b(factors,)j(the)f(ro)m(w)g(and)f
-(column)f(p)s(erm)m(utation)h(v)m(ectors,)j(and)d(the)227
-4037 y(righ)m(t-hand)h(side)h(to)h(compute)g(a)f(solution)f(matrix)h
-Fv(X)38 b Fw(of)30 b Fv(AX)j Fw(=)25 b Fv(B)35 b Fw(or)30
-b Fv(A)2823 4004 y Fo(T)2879 4037 y Fv(X)i Fw(=)25 b
-Fv(B)5 b Fw(.)136 4224 y Fq(\017)46 b Fu(dgscon)p Fw(:)39
-b(Estimate)31 b(condition)e(n)m(um)m(b)s(er.)227 4375
-y(Giv)m(en)41 b(the)g(matrix)f Fv(A)g Fw(and)g(its)g(factors)i
-Fv(L)e Fw(and)g Fv(U)10 b Fw(,)43 b(this)d(estimates)h(the)g(condition)
-e(n)m(um)m(b)s(er)g(in)h(the)227 4488 y(one-norm)30 b(or)g(in\014nit)m
-(y-norm.)38 b(The)29 b(algorithm)g(is)g(due)g(to)i(Hager)g(and)e
-(Higham)h([16)q(],)g(and)g(is)e(the)j(same)227 4601 y(as)g
-Fu(condest)d Fw(in)h(sparse)h(Matlab.)136 4788 y Fq(\017)46
-b Fu(dgsequ/dlaqgs)p Fw(:)37 b(Equilibrate.)227 4938
-y Fu(dgsequ)31 b Fw(\014rst)h(computes)g(the)h(ro)m(w)g(and)f(column)f
-(scalings)g Fv(D)2388 4952 y Fo(r)2459 4938 y Fw(and)h
-Fv(D)2713 4952 y Fo(c)2780 4938 y Fw(whic)m(h)f(w)m(ould)h(mak)m(e)h
-(eac)m(h)h(ro)m(w)227 5051 y(and)28 b(eac)m(h)h(column)d(of)i(the)h
-(scaled)e(matrix)h Fv(D)1809 5065 y Fo(r)1847 5051 y
-Fv(AD)1990 5065 y Fo(c)2053 5051 y Fw(ha)m(v)m(e)h(equal)e(norm.)39
-b Fu(dlaqgs)27 b Fw(then)g(applies)f(them)i(to)227 5164
-y(the)j(original)f(matrix)g Fv(A)h Fw(if)f(it)h(is)f(indeed)f(badly)h
-(scaled.)42 b(The)31 b(equilibrated)d Fv(A)j Fw(o)m(v)m(erwrites)h(the)
-f(original)227 5277 y Fv(A)p Fw(.)1905 5778 y(40)p eop
-%%Page: 41 42
-41 41 bop 136 280 a Fq(\017)46 b Fu(dgsrfs)p Fw(:)39
-b(Re\014ne)30 b(solution.)227 431 y(Giv)m(en)g Fv(A)p
-Fw(,)h(its)f(factors)h Fv(L)f Fw(and)f Fv(U)10 b Fw(,)31
-b(and)e(an)h(initial)e(solution)h Fv(X)7 b Fw(,)30 b(this)g(do)s(es)f
-(iterativ)m(e)i(re\014nemen)m(t,)f(using)227 544 y(the)k(same)f
-(precision)e(as)j(the)f(input)e(data.)50 b(It)33 b(also)g(computes)h
-(forw)m(ard)e(and)h(bac)m(kw)m(ard)g(error)g(b)s(ounds)227
-656 y(for)d(the)h(re\014ned)e(solution.)0 943 y Fr(3.4)135
-b(Installation)0 1149 y Fm(3.4.1)112 b(File)37 b(structure)0
-1321 y Fw(The)30 b(top)g(lev)m(el)h(Sup)s(erLU)p 918
-1321 28 4 v 30 w(MT/)g(directory)f(is)f(structured)h(as)g(follo)m(ws:)
-191 1508 y Fu(SuperLU_MT/README)186 b(instructions)45
-b(on)i(installation)191 1621 y(SuperLU_MT/CBLAS/)186
-b(needed)46 b(BLAS)h(routines)e(in)j(C,)f(not)g(necessarily)d(fast)191
-1734 y(SuperLU_MT/EXAMPLE/)90 b(example)46 b(programs)191
-1847 y(SuperLU_MT/INSTALL/)90 b(test)47 b(machine)f(dependent)f
-(parameters;)g(the)i(Users')f(Guide)191 1960 y(SuperLU_MT/SRC/)282
-b(C)48 b(source)e(code,)g(to)h(be)g(compiled)f(into)h(superlu_mt.a)d
-(library)191 2073 y(SuperLU_MT/TESTING/)90 b(driver)46
-b(routines)g(to)h(test)g(correctness)191 2186 y(SuperLU_MT/Makefile)90
-b(top)47 b(level)f(Makefile)g(that)h(does)f(installation)f(and)i
-(testing)191 2299 y(SuperLU_MT/make.inc)90 b(compiler,)45
-b(compile)h(flags,)g(library)g(definitions)f(and)i(C)1193
-2412 y(preprocessor)e(definitions,)f(included)i(in)h(all)g(Makefiles.)
-141 2599 y Fw(W)-8 b(e)27 b(ha)m(v)m(e)f(p)s(orted)f(the)h(parallel)d
-(programs)j(to)g(a)g(n)m(um)m(b)s(er)e(of)h(platforms,)h(whic)m(h)e
-(are)i(re\015ected)g(in)e(the)i(mak)m(e)0 2712 y(include)37
-b(\014les)h(pro)m(vided)f(in)h(the)h(top)g(lev)m(el)g(directory)-8
-b(,)41 b(for)e(example,)i Fu(make.sun,)k(make.sgi,)g(make.cray)0
-2825 y(and)i(make.pthreads)p Fw(.)c(If)33 b(y)m(ou)f(are)h(using)e(one)
-i(of)g(these)g(mac)m(hines,)g(suc)m(h)f(as)h(a)g(Sun,)e(y)m(ou)i(can)g
-(simply)d(cop)m(y)0 2938 y Fu(make.sun)h Fw(in)m(to)j
-Fu(make.inc)d Fw(b)s(efore)i(compiling.)48 b(If)33 b(y)m(ou)h(are)g
-(not)g(using)e(an)m(y)i(of)f(the)h(mac)m(hines)f(to)h(whic)m(h)e(w)m(e)
-0 3051 y(ha)m(v)m(e)g(p)s(orted,)e(y)m(ou)g(will)e(need)i(to)h(read)f
-(section)h(3.6)g(ab)s(out)g(the)f(p)s(orting)f(instructions.)141
-3164 y(The)e(rest)g(of)h(the)f(installation)f(and)g(testing)i(pro)s
-(cedure)e(is)g(similar)f(to)j(that)g(describ)s(ed)d(in)h(section)h
-(2.10)i(for)0 3277 y(the)36 b(serial)e(Sup)s(erLU.)g(Then,)i(y)m(ou)g
-(can)g(t)m(yp)s(e)g Fu(make)f Fw(at)h(the)g(top)g(lev)m(el)f(directory)
-h(to)g(\014nish)d(installation.)55 b(In)0 3390 y(the)31
-b Fu(SuperLU)p 499 3390 29 4 v 32 w(MT/TESTING)d Fw(sub)s(directory)-8
-b(,)29 b(y)m(ou)h(can)h(t)m(yp)s(e)f Fu(pdtest.csh)e
-Fw(to)j(p)s(erform)e(testings.)0 3633 y Fm(3.4.2)112
-b(P)m(erformance)37 b(issues)0 3805 y Fx(Memory)e(managemen)m(t)d(for)j
-Fv(L)g Fx(and)g Fv(U)0 3976 y Fw(In)29 b(the)h(sequen)m(tial)g(Sup)s
-(erLU,)e(four)h(data)i(arra)m(ys)f(asso)s(ciated)h(with)d(the)i
-Fv(L)g Fw(and)f Fv(U)40 b Fw(factors)31 b(can)f(b)s(e)g(expanded)0
-4089 y(dynamically)-8 b(,)31 b(as)i(describ)s(ed)d(in)h(section)i(2.7.)
-48 b(In)32 b(the)g(parallel)f(co)s(de,)i(the)g(expansion)e(is)g(hard)h
-(and)g(costly)g(to)0 4202 y(implemen)m(t,)26 b(b)s(ecause)h(when)f(a)h
-(pro)s(cess)f(detects)i(that)f(an)f(arra)m(y)i(b)s(ound)c(is)i
-(exceeded,)i(it)f(has)f(to)h(send)f(a)h(signal)0 4315
-y(to)k(and)e(susp)s(end)e(the)j(execution)g(of)g(the)g(other)g(pro)s
-(cesses.)40 b(Then)29 b(the)h(detecting)g(pro)s(cess)g(can)g(pro)s
-(ceed)f(with)0 4428 y(the)i(arra)m(y)f(expansion.)40
-b(After)31 b(the)f(expansion,)g(this)f(pro)s(cess)h(m)m(ust)g(w)m(ak)m
-(e)i(up)d(all)g(the)i(susp)s(ended)d(pro)s(cesses.)141
-4541 y(In)20 b(this)g(release)i(of)f(the)g(parallel)f(co)s(de,)j(w)m(e)
-e(ha)m(v)m(e)i(not)e(y)m(et)h(implemen)m(ted)e(the)h(ab)s(o)m(v)m(e)h
-(expansion)e(mec)m(hanism.)0 4654 y(F)-8 b(or)38 b(no)m(w,)i(the)e
-(user)e(m)m(ust)i(pre-determine)e(an)i(estimated)f(size)h(for)f(eac)m
-(h)i(of)f(the)f(four)g(arra)m(ys)h(through)f(the)0 4767
-y(inquiry)e(function)i Fu(sp)p 787 4767 V 34 w(ienv\(\))p
-Fw(.)62 b(There)38 b(are)g(t)m(w)m(o)i(in)m(terpretations)d(for)h(eac)m
-(h)h(in)m(teger)g(v)-5 b(alue)37 b Fu(FILL)g Fw(returned)0
-4880 y(b)m(y)e(calling)e(this)h(function)g(with)f Fu(ispec)47
-b(=)g(6,)g(7,)h(or)f(8)p Fw(.)54 b(A)35 b(negativ)m(e)h(n)m(um)m(b)s
-(er)e(is)g(in)m(terpreted)g(as)h(the)g(\014lls)0 4993
-y(gro)m(wth)g(factor,)h(that)f(is,)f(the)g(program)g(will)e(allo)s
-(cate)i Fu(\(-FILL\)*nnz\(A\))c Fw(elemen)m(ts)35 b(for)f(the)g
-(corresp)s(onding)0 5105 y(arra)m(y)-8 b(.)42 b(A)30
-b(p)s(ositiv)m(e)f(n)m(um)m(b)s(er)g(is)h(in)m(terpreted)f(as)i(the)f
-(true)g(amoun)m(t)h(the)g(user)e(w)m(an)m(ts)i(to)g(allo)s(cate,)g
-(that)g(is,)f(the)0 5218 y(program)24 b(will)e(allo)s(cate)k
-Fu(FILL)d Fw(elemen)m(ts)i(for)f(the)h(corresp)s(onding)e(arra)m(y)-8
-b(.)40 b(In)24 b(b)s(oth)g(cases,)j(if)c(the)i(initial)d(request)0
-5331 y(exceeds)38 b(the)e(ph)m(ysical)g(memory)g(constrain)m(t,)j(the)e
-(sizes)f(of)h(the)g(arra)m(ys)g(are)g(rep)s(eatedly)f(reduced)g(un)m
-(til)f(the)0 5444 y(initial)28 b(allo)s(cation)h(succeeds.)1905
-5778 y(41)p eop
-%%Page: 42 43
-42 42 bop 141 280 a Fu(int)47 b(sp)p 434 280 29 4 v 34
-w(ienv\(int)e(ispec\);)141 453 y(Ispec)29 b Fw(sp)s(eci\014es)g(the)i
-(parameter)g(to)g(b)s(e)e(returned:)318 637 y(isp)s(ec)d(=)k
-Fv(:)15 b(:)g(:)540 750 y Fw(=)30 b(6:)42 b(size)30 b(of)g(the)h(arra)m
-(y)g(to)g(store)g(the)f(v)-5 b(alues)30 b(of)h(the)f
-Fv(L)g Fw(sup)s(erno)s(des)e(\()p Fu(nzval)p Fw(\))540
-863 y(=)i(7:)42 b(size)30 b(of)g(the)h(arra)m(y)g(to)g(store)g(the)f
-(columns)f(in)g(U)i(\()p Fu(nzval/rowind)p Fw(\))540
-976 y(=)f(8:)42 b(size)30 b(of)g(the)h(arra)m(y)g(to)g(store)g(the)f
-(subscripts)e(of)j(the)f Fv(L)h Fw(sup)s(erno)s(des)d(\()p
-Fu(rowind)p Fw(\);)141 1159 y(If)38 b(the)h(actual)g(\014ll)d(exceeds)j
-(an)m(y)g(arra)m(y)g(size,)i(the)d(program)h(will)c(ab)s(ort)k(with)e
-(a)i(message)g(sho)m(wing)f(the)0 1272 y(curren)m(t)45
-b(column)f(when)g(failure)f(o)s(ccurs,)48 b(and)d(indicating)e(ho)m(w)i
-(man)m(y)g(elemen)m(ts)g(are)g(needed)g(up)f(to)i(the)0
-1385 y(curren)m(t)40 b(column.)69 b(The)40 b(user)f(ma)m(y)i(reset)g(a)
-g(larger)f(\014ll)e(parameter)i(for)g(this)g(arra)m(y)g(and)g(then)g
-(restart)h(the)0 1498 y(program.)141 1611 y(T)-8 b(o)41
-b(mak)m(e)g(the)g(storage)g(allo)s(cation)f(more)g(e\016cien)m(t)h(for)
-f(the)g(sup)s(erno)s(des)e(in)h Fv(L)p Fw(,)k(w)m(e)e(devised)e(a)h(sp)
-s(ecial)0 1724 y(storage)34 b(sc)m(heme.)47 b(The)32
-b(need)g(for)g(this)f(sp)s(ecial)g(treatmen)m(t)j(and)e(ho)m(w)g(w)m(e)
-h(implemen)m(t)e(it)h(are)h(fully)d(explained)0 1837
-y(and)23 b(studied)e(in)h([6)q(,)h(21)q(].)39 b(Here,)25
-b(w)m(e)f(only)f(sk)m(etc)m(h)h(the)g(main)e(idea.)38
-b(Recall)23 b(that)h(the)f(parallel)e(algorithm)i(assigns)0
-1950 y(one)39 b(panel)g(of)g(columns)f(to)h(one)h(pro)s(cess.)66
-b(Tw)m(o)40 b(consecutiv)m(e)g(panels)e(ma)m(y)h(b)s(e)g(assigned)f(to)
-i(t)m(w)m(o)g(di\013eren)m(t)0 2062 y(pro)s(cesses,)28
-b(ev)m(en)g(though)f(they)h(ma)m(y)g(b)s(elong)e(to)i(the)g(same)f(sup)
-s(erno)s(de)e(disco)m(v)m(ered)j(later.)40 b(Moreo)m(v)m(er,)30
-b(a)e(third)0 2175 y(panel)33 b(ma)m(y)h(b)s(e)f(\014nished)e(b)m(y)i
-(a)h(third)e(pro)s(cess)h(and)g(put)g(in)f(memory)i(b)s(et)m(w)m(een)g
-(these)g(t)m(w)m(o)h(panels,)f(resulting)0 2288 y(in)c(the)i(columns)f
-(of)h(a)g(sup)s(erno)s(de)d(b)s(eing)h(noncon)m(tiguous)i(in)e(memory)
--8 b(.)45 b(This)30 b(is)h(undesirable,)f(b)s(ecause)h(then)0
-2401 y(w)m(e)h(cannot)g(directly)f(call)f(BLAS)i(routines)e(using)g
-(this)h(sup)s(erno)s(de)e(unless)h(w)m(e)i(pa)m(y)g(the)g(cost)g(of)g
-(cop)m(ying)g(the)0 2514 y(columns)22 b(in)m(to)i(con)m(tiguous)f
-(memory)h(\014rst.)37 b(T)-8 b(o)24 b(o)m(v)m(ercome)i(this)c(problem,)
-i(w)m(e)g(exploited)e(the)i(observ)-5 b(ation)23 b(that)0
-2627 y(the)j(nonzero)h(structure)e(for)h Fv(L)g Fw(is)f(con)m(tained)h
-(in)f(that)h(of)h(the)f(Householder)f(matrix)g Fv(H)33
-b Fw(from)26 b(the)g(Householder)0 2740 y(sparse)h Fv(QR)i
-Fw(transformation)e([11)q(,)h(12)q(].)40 b(F)-8 b(urthermore,)28
-b(it)f(can)h(b)s(e)f(sho)m(wn)g(that)i(a)f(fundamen)m(tal)e(sup)s(erno)
-s(de)g(of)0 2853 y Fv(L)j Fw(is)g(alw)m(a)m(ys)h(con)m(tained)g(in)e(a)
-i(fundamen)m(tal)f(sup)s(erno)s(de)e(of)j Fv(H)7 b Fw(.)40
-b(This)28 b(con)m(tainmen)m(t)j(prop)s(ert)m(y)e(is)f(true)i(for)f(for)
-0 2966 y(an)m(y)d(ro)m(w)g(p)s(erm)m(utation)g Fv(P)912
-2980 y Fo(r)976 2966 y Fw(in)e Fv(P)1135 2980 y Fo(r)1174
-2966 y Fv(A)h Fw(=)g Fv(LU)10 b Fw(.)39 b(Therefore,)27
-b(w)m(e)g(can)f(pre-allo)s(cate)g(storage)i(for)d(the)i
-Fv(L)e Fw(sup)s(erno)s(des)0 3079 y(based)30 b(on)g(the)g(size)g(of)g
-Fv(H)37 b Fw(sup)s(erno)s(des.)h(F)-8 b(ortunately)g(,)31
-b(there)g(exists)e(a)i(fast)f(algorithm)f(\(almost)i(linear)d(in)h(the)
-0 3192 y(n)m(um)m(b)s(er)g(of)i(nonzeros)f(of)h Fv(A)p
-Fw(\))f(to)i(compute)e(the)h(size)f(of)h Fv(H)37 b Fw(and)30
-b(the)g(sup)s(erno)s(des)e(partition)h(in)g Fv(H)37 b
-Fw([13)r(].)141 3304 y(In)g(practice,)j(the)e(ab)s(o)m(v)m(e)h(static)f
-(prediction)e(is)h(fairly)f(tigh)m(t)i(for)f(most)h(problems.)61
-b(Ho)m(w)m(ev)m(er,)42 b(for)c(some)0 3417 y(others,)44
-b(the)d(n)m(um)m(b)s(er)e(of)i(nonzeros)g(in)e Fv(H)48
-b Fw(greatly)41 b(exceeds)g(the)g(n)m(um)m(b)s(er)f(of)g(nonzeros)h(in)
-f Fv(L)p Fw(.)71 b(T)-8 b(o)41 b(handle)0 3530 y(this)f(situation,)i(w)
-m(e)g(implemen)m(ted)d(an)i(algorithm)e(that)j(still)c(uses)j(the)g
-(sup)s(erno)s(des)d(partition)i(in)f Fv(H)7 b Fw(,)44
-b(but)0 3643 y(dynamically)33 b(searc)m(hes)j(the)f(sup)s(erno)s(dal)d
-(graph)i(of)h Fv(L)g Fw(to)h(obtain)e(a)i(m)m(uc)m(h)f(tigh)m(ter)g(b)s
-(ound)e(for)i(the)g(storage.)0 3756 y(T)-8 b(able)30
-b(6)h(in)e([6)q(])h(demonstrates)h(the)f(storage)i(e\016ciency)f(ac)m
-(hiev)m(ed)g(b)m(y)f(b)s(oth)g(static)h(and)f(dynamic)f(approac)m(h.)
-141 3869 y(In)k(summary)-8 b(,)34 b(our)f(program)g(tries)g(to)h(use)f
-(the)h(static)g(prediction)e(\014rst)g(for)i(the)f Fv(L)h
-Fw(sup)s(erno)s(des.)47 b(In)33 b(this)0 3982 y(case,)41
-b(w)m(e)e(ignore)e(the)h(in)m(teger)h(v)-5 b(alue)37
-b(giv)m(en)h(in)f(the)h(function)f Fu(sp)p 2353 3982
-V 34 w(ienv\(6\))p Fw(,)h(and)f(simply)f(use)h(the)i(nonzero)0
-4095 y(coun)m(t)32 b(of)g Fv(H)7 b Fw(.)44 b(If)31 b(the)g(user)g
-(\014nds)f(that)i(the)f(size)h(of)f Fv(H)39 b Fw(is)30
-b(to)s(o)i(large,)h(he)e(can)h(in)m(v)m(ok)m(e)g(the)g(dynamic)e
-(algorithm)0 4208 y(at)h(run)m(time)e(b)m(y)i(setting)f(the)h(follo)m
-(wing)d(UNIX)j(shell)e(en)m(vironmen)m(t)h(v)-5 b(ariable:)141
-4381 y Fu(setenv)46 b(SuperLU)p 817 4381 V 33 w(DYNAMIC)p
-1186 4381 V 32 w(SNODE)p 1458 4381 V 33 w(STORE)g(1)0
-4554 y Fw(The)35 b(dynamic)g(algorithm)g(incurs)f(run)m(time)h(o)m(v)m
-(erhead.)59 b(F)-8 b(or)36 b(example,)i(this)c(o)m(v)m(erhead)k(is)d
-(usually)e(b)s(et)m(w)m(een)0 4666 y(2\045)e(and)e(15\045)i(on)g(a)f
-(single)f(pro)s(cessor)h(RS/6000-590)k(for)c(a)h(range)g(of)f(test)h
-(matrices.)0 4906 y Fx(Symmetric)i(structure)j(pruning)0
-5077 y Fw(In)24 b(b)s(oth)g(serial)g(and)g(parallel)f(algorithms,)i(w)m
-(e)g(ha)m(v)m(e)h(implemen)m(ted)d(Eisenstat)i(and)f(Liu's)g(symmetric)
-g(pruning)0 5190 y(idea)d(of)g(represen)m(ting)g(the)g(graph)g
-Fv(G)p Fw(\()p Fv(L)1346 5157 y Fo(T)1402 5190 y Fw(\))g(b)m(y)g(a)h
-(reduced)f(graph)f Fv(G)2291 5157 y Fn(0)2315 5190 y
-Fw(,)j(and)e(thereb)m(y)g(reducing)f(the)i(DFS)f(tra)m(v)m(ersal)0
-5303 y(time.)40 b(A)31 b(subtle)e(di\016cult)m(y)g(arises)h(in)f(the)h
-(parallel)f(implemen)m(tation.)141 5416 y(When)44 b(the)h(o)m(wning)e
-(pro)s(cess)h(of)h(a)g(panel)e(starts)i(DFS)f(\(depth-\014rst)g(searc)m
-(h\))h(on)g Fv(G)3233 5383 y Fn(0)3301 5416 y Fw(built)d(so)i(far,)k
-(it)0 5529 y(only)39 b(sees)h(the)g(partial)f(graph,)j(b)s(ecause)e
-(the)g(part)g(of)g Fv(G)2068 5496 y Fn(0)2131 5529 y
-Fw(corresp)s(onding)e(to)j(the)f(busy)f(panels)f(do)m(wn)i(the)1905
-5778 y(42)p eop
-%%Page: 43 44
-43 43 bop 0 280 a Fw(elimination)39 b(tree)k(is)e(not)i(y)m(et)g
-(complete.)76 b(So)42 b(the)g(structural)f(prediction)f(at)j(this)e
-(stage)i(can)g(miss)e(some)0 393 y(nonzeros.)67 b(After)40
-b(p)s(erforming)d(the)i(up)s(dates)f(from)h(the)g(\014nished)e(sup)s
-(erno)s(des,)i(the)h(pro)s(cess)e(will)f(w)m(ait)i(for)0
-506 y(all)f(the)i(busy)e(descendan)m(t)i(panels)e(to)j(\014nish)c(and)h
-(p)s(erform)g(more)i(up)s(dates)e(from)h(them.)68 b(No)m(w,)43
-b(w)m(e)d(mak)m(e)0 619 y(a)d(conserv)-5 b(ativ)m(e)37
-b(assumption)e(that)j(all)d(these)i(busy)e(panels)h(will)e(up)s(date)h
-(the)i(curren)m(t)f(panel)g(so)h(that)g(their)0 732 y(nonzero)31
-b(structures)e(are)i(included)d(in)h(the)h(curren)m(t)h(panel.)141
-845 y(This)i(appro)m(ximate)i(sc)m(heme)g(w)m(orks)g(\014ne)f(for)g
-(most)h(problems.)51 b(Ho)m(w)m(ev)m(er,)38 b(w)m(e)d(found)f(that)h
-(this)e(conser-)0 958 y(v)-5 b(atism)29 b(ma)m(y)g(sometimes)g(cause)h
-(a)f(large)h(n)m(um)m(b)s(er)d(of)j(structural)d(zeros)j(\(they)g(are)f
-(related)g(to)h(the)f(sup)s(erno)s(de)0 1071 y(amalgamation)36
-b(p)s(erformed)e(at)i(the)g(b)s(ottom)f(of)h(the)g(elimination)c
-(tree\))37 b(to)f(b)s(e)f(included)e(and)h(they)i(in)e(turn)0
-1184 y(are)d(propagated)g(through)e(the)i(rest)g(of)f(the)h
-(factorization.)141 1297 y(W)-8 b(e)31 b(ha)m(v)m(e)g(implemen)m(ted)d
-(an)i(exact)h(structural)e(prediction)f(sc)m(heme)j(to)f(o)m(v)m
-(ercome)i(this)d(problem.)39 b(In)29 b(this)0 1409 y(sc)m(heme,)40
-b(when)35 b(eac)m(h)k(n)m(umerical)c(nonzero)i(is)f(scattered)i(in)m
-(to)f(the)g(sparse)g(accum)m(ulator)g(arra)m(y)-8 b(,)40
-b(w)m(e)d(set)h(the)0 1522 y(o)s(ccupied)27 b(\015ag)i(as)f(w)m(ell.)39
-b(Later)29 b(when)e(w)m(e)i(accum)m(ulate)g(the)f(up)s(dates)f(from)h
-(the)g(busy)f(descendan)m(t)i(panels,)e(w)m(e)0 1635
-y(c)m(hec)m(k)h(the)f(o)s(ccupied)e(\015ags)h(to)i(determine)d(the)i
-(exact)g(nonzero)g(structure.)39 b(This)25 b(sc)m(heme)i(a)m(v)m(oids)g
-(unnecessary)0 1748 y(zero)35 b(propagation)f(at)g(the)g(exp)s(ense)g
-(of)g(run)m(time)f(o)m(v)m(erhead,)j(b)s(ecause)e(setting)g(the)g(o)s
-(ccupied)f(\015ags)h(m)m(ust)g(b)s(e)0 1861 y(done)c(in)f(the)i(inner)d
-(lo)s(op)i(of)g(the)h(n)m(umeric)e(up)s(dates.)141 1974
-y(W)-8 b(e)36 b(recommend)e(that)h(the)f(user)g(use)g(the)h(appro)m
-(ximate)f(sc)m(heme)h(\(b)m(y)g(default\))f(\014rst.)52
-b(If)33 b(the)i(user)f(\014nds)0 2087 y(that)i(the)f(amoun)m(t)h(of)f
-(\014ll)e(from)i(the)g(parallel)e(factorization)j(is)e(substan)m
-(tially)f(greater)k(than)d(that)i(from)f(the)0 2200 y(sequen)m(tial)f
-(factorization,)j(he)e(can)h(then)e(use)h(the)g(accurate)i(sc)m(heme.)
-55 b(T)-8 b(o)35 b(in)m(v)m(ok)m(e)h(the)g(second)f(sc)m(heme,)i(the)0
-2313 y(user)30 b(should)e(recompile)h(the)i(co)s(de)g(b)m(y)f
-(de\014ning)e(the)j(macro:)141 2486 y Fu(-D)47 b(SCATTER)p
-626 2486 29 4 v 33 w(FOUND)0 2659 y Fw(for)30 b(the)h(C)f(prepro)s
-(cessor.)0 2893 y Fx(The)35 b(inquiry)g(function)h Fu(sp)p
-1088 2893 V 33 w(ienv\(\))0 3064 y Fw(F)-8 b(or)37 b(some)f(user)g(con)
-m(trollable)f(constan)m(ts,)k(suc)m(h)d(as)g(the)h(blo)s(c)m(king)e
-(parameters)h(and)g(the)g(size)g(of)g(the)h(global)0
-3177 y(storage)h(for)e Fv(L)g Fw(and)g Fv(U)10 b Fw(,)38
-b(Sup)s(erLU)p 1243 3177 28 4 v 31 w(MT)e(calls)g(the)g(inquiry)e
-(function)h Fu(sp)p 2609 3177 29 4 v 33 w(ienv\(\))g
-Fw(to)i(retriev)m(e)g(their)e(v)-5 b(alues.)0 3290 y(The)30
-b(declaration)g(of)g(this)g(function)f(is)141 3463 y
-Fu(int)47 b(sp)p 434 3463 V 34 w(ienv\(int)e(ispec\).)141
-3636 y Fw(The)30 b(full)e(meanings)i(of)g(the)h(returned)e(v)-5
-b(alues)30 b(are)g(as)h(follo)m(ws:)318 3792 y(isp)s(ec)26
-b(=)k(1:)42 b(the)30 b(panel)g(size)g Fv(w)540 3905 y
-Fw(=)g(2:)42 b(the)30 b(relaxation)g(parameter)h(to)g(con)m(trol)g(sup)
-s(erno)s(de)d(amalgamation)j(\()p Fv(r)s(el)r(ax)p Fw(\))540
-4018 y(=)f(3:)42 b(the)30 b(maxim)m(um)f(allo)m(w)m(able)h(size)g(for)h
-(a)f(sup)s(erno)s(de)e(\()p Fv(maxsup)p Fw(\))540 4131
-y(=)i(4:)42 b(the)30 b(minim)m(um)e(ro)m(w)i(dimension)e(for)i(2D)h
-(blo)s(c)m(king)e(to)j(b)s(e)d(used)h(\()p Fv(r)s(ow)r(bl)r(k)s
-Fw(\))540 4244 y(=)g(5:)42 b(the)30 b(minim)m(um)e(column)h(dimension)f
-(for)i(2D)h(blo)s(c)m(king)e(to)i(b)s(e)f(used)g(\()p
-Fv(col)r(bl)r(k)s Fw(\))540 4357 y(=)g(6:)42 b(size)30
-b(of)g(the)h(arra)m(y)g(to)g(store)g(the)f(v)-5 b(alues)30
-b(of)h(the)f(L)g(sup)s(erno)s(des)e(\()p Fv(nz)t(v)s(al)r
-Fw(\))540 4470 y(=)i(7:)42 b(size)30 b(of)g(the)h(arra)m(y)g(to)g
-(store)g(the)f(columns)f(in)g(U)i(\()p Fv(nz)t(v)s(al)r(=r)s(ow)r(ind)p
-Fw(\))540 4583 y(=)f(8:)42 b(size)30 b(of)g(the)h(arra)m(y)g(to)g
-(store)g(the)f(subscripts)e(of)j(the)f(L)h(sup)s(erno)s(des)d(\()p
-Fv(r)s(ow)r(ind)p Fw(\))141 4739 y(W)-8 b(e)22 b(should)d(tak)m(e)k(in)
-m(to)e(accoun)m(t)h(the)g(trade-o\013)g(b)s(et)m(w)m(een)f(cac)m(he)i
-(reuse)e(and)f(amoun)m(t)i(of)f(parallelism)d(in)h(order)0
-4852 y(to)k(set)g(the)g(appropriate)e Fv(w)k Fw(and)d
-Fv(maxsup)p Fw(.)37 b(Since)21 b(the)i(parallel)d(algorithm)i(assigns)f
-(one)i(panel)e(factorization)i(to)0 4965 y(one)f(pro)s(cess,)i(large)e
-(v)-5 b(alues)21 b(ma)m(y)h(constrain)g(concurrency)-8
-b(,)24 b(ev)m(en)e(though)g(they)g(ma)m(y)g(b)s(e)g(go)s(o)s(d)f(for)h
-(unipro)s(cessor)0 5077 y(p)s(erformance.)39 b(W)-8 b(e)30
-b(recommend)e(that)h Fv(w)h Fw(and)e Fv(maxsup)g Fw(b)s(e)f(set)i(a)g
-(bit)e(smaller)g(than)h(the)g(b)s(est)g(v)-5 b(alues)28
-b(used)f(in)0 5190 y(the)k(sequen)m(tial)e(co)s(de.)141
-5303 y(The)j(settings)h(for)g(parameters)g(2,)h(4)f(and)f(5)h(are)h
-(the)f(same)g(as)g(those)g(describ)s(ed)e(in)g(section)i(2.10.3.)50
-b(The)0 5416 y(settings)30 b(for)g(parameters)h(6,)g(7)g(and)f(8)g(are)
-h(discussed)e(in)g(section)h(3.4.2.)141 5529 y(In)c(the)h(\014le)f
-Fu(SRC/sp)p 841 5529 V 32 w(ienv.c)p Fw(,)g(w)m(e)h(pro)m(vide)f
-(sample)g(settings)h(of)g(these)g(parameters)g(for)f(sev)m(eral)h(mac)m
-(hines.)1905 5778 y(43)p eop
-%%Page: 44 45
-44 44 bop 169 292 3562 4 v 167 405 4 113 v 844 405 V
-2158 405 V 2209 371 a Fw(Programming)p 2845 405 V 144
-w(En)m(vironmen)m(t)p 3729 405 V 167 518 V 219 484 a(mak)m(e.inc)p
-844 518 V 328 w(Platforms)p 2158 518 V 925 w(Mo)s(del)p
-2845 518 V 439 w(V)-8 b(ariable)p 3729 518 V 169 521
-3562 4 v 167 634 4 113 v 219 600 a(mak)m(e.pthreads)p
-844 634 V 100 w(Mac)m(hines)31 b(with)e(POSIX)g(threads)p
-2158 634 V 99 w(pthreads)p 2845 634 V 3729 634 V 167
-747 V 219 713 a(mak)m(e.sun)p 844 747 V 307 w(Sun)g(Ultra)h(En)m
-(terprise)p 2158 747 V 482 w(Solaris)f(threads)p 2845
-747 V 3729 747 V 167 860 V 219 826 a(mak)m(e.alpha)p
-844 860 V 227 w(DEC)h(Alpha)g(Serv)m(ers)p 2158 860 V
-532 w(DECthreads)p 2845 860 V 3729 860 V 167 973 V 219
-939 a(mak)m(e.sgi)p 844 973 V 338 w(SGI)g(P)m(o)m(w)m(er)i(Challenge)p
-2158 973 V 467 w(parallel)d(C)p 2845 973 V 297 w Fu(MPC)p
-3046 939 29 4 v 34 w(NUM)p 3224 939 V 33 w(THREADS)p
-3729 973 4 113 v 167 1086 V 219 1052 a Fw(mak)m(e.origin)p
-844 1086 V 216 w(SGI/Cra)m(y)i(Origin2000)p 2158 1086
-V 456 w(parallel)e(C)p 2845 1086 V 297 w Fu(MP)p 2998
-1052 29 4 v 34 w(SET)p 3176 1052 V 34 w(NUMTHREADS)p
-3729 1086 4 113 v 167 1199 V 219 1165 a Fw(mak)m(e.cra)m(y)p
-844 1199 V 279 w(Cra)m(y)i(C90/J90)p 2158 1199 V 753
-w(microtasking)p 2845 1199 V 178 w Fu(NCPUS)p 3729 1199
-V 169 1202 3562 4 v 829 1396 a Fw(T)-8 b(able)30 b(3.2:)42
-b(Platforms)30 b(on)g(whic)m(h)f(Sup)s(erLU)p 2428 1396
-28 4 v 31 w(MT)h(w)m(as)h(tested.)0 1671 y Fr(3.5)135
-b(Example)46 b(programs)0 1874 y Fw(In)c(the)g Fu(SuperLU)p
-636 1874 29 4 v 33 w(MT/EXAMPLE/)d Fw(sub)s(directory)-8
-b(,)44 b(w)m(e)e(presen)m(t)h(a)g(few)f(sample)f(programs)h(to)h
-(illustrate)e(the)0 1987 y(complete)30 b(calling)f(sequences)h(to)g
-(use)g(the)f(simple)f(and)h(exp)s(ert)h(driv)m(ers)e(to)j(solv)m(e)f
-(systems)g(of)g(equations.)40 b(Ex-)0 2100 y(amples)25
-b(are)h(also)g(giv)m(en)g(to)h(illustrate)d(ho)m(w)i(to)g(p)s(erform)f
-(a)h(sequence)g(of)g(factorizations)h(for)e(the)h(matrices)g(with)0
-2213 y(the)33 b(same)h(sparsit)m(y)e(pattern,)i(and)e(ho)m(w)h(Sup)s
-(erLU)p 1817 2213 28 4 v 31 w(MT)g(can)g(b)s(e)g(in)m(tegrated)g(in)m
-(to)g(the)g(other)h(m)m(ultithreaded)0 2326 y(application)c(suc)m(h)i
-(that)g(threads)g(are)g(created)h(only)e(once.)46 b(A)32
-b Fu(Makefile)d Fw(is)i(pro)m(vided)g(to)h(generate)i(the)e(exe-)0
-2439 y(cutables.)45 b(A)32 b Fu(README)e Fw(\014le)h(in)g(this)g
-(directory)g(sho)m(ws)h(ho)m(w)g(to)g(run)f(these)h(examples.)45
-b(The)31 b(leading)g(commen)m(t)0 2551 y(in)e(eac)m(h)j(routine)d
-(describ)s(es)g(the)h(functionalit)m(y)f(of)i(the)f(example.)0
-2838 y Fr(3.6)135 b(P)l(orting)46 b(to)g(other)f(platforms)0
-3041 y Fw(W)-8 b(e)32 b(ha)m(v)m(e)g(pro)m(vided)d(the)i(parallel)d(in)
-m(terfaces)k(for)e(a)h(n)m(um)m(b)s(er)e(of)i(shared)f(memory)g(mac)m
-(hines.)41 b(T)-8 b(able)31 b(3.2)g(lists)0 3154 y(the)37
-b(platforms)e(on)h(whic)m(h)f(w)m(e)i(ha)m(v)m(e)h(tested)f(the)f
-(library)-8 b(,)36 b(and)g(the)h(resp)s(ectiv)m(e)f Fu(make.inc)e
-Fw(\014les.)58 b(The)36 b(most)0 3267 y(p)s(ortable)e(in)m(terface)h
-(for)f(shared)g(memory)h(programming)f(is)f(POSIX)h(threads)g([29)r(],)
-i(since)e(no)m(w)m(ada)m(ys)i(man)m(y)0 3380 y(commercial)28
-b(UNIX)h(op)s(erating)g(systems)f(ha)m(v)m(e)i(supp)s(ort)d(for)i(it.)
-39 b(W)-8 b(e)30 b(call)e(our)g(POSIX)g(threads)g(in)m(terface)i(the)0
-3492 y Fu(Pthreads)j Fw(in)m(terface.)55 b(T)-8 b(o)35
-b(use)g(this)f(in)m(terface,)j(y)m(ou)e(can)g(cop)m(y)h
-Fu(make.pthreads)31 b Fw(in)m(to)k Fu(make.inc)e Fw(and)h(then)0
-3605 y(compile)f(the)i(library)-8 b(.)50 b(In)34 b(the)g(last)h(column)
-e(of)h(T)-8 b(able)34 b(3.2,)j(w)m(e)e(list)e(the)h(run)m(time)f(en)m
-(vironmen)m(t)h(v)-5 b(ariable)33 b(to)0 3718 y(b)s(e)c(set)h(in)e
-(order)g(to)i(use)f(m)m(ultiple)e(CPUs.)40 b(F)-8 b(or)30
-b(example,)g(to)g(use)f(4)h(CPUs)e(on)i(the)f(Origin2000,)g(y)m(ou)h
-(need)f(to)0 3831 y(set)i(the)f(follo)m(wing)f(b)s(efore)h(running)e
-(the)j(program:)141 4004 y Fu(setenv)46 b(MP)p 577 4004
-29 4 v 34 w(SET)p 755 4004 V 34 w(NUMTHREADS)f(4)141
-4177 y Fw(In)22 b(the)h(source)g(co)s(de,)i(all)d(the)h(platform)f(sp)s
-(eci\014c)g(constructs)h(are)g(enclosed)g(in)e(the)i(C)g
-Fu(#ifdef)e Fw(prepro)s(cessor)0 4290 y(statemen)m(t.)53
-b(If)33 b(y)m(our)h(platform)f(is)f(di\013eren)m(t)i(from)f(an)m(y)h
-(one)g(listed)e(in)h(T)-8 b(able)33 b(3.2,)j(y)m(ou)e(need)g(to)g(go)h
-(to)f(these)0 4403 y(places)22 b(and)f(create)j(the)e(parallel)e
-(constructs)i(suitable)e(for)i(y)m(our)g(mac)m(hine.)37
-b(The)22 b(t)m(w)m(o)h(constructs,)h(concurrency)0 4516
-y(and)30 b(sync)m(hronization,)f(are)i(explained)e(in)g(the)h(follo)m
-(wing)f(t)m(w)m(o)j(subsections,)d(resp)s(ectiv)m(ely)-8
-b(.)0 4759 y Fm(3.6.1)112 b(Creating)37 b(m)m(ultiple)e(threads)0
-4931 y Fw(Righ)m(t)44 b(no)m(w,)k(only)43 b(the)h(factorization)h
-(routine)e Fu(pdgstrf)f Fw(is)h(parallelized,)i(since)e(this)g(is)g
-(the)i(most)f(time-)0 5044 y(consuming)25 b(part)i(in)e(the)h(whole)g
-(solution)f(pro)s(cess.)39 b(There)26 b(is)g(one)h(single)e(thread)h
-(of)h(con)m(trol)g(on)f(en)m(tering)h(and)0 5157 y(exiting)i
-Fu(pdgstrf)p Fw(.)39 b(Inside)28 b(this)h(routine,)g(more)i(than)e(one)
-i(thread)f(ma)m(y)g(b)s(e)g(created.)41 b(All)29 b(the)h(newly)f
-(created)0 5270 y(threads)j(b)s(egin)f(b)m(y)i(calling)e(the)i(thread)f
-(function)f Fu(pdgstrf)p 2141 5270 V 33 w(thread)f Fw(and)i(they)h(are)
-g(concurren)m(tly)f(executed)0 5382 y(on)37 b(m)m(ultiple)e(pro)s
-(cessors.)61 b(The)36 b(thread)h(function)f Fu(pdgstrf)p
-2179 5382 V 32 w(thread)g Fw(exp)s(ects)h(a)h(single)e(argumen)m(t)h
-(of)h(t)m(yp)s(e)0 5495 y Fu(void*)p Fw(,)29 b(whic)m(h)g(is)h(a)g(p)s
-(oin)m(ter)g(to)h(the)g(structure)e(con)m(taining)h(all)g(the)g(shared)
-g(data)h(ob)5 b(jects.)1905 5778 y(44)p eop
-%%Page: 45 46
-45 45 bop 449 292 3002 4 v 447 405 4 113 v 499 371 a
-Fw(Mutex)p 1059 405 V 354 w(Critical)29 b(region)p 3449
-405 V 449 408 3002 4 v 447 521 4 113 v 499 487 a Fu(ULOCK)p
-1059 521 V 371 w Fw(allo)s(cate)i(storage)h(for)e(a)h(column)e(of)i
-(matrix)e Fv(U)p 3449 521 V 447 634 V 499 600 a Fu(LLOCK)p
-1059 634 V 371 w Fw(allo)s(cate)i(storage)h(for)e(ro)m(w)h(subscripts)d
-(of)i(matrix)g Fv(L)p 3449 634 V 447 747 V 499 713 a
-Fu(LULOCK)p 1059 747 V 323 w Fw(allo)s(cate)h(storage)h(for)e(the)h(v)
--5 b(alues)29 b(of)i(the)g(sup)s(erno)s(des)p 3449 747
-V 447 860 V 499 826 a Fu(NSUPER)p 793 826 29 4 v 33 w(LOCK)p
-1059 860 4 113 v 98 w Fw(incremen)m(t)f(sup)s(erno)s(de)e(n)m(um)m(b)s
-(er)h Fu(nsuper)p 3449 860 V 447 973 V 499 939 a(SCHED)p
-745 939 29 4 v 33 w(LOCK)p 1059 973 4 113 v 146 w Fw(in)m(v)m(ok)m(e)j
-Fu(Scheduler\(\))27 b Fw(whic)m(h)i(ma)m(y)i(up)s(date)f(global)f(task)
-i(queue)p 3449 973 V 449 976 3002 4 v 1309 1170 a(T)-8
-b(able)30 b(3.3:)42 b(Fiv)m(e)30 b(m)m(utex)h(v)-5 b(ariables.)0
-1428 y Fm(3.6.2)112 b(Use)38 b(of)g(m)m(utexes)0 1599
-y Fw(Although)c(the)g(threads)h Fu(pdgstrf)p 1237 1599
-29 4 v 32 w(thread)e Fw(execute)j(indep)s(enden)m(tly)31
-b(of)k(eac)m(h)h(other,)g(they)f(share)f(the)h(same)0
-1712 y(address)j(space)h(and)g(can)g(comm)m(unicate)g(e\016cien)m(tly)g
-(through)f(shared)g(v)-5 b(ariables.)65 b(Problems)37
-b(ma)m(y)j(arise)e(if)0 1825 y(t)m(w)m(o)32 b(threads)f(try)f(to)i
-(access)g(\(at)g(least)f(one)g(is)f(to)h(mo)s(dify\))f(the)h(shared)f
-(data)h(at)h(the)f(same)g(time.)42 b(Therefore,)0 1938
-y(w)m(e)33 b(m)m(ust)f(ensure)f(that)i(all)e(memory)h(accesses)h(to)g
-(the)g(same)f(data)h(are)f(m)m(utually)f(exclusiv)m(e.)45
-b(There)32 b(are)h(\014v)m(e)0 2051 y(critical)25 b(regions)h(in)f(the)
-h(program)h(that)f(m)m(ust)h(b)s(e)e(protected)j(b)m(y)e(m)m(utual)f
-(exclusion.)38 b(Since)25 b(w)m(e)i(w)m(an)m(t)g(to)g(allo)m(w)0
-2164 y(di\013eren)m(t)g(pro)s(cessors)g(to)i(en)m(ter)f(di\013eren)m(t)
-g(critical)e(regions)i(sim)m(ultaneously)-8 b(,)26 b(w)m(e)j(use)e
-(\014v)m(e)h(m)m(utex)g(v)-5 b(ariables)27 b(as)0 2277
-y(listed)g(in)g(T)-8 b(able)28 b(3.3.)41 b(The)28 b(user)f(should)g
-(prop)s(erly)f(initialize)f(them)k(in)e(routine)g Fu(ParallelInit)p
-Fw(,)f(and)h(destro)m(y)0 2390 y(them)j(in)f(routine)h
-Fu(ParallelFinalize)p Fw(.)36 b(Both)31 b(these)g(routines)e(are)i(in)e
-(\014le)g Fu(pxgstrf)p 3035 2390 V 33 w(synch.c)p Fw(.)1905
-5778 y(45)p eop
-%%Page: 46 47
-46 46 bop 0 903 a Fs(Chapter)65 b(4)0 1318 y Fy(Distributed)77
-b(Sup)6 b(erLU)78 b(with)f(MPI)0 1567 y(\(V)-19 b(ersion)77
-b(2.0\))0 2049 y Fr(4.1)135 b(Ab)t(out)44 b Fj(SuperLU)p
-1166 2049 37 4 v 41 w(DIST)0 2252 y Fw(In)31 b(this)g(part,)h(w)m(e)g
-(describ)s(e)e(the)i Fu(SuperLU)p 1506 2252 29 4 v 33
-w(DIST)e Fw(library)g(designed)g(for)i(distributed)d(memory)i(parallel)
-f(com-)0 2365 y(puters.)47 b(The)32 b(parallel)e(programming)i(mo)s
-(del)f(is)h(SPMD.)h(The)f(library)e(is)h(implemen)m(ted)h(in)f(ANSI)h
-(C,)g(using)0 2478 y(MPI)39 b([26)r(])g(for)h(comm)m(unication,)h(and)e
-(so)h(is)e(highly)g(p)s(ortable.)67 b(W)-8 b(e)40 b(ha)m(v)m(e)h
-(tested)g(the)e(co)s(de)h(on)f(a)h(n)m(um)m(b)s(er)0
-2590 y(of)34 b(platforms,)h(including)30 b(Cra)m(y)k(T3E,)h(IBM)f(SP)-8
-b(,)35 b(and)e(Berk)m(eley)i(NO)m(W.)g(The)f(library)d(includes)h
-(routines)h(to)0 2703 y(handle)k(b)s(oth)i(real)f(and)h(complex)f
-(matrices)h(in)f(double)f(precision.)65 b(The)38 b(parallel)f(routine)h
-(names)h(for)g(the)0 2816 y(double-precision)27 b(real)j(v)m(ersion)f
-(start)i(with)d(letters)i(\\p)s(d")g(\(suc)m(h)g(as)g
-Fu(pdgstrf)p Fw(\);)f(the)h(parallel)e(routine)h(names)0
-2929 y(for)h(double-precision)e(complex)i(v)m(ersion)g(start)g(with)g
-(letters)g(\\pz")h(\(suc)m(h)g(as)f Fu(pzgstrf)p Fw(\).)0
-3216 y Fr(4.2)135 b(F)-11 b(ormats)46 b(of)f(the)g(input)g(matrices)h
-Ff(A)e Fr(and)h Ff(B)0 3419 y Fw(W)-8 b(e)35 b(pro)m(vide)d(t)m(w)m(o)j
-(input)d(in)m(terfaces)i(for)f(matrices)g Fv(A)h Fw(and)f
-Fv(B)5 b Fw(.)50 b(One)33 b(is)f(the)i(global)f(in)m(terface,)i
-(another)e(is)g(an)0 3531 y(en)m(tirely)d(distributed)d(in)m(terface.)0
-3775 y Fm(4.2.1)112 b(Global)37 b(input)0 3947 y Fw(The)d(input)e
-(matrices)i Fv(A)g Fw(and)f Fv(B)39 b Fw(are)34 b(globally)f(a)m(v)-5
-b(ailable)33 b(\(replicated\))h(on)g(all)f(the)h(pro)s(cesses.)52
-b(The)33 b(storage)0 4059 y(t)m(yp)s(e)i(for)f Fv(A)g
-Fw(is)g Fu(SLU)p 700 4059 V 33 w(NC)p Fw(,)h(as)g(in)e(sequen)m(tial)h
-(case)i(\(see)f(Section)f(2.3\).)55 b(The)34 b(user-callable)f
-(routines)g(with)g(this)0 4172 y(in)m(terface)k(all)e(ha)m(v)m(e)j(the)
-f(names)f(\\xxxxxxx)p 1556 4172 28 4 v 33 w(ABglobal".)59
-b(If)36 b(there)h(is)e(su\016cien)m(t)h(memory)-8 b(,)39
-b(this)c(in)m(terface)i(is)0 4285 y(faster)27 b(than)g(the)g
-(distributed)d(input)h(in)m(terface)j(describ)s(ed)d(in)g(the)j(next)f
-(section,)h(b)s(ecause)f(the)g(latter)g(requires)0 4398
-y(more)k(data)g(re-distribution)c(at)k(di\013eren)m(t)f(stages)h(of)g
-(the)f(algorithm.)0 4642 y Fm(4.2.2)112 b(Distributed)36
-b(input)0 4813 y Fw(Both)e(input)d(matrices)j Fv(A)f
-Fw(and)g Fv(B)k Fw(are)d(distributed)c(among)k(all)e(the)i(pro)s
-(cesses.)49 b(They)33 b(use)g(the)g(same)h(distri-)0
-4926 y(bution)e(based)i(on)f(blo)s(c)m(k)h(ro)m(ws.)51
-b(That)33 b(is,)h(eac)m(h)h(pro)s(cess)f(o)m(wns)f(a)h(blo)s(c)m(k)g
-(of)g(consecutiv)m(e)g(ro)m(ws)g(of)g Fv(A)g Fw(and)f
-Fv(B)5 b Fw(.)0 5039 y(Eac)m(h)28 b(lo)s(cal)e(part)g(of)i(sparse)e
-(matrix)g Fv(A)h Fw(is)f(stored)h(in)f(a)h(compressed)g(ro)m(w)g
-(format,)h(called)e Fu(SLU)p 3289 5039 29 4 v 34 w(NR)p
-3419 5039 V 33 w(loc)g Fw(storage)0 5152 y(t)m(yp)s(e,)31
-b(whic)m(h)e(is)g(de\014ned)g(b)s(elo)m(w.)191 5340 y
-Fu(typedef)46 b(struct)g({)382 5452 y(int)h(nnz_loc;)93
-b(/*)47 b(number)f(of)h(nonzeros)f(in)h(the)g(local)f(submatrix)g(*/)
-1905 5778 y Fw(46)p eop
-%%Page: 47 48
-47 47 bop 382 280 a Fu(int)47 b(m_loc;)189 b(/*)47 b(number)f(of)h
-(rows)g(local)f(to)i(this)e(process)g(*/)382 393 y(int)h(fst_row;)93
-b(/*)47 b(row)g(number)f(of)h(the)g(first)g(row)g(in)g(the)g(local)f
-(submatrix)f(*/)382 506 y(void)h(*nzval;)94 b(/*)47 b(pointer)f(to)h
-(array)g(of)g(nonzero)f(values,)f(packed)h(by)i(row)f(*/)382
-619 y(int)g(*rowptr;)93 b(/*)47 b(pointer)f(to)h(array)g(of)g
-(beginning)e(of)i(rows)g(in)g(nzval[])1193 732 y(and)g(colind[])93
-b(*/)382 845 y(int)47 b(*colind;)93 b(/*)47 b(pointer)f(to)h(array)g
-(of)g(column)f(indices)g(of)h(the)g(nonzeros)e(*/)191
-958 y(})i(NRformat_loc;)141 1145 y Fw(Let)31 b Fv(m)384
-1159 y Fo(i)442 1145 y Fw(b)s(e)e(the)i(n)m(um)m(b)s(er)e(of)h(ro)m(ws)
-g(o)m(wned)g(b)m(y)g(the)h Fv(i)p Fw(th)f(pro)s(cess.)40
-b(Then)29 b(the)i(global)e(ro)m(w)h(dimension)e(for)i
-Fv(A)0 1258 y Fw(is)k Fv(nr)s(ow)g Fw(=)440 1194 y Fk(P)528
-1220 y Fo(P)10 b Fn(\000)p FC(1)528 1284 y Fo(i)p FC(=0)692
-1258 y Fv(m)772 1272 y Fo(i)800 1258 y Fw(.)53 b(The)34
-b(global)g(column)g(dimension)e(is)h Fv(ncol)r Fw(.)53
-b(Both)35 b Fv(nr)s(ow)i Fw(and)d Fv(ncol)i Fw(are)f(recorded)f(in)0
-1371 y(the)d(higher)e(lev)m(el)h Fu(SuperMatrix)d Fw(data)k(structure,)
-f(see)h(Figure)f(2.2.)42 b(The)30 b(utilit)m(y)e(routine)0
-1484 y Fu(dCreate)p 342 1484 29 4 v 32 w(CompRowLoc)p
-854 1484 V 32 w(Matrix)p 1174 1484 V 33 w(dist)h Fw(can)j(help)d(the)i
-(user)f(to)i(create)g(the)f(structure)f(for)h Fv(A)p
-Fw(.)42 b(The)30 b(de\014nition)0 1597 y(of)h(this)e(routine)g(is)95
-1785 y Fu(void)47 b(dCreate_CompRowLoc_Matrix)o(_di)o(st\(S)o(uper)o
-(Mat)o(rix)41 b(*A,)47 b(int)g(m,)g(int)g(n,)1814 1898
-y(int)g(nnz_loc,)e(int)i(m_loc,)f(int)h(fst_row,)1814
-2011 y(double)f(*nzval,)g(int)g(*colind,)g(int)h(*rowptr,)1814
-2123 y(Stype_t)e(stype,)i(Dtype_t)e(dtype,)h(Mtype_t)g(mtype\);)0
-2311 y Fw(where,)30 b(the)h(\014rst)e(argumen)m(t)i(is)f(output)g(and)f
-(the)i(rest)f(are)h(inputs.)141 2424 y(The)41 b(lo)s(cal)g(full)e
-(matrix)h Fv(B)46 b Fw(is)41 b(stored)g(in)f(the)i(standard)e(F)-8
-b(ortran)42 b(st)m(yle)g(column)e(ma)5 b(jor)42 b(format,)i(with)0
-2537 y(dimension)28 b Fv(m)p 515 2537 28 4 v 32 w(l)r(oc)21
-b Fq(\002)f Fv(nr)s(hs)p Fw(,)29 b(and)h Fv(l)r(db)h
-Fw(refers)f(to)h(the)f(lo)s(cal)g(leading)f(dimension)f(in)h(the)i(lo)s
-(cal)e(storage.)0 2823 y Fr(4.3)135 b(Distributed)46
-b(data)g(structures)f(for)g Ff(L)f Fr(and)h Ff(U)0 3026
-y Fw(W)-8 b(e)34 b(distribute)d(b)s(oth)h Fv(L)h Fw(and)g
-Fv(U)43 b Fw(matrices)33 b(in)e(a)j(t)m(w)m(o-dimensional)e(blo)s(c)m
-(k-cyclic)g(fashion.)48 b(W)-8 b(e)34 b(\014rst)e(iden)m(tify)0
-3139 y(the)38 b(sup)s(erno)s(de)d(b)s(oundary)g(based)i(on)h(the)f
-(nonzero)h(structure)f(of)h Fv(L)p Fw(.)62 b(This)35
-b(sup)s(erno)s(de)h(partition)g(is)g(then)0 3252 y(used)27
-b(as)h(the)g(blo)s(c)m(k)f(partition)g(in)f(b)s(oth)h(ro)m(w)h(and)f
-(column)g(dimensions)e(for)i(b)s(oth)g Fv(L)h Fw(and)f
-Fv(U)10 b Fw(.)40 b(The)27 b(size)h(of)g(eac)m(h)0 3365
-y(blo)s(c)m(k)k(is)f(matrix)h(dep)s(enden)m(t.)46 b(It)32
-b(should)f(b)s(e)h(clear)g(that)h(all)e(the)i(diagonal)f(blo)s(c)m(ks)f
-(are)i(square)f(and)g(full)e(\(w)m(e)0 3478 y(store)38
-b(zeros)h(from)e Fv(U)48 b Fw(in)36 b(the)i(upp)s(er)e(triangle)h(of)h
-(the)g(diagonal)f(blo)s(c)m(k\),)i(whereas)f(the)g(o\013-diagonal)g
-(blo)s(c)m(ks)0 3591 y(ma)m(y)h(b)s(e)f(rectangular)h(and)f(ma)m(y)h
-(not)g(b)s(e)f(full.)63 b(The)38 b(matrix)g(in)f(Figure)h(4.1)i
-(illustrates)d(suc)m(h)h(a)h(partition.)0 3704 y(By)34
-b(blo)s(c)m(k-cyclic)g(mapping)f(w)m(e)h(mean)g(blo)s(c)m(k)g(\()p
-Fv(I)7 b(;)15 b(J)9 b Fw(\))35 b(\(0)e Fq(\024)e Fv(I)7
-b(;)15 b(J)41 b Fq(\024)31 b Fv(N)i Fq(\000)22 b Fw(1\))35
-b(is)e(mapp)s(ed)g(in)m(to)h(the)h(pro)s(cess)e(at)0
-3817 y(co)s(ordinate)23 b Fq(f)p Fv(I)31 b(mod)24 b Fu(nprow)n
-Fv(;)15 b(J)33 b(mod)24 b Fu(npcol)n Fq(g)g Fw(of)g(the)f
-Fu(nprow)5 b Fq(\002)h Fu(npcol)22 b Fw(2D)i(pro)s(cess)f(grid.)37
-b(Using)23 b(this)f(mapping,)0 3930 y(a)32 b(blo)s(c)m(k)f
-Fv(L)p Fw(\()p Fv(I)7 b(;)15 b(J)9 b Fw(\))33 b(in)e(the)g
-(factorization)i(is)e(only)f(needed)i(b)m(y)f(the)h(ro)m(w)g(of)g(pro)s
-(cesses)f(that)i(o)m(wn)e(blo)s(c)m(ks)g(in)g(ro)m(w)0
-4042 y Fv(I)7 b Fw(.)41 b(Similarly)-8 b(,)27 b(a)k(blo)s(c)m(k)f
-Fv(U)10 b Fw(\()p Fv(I)d(;)15 b(J)9 b Fw(\))31 b(is)f(only)f(needed)h
-(b)m(y)h(the)f(column)f(of)i(pro)s(cesses)f(that)h(o)m(wn)f(blo)s(c)m
-(ks)g(in)f(column)0 4155 y Fv(J)9 b Fw(.)141 4268 y(In)43
-b(this)f(2D)i(mapping,)h(eac)m(h)g(blo)s(c)m(k)e(column)f(of)i
-Fv(L)f Fw(resides)f(on)h(more)h(than)f(one)h(pro)s(cess,)i(namely)-8
-b(,)47 b(a)0 4381 y(column)41 b(of)h(pro)s(cesses.)76
-b(F)-8 b(or)43 b(example)f(in)f(Figure)h(4.1,)k(the)c(second)h(blo)s(c)
-m(k)e(column)g(of)i Fv(L)f Fw(resides)f(on)h(the)0 4494
-y(column)37 b(pro)s(cesses)i Fq(f)p Fw(1,)j(4)p Fq(g)p
-Fw(.)66 b(Pro)s(cess)38 b(4)h(only)f(o)m(wns)g(t)m(w)m(o)i(nonzero)f
-(blo)s(c)m(ks,)h(whic)m(h)e(are)h(not)g(con)m(tiguous)f(in)0
-4607 y(the)d(global)f(matrix.)52 b(The)34 b(sc)m(hema)i(on)e(the)h
-(righ)m(t)f(of)h(Figure)f(4.1)h(depicts)f(the)h(data)g(structure)f(to)i
-(store)f(the)0 4720 y(nonzero)30 b(blo)s(c)m(ks)g(on)f(a)i(pro)s(cess.)
-40 b(Besides)29 b(the)h(n)m(umerical)f(v)-5 b(alues)29
-b(stored)h(in)f(a)h(F)-8 b(ortran-st)m(yle)31 b(arra)m(y)g
-Fu(nzval[])0 4833 y Fw(in)25 b(column)h(ma)5 b(jor)27
-b(order,)g(w)m(e)g(need)g(the)g(information)e(to)i(in)m(terpret)f(the)h
-(lo)s(cation)f(and)h(ro)m(w)f(subscript)f(of)i(eac)m(h)0
-4946 y(nonzero.)43 b(This)29 b(is)h(stored)i(in)d(an)i(in)m(teger)h
-(arra)m(y)f Fu(index[])p Fw(,)f(whic)m(h)f(includes)g(the)i
-(information)f(for)g(the)i(whole)0 5059 y(blo)s(c)m(k)e(column)f(and)h
-(for)g(eac)m(h)h(individual)26 b(blo)s(c)m(k)k(in)f(it.)40
-b(Note)32 b(that)f(man)m(y)f(o\013-diagonal)h(blo)s(c)m(ks)f(are)g
-(zero)i(and)0 5172 y(hence)27 b(not)g(stored.)40 b(Neither)27
-b(do)g(w)m(e)g(store)h(the)f(zeros)h(in)e(a)h(nonzero)g(blo)s(c)m(k.)39
-b(Both)28 b(lo)m(w)m(er)f(and)g(upp)s(er)e(triangles)0
-5285 y(of)i(the)g(diagonal)g(blo)s(c)m(k)f(are)i(stored)f(in)f(the)h
-Fv(L)g Fw(data)h(structure.)39 b(A)27 b(pro)s(cess)f(o)m(wns)h
-Fq(d)p Fv(N)r(=)p Fu(npcol)p Fq(e)h Fw(blo)s(c)m(k)e(columns)0
-5397 y(of)31 b Fv(L)p Fw(,)f(so)h(it)e(needs)h Fq(d)p
-Fv(N)r(=)p Fu(nprow)p Fq(e)h Fw(pairs)e(of)i Fu(index/nzval)c
-Fw(arra)m(ys.)1905 5778 y(47)p eop
-%%Page: 48 49
-48 48 bop 810 189 a
- 17997903 12787959 0 0 37429821 28417720 startTexFig
- 810 189 a
-%%BeginDocument: lu_2d.eps
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: lu_2d.eps
-%%Creator: fig2dev Version 3.2.3 Patchlevel 
-%%CreationDate: Wed Feb  6 16:10:43 2002
-%%For: xiaoye at lotus.CS.Berkeley.EDU (Xiaoye Li,531 Soda,3-4205,)
-%%BoundingBox: 0 0 569 432
-%%Magnification: 1.0000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
-newpath 0 432 moveto 0 0 lineto 569 0 lineto 569 432 lineto closepath clip newpath
--35.0 469.0 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-
-$F2psBegin
-%%Page: 1 1
-10 setmiterlimit
- 0.06000 0.06000 sc
-% Polyline
-7.500 slw
-n 4575 2475 m 4725 2475 l 4725 2625 l 4575 2625 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 4200 2325 m 4350 2325 l 4350 2625 l 4200 2625 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 3300 2325 m 3450 2325 l 3450 2625 l 3300 2625 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 4050 2175 m 4200 2175 l 4200 2625 l 4050 2625 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 2850 3075 m 3000 3075 l 3000 3525 l 2850 3525 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 3900 4725 m 4725 4725 l 4725 5550 l 3900 5550 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 3450 4275 m 3900 4275 l 3900 4725 l 3450 4725 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 1200 5775 m 1800 5775 l 1800 6075 l 1200 6075 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 1200 3675 m 1800 3675 l 1800 3825 l 1200 3825 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 3075 2175 m 3225 2175 l 3225 2625 l 3075 2625 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 2700 2325 m 2850 2325 l 2850 2625 l 2700 2625 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 3150 3000 m 3300 3000 l 3300 3525 l 3150 3525 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 4725 5550 m 5400 5550 l 5400 6225 l 4725 6225 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 2700 3525 m 3450 3525 l 3450 4275 l 2700 4275 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 1800 2625 m 2700 2625 l 2700 3525 l 1800 3525 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 1200 2025 m 1800 2025 l 1800 2625 l 1200 2625 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 600 1425 m 1200 1425 l 1200 2025 l 600 2025 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 1200 2850 m 1800 2850 l 1800 3225 l 1200 3225 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 1200 4050 m 1800 4050 l 1800 4200 l 1200 4200 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-/Times-Roman ff 360.00 scf sf
-825 7050 m
-gs 1 -1 sc (0) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-1425 7050 m
-gs 1 -1 sc (1) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-1425 7650 m
-gs 1 -1 sc (4) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-825 7650 m
-gs 1 -1 sc (3) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-2025 7050 m
-gs 1 -1 sc (2) col0 sh gr
-/Times-Roman ff 180.00 scf sf
-6225 4050 m
-gs 1 -1 sc (...) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-3600 1875 m
-gs 1 -1 sc (1) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-4275 1875 m
-gs 1 -1 sc (2) col0 sh gr
-/Times-Roman ff 180.00 scf sf
-6225 6150 m
-gs 1 -1 sc (...) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-1425 2475 m
-gs 1 -1 sc (4) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-825 1875 m
-gs 1 -1 sc (0) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-2175 3150 m
-gs 1 -1 sc (2) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-3000 3975 m
-gs 1 -1 sc (3) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-5025 6000 m
-gs 1 -1 sc (0) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-4200 6000 m
-gs 1 -1 sc (2) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-3600 6000 m
-gs 1 -1 sc (1) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-3000 6000 m
-gs 1 -1 sc (0) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-2175 6000 m
-gs 1 -1 sc (2) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-825 6000 m
-gs 1 -1 sc (0) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-4950 5250 m
-gs 1 -1 sc (3) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-3600 5250 m
-gs 1 -1 sc (4) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-3000 5250 m
-gs 1 -1 sc (3) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-1425 5250 m
-gs 1 -1 sc (4) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-825 5250 m
-gs 1 -1 sc (3) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-1425 3975 m
-gs 1 -1 sc (4) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-3600 4650 m
-gs 1 -1 sc (1) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-4950 4650 m
-gs 1 -1 sc (0) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-4200 4650 m
-gs 1 -1 sc (2) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-3000 4650 m
-gs 1 -1 sc (0) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-2175 4650 m
-gs 1 -1 sc (2) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-1425 4650 m
-gs 1 -1 sc (1) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-825 4650 m
-gs 1 -1 sc (0) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-4950 3975 m
-gs 1 -1 sc (3) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-825 3975 m
-gs 1 -1 sc (3) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-4950 3150 m
-gs 1 -1 sc (0) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-4275 3150 m
-gs 1 -1 sc (2) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-3600 3150 m
-gs 1 -1 sc (1) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-3000 3150 m
-gs 1 -1 sc (0) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-3600 3975 m
-gs 1 -1 sc (4) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-825 3150 m
-gs 1 -1 sc (0) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-4950 2475 m
-gs 1 -1 sc (3) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-3000 2475 m
-gs 1 -1 sc (3) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-3600 2475 m
-gs 1 -1 sc (4) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-825 2475 m
-gs 1 -1 sc (3) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-4950 1875 m
-gs 1 -1 sc (0) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-1425 6000 m
-gs 1 -1 sc (1) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-2175 1875 m
-gs 1 -1 sc (2) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-3000 1875 m
-gs 1 -1 sc (0) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-1425 3150 m
-gs 1 -1 sc (1) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-1425 1875 m
-gs 1 -1 sc (1) col0 sh gr
-% Polyline
-n 8550 4875 m 8551 4873 l 8555 4870 l 8560 4864 l 8569 4855 l 8581 4843 l
- 8595 4829 l 8612 4813 l 8630 4795 l 8651 4777 l 8672 4758 l
- 8695 4740 l 8719 4723 l 8744 4707 l 8770 4692 l 8797 4678 l
- 8827 4667 l 8858 4658 l 8891 4652 l 8925 4650 l 8961 4653 l
- 8994 4660 l 9021 4670 l 9042 4683 l 9057 4698 l 9068 4713 l
- 9074 4729 l 9078 4746 l 9081 4763 l 9084 4779 l 9088 4796 l
- 9094 4812 l 9104 4827 l 9118 4842 l 9138 4855 l 9163 4865 l
- 9192 4872 l 9225 4875 l 9258 4872 l 9287 4865 l 9311 4855 l
- 9330 4842 l 9342 4827 l 9350 4812 l 9354 4796 l 9356 4779 l
- 9356 4762 l 9357 4746 l 9359 4729 l 9364 4713 l 9374 4698 l
- 9390 4683 l 9413 4670 l 9443 4660 l 9481 4653 l 9525 4650 l
- 9563 4652 l 9601 4657 l 9639 4664 l 9675 4674 l 9710 4685 l
- 9744 4698 l 9776 4712 l 9808 4727 l 9839 4743 l 9869 4760 l
- 9898 4777 l 9925 4793 l 9951 4809 l 9975 4825 l 9996 4838 l
- 10013 4850 l 10027 4859 l 10038 4866 l 10045 4871 l 10048 4874 l
-
- 10050 4875 l gs col-1 s gr 
-% Polyline
-n 6150 7125 m 6151 7123 l 6155 7120 l 6160 7114 l 6169 7104 l 6180 7092 l
- 6195 7076 l 6212 7058 l 6232 7038 l 6253 7016 l 6277 6994 l
- 6301 6971 l 6326 6949 l 6352 6928 l 6379 6908 l 6407 6889 l
- 6436 6872 l 6466 6857 l 6498 6844 l 6531 6834 l 6566 6827 l
- 6600 6825 l 6636 6828 l 6669 6836 l 6696 6848 l 6718 6863 l
- 6735 6880 l 6746 6899 l 6754 6919 l 6758 6939 l 6761 6960 l
- 6763 6981 l 6764 7002 l 6766 7023 l 6770 7043 l 6777 7063 l
- 6787 7081 l 6801 7097 l 6820 7110 l 6843 7120 l 6870 7126 l
- 6900 7125 l 6930 7118 l 6957 7106 l 6980 7089 l 6999 7070 l
- 7013 7049 l 7023 7026 l 7030 7003 l 7034 6979 l 7036 6955 l
- 7038 6931 l 7039 6907 l 7042 6884 l 7046 6860 l 7054 6837 l
- 7065 6816 l 7082 6795 l 7104 6778 l 7131 6763 l 7164 6754 l
- 7200 6750 l 7232 6752 l 7263 6759 l 7294 6770 l 7323 6784 l
- 7352 6801 l 7379 6819 l 7405 6840 l 7430 6862 l 7455 6886 l
- 7478 6910 l 7501 6935 l 7523 6961 l 7545 6986 l 7565 7011 l
- 7583 7035 l 7600 7056 l 7614 7075 l 7626 7092 l 7635 7104 l
- 7642 7114 l 7646 7120 l 7649 7123 l
- 7650 7125 l gs col-1 s gr 
-/Times-Roman ff 300.00 scf sf
-2700 7200 m
-gs 1 -1 sc (Process Mesh) col-1 sh gr
-/Times-Roman ff 300.00 scf sf
-2100 825 m
-gs 1 -1 sc (Global Matrix) col-1 sh gr
-/Times-Roman ff 750.00 scf sf
-1725 5025 m
-gs 1 -1 sc (L) col-1 sh gr
-/Times-Roman ff 360.00 scf sf
-2175 2475 m
-gs 1 -1 sc (5) col-1 sh gr
-% Polyline
- [60] 0 sd
-n 7650 6375 m
- 8550 4275 l gs col-1 s gr  [] 0 sd
-/Times-Roman ff 360.00 scf sf
-4200 3975 m
-gs 1 -1 sc (5) col-1 sh gr
-/Times-Roman ff 360.00 scf sf
-2175 5250 m
-gs 1 -1 sc (5) col-1 sh gr
-/Times-Roman ff 360.00 scf sf
-4200 5250 m
-gs 1 -1 sc (5) col-1 sh gr
-/Times-Roman ff 750.00 scf sf
-3675 3225 m
-gs 1 -1 sc (U) col-1 sh gr
-% Polyline
- [60] 0 sd
-n 7650 5025 m
- 8550 2775 l gs col-1 s gr  [] 0 sd
-% Polyline
-n 600 1425 m
- 5400 6225 l gs col-1 s gr 
-/Times-Roman ff 360.00 scf sf
-4200 2475 m
-gs 1 -1 sc (5) col-1 sh gr
-% Polyline
- [60] 0 sd
-n 7650 4275 m
- 8550 2775 l gs col-1 s gr  [] 0 sd
-% Polyline
- [60] 0 sd
-n 7650 3075 m
- 8550 1425 l gs col-1 s gr  [] 0 sd
-% Polyline
-n 8550 4275 m
- 10050 4275 l gs col-1 s gr 
-% Polyline
- [60] 0 sd
-n 9750 1425 m
- 9750 4725 l gs col-1 s gr  [] 0 sd
-% Polyline
- [60] 0 sd
-n 9450 1425 m
- 9450 4650 l gs col-1 s gr  [] 0 sd
-% Polyline
- [60] 0 sd
-n 9150 1425 m
- 9150 4875 l gs col-1 s gr  [] 0 sd
-% Polyline
- [60] 0 sd
-n 8850 1425 m
- 8850 4650 l gs col-1 s gr  [] 0 sd
-% Polyline
-n 10050 1425 m
- 10050 4875 l gs col-1 s gr 
-% Polyline
-n 8550 1425 m
- 8550 4875 l gs col-1 s gr 
-% Polyline
-n 8550 2775 m
- 10050 2775 l gs col-1 s gr 
-% Polyline
-n 8550 1425 m
- 10050 1425 l gs col-1 s gr 
-% Polyline
-n 6150 5025 m
- 7650 5025 l gs col-1 s gr 
-% Polyline
-n 6150 3075 m
- 7650 3075 l gs col-1 s gr 
-% Polyline
-30.000 slw
-n 6150 6375 m
- 7650 6375 l gs col-1 s gr 
-% Polyline
-n 6150 4275 m
- 7650 4275 l gs col-1 s gr 
-% Polyline
-60.000 slw
-n 6150 2325 m
- 7650 2325 l gs col-1 s gr 
-% Polyline
-7.500 slw
-n 6150 1425 m
- 7650 1425 l gs col-1 s gr 
-% Polyline
-n 7650 1425 m
- 7650 7125 l gs col-1 s gr 
-% Polyline
-n 6150 1425 m
- 6150 7125 l gs col-1 s gr 
-% Polyline
- [60] 0 sd
-n 600 7200 m
- 2400 7200 l gs col-1 s gr  [] 0 sd
-% Polyline
- [60] 0 sd
-n 1800 6600 m
- 1800 7800 l gs col-1 s gr  [] 0 sd
-% Polyline
- [60] 0 sd
-n 1200 6600 m
- 1200 7800 l gs col-1 s gr  [] 0 sd
-/Times-Roman ff 360.00 scf sf
-2025 7650 m
-gs 1 -1 sc (5) col-1 sh gr
-% Polyline
-n 600 1425 m 5400 1425 l 5400 6225 l 600 6225 l
- cp gs col-1 s gr 
-% Polyline
- [60] 0 sd
-n 600 2625 m
- 5400 2625 l gs col-1 s gr  [] 0 sd
-% Polyline
-n 1200 1425 m
- 1200 6225 l gs col-1 s gr 
-% Polyline
- [60] 0 sd
-n 2700 2625 m
- 4575 2625 l gs col-1 s gr  [] 0 sd
-% Polyline
-n 4571 5400 m 4579 5400 l gs col-1 s gr
-% Polyline
- [60] 0 sd
-n 600 3525 m
- 5400 3525 l gs col-1 s gr  [] 0 sd
-% Polyline
- [60] 0 sd
-n 600 4275 m
- 5400 4275 l gs col-1 s gr  [] 0 sd
-% Polyline
- [60] 0 sd
-n 600 4725 m
- 5400 4725 l gs col-1 s gr  [] 0 sd
-% Polyline
- [60] 0 sd
-n 600 5550 m
- 5400 5550 l gs col-1 s gr  [] 0 sd
-% Polyline
- [60] 0 sd
-n 4725 6225 m
- 4725 1425 l gs col-1 s gr  [] 0 sd
-% Polyline
- [60] 0 sd
-n 600 2025 m
- 5400 2025 l gs col-1 s gr  [] 0 sd
-% Polyline
-n 1800 1425 m
- 1800 6225 l gs col-1 s gr 
-/Times-Roman ff 360.00 scf sf
-2175 3975 m
-gs 1 -1 sc (5) col-1 sh gr
-% Polyline
- [60] 0 sd
-n 2700 6225 m
- 2700 1425 l gs col-1 s gr  [] 0 sd
-% Polyline
- [60] 0 sd
-n 3450 6225 m
- 3450 1425 l gs col-1 s gr  [] 0 sd
-/Times-Roman ff 300.00 scf sf
-6600 1275 m
-gs 1 -1 sc (index) col-1 sh gr
-/Times-Roman ff 300.00 scf sf
-5850 825 m
-gs 1 -1 sc (Storage of block column of L) col-1 sh gr
-/Times-Roman ff 210.00 scf sf
-6225 1725 m
-gs 1 -1 sc (# of blocks) col-1 sh gr
-/Times-Roman ff 300.00 scf sf
-8850 1275 m
-gs 1 -1 sc (nzval) col-1 sh gr
-/Times-Roman ff 210.00 scf sf
-6225 2625 m
-gs 1 -1 sc (block #) col-1 sh gr
-/Times-Roman ff 210.00 scf sf
-6225 3300 m
-gs 1 -1 sc (row subscripts) col-1 sh gr
-/Times-Roman ff 210.00 scf sf
-6225 3600 m
-gs 1 -1 sc (i1) col-1 sh gr
-/Times-Roman ff 210.00 scf sf
-6225 3870 m
-gs 1 -1 sc (i2) col-1 sh gr
-/Times-Roman ff 210.00 scf sf
-6225 2925 m
-gs 1 -1 sc (# of  full  rows) col-1 sh gr
-/Times-Roman ff 300.00 scf sf
-6600 4875 m
-gs 1 -1 sc ( ) col-1 sh gr
-/Times-Roman ff 210.00 scf sf
-6225 4575 m
-gs 1 -1 sc (block #) col-1 sh gr
-/Times-Roman ff 210.00 scf sf
-6225 5250 m
-gs 1 -1 sc (row subscripts) col-1 sh gr
-/Times-Roman ff 210.00 scf sf
-6225 5550 m
-gs 1 -1 sc (i1) col-1 sh gr
-/Times-Roman ff 210.00 scf sf
-6225 5820 m
-gs 1 -1 sc (i2) col-1 sh gr
-/Times-Roman ff 210.00 scf sf
-6225 4875 m
-gs 1 -1 sc (# of  full  rows) col-1 sh gr
-/Times-Roman ff 210.00 scf sf
-6225 2100 m
-gs 1 -1 sc (LDA  of  nzval) col-1 sh gr
-% Polyline
- [60] 0 sd
-n 3900 6225 m
- 3900 1425 l gs col-1 s gr  [] 0 sd
-% Polyline
-n 600 6600 m 2400 6600 l 2400 7800 l 600 7800 l
- cp gs col-1 s gr 
-$F2psEnd
-rs
-
-%%EndDocument
-
- endTexFig
- 50 2005 a Fw(Figure)30 b(4.1:)42 b(The)30 b(2)g(blo)s(c)m(k-cyclic)g
-(la)m(y)m(out)h(and)f(the)h(data)g(structure)f(to)h(store)g(a)g(lo)s
-(cal)e(blo)s(c)m(k)h(column)f(of)i Fv(L)p Fw(.)141 2280
-y(F)-8 b(or)34 b Fv(U)10 b Fw(,)34 b(w)m(e)f(use)g(a)g(ro)m(w)g(orien)m
-(ted)g(storage)h(for)f(the)g(blo)s(c)m(k)f(ro)m(ws)h(o)m(wned)g(b)m(y)g
-(a)g(pro)s(cess,)h(although)e(for)h(the)0 2393 y(n)m(umerical)24
-b(v)-5 b(alues)24 b(within)f(eac)m(h)k(blo)s(c)m(k)d(w)m(e)i(still)d
-(use)i(column)f(ma)5 b(jor)26 b(order.)38 b(Similar)22
-b(to)k Fv(L)p Fw(,)h(w)m(e)e(also)h(use)f(a)g(pair)0
-2506 y(of)30 b Fu(index/nzval)d Fw(arra)m(ys)j(to)g(store)g(a)h(blo)s
-(c)m(k)e(ro)m(w)h(of)g Fv(U)10 b Fw(.)40 b(Due)30 b(to)g(asymmetry)-8
-b(,)31 b(eac)m(h)g(nonzero)f(blo)s(c)m(k)f(in)g Fv(U)39
-b Fw(has)0 2619 y(the)26 b(skyline)e(structure)i(as)g(sho)m(wn)g(in)e
-(Figure)i(4.1)h(\(see)g([5)q(])f(for)f(details)h(on)f(the)i(skyline)d
-(structure\).)39 b(Therefore,)0 2732 y(the)34 b(organization)g(of)f
-(the)h Fu(index[])e Fw(arra)m(y)i(is)f(di\013eren)m(t)g(from)g(that)i
-(for)e Fv(L)p Fw(,)i(whic)m(h)d(w)m(e)i(omit)g(sho)m(wing)e(in)h(the)0
-2845 y(\014gure.)0 3131 y Fr(4.4)135 b(Pro)t(cess)45
-b(grid)g(and)g(MPI)f(comm)l(unicator)0 3334 y Fw(All)31
-b(MPI)i(applications)e(b)s(egin)g(with)g(a)i(default)f(comm)m
-(unication)g(domain)f(that)i(includes)e(all)g(pro)s(cesses,)i(sa)m(y)0
-3447 y Fv(N)73 3461 y Fo(p)113 3447 y Fw(,)28 b(of)g(this)e(parallel)g
-(job.)39 b(The)27 b(default)g(comm)m(unicator)h Fu(MPI)p
-2178 3447 29 4 v 33 w(COMM)p 2403 3447 V 34 w(WORLD)e
-Fw(represen)m(ts)h(this)f(comm)m(unication)0 3560 y(domain.)39
-b(The)28 b Fv(N)616 3574 y Fo(p)684 3560 y Fw(pro)s(cesses)h(are)g
-(iden)m(ti\014ed)e(as)h(a)h(linear)e(arra)m(y)i(of)g(pro)s(cess)f(IDs)h
-(in)e(the)i(range)g(0)41 b Fv(:)15 b(:)g(:)42 b(N)3686
-3574 y Fo(p)3742 3560 y Fq(\000)16 b Fw(1.)0 3803 y Fm(4.4.1)112
-b(2D)38 b(pro)s(cess)g(grid)0 3975 y Fw(F)-8 b(or)30
-b Fu(SuperLU)p 504 3975 V 33 w(DIST)e Fw(library)-8 b(,)28
-b(w)m(e)j(create)g(a)f(new)f(pro)s(cess)g(group)g(deriv)m(ed)g(from)g
-(an)h(existing)f(group)g(using)f Fv(N)3860 3989 y Fo(g)0
-4088 y Fw(pro)s(cesses.)61 b(There)37 b(is)f(a)i(go)s(o)s(d)f(reason)g
-(to)h(use)f(a)h(new)e(group)h(rather)g(than)g Fu(MPI)p
-2891 4088 V 33 w(COMM)p 3116 4088 V 34 w(WORLD)p Fw(,)f(that)i(is,)g
-(the)0 4201 y(message)30 b(passing)d(calls)h(of)g(the)h(Sup)s(erLU)e
-(library)f(will)f(b)s(e)j(isolated)g(from)g(those)h(in)f(other)g
-(libraries)e(or)j(in)e(the)0 4314 y(user's)34 b(co)s(de.)53
-b(F)-8 b(or)35 b(b)s(etter)g(scalabilit)m(y)e(of)i(the)f
-Fv(LU)44 b Fw(factorization,)37 b(w)m(e)e(map)f(the)h(1D)g(arra)m(y)g
-(of)g Fv(N)3463 4328 y Fo(g)3537 4314 y Fw(pro)s(cesses)0
-4426 y(in)m(to)30 b(a)g(logical)f(2D)h(pro)s(cess)f(grid.)40
-b(This)27 b(grid)i(will)e(ha)m(v)m(e)k Fu(nprow)d Fw(pro)s(cess)h(ro)m
-(ws)h(and)f Fu(npcol)f Fw(pro)s(cess)h(columns,)0 4539
-y(suc)m(h)g(that)i Fu(nprow)17 b Fq(\003)j Fu(npcol)k
-Fw(=)h Fv(N)1156 4553 y Fo(g)1196 4539 y Fw(.)40 b(A)30
-b(pro)s(cess)f(can)h(b)s(e)f(referenced)h(either)f(b)m(y)h(its)f(rank)g
-(in)g(the)h(new)f(group)g(or)0 4652 y(b)m(y)e(its)f(co)s(ordinates)g
-(within)f(the)i(grid.)38 b(The)26 b(routine)g Fu(superlu)p
-2214 4652 V 33 w(gridinit)e Fw(maps)i(already-existing)g(pro)s(cesses)0
-4765 y(to)31 b(a)g(2D)g(pro)s(cess)f(grid.)191 4978 y
-Fu(superlu_gridinit\(MPI_Com)o(m)42 b(Bcomm,)k(int)h(nprow,)f(int)h
-(npcol,)f(gridinfo_t)f(*grid\);)141 5190 y Fw(This)32
-b(pro)s(cess)g(grid)h(will)d(use)j(the)h(\014rst)e Fu(nprow)21
-b Fq(\003)i Fu(npcol)31 b Fw(pro)s(cesses)j(from)e(the)i(base)f(MPI)h
-(comm)m(unicator)0 5303 y Fu(Bcomm)p Fw(,)27 b(and)g(assign)g(them)h
-(to)g(the)g(grid)e(in)h(a)h(ro)m(w-ma)5 b(jor)28 b(ordering.)38
-b(The)28 b(input)d(argumen)m(t)j Fu(Bcomm)f Fw(is)f(an)i(MPI)0
-5416 y(comm)m(unicator)h(represen)m(ting)f(the)h(existing)f(base)h
-(group)f(up)s(on)f(whic)m(h)h(the)h(new)f(group)g(will)e(b)s(e)j
-(formed.)39 b(F)-8 b(or)1905 5778 y(48)p eop
-%%Page: 49 50
-49 49 bop 0 280 a Fw(example,)28 b(it)f(can)h(b)s(e)f
-Fu(MPI)p 902 280 29 4 v 34 w(COMM)p 1128 280 V 33 w(WORLD)p
-Fw(.)f(The)h(output)h(argumen)m(t)g Fu(grid)e Fw(represen)m(ts)i(the)f
-(deriv)m(ed)g(group)g(to)i(b)s(e)0 393 y(used)h(in)f
-Fu(SuperLU)p 656 393 V 32 w(DIST)p Fw(.)h Fu(Grid)f Fw(is)g(a)i
-(structure)f(con)m(taining)g(the)g(follo)m(wing)f(\014elds:)143
-561 y Fu(struct)46 b({)334 674 y(MPI_Comm)g(comm;)380
-b(/*)47 b(MPI)g(communicator)e(for)i(this)f(group)h(*/)334
-787 y(int)g(iam;)667 b(/*)47 b(my)g(process)f(rank)h(in)g(this)g(group)
-142 b(*/)334 900 y(int)47 b(nprow;)571 b(/*)47 b(number)f(of)i(process)
-d(rows)477 b(*/)334 1013 y(int)47 b(npcol;)571 b(/*)47
-b(number)f(of)i(process)d(columns)333 b(*/)334 1125 y(superlu_scope_t)
-44 b(rscp;)i(/*)h(process)f(row)h(scope)715 b(*/)334
-1238 y(superlu_scope_t)44 b(cscp;)i(/*)h(process)f(column)g(scope)572
-b(*/)143 1351 y(})48 b(grid;)141 1519 y Fw(In)34 b(the)g
-Fv(LU)44 b Fw(factorization,)36 b(some)e(comm)m(unications)g(o)s(ccur)g
-(only)f(among)h(the)h(pro)s(cesses)f(in)f(a)h(ro)m(w)g(\(col-)0
-1632 y(umn\),)25 b(not)g(among)g(all)f(pro)s(cesses.)38
-b(F)-8 b(or)26 b(this)d(purp)s(ose,)h(w)m(e)h(in)m(tro)s(duce)f(t)m(w)m
-(o)i(pro)s(cess)e(subgroups,)g(namely)g Fu(rscp)0 1745
-y Fw(\(ro)m(w)31 b(scop)s(e\))h(and)e Fu(cscp)g Fw(\(column)g(scop)s
-(e\).)43 b(F)-8 b(or)32 b Fu(rscp)e Fw(\()p Fu(cscp)p
-Fw(\))h(subgroup,)e(all)h(pro)s(cesses)h(in)f(a)h(ro)m(w)g(\(column\))0
-1858 y(participate)f(in)f(the)h(comm)m(unication.)141
-1971 y(The)j(macros)h Fu(MYROW\(iam,)45 b(grid\))33 b
-Fw(and)g Fu(MYCOL\(iam,)45 b(grid\))32 b Fw(giv)m(e)i(the)g(ro)m(w)g
-(and)f(column)f(co)s(ordinates)0 2083 y(in)d(the)i(2D)g(grid)e(of)h
-(the)h(pro)s(cess)f(who)g(has)g(rank)g Fu(iam)p Fw(.)124
-2320 y Fp(NOTE:)e(A)n(l)5 b(l)29 b(pr)-5 b(o)g(c)g(esses)32
-b(in)d(the)h(b)-5 b(ase)30 b(gr)-5 b(oup,)31 b(including)f(those)g(not)
-g(in)g(the)f(new)h(gr)-5 b(oup,)31 b(must)f(c)-5 b(al)5
-b(l)30 b(this)h(grid)0 2433 y(cr)-5 b(e)g(ation)35 b(r)-5
-b(outine.)45 b(This)34 b(is)f(r)-5 b(e)g(quir)g(e)g(d)35
-b(by)f(the)f(MPI)g(r)-5 b(outine)34 b Fu(MPI)p 2294 2433
-V 34 w(Comm)p 2520 2433 V 33 w(create)e Fp(to)i(cr)-5
-b(e)g(ate)34 b(a)g(new)f(c)-5 b(ommuni-)0 2546 y(c)g(ator.)0
-2785 y Fm(4.4.2)112 b(Arbitrary)36 b(grouping)i(of)f(pro)s(cesses)0
-2957 y Fw(It)k(is)f(sometimes)h(desirable)e(to)j(divide)d(up)h(the)h
-(pro)s(cesses)f(in)m(to)h(sev)m(eral)h(subgroups,)g(eac)m(h)g(of)f
-(whic)m(h)f(p)s(er-)0 3070 y(forms)35 b(indep)s(enden)m(t)e(w)m(ork)i
-(of)h(a)f(single)f(application.)54 b(In)35 b(this)f(situation,)i(w)m(e)
-f(cannot)h(simply)d(use)i(the)h(\014rst)0 3183 y Fu(nprow)20
-b Fq(\003)h Fu(npcol)30 b Fw(pro)s(cesses)h(to)i(de\014ne)d(the)i
-(grid.)43 b(A)32 b(more)f(sophisticated)g(pro)s(cess-to-grid)g(mapping)
-f(routine)0 3296 y Fu(superlu)p 342 3296 V 32 w(gridmap)f
-Fw(is)g(designed)g(to)j(create)f(a)g(grid)e(with)g(pro)s(cesses)i(of)f
-(arbitrary)f(ranks.)191 3484 y Fu(superlu_gridmap\(MPI_Comm)41
-b(Bcomm,)46 b(int)h(nprow,)f(int)h(npcol,)955 3597 y(int)f(usermap[],)f
-(int)i(ldumap,)f(gridinfo_t)f(*grid\);)141 3786 y Fw(The)26
-b(arra)m(y)h Fu(usermap[])c Fw(con)m(tains)k(the)f(pro)s(cesses)g(to)h
-(b)s(e)f(used)f(in)g(the)i(newly)e(created)i(grid.)38
-b Fu(usermap[])24 b Fw(is)0 3899 y(indexed)19 b(lik)m(e)g(a)i(F)-8
-b(ortran-st)m(yle)22 b(2D)f(arra)m(y)f(with)f Fu(ldumap)g
-Fw(as)h(the)h(leading)e(dimension.)35 b(So)20 b Fu(usermap[i+j)p
-Fq(\003)p Fu(ldumap])0 4011 y Fw(\(i.e.,)44 b Fu(usermap\(i,j\))38
-b Fw(in)i(F)-8 b(ortran)41 b(notation\))h(holds)d(the)i(pro)s(cess)g
-(rank)f(to)i(b)s(e)e(placed)h(in)e Fq(f)p Fw(i,)44 b(j)p
-Fq(g)d Fw(p)s(osition)0 4124 y(of)g(the)f(2D)h(pro)s(cess)f(grid.)70
-b(After)40 b(grid)g(creation,)j(this)c(subset)h(of)h(pro)s(cesses)f(is)
-f(logically)g(n)m(um)m(b)s(ered)g(in)h(a)0 4237 y(consisten)m(t)46
-b(manner)e(with)g(the)h(initial)e(set)i(of)h(pro)s(cesses;)53
-b(that)45 b(is,)k(they)c(ha)m(v)m(e)h(the)g(ranks)e(in)g(the)i(range)0
-4350 y(0)f Fv(:)15 b(:)g(:)46 b Fu(nprow)20 b Fq(\003)i
-Fu(npcol)f Fq(\000)g Fw(1)34 b(in)d(the)i(new)f(grid.)47
-b(F)-8 b(or)34 b(example,)f(if)f(w)m(e)h(w)m(an)m(t)h(to)g(map)e(6)h
-(pro)s(cesses)g(with)f(ranks)0 4463 y(11)49 b Fv(:)15
-b(:)g(:)49 b Fw(16)36 b(in)m(to)f(a)h(2)24 b Fq(\002)f
-Fw(3)35 b(grid,)g(w)m(e)h(de\014ne)e Fu(usermap)d Fw(=)i
-Fq(f)p Fw(11)p Fv(;)15 b Fw(14)p Fv(;)g Fw(12)p Fv(;)g
-Fw(15)p Fv(;)g Fw(13)q Fv(;)g Fw(16)q Fq(g)41 b Fw(and)35
-b Fu(ldumap)c Fw(=)i(2.)55 b(Suc)m(h)35 b(a)0 4576 y(mapping)29
-b(is)g(sho)m(wn)h(b)s(elo)m(w)1809 4736 y(0)146 b(1)f(2)p
-1737 4773 572 4 v 1641 4849 a(0)p 1735 4883 4 113 v 101
-w(11)p 1926 4883 V 100 w(12)p 2116 4883 V 101 w(13)p
-2307 4883 V 1737 4886 572 4 v 1641 4962 a(1)p 1735 4995
-4 113 v 101 w(14)p 1926 4995 V 100 w(15)p 2116 4995 V
-101 w(16)p 2307 4995 V 1737 4999 572 4 v 137 5190 a Fp(NOTE:)39
-b(A)n(l)5 b(l)39 b(pr)-5 b(o)g(c)g(esses)42 b(in)e(the)h(b)-5
-b(ase)40 b(gr)-5 b(oup,)43 b(including)d(those)h(not)g(in)f(the)g(new)g
-(gr)-5 b(oup,)43 b(must)e(c)-5 b(al)5 b(l)40 b(this)0
-5303 y(r)-5 b(outine.)141 5416 y Fu(Superlu)p 483 5416
-29 4 v 33 w(gridinit)39 b Fw(simply)h(calls)h Fu(superlu)p
-1792 5416 V 33 w(gridmap)f Fw(with)h Fu(usermap[])e Fw(holding)h(the)j
-(\014rst)e Fu(nprow)27 b Fq(\003)0 5529 y Fu(npcol)i
-Fw(pro)s(cess)h(ranks.)1905 5778 y(49)p eop
-%%Page: 50 51
-50 50 bop 0 280 a Fr(4.5)135 b(Basic)45 b(steps)h(to)f(solv)l(e)h(a)f
-(linear)h(system)0 483 y Fw(In)39 b(this)h(section,)j(w)m(e)d(use)g(a)h
-(complete)f(sample)g(program)g(to)g(illustrate)f(the)h(basic)g(steps)g
-(required)e(to)j(use)0 596 y Fu(SuperLU)p 342 596 29
-4 v 32 w(DIST)p Fw(.)36 b(This)g(program)g(is)g(listed)g(b)s(elo)m(w,)i
-(and)e(is)g(also)h(a)m(v)-5 b(ailable)36 b(as)h Fu(EXAMPLE/pddrive.c)32
-b Fw(in)k(the)0 709 y(source)48 b(co)s(de)g(distribution.)89
-b(All)46 b(the)i(routines)e(m)m(ust)i(include)d(the)j(header)g(\014le)e
-Fu(superlu)p 3375 709 V 33 w(ddefs.h)g Fw(\(or)0 822
-y Fu(superlu)p 342 822 V 32 w(zdefs.h)p Fw(,)32 b(the)h(complex)f(coun)
-m(terpart\))i(whic)m(h)d(con)m(tains)i(the)g(de\014nitions)d(of)j(the)g
-(data)g(t)m(yp)s(es,)h(the)0 935 y(macros)d(and)f(the)g(function)f
-(protot)m(yp)s(es.)0 1126 y Fu(#include)46 b(<math.h>)0
-1238 y(#include)g("superlu_ddefs.h")0 1464 y(main\(int)g(argc,)g(char)h
-(*argv[]\))0 1577 y(/*)48 1690 y(*)g(Purpose)48 1803
-y(*)g(=======)48 1916 y(*)48 2029 y(*)g(The)g(driver)f(program)g
-(PDDRIVE.)48 2142 y(*)48 2255 y(*)h(This)g(example)f(illustrates)e(how)
-j(to)g(use)g(PDGSSVX)f(with)h(the)g(full)48 2368 y(*)g(\(default\))e
-(options)h(to)h(solve)g(a)g(linear)f(system.)48 2480
-y(*)48 2593 y(*)h(Five)g(basic)f(steps)h(are)f(required:)48
-2706 y(*)143 b(1.)47 b(Initialize)e(the)i(MPI)g(environment)d(and)j
-(the)g(SuperLU)f(process)g(grid)48 2819 y(*)143 b(2.)47
-b(Set)g(up)g(the)g(input)f(matrix)g(and)h(the)g(right-hand)e(side)48
-2932 y(*)143 b(3.)47 b(Set)g(the)g(options)e(argument)48
-3045 y(*)143 b(4.)47 b(Call)f(pdgssvx)48 3158 y(*)143
-b(5.)47 b(Release)f(the)h(process)e(grid)i(and)g(terminate)e(the)i(MPI)
-g(environment)48 3271 y(*)48 3384 y(*)g(On)g(the)g(Cray)g(T3E,)g(the)f
-(program)g(may)h(be)g(run)g(by)g(typing)48 3497 y(*)190
-b(mpprun)46 b(-n)i(<procs>)d(pddrive)h(-r)h(<proc)g(rows>)f(-c)h(<proc)
-g(columns>)e(<input_file>)48 3610 y(*)48 3723 y(*/)0
-3835 y({)191 3948 y(superlu_options_t)e(options;)191
-4061 y(SuperLUStat_t)h(stat;)191 4174 y(SuperMatrix)h(A;)191
-4287 y(ScalePermstruct_t)e(ScalePermstruct;)191 4400
-y(LUstruct_t)i(LUstruct;)191 4513 y(SOLVEstruct_t)f(SOLVEstruct;)191
-4626 y(gridinfo_t)h(grid;)191 4739 y(double)141 b(*berr;)191
-4852 y(double)g(*b,)47 b(*xtrue;)191 4965 y(int_t)189
-b(m,)48 b(n,)f(nnz;)191 5077 y(int_t)189 b(nprow,)47
-b(npcol;)191 5190 y(int)285 b(iam,)47 b(info,)f(ldb,)h(ldx,)g(nrhs;)191
-5303 y(char)237 b(trans[1];)191 5416 y(char)g(**cpp,)47
-b(c;)191 5529 y(FILE)g(*fp,)f(*fopen\(\);)1905 5778 y
-Fw(50)p eop
-%%Page: 51 52
-51 51 bop 191 393 a Fu(nprow)46 b(=)i(1;)95 b(/*)47 b(Default)f
-(process)f(rows.)285 b(*/)191 506 y(npcol)46 b(=)i(1;)95
-b(/*)47 b(Default)f(process)f(columns.)141 b(*/)191 619
-y(nrhs)47 b(=)g(1;)143 b(/*)47 b(Number)f(of)h(right-hand)e(side.)h(*/)
-191 845 y(/*)h(-------------------------)o(---)o(----)o(----)o(---)o
-(----)o(----)o(---)o(----)o(----)o(--)334 958 y(INITIALIZE)e(MPI)i
-(ENVIRONMENT.)334 1071 y(-------------------------)o(---)o(----)o(----)
-o(---)o(----)o(----)o(---)o(----)o(----)o(--*)o(/)191
-1184 y(MPI_Init\()e(&argc,)h(&argv)h(\);)191 1409 y(/*)g(Parse)f
-(command)g(line)h(argv[].)f(*/)191 1522 y(for)h(\(cpp)f(=)i(argv+1;)e
-(*cpp;)g(++cpp\))g({)382 1635 y(if)h(\()g(**cpp)g(==)g('-')g(\))g({)573
-1748 y(c)g(=)h(*\(*cpp+1\);)573 1861 y(++cpp;)573 1974
-y(switch)e(\(c\))h({)668 2087 y(case)g('h':)859 2200
-y(printf\("Options:\\n"\);)859 2313 y(printf\("\\t-r)e(<int>:)h
-(process)f(rows)190 b(\(default)46 b(\045d\)\\n",)g(nprow\);)859
-2426 y(printf\("\\t-c)f(<int>:)h(process)f(columns)h(\(default)g
-(\045d\)\\n",)g(npcol\);)859 2539 y(exit\(0\);)859 2652
-y(break;)668 2764 y(case)h('r':)f(nprow)h(=)g(atoi\(*cpp\);)859
-2877 y(break;)668 2990 y(case)g('c':)f(npcol)h(=)g(atoi\(*cpp\);)859
-3103 y(break;)573 3216 y(})382 3329 y(})g(else)g({)g(/*)h(Last)e(arg)h
-(is)g(considered)e(a)j(filename)d(*/)573 3442 y(if)i(\()g(!\(fp)g(=)g
-(fopen\(*cpp,)e("r"\)\))i(\))g({)764 3555 y(ABORT\("File)d(does)j(not)g
-(exist"\);)573 3668 y(})573 3781 y(break;)382 3894 y(})191
-4006 y(})191 4232 y(/*)g(-------------------------)o(---)o(----)o(----)
-o(---)o(----)o(----)o(---)o(----)o(----)o(--)334 4345
-y(INITIALIZE)e(THE)i(SUPERLU)f(PROCESS)g(GRID.)334 4458
-y(-------------------------)o(---)o(----)o(----)o(---)o(----)o(----)o
-(---)o(----)o(----)o(--*)o(/)191 4571 y(superlu_gridinit\(MPI_COM)o
-(M_WO)o(RLD)o(,)c(nprow,)k(npcol,)g(&grid\);)191 4797
-y(/*)h(Bail)g(out)g(if)g(I)g(do)g(not)g(belong)f(in)i(the)f(grid.)f(*/)
-191 4910 y(iam)h(=)g(grid.iam;)191 5023 y(if)g(\()h(iam)e(>=)i(nprow)e
-(*)h(npcol)g(\))g(goto)g(out;)191 5248 y(/*)g
-(-------------------------)o(---)o(----)o(----)o(---)o(----)o(----)o
-(---)o(----)o(----)o(--)334 5361 y(GET)g(THE)g(MATRIX)f(FROM)h(FILE)f
-(AND)h(SETUP)g(THE)f(RIGHT)h(HAND)f(SIDE.)334 5474 y
-(-------------------------)o(---)o(----)o(----)o(---)o(----)o(----)o
-(---)o(----)o(----)o(--*)o(/)1905 5778 y Fw(51)p eop
-%%Page: 52 53
-52 52 bop 191 280 a Fu(dcreate_matrix\(&A,)43 b(nrhs,)j(&b,)h(&ldb,)f
-(&xtrue,)g(&ldx,)h(fp,)f(&grid\);)191 506 y(if)h(\()h(!\(berr)e(=)h
-(doubleMalloc_dist\(nrhs\)\))41 b(\))382 619 y(ABORT\("Malloc)j(fails)i
-(for)h(berr[]."\);)191 845 y(/*)g(-------------------------)o(---)o
-(----)o(----)o(---)o(----)o(----)o(---)o(----)o(----)o(--)334
-958 y(NOW)g(WE)g(SOLVE)g(THE)f(LINEAR)h(SYSTEM.)334 1071
-y(-------------------------)o(---)o(----)o(----)o(---)o(----)o(----)o
-(---)o(----)o(----)o(--*)o(/)191 1297 y(/*)g(Set)g(the)g(default)f
-(input)g(options.)g(*/)191 1409 y(set_default_options_dist)o(\(&op)o
-(tio)o(ns\);)191 1635 y(m)h(=)h(A.nrow;)191 1748 y(n)f(=)h(A.ncol;)191
-1974 y(/*)f(Initialize)e(ScalePermstruct)f(and)j(LUstruct.)e(*/)191
-2087 y(ScalePermstructInit\(m,)d(n,)47 b(&ScalePermstruct\);)191
-2200 y(LUstructInit\(m,)d(n,)j(&LUstruct\);)191 2426
-y(/*)g(Initialize)e(the)i(statistics)e(variables.)g(*/)191
-2539 y(PStatInit\(&stat\);)191 2764 y(/*)i(Call)g(the)g(linear)f
-(equation)f(solver.)h(*/)191 2877 y(pdgssvx\(&options,)d(&A,)k
-(&ScalePermstruct,)c(b,)k(ldb,)g(nrhs,)f(&grid,)573 2990
-y(&LUstruct,)f(&SOLVEstruct,)f(berr,)i(&stat,)g(&info\);)191
-3329 y(/*)h(Check)f(the)h(accuracy)f(of)h(the)g(solution.)e(*/)191
-3442 y(pdinf_norm_error\(iam,)d(\(\(NRformat_loc)i
-(*\)A.Store\)->m_loc,)1002 3555 y(nrhs,)j(b,)g(ldb,)f(xtrue,)h(ldx,)f
-(&grid\);)191 3781 y(PStatPrint\(&options,)c(&stat,)k(&grid\);)380
-b(/*)47 b(Print)g(the)g(statistics.)d(*/)191 4006 y(/*)j
-(-------------------------)o(---)o(----)o(----)o(---)o(----)o(----)o
-(---)o(----)o(----)o(--)334 4119 y(DEALLOCATE)e(STORAGE.)334
-4232 y(-------------------------)o(---)o(----)o(----)o(---)o(----)o
-(----)o(---)o(----)o(----)o(--*)o(/)191 4458 y(PStatFree\(&stat\);)191
-4571 y(Destroy_CompRowLoc_Matri)o(x_di)o(st\()o(&A\);)191
-4684 y(ScalePermstructFree\(&Sca)o(lePe)o(rms)o(truc)o(t\);)191
-4797 y(Destroy_LU\(n,)f(&grid,)i(&LUstruct\);)191 4910
-y(LUstructFree\(&LUstruct\);)191 5023 y(if)h(\()h
-(options.SolveInitialize)o(d)42 b(\))47 b({)382 5136
-y(dSolveFinalize\(&options,)41 b(&SOLVEstruct\);)191
-5248 y(})191 5361 y(SUPERLU_FREE\(b\);)191 5474 y
-(SUPERLU_FREE\(xtrue\);)1905 5778 y Fw(52)p eop
-%%Page: 53 54
-53 53 bop 191 280 a Fu(SUPERLU_FREE\(berr\);)191 506
-y(/*)47 b(-------------------------)o(---)o(----)o(----)o(---)o(----)o
-(----)o(---)o(----)o(----)o(--)334 619 y(RELEASE)f(THE)h(SUPERLU)f
-(PROCESS)f(GRID.)334 732 y(-------------------------)o(---)o(----)o
-(----)o(---)o(----)o(----)o(---)o(----)o(----)o(--*)o(/)0
-845 y(out:)191 958 y(superlu_gridexit\(&grid\);)191 1184
-y(/*)i(-------------------------)o(---)o(----)o(----)o(---)o(----)o
-(----)o(---)o(----)o(----)o(--)334 1297 y(TERMINATES)e(THE)i(MPI)g
-(EXECUTION)e(ENVIRONMENT.)334 1409 y(-------------------------)o(---)o
-(----)o(----)o(---)o(----)o(----)o(---)o(----)o(----)o(--*)o(/)191
-1522 y(MPI_Finalize\(\);)0 1748 y(})141 1961 y Fw(Fiv)m(e)31
-b(basic)f(steps)g(are)h(required)d(to)j(call)f(a)h(Sup)s(erLU)d
-(routine:)111 2148 y(1.)46 b(Initialize)29 b(the)h(MPI)g(en)m(vironmen)
-m(t)g(and)g(the)h(Sup)s(erLU)d(pro)s(cess)i(grid.)227
-2261 y(This)f(is)g(ac)m(hiev)m(ed)i(b)m(y)g(the)f(calls)g(to)h(the)f
-(MPI)h(routine)e Fu(MPI)p 2317 2261 29 4 v 34 w(Init\(\))f
-Fw(and)i(the)h(Sup)s(erLU)d(routine)227 2374 y Fu(superlu)p
-569 2374 V 33 w(gridinit\(\))p Fw(.)36 b(In)24 b(this)f(example,)j(the)
-f(comm)m(unication)f(domain)g(for)g(Sup)s(erLU)f(is)h(built)f(up)s(on)
-227 2487 y(the)37 b(MPI)f(default)g(comm)m(unicator)h
-Fu(MPI)p 1666 2487 V 33 w(COMM)p 1891 2487 V 34 w(WORLD)p
-Fw(.)e(In)h(general,)i(it)e(can)h(b)s(e)f(built)e(up)s(on)h(an)m(y)i
-(MPI)227 2600 y(comm)m(unicator.)k(Section)30 b(4.4)i(con)m(tains)f
-(the)f(details)f(ab)s(out)i(this)e(step.)111 2788 y(2.)46
-b(Set)31 b(up)e(the)i(input)d(matrix)i(and)g(the)g(righ)m(t-hand)f
-(side.)227 2901 y(This)37 b(example)i(uses)f(the)h(in)m(terface)g(with)
-f(the)h(distributed)d(input)h(matrices,)k(see)e(Section)g(4.2.2.)68
-b(In)227 3013 y(most)31 b(practical)e(applications,)g(the)h(matrices)g
-(can)g(b)s(e)f(generated)i(on)f(eac)m(h)h(pro)s(cess)f(without)f(the)h
-(need)227 3126 y(to)25 b(ha)m(v)m(e)h(a)f(cen)m(tralized)f(place)h(to)g
-(hold)e(them.)39 b(But)24 b(for)h(this)e(example,)j(w)m(e)f(let)f(pro)s
-(cess)g(0)h(read)f(the)h(input)227 3239 y(matrix)i(stored)g(on)g(disk)f
-(in)g(Harw)m(ell-Bo)s(eing)h(format)h([10)q(])f(\(a.k.a.)41
-b(compressed)27 b(column)g(storage\),)j(and)227 3352
-y(distribute)37 b(it)j(to)g(all)e(the)i(other)g(pro)s(cesses,)i(so)e
-(that)g(eac)m(h)h(pro)s(cess)e(only)g(o)m(wns)g(a)h(blo)s(c)m(k)f(of)h
-(ro)m(ws)g(of)227 3465 y(matrix.)g(The)27 b(righ)m(t-hand)g(side)g
-(matrix)h(is)f(generated)i(so)g(that)g(the)f(exact)i(solution)d(matrix)
-g(consists)h(of)227 3578 y(all)i(ones.)40 b(The)30 b(subroutine)f
-Fu(dcreate)p 1571 3578 V 32 w(matrix\(\))f Fw(accomplishes)i(this)f
-(task.)111 3766 y(3.)46 b(Initialize)29 b(the)h(input)f(argumen)m(ts:)
-41 b Fu(options,)k(ScalePermstruct,)e(LUstruct,)j(stat)p
-Fw(.)227 3879 y(The)28 b(input)e(argumen)m(t)j Fu(options)d
-Fw(con)m(trols)j(ho)m(w)f(the)g(linear)f(system)h(w)m(ould)f(b)s(e)h
-(solv)m(ed|use)f(equilibra-)227 3991 y(tion)h(or)h(not,)g(ho)m(w)g(to)g
-(order)f(the)h(ro)m(ws)f(and)g(the)h(columns)e(of)i(the)g(matrix,)f
-(use)h(iterativ)m(e)g(re\014nemen)m(t)f(or)227 4104 y(not.)58
-b(The)35 b(subroutine)f Fu(set)p 1239 4104 V 34 w(default)p
-1609 4104 V 32 w(options)p 1977 4104 V 33 w(dist\(\))g
-Fw(sets)i(the)h Fu(options)d Fw(argumen)m(t)i(so)g(that)h(the)227
-4217 y(solv)m(er)h(p)s(erforms)f(all)g(the)h(functionalit)m(y)-8
-b(.)63 b(Y)-8 b(ou)38 b(can)h(also)f(set)g(it)g(up)f(according)h(to)h
-(y)m(our)f(o)m(wn)g(needs,)227 4330 y(see)32 b(section)f(4.7.1)i(for)e
-(the)h(\014elds)d(of)j(this)e(structure.)42 b Fu(ScalePermstruct)27
-b Fw(is)j(the)i(data)g(structure)e(that)227 4443 y(stores)38
-b(the)g(sev)m(eral)g(v)m(ectors)h(describing)d(the)h(transformations)g
-(done)h(to)g Fv(A)p Fw(.)62 b Fu(LUstruct)36 b Fw(is)g(the)i(data)227
-4556 y(structure)31 b(in)f(whic)m(h)g(the)h(distributed)e
-Fv(L)i Fw(and)f Fv(U)41 b Fw(factors)32 b(are)g(stored.)44
-b Fu(Stat)30 b Fw(is)g(a)i(structure)e(collecting)227
-4669 y(the)h(statistics)f(ab)s(out)g(run)m(time)f(and)h(\015op)g(coun)m
-(t,)h(etc.)111 4857 y(4.)46 b(Call)29 b(the)i(Sup)s(erLU)d(routine)h
-Fu(pdgssvx\(\))p Fw(.)111 5044 y(5.)46 b(Release)31 b(the)g(pro)s(cess)
-f(grid)f(and)h(terminate)g(the)h(MPI)f(en)m(vironmen)m(t.)227
-5157 y(After)42 b(the)g(computation)g(on)g(a)g(pro)s(cess)g(grid)e(has)
-i(b)s(een)f(completed,)k(the)d(pro)s(cess)f(grid)g(should)f(b)s(e)227
-5270 y(released)26 b(b)m(y)f(a)h(call)f(to)h(the)g(Sup)s(erLU)d
-(routine)i Fu(superlu)p 2210 5270 V 32 w(gridexit\(\))p
-Fw(.)37 b(When)25 b(all)f(computations)i(ha)m(v)m(e)227
-5383 y(b)s(een)k(completed,)h(the)f(MPI)g(routine)g Fu(MPI)p
-1730 5383 V 33 w(Finalize\(\))e Fw(should)g(b)s(e)i(called.)1905
-5778 y(53)p eop
-%%Page: 54 55
-54 54 bop 0 280 a Fr(4.6)135 b(Algorithmic)46 b(bac)l(kground)0
-483 y Fw(Although)33 b(partial)f(piv)m(oting)h(is)f(used)h(in)f(b)s
-(oth)h(sequen)m(tial)g(and)g(shared-memory)g(parallel)f(factorization)i
-(al-)0 596 y(gorithms,)c(it)f(is)g(not)i(used)e(in)g(the)h
-(distributed-memory)d(parallel)h(algorithm,)i(b)s(ecause)g(it)g
-(requires)e(dynamic)0 709 y(adaptation)j(of)f(data)h(structure)f(and)g
-(load)g(balancing,)f(and)h(so)h(is)e(hard)g(to)i(mak)m(e)h(it)e
-(scalable.)40 b(W)-8 b(e)32 b(use)e(alter-)0 822 y(nativ)m(e)e(tec)m
-(hniques)g(to)h(stabilize)d(the)i(algorithm,)g(suas)g(as)g(statically)f
-(piv)m(ot)h(large)g(elemen)m(ts)h(to)f(the)g(diagonal,)0
-935 y(single-precision)37 b(diagonal)i(adjustmen)m(t)h(to)g(a)m(v)m
-(oid)h(small)d(piv)m(ots,)k(and)d(iterativ)m(e)i(re\014nemen)m(t.)69
-b(Figure)39 b(4.2)0 1048 y(sk)m(etc)m(hes)29 b(our)e(GESP)h(algorithm)e
-(\(Gaussian)i(elimination)d(with)h(Static)i(Piv)m(oting\).)40
-b(Numerical)26 b(exp)s(erimen)m(ts)0 1161 y(sho)m(w)k(that)h(for)f(a)h
-(wide)e(range)i(of)g(problems,)d(GESP)i(is)g(as)g(stable)g(as)h(GEPP)f
-([24)q(].)998 1429 y(Figure)g(4.2:)42 b(The)30 b(outline)f(of)h(the)h
-(GESP)f(algorithm.)157 1642 y(\(1\))h(P)m(erform)f(ro)m(w/column)g
-(equilibration)d(and)j(ro)m(w)g(p)s(erm)m(utation:)40
-b Fv(A)26 b Fq( )f Fv(P)2869 1656 y Fo(r)2927 1642 y
-Fq(\001)c Fv(D)3048 1656 y Fo(r)3106 1642 y Fq(\001)g
-Fv(A)f Fq(\001)h Fv(D)3361 1656 y Fo(c)3396 1642 y Fw(,)313
-1755 y(where)30 b Fv(D)651 1769 y Fo(r)720 1755 y Fw(and)f
-Fv(D)971 1769 y Fo(c)1037 1755 y Fw(are)h(diagonal)g(matrices)g(and)g
-Fv(P)2151 1769 y Fo(r)2220 1755 y Fw(is)f(a)i(ro)m(w)f(p)s(erm)m
-(utation)g(c)m(hosen)313 1868 y(to)h(mak)m(e)h(the)e(diagonal)g(large)g
-(compared)h(to)g(the)f(o\013-diagonal.)157 1981 y(\(2\))h(Find)e(a)i
-(column)e(p)s(erm)m(utation)g Fv(P)1491 1995 y Fo(c)1557
-1981 y Fw(to)i(preserv)m(e)f(sparsit)m(y:)40 b Fv(A)26
-b Fq( )f Fv(P)2665 1995 y Fo(c)2720 1981 y Fq(\001)c
-Fv(A)f Fq(\001)h Fv(P)2971 1948 y Fo(T)2958 2003 y(c)157
-2093 y Fw(\(3\))31 b(P)m(erform)f(sym)m(b)s(olic)f(analysis)g(to)i
-(determine)f(the)g(nonzero)h(structures)f(of)g Fv(L)g
-Fw(and)g Fv(U)10 b Fw(.)157 2206 y(\(4\))31 b(F)-8 b(actorize)32
-b Fv(A)26 b Fw(=)f Fv(L)20 b Fq(\001)g Fv(U)41 b Fw(with)29
-b(con)m(trol)i(of)f(diagonal)g(magnitude:)470 2319 y
-Fx(if)g Fw(\()h Fq(j)p Fv(a)700 2333 y Fo(ii)752 2319
-y Fq(j)26 b Fv(<)899 2254 y Fq(p)p 974 2254 43 4 v 974
-2319 a Fv(")21 b Fq(\001)f(k)p Fv(A)p Fq(k)1240 2333
-y FC(1)1311 2319 y Fw(\))31 b Fx(then)626 2432 y Fw(set)g
-Fv(a)816 2446 y Fo(ii)899 2432 y Fw(to)1010 2367 y Fq(p)p
-1086 2367 V 65 x Fv(")20 b Fq(\001)h(k)p Fv(A)p Fq(k)1352
-2446 y FC(1)470 2545 y Fx(endif)157 2658 y Fw(\(5\))31
-b(P)m(erform)f(triangular)f(solutions)g(using)g Fv(L)h
-Fw(and)g Fv(U)10 b Fw(.)157 2771 y(\(6\))31 b(If)f(needed,)g(use)g(an)h
-(iterativ)m(e)f(solv)m(er)h(lik)m(e)e(GMRES)i(or)f(iterativ)m(e)h
-(re\014nemen)m(t)f(\(sho)m(wn)g(b)s(elo)m(w\))470 2884
-y Fx(iterate)p Fw(:)626 2997 y Fv(r)e Fw(=)d Fv(b)20
-b Fq(\000)g Fv(A)h Fq(\001)f Fv(x)649 b(:)15 b(:)g(:)31
-b Fw(sparse)f(matrix-v)m(ector)i(m)m(ultiply)626 3110
-y(Solv)m(e)f Fv(A)20 b Fq(\001)g Fv(dx)26 b Fw(=)f Fv(r)525
-b(:)15 b(:)g(:)31 b Fw(triangular)e(solution)626 3238
-y Fv(ber)s(r)f Fw(=)d(max)1085 3252 y Fo(i)1287 3193
-y Fn(j)p Fo(r)r Fn(j)1361 3203 y Fd(i)p 1138 3217 397
-4 v 1138 3270 a FC(\()p Fn(j)p Fo(A)p Fn(j\001j)p Fo(x)p
-Fn(j)p FC(+)p Fn(j)p Fo(b)p Fn(j)p FC(\))1510 3280 y
-Fd(i)1785 3238 y Fv(:)15 b(:)g(:)31 b Fw(comp)s(onen)m(t)m(wise)g(bac)m
-(kw)m(ard)g(error)626 3365 y Fx(if)g Fw(\()f Fv(ber)s(r)e(>)d(")31
-b Fw(and)e Fv(ber)s(r)f Fq(\024)1622 3330 y FC(1)p 1622
-3345 36 4 v 1622 3397 a(2)1687 3365 y Fq(\001)21 b Fv(l)r(astber)s(r)32
-b Fw(\))f Fx(then)783 3478 y Fv(x)25 b Fw(=)g Fv(x)20
-b Fw(+)g Fv(dx)783 3591 y(l)r(astber)s(r)27 b Fw(=)e
-Fv(ber)s(r)783 3704 y Fx(goto)35 b(iterate)626 3817 y(endif)157
-3930 y Fw(\(7\))c(If)f(desired,)f(estimate)i(the)g(condition)e(n)m(um)m
-(b)s(er)g(of)h Fv(A)141 4253 y Fw(W)-8 b(e)29 b(ha)m(v)m(e)g
-(parallelized)d(the)i(most)g(time-consuming)e(steps)i(\(4\))h(to)g
-(\(7\).)41 b(The)27 b(prepro)s(cessing)f(and)h(analysis)0
-4366 y(steps)33 b(\(1\))g(to)h(\(3\))f(are)h(mostly)e(p)s(erformed)f
-(sequen)m(tially)g(at)j(presen)m(t.)47 b(If)32 b(the)h(distributed)d
-(input)h(in)m(terface)i(is)0 4479 y(used)h(\(Section)h(4.2.2\),)j(w)m
-(e)e(\014rst)e(gather)h(the)g(distributed)d(graph)i(of)h
-Fv(A)g Fw(\(and)g(the)g(v)-5 b(alue)34 b(of)h Fv(A)g
-Fw(if)f(step)h(\(1\))h(is)0 4592 y(needed\))30 b(on)m(to)i(one)f(pro)s
-(cessor.)40 b(W)-8 b(ork)31 b(is)f(underw)m(a)m(y)f(to)j(remo)m(v)m(e)f
-(this)f(sequen)m(tial)f(b)s(ottlenec)m(k.)141 4705 y(Step)c(\(1\))g(is)
-f(accomplished)f(b)m(y)i(a)g(w)m(eigh)m(ted)g(bipartite)e(matc)m(hing)i
-(algorithm)f(due)g(to)h(Du\013)g(and)f(Koster)h([9].)0
-4818 y(Curren)m(tly)-8 b(,)34 b(pro)s(cess)f(0)h(computes)g
-Fv(P)1302 4832 y Fo(r)1374 4818 y Fw(and)f(then)g(broadcasts)h(it)g(to)
-g(all)f(the)h(other)g(pro)s(cesses.)50 b(F)-8 b(or)35
-b(step)f(\(2\),)0 4931 y(w)m(e)d(pro)m(vide)f(sev)m(eral)g(ordering)g
-(options,)g(suc)m(h)g(as)h(m)m(ultiple)d(minim)m(um)f(degree)32
-b(ordering)d([25)q(])i(on)f(the)h(graphs)0 5044 y(of)k
-Fv(A)24 b Fw(+)f Fv(A)362 5011 y Fo(T)417 5044 y Fw(.)56
-b(The)35 b(user)f(can)i(use)f(an)m(y)g(other)h(ordering)e(in)g(place)h
-(of)g(these,)j(suc)m(h)c(as)i(an)f(ordering)f(based)h(on)0
-5157 y(graph)27 b(partitioning.)38 b(\(Note,)30 b(since)d(w)m(e)h(will)
-e(piv)m(ot)h(on)h(the)g(diagonal)f(in)f(step)i(\(4\),)i(an)d(ordering)g
-(based)g(on)h(the)0 5269 y(structure)g(of)i Fv(A)17 b
-Fw(+)g Fv(A)732 5236 y Fo(T)816 5269 y Fw(almost)29 b(alw)m(a)m(ys)h
-(yields)d(sparser)h(factors)i(than)f(that)g(based)g(on)g(the)g
-(structure)f(of)h Fv(A)3751 5236 y Fo(T)3807 5269 y Fv(A)p
-Fw(.)0 5382 y(This)i(is)g(di\013eren)m(t)i(from)f(Sup)s(erLU)e(and)i
-(Sup)s(erLU)p 1810 5382 28 4 v 31 w(MT,)h(where)f(w)m(e)h(can)g(piv)m
-(ot)f(o\013-diagonal.\))48 b(In)32 b(this)g(step,)0 5495
-y(ev)m(ery)f(pro)s(cess)f(runs)f(the)h(same)h(algorithm)f(indep)s
-(enden)m(tly)-8 b(.)1905 5778 y(54)p eop
-%%Page: 55 56
-55 55 bop 0 280 a Fr(4.7)135 b(User-callable)47 b(routines)0
-487 y Fm(4.7.1)112 b(Driv)m(er)37 b(routine)0 658 y Fw(There)20
-b(are)g(t)m(w)m(o)i(driv)m(er)d(routines)g(to)i(solv)m(e)g(systems)f
-(of)h(linear)d(equations,)k(whic)m(h)d(are)i(named)f
-Fu(pdgssvx)p 3566 658 29 4 v 32 w(ABglobal)0 771 y Fw(for)32
-b(the)g(global)g(input)e(in)m(terface,)j(and)f Fu(pdgssvx)e
-Fw(for)i(the)g(distributed)d(in)m(terface.)47 b(W)-8
-b(e)33 b(recommend)f(that)h(the)0 884 y(general)39 b(users,)i(esp)s
-(ecially)d(the)h(b)s(eginners,)h(use)f(a)g(driv)m(er)f(routine)h
-(rather)g(than)g(the)g(computational)g(rou-)0 997 y(tines,)f(b)s
-(ecause)f(correctly)g(using)e(the)i(driv)m(er)f(routine)f(do)s(es)i
-(not)g(require)e(thorough)i(understanding)d(of)j(the)0
-1110 y(underlying)d(data)j(structures.)59 b(Although)36
-b(the)h(in)m(terface)h(of)f(these)g(routines)f(are)h(simple,)f(w)m(e)i
-(exp)s(ect)f(their)0 1223 y(ric)m(h)i(functionalit)m(y)f(can)i(meet)h
-(the)f(requiremen)m(ts)f(of)h(most)g(applications.)67
-b Fu(Pdgssvx)p 3112 1223 V 33 w(ABglobal)p Fw(/)p Fu(pdgssvx)0
-1336 y Fw(p)s(erform)29 b(the)i(follo)m(wing)d(functions:)136
-1520 y Fq(\017)46 b Fw(Equilibrate)27 b(the)i(system)g(\(scale)h
-Fv(A)p Fw('s)f(ro)m(ws)g(and)g(columns)f(to)h(ha)m(v)m(e)i(unit)c
-(norm\))i(if)f Fv(A)h Fw(is)g(p)s(o)s(orly)e(scaled;)136
-1706 y Fq(\017)46 b Fw(Find)29 b(a)i(ro)m(w)f(p)s(erm)m(utation)g(that)
-h(mak)m(es)g(diagonal)f(of)g Fv(A)h Fw(large)f(relativ)m(e)h(to)g(the)f
-(o\013-diagonal;)136 1892 y Fq(\017)46 b Fw(Find)29 b(a)i(column)e(p)s
-(erm)m(utation)h(that)h(preserv)m(es)f(the)h(sparsit)m(y)e(of)i(the)f
-Fv(L)g Fw(and)g Fv(U)40 b Fw(factors;)136 2078 y Fq(\017)46
-b Fw(Solv)m(e)31 b(the)f(system)h Fv(AX)i Fw(=)25 b Fv(B)34
-b Fw(for)d Fv(X)37 b Fw(b)m(y)31 b(factoring)f Fv(A)h
-Fw(follo)m(w)m(ed)f(b)m(y)g(forw)m(ard)g(and)f(bac)m(k)j
-(substitutions;)136 2264 y Fq(\017)46 b Fw(Re\014ne)30
-b(the)h(solution)e Fv(X)7 b Fw(.)0 2504 y Fx(Options)35
-b(argumen)m(t)0 2675 y Fw(One)26 b(imp)s(ortan)m(t)g(input)f(argumen)m
-(t)i(to)g Fu(pdgssvx)p 1705 2675 V 33 w(ABglobal)p Fw(/)p
-Fu(pdgssvx)22 b Fw(is)k Fu(options)p Fw(,)g(whic)m(h)f(con)m(trols)i
-(ho)m(w)g(the)0 2788 y(linear)c(system)i(will)d(b)s(e)i(solv)m(ed.)39
-b(Although)23 b(the)i(algorithm)f(presen)m(ted)g(in)g(Figure)g(4.2)i
-(consists)e(of)h(sev)m(en)g(steps,)0 2901 y(for)36 b(some)h(matrices)f
-(not)h(all)e(steps)h(are)h(needed)e(to)i(get)h(accurate)g(solution.)57
-b(F)-8 b(or)37 b(example,)g(for)f(diagonally)0 3014 y(dominan)m(t)j
-(matrices,)k(c)m(ho)s(osing)d(the)h(diagonal)e(piv)m(ots)h(ensures)g
-(the)g(stabilit)m(y;)k(there)c(is)g(no)g(need)g(for)g(ro)m(w)0
-3127 y(piv)m(oting)f(in)f(step)h(\(1\).)70 b(In)39 b(another)g
-(situation)g(where)g(a)h(sequence)g(of)f(matrices)h(with)e(the)i(same)g
-(sparsit)m(y)0 3240 y(pattern)35 b(need)g(b)s(e)f(factorized,)j(the)f
-(column)d(p)s(erm)m(utation)i Fv(P)2189 3254 y Fo(c)2259
-3240 y Fw(\(and)f(also)h(the)h(ro)m(w)f(p)s(erm)m(utation)f
-Fv(P)3586 3254 y Fo(r)3624 3240 y Fw(,)j(if)d(the)0 3353
-y(n)m(umerical)d(v)-5 b(alues)33 b(are)g(similar\))d(need)j(b)s(e)f
-(computed)h(only)f(once,)j(and)d(reused)g(thereafter.)49
-b(\()p Fv(P)3402 3367 y Fo(r)3473 3353 y Fw(and)33 b
-Fv(P)3711 3367 y Fo(c)3779 3353 y Fw(are)0 3466 y(implemen)m(ted)39
-b(as)i(p)s(erm)m(utation)f(v)m(ectors)i Fu(perm)p 1718
-3466 V 34 w(r)e Fw(and)g Fu(perm)p 2219 3466 V 34 w(c)p
-Fw(.\))71 b(F)-8 b(or)42 b(the)f(ab)s(o)m(v)m(e)h(examples,)h(p)s
-(erforming)0 3578 y(all)g(sev)m(en)i(steps)f(do)s(es)f(more)i(w)m(ork)f
-(than)g(necessary)-8 b(.)82 b Fu(Options)42 b Fw(is)i(used)f(to)i
-(accommo)s(date)h(the)e(v)-5 b(arious)0 3691 y(requiremen)m(ts)29
-b(of)i(applications;)e(it)h(con)m(tains)g(the)h(follo)m(wing)e
-(\014elds:)136 3875 y Fq(\017)46 b Fu(Fact)227 3988 y
-Fw(This)31 b(option)g(sp)s(eci\014es)g(whether)h(or)g(not)h(the)f
-(factored)h(form)f(of)g(the)h(matrix)e Fv(A)i Fw(is)e(supplied)e(on)j
-(en)m(try)-8 b(,)227 4101 y(and)41 b(if)f(not,)k(ho)m(w)d(the)g(matrix)
-g Fv(A)g Fw(will)d(b)s(e)j(factored)h(base)f(on)g(some)h(assumptions)d
-(of)i(the)g(previous)227 4214 y(history)-8 b(.)40 b Fu(fact)30
-b Fw(can)g(b)s(e)g(one)h(of:)330 4400 y Fx({)45 b Fu(DOFACT)p
-Fw(:)29 b(the)i(matrix)e Fv(A)i Fw(will)d(b)s(e)h(factorized)i(from)f
-(scratc)m(h.)330 4545 y Fx({)45 b Fu(SamePattern)p Fw(:)51
-b(the)37 b(matrix)g Fv(A)g Fw(will)d(b)s(e)i(factorized)i(assuming)d
-(that)j(a)f(factorization)h(of)f(a)g(ma-)427 4658 y(trix)i(with)f(the)h
-(same)h(sparsit)m(y)f(pattern)g(w)m(as)h(p)s(erformed)e(prior)f(to)j
-(this)f(one.)67 b(Therefore,)42 b(this)427 4771 y(factorization)31
-b(will)d(reuse)i(column)f(p)s(erm)m(utation)h(v)m(ector)i
-Fu(perm)p 2670 4771 V 33 w(c)p Fw(.)330 4915 y Fx({)45
-b Fu(SampPattern)p 961 4915 V 32 w(SameRowPerm)p Fw(:)c(the)32
-b(matrix)g Fv(A)g Fw(will)e(b)s(e)i(factorized)g(assuming)f(that)i(a)g
-(factoriza-)427 5028 y(tion)h(of)h(a)g(matrix)f(with)f(the)i(same)g
-(sparsit)m(y)f(pattern)h(and)f(similar)e(n)m(umerical)h(v)-5
-b(alues)34 b(w)m(as)h(p)s(er-)427 5141 y(formed)f(prior)e(to)i(this)f
-(one.)51 b(Therefore,)35 b(this)e(factorization)h(will)d(reuse)j(b)s
-(oth)f(ro)m(w)h(and)f(column)427 5254 y(p)s(erm)m(utation)i(v)m(ectors)
-i Fu(perm)p 1465 5254 V 34 w(r)e Fw(and)g Fu(perm)p 1956
-5254 V 33 w(c)p Fw(,)i(b)s(oth)f(ro)m(w)f(and)h(column)e(scaling)h
-(factors)i Fv(D)3680 5268 y Fo(r)3754 5254 y Fw(and)427
-5367 y Fv(D)502 5381 y Fo(c)537 5367 y Fw(,)31 b(and)f(the)g
-(distributed)e(data)j(structure)f(set)g(up)g(from)g(the)g(previous)f
-(sym)m(b)s(olic)g(factorization.)330 5511 y Fx({)45 b
-Fu(FACTORED)p Fw(:)29 b(the)h(factored)h(form)f(of)h
-Fv(A)f Fw(is)g(input.)1905 5778 y(55)p eop
-%%Page: 56 57
-56 56 bop 136 280 a Fq(\017)46 b Fu(Equil)227 393 y Fw(This)29
-b(option)h(sp)s(eci\014es)f(whether)g(to)j(equilibrate)c(the)i(system.)
-136 567 y Fq(\017)46 b Fu(ColPerm)227 680 y Fw(This)29
-b(option)h(sp)s(eci\014es)f(the)h(column)f(ordering)h(metho)s(d)f(for)h
-(\014ll)f(reduction.)330 854 y Fx({)45 b Fu(NATURAL)p
-Fw(:)29 b(natural)g(ordering.)330 986 y Fx({)45 b Fu(MMD)p
-577 986 29 4 v 34 w(AT)p 707 986 V 34 w(PLUS)p 933 986
-V 33 w(A)p Fw(:)30 b(minim)m(um)e(degree)j(ordering)e(on)h(the)h
-(structure)f(of)g Fv(A)2956 953 y Fo(T)3032 986 y Fw(+)20
-b Fv(A)p Fw(.)330 1119 y Fx({)45 b Fu(MMD)p 577 1119
-V 34 w(ATA)p Fw(:)30 b(minim)m(um)d(degree)k(ordering)e(on)i(the)f
-(structure)g(of)h Fv(A)2697 1086 y Fo(T)2752 1119 y Fv(A)p
-Fw(.)330 1251 y Fx({)45 b Fu(COLAMD)p Fw(:)29 b(appro)m(ximate)i(minim)
-m(um)c(degree)k(column)f(ordering.)330 1383 y Fx({)45
-b Fu(MY)p 529 1383 V 34 w(PERMC)p Fw(:)29 b(use)h(the)h(ordering)e(giv)
-m(en)h(in)f Fu(perm)p 2065 1383 V 34 w(c)h Fw(input)e(b)m(y)i(the)h
-(user.)136 1557 y Fq(\017)46 b Fu(RowPerm)227 1670 y
-Fw(This)29 b(option)h(sp)s(eci\014es)f(ho)m(w)h(to)h(p)s(erm)m(ute)f
-(ro)m(ws)g(of)h(the)f(original)f(matrix.)330 1844 y Fx({)45
-b Fu(NATURAL)p Fw(:)29 b(use)h(the)h(natural)e(ordering.)330
-1976 y Fx({)45 b Fu(LargeDiag)p Fw(:)d(use)33 b(a)f(w)m(eigh)m(ted)h
-(bipartite)e(matc)m(hing)i(algorithm)e(to)i(p)s(erm)m(ute)f(the)g(ro)m
-(ws)h(to)g(mak)m(e)427 2089 y(the)e(diagonal)e(large)i(relativ)m(e)f
-(to)i(the)e(o\013-diagonal.)330 2221 y Fx({)45 b Fu(MY)p
-529 2221 V 34 w(PERMR)p Fw(:)29 b(use)h(the)h(ordering)e(giv)m(en)h(in)
-f Fu(perm)p 2065 2221 V 34 w(r)h Fw(input)e(b)m(y)i(the)h(user.)136
-2395 y Fq(\017)46 b Fu(ReplaceTinyPivot)227 2508 y Fw(This)19
-b(option)h(sp)s(eci\014es)f(whether)h(to)i(replace)e(the)h(tin)m(y)f
-(diagonals)g(b)m(y)2610 2443 y Fq(p)p 2685 2443 43 4
-v 2685 2508 a Fv(")r Fq(\001)q(jj)p Fv(A)p Fq(jj)h Fw(during)e
-Fv(LU)30 b Fw(factorization.)136 2682 y Fq(\017)46 b
-Fu(IterRefine)227 2795 y Fw(This)29 b(option)h(sp)s(eci\014es)f(ho)m(w)
-h(to)h(p)s(erform)e(iterativ)m(e)i(re\014nemen)m(t.)330
-2969 y Fx({)45 b Fu(NO)p Fw(:)30 b(no)h(iterativ)m(e)f(re\014nemen)m
-(t.)330 3101 y Fx({)45 b Fu(DOUBLE)p Fw(:)29 b(accum)m(ulate)i
-(residual)e(in)g(double)g(precision.)330 3233 y Fx({)45
-b Fu(EXTRA)p Fw(:)29 b(accum)m(ulate)j(residual)c(in)h(extra)i
-(precision.)39 b(\()p Fp(not)34 b(yet)e(implemente)-5
-b(d.)p Fw(\))136 3407 y Fq(\017)46 b Fu(SolveInitialized)26
-b Fw(\(Used)31 b(only)e(b)m(y)i(the)f(distributed)e(input)g(in)m
-(terface\))227 3520 y(This)h(option)h(sp)s(eci\014es)f(whether)g(the)i
-(initialization)c(has)j(b)s(een)g(p)s(erformed)f(to)i(the)g(triangular)
-d(solv)m(e.)136 3694 y Fq(\017)46 b Fu(RefineInitialized)26
-b Fw(\(Used)31 b(only)e(b)m(y)h(the)h(distributed)c(input)i(in)m
-(terface\))227 3807 y(This)21 b(option)h(sp)s(eci\014es)e(whether)i
-(the)h(initialization)c(has)j(b)s(een)f(p)s(erformed)g(to)i(the)g
-(sparse)f(matrix-v)m(ector)227 3920 y(m)m(ultiplication)28
-b(routine)h(needed)h(in)f(the)i(iterativ)m(e)f(re\014nemen)m(t.)136
-4094 y Fq(\017)46 b Fu(PrintStat)227 4207 y Fw(Sp)s(eci\014es)29
-b(whether)h(to)h(prin)m(t)e(the)h(solv)m(er's)h(statistics.)141
-4360 y(There)36 b(is)g(a)i(routine)d(named)i Fu(set)p
-1360 4360 29 4 v 33 w(default)p 1729 4360 V 33 w(options)p
-2098 4360 V 32 w(dist\(\))e Fw(that)j(sets)f(the)g(default)f(v)-5
-b(alues)36 b(of)h(these)0 4473 y(options,)30 b(whic)m(h)f(are:)191
-4626 y Fu(fact)667 b(=)47 b(DOFACT)524 b(/*)47 b(factor)f(from)h
-(scratch)f(*/)191 4739 y(equil)619 b(=)47 b(YES)191 4852
-y(colperm)523 b(=)47 b(MMD_AT_PLUS_A)191 4965 y(rowperm)523
-b(=)47 b(LargeDiag)380 b(/*)47 b(use)g(MC64)g(*/)191
-5077 y(ReplaceTinyPivot)91 b(=)47 b(YES)191 5190 y(IterRefine)379
-b(=)47 b(DOUBLE)191 5303 y(SolveInitialized)91 b(=)47
-b(NO)191 5416 y(RefineInitialized)c(=)k(NO)191 5529 y(PrintStat)427
-b(=)47 b(YES)1905 5778 y Fw(56)p eop
-%%Page: 57 58
-57 57 bop 0 280 a Fm(4.7.2)112 b(Computational)36 b(routines)0
-452 y Fw(The)45 b(exp)s(erienced)f(users)g(can)h(in)m(v)m(ok)m(e)i(the)
-e(follo)m(wing)f(computational)g(routines)g(to)i(directly)e(con)m(trol)
-i(the)0 565 y(b)s(eha)m(vior)29 b(of)i Fu(SuperLU)p 817
-565 29 4 v 32 w(DIST)f Fw(in)f(order)h(to)h(meet)g(their)e(requiremen)m
-(ts.)136 753 y Fq(\017)46 b Fu(pdgstrf\(\))p Fw(:)38
-b(F)-8 b(actorize)33 b(in)c(parallel.)227 865 y(This)h(routine)g
-(factorizes)i(the)f(input)f(matrix)g Fv(A)i Fw(\(or)f(the)h(scaled)f
-(and)f(p)s(erm)m(uted)g Fv(A)p Fw(\).)44 b(It)31 b(assumes)g(that)227
-978 y(the)g(distributed)d(data)j(structures)f(for)g Fv(L)h
-Fw(and)f Fv(U)40 b Fw(factors)32 b(are)f(already)f(set)h(up,)f(and)g
-(the)h(initial)d(v)-5 b(alues)227 1091 y(of)32 b Fv(A)f
-Fw(are)h(loaded)e(in)m(to)i(the)f(data)h(structures.)43
-b(If)31 b(not,)h(the)f(routine)f Fu(symbfact\(\))f Fw(should)g(b)s(e)i
-(called)f(to)227 1204 y(determine)37 b(the)g(nonzero)h(patterns)f(of)h
-(the)f(factors,)j(and)d(the)g(routine)g Fu(pddistribute\(\))c
-Fw(should)j(b)s(e)227 1317 y(called)30 b(to)h(distribute)d(the)i
-(matrix.)40 b Fu(Pdgstrf\(\))28 b Fw(can)j(factor)g(non-square)f
-(matrices.)136 1505 y Fq(\017)46 b Fu(pdgstrs\(\)/pdgstrs)p
-1049 1505 V 30 w(Bglobal\(\))p Fw(:)38 b(T)-8 b(riangular)29
-b(solv)m(e)h(in)f(parallel.)227 1618 y(This)39 b(routine)h(solv)m(es)g
-(the)h(system)g(b)m(y)f(forw)m(ard)g(and)g(bac)m(k)h(substitutions)d
-(using)h(the)i(the)g Fv(L)f Fw(and)g Fv(U)227 1731 y
-Fw(factors)c(computed)e(b)m(y)g Fu(pdgstrf\(\))p Fw(.)50
-b Fu(Pdgstrs\(\))32 b Fw(tak)m(es)k(distributed)31 b
-Fv(B)5 b Fw(.)53 b(F)-8 b(or)35 b Fu(pdgstrs)p 3419 1731
-V 32 w(Bglobal\(\))p Fw(,)227 1843 y Fv(B)g Fw(m)m(ust)30
-b(b)s(e)g(globally)f(a)m(v)-5 b(ailable)30 b(on)g(all)f(pro)s(cesses.)
-136 2031 y Fq(\017)46 b Fu(pdgsrfs\(\)/pdgsrfs)p 1049
-2031 V 30 w(ABXglobal\(\))p Fw(:)38 b(Re\014ne)30 b(solution)f(in)g
-(parallel.)227 2144 y(Giv)m(en)44 b Fv(A)p Fw(,)49 b(its)43
-b(factors)j Fv(L)e Fw(and)f Fv(U)10 b Fw(,)48 b(and)c(an)g(initial)e
-(solution)h Fv(X)7 b Fw(,)48 b(this)43 b(routine)h(p)s(erforms)e
-(iterativ)m(e)227 2257 y(re\014nemen)m(t.)f Fu(Pdgsrfs\(\))27
-b Fw(tak)m(es)k(distributed)c Fv(A)p Fw(,)j Fv(B)k Fw(and)29
-b Fv(X)7 b Fw(.)41 b(F)-8 b(or)31 b Fu(pdgsrfs)p 2921
-2257 V 32 w(ABXglobal\(\))p Fw(,)c Fv(A)p Fw(,)j Fv(B)35
-b Fw(and)227 2370 y Fv(X)j Fw(m)m(ust)30 b(b)s(e)g(globally)f(a)m(v)-5
-b(ailable)30 b(on)g(all)f(pro)s(cesses.)0 2613 y Fm(4.7.3)112
-b(Utilit)m(y)35 b(routines)0 2785 y Fw(The)28 b(follo)m(wing)e(utilit)m
-(y)h(routines)g(can)h(help)f(users)g(create)j(and)e(destro)m(y)g(the)h
-Fu(SuperLU)p 3023 2785 V 32 w(DIST)e Fw(matrices.)40
-b(These)0 2898 y(routines)27 b(reside)g(in)g(three)i(places:)39
-b Fu(SRC/util.c)p Fw(,)26 b Fu(SRC/)p Fq(f)p Fu(d,z)p
-Fq(g)p Fu(util.c)p Fw(,)g(and)i Fu(SRC/pd,zutil.c)p Fw(.)36
-b(Most)29 b(of)g(the)0 3011 y(utilit)m(y)38 b(routines)h(in)g(sequen)m
-(tial)g Fu(SuperLU)g Fw(can)h(also)g(b)s(e)f(used)h(in)e
-Fu(SuperLU)p 2742 3011 V 33 w(DIST)h Fw(for)g(the)i(lo)s(cal)e(data,)k
-(see)0 3124 y(Section)27 b(2.8.3.)41 b(Here,)28 b(w)m(e)g(only)d(list)h
-(those)h(new)g(routines)e(sp)s(eci\014c)h(to)h Fu(SuperLU)p
-2803 3124 V 33 w(DIST)p Fw(.)f(Note)i(that)f(in)f(order)g(to)0
-3237 y(a)m(v)m(oid)34 b(name)g(clash)e(b)s(et)m(w)m(een)j
-Fu(SuperLU)c Fw(and)i Fu(SuperLU)p 1963 3237 V 32 w(DIST)p
-Fw(,)g(w)m(e)h(app)s(end)e(\\)p 2751 3237 V 35 w Fu(dist)p
-Fw(")g(to)j(eac)m(h)f(routine)f(name)0 3349 y(in)c Fu(SuperLU)p
-448 3349 V 33 w(DIST)p Fw(.)191 3562 y Fu(/*)47 b(Create)f(a)i
-(supermatrix)c(in)k(distributed)c(compressed)h(row)i(format.)f(A)h(is)h
-(output.)d(*/)191 3675 y(dCreate_CompRowLoc_Matri)o(x_di)o(st\()o(Supe)
-o(rMat)o(rix)c(*A,)47 b(int_t)f(m,)i(int_t)e(n,)1670
-3788 y(int_t)h(nnz_loc,)e(int_t)i(m_loc,)f(int_t)g(fst_row,)1670
-3901 y(double)h(*nzval,)e(int_t)i(*colind,)e(int_t)i(*rowptr,)1670
-4014 y(Stype_t)f(stype,)g(Dtype_t)g(dtype,)g(Mtype_t)g(mtype\);)191
-4239 y(/*)h(Deallocate)e(the)i(supermatrix)e(in)i(distributed)e
-(compressed)g(row)i(format.)e(*/)191 4352 y(Destroy_CompRowLoc_Matri)o
-(x_di)o(st\()o(Supe)o(rMat)o(rix)c(*A\);)191 4578 y(/*)47
-b(Allocate)f(storage)f(in)j(*ScalePermstruct.)43 b(*/)191
-4691 y(ScalePermstructInit\(cons)o(t)f(int_t)k(m,)h(const)g(int_t)f(n,)
-1145 4804 y(ScalePermstruct_t)e(*ScalePermstruct\);)191
-5030 y(/*)j(Deallocate)e(ScalePermstruct)f(*/)191 5143
-y(ScalePermstructFree\(Scal)o(ePer)o(mst)o(ruct)o(_t)e
-(*ScalePermstruct\);)191 5369 y(/*)47 b(Allocate)f(storage)f(in)j
-(*LUstruct.)d(*/)191 5481 y(LUstructInit\(const)e(int_t)j(m,)h(const)g
-(int_t)f(n,)h(LUstruct_t)e(*LUstruct\);)1905 5778 y Fw(57)p
-eop
-%%Page: 58 59
-58 58 bop 191 393 a Fu(/*)47 b(Deallocate)e(the)i(distributed)e(L)i(&)h
-(U)f(factors)f(in)h(*LUstruct.)e(*/)191 506 y(Destroy_LU\(int_t)e(n,)k
-(gridinfo_t)e(*grid,)i(LUstruct_t)e(*LUstruct\);)191
-732 y(/*)i(Deallocate)e(*LUstruct.)g(*/)191 845 y
-(LUstructFree\(LUstruct_t)c(*LUstruct\);)191 1071 y(/*)47
-b(Initialize)e(the)i(statistics)e(variable.)g(*/)191
-1184 y(PStatInit\(SuperLUStat_t)c(*stat\);)191 1409 y(/*)47
-b(Print)f(the)h(statistics.)e(*/)191 1522 y(PStatPrint\(superlu_optio)o
-(ns_t)c(*options,)k(SuperLUStat_t)f(*stat,)716 1635 y(gridinfo_t)h
-(*grid\);)191 1861 y(/*)i(Deallocate)e(the)i(statistics)e(variable.)g
-(*/)191 1974 y(PStatFree\(SuperLUStat_t)c(*stat\);)0
-2258 y Fr(4.8)135 b(Installation)0 2464 y Fm(4.8.1)112
-b(File)37 b(structure)0 2636 y Fw(The)30 b(top)g(lev)m(el)h(Sup)s(erLU)
-p 918 2636 28 4 v 30 w(DIST/)g(directory)e(is)h(structured)f(as)i
-(follo)m(ws:)191 2810 y Fu(SuperLU_DIST/README)186 b(instructions)44
-b(on)j(installation)191 2923 y(SuperLU_DIST/CBLAS/)186
-b(needed)46 b(BLAS)g(routines)g(in)h(C,)g(not)g(necessarily)e(fast)191
-3036 y(SuperLU_DIST/EXAMPLE/)90 b(example)45 b(programs)191
-3149 y(SuperLU_DIST/INSTALL/)90 b(test)46 b(machine)g(dependent)f
-(parameters;)g(the)i(Users')f(Guide.)191 3261 y(SuperLU_DIST/SRC/)282
-b(C)47 b(source)f(code,)h(to)g(be)g(compiled)e(into)i(a)h(library)191
-3374 y(SuperLU_DIST/Makefile)90 b(top)47 b(level)f(Makefile)f(that)i
-(does)g(installation)d(and)j(testing)191 3487 y(SuperLU_DIST/MAKE_INC)
-90 b(sample)46 b(machine-specific)d(make.inc)j(files)191
-3600 y(SuperLU_DIST/make.inc)90 b(compiler,)45 b(compile)h(flags,)g
-(library)g(definitions)e(and)j(C)1289 3713 y(preprocessor)d
-(definitions,)h(included)g(in)i(all)g(Makefiles.)1289
-3826 y(\(You)f(may)h(need)g(to)g(edit)g(it)g(to)g(be)g(suitable)f(for)h
-(your)1336 3939 y(system)f(before)h(compiling)e(the)i(whole)f
-(package.\))141 4113 y Fw(Before)33 b(installing)d(the)i(pac)m(k)-5
-b(age,)35 b(y)m(ou)e(ma)m(y)g(need)f(to)h(edit)f Fu(SuperLU)p
-2574 4113 29 4 v 32 w(DIST/make.inc)d Fw(for)j(y)m(our)h(system.)0
-4226 y(This)27 b(mak)m(e)k(include)c(\014le)h(is)g(referenced)i(inside)
-d(eac)m(h)j(of)g(the)f(Mak)m(e\014les)h(in)e(the)h(v)-5
-b(arious)29 b(sub)s(directories.)37 b(As)30 b(a)0 4339
-y(result,)e(there)i(is)e(no)h(need)f(to)i(edit)e(the)i(Mak)m(e\014les)f
-(in)f(the)h(sub)s(directories.)38 b(All)27 b(information)h(that)h(is)f
-(mac)m(hine)0 4452 y(sp)s(eci\014c)h(has)h(b)s(een)g(de\014ned)f(in)g
-(this)g(include)g(\014le.)141 4565 y(Sample)20 b(mac)m(hine-sp)s
-(eci\014c)f Fu(make.inc)g Fw(are)i(pro)m(vided)e(in)h(the)h
-Fu(MAKE)p 2463 4565 V 33 w(INC/)f Fw(directory)g(for)h(sev)m(eral)g
-(platforms,)0 4678 y(suc)m(h)30 b(as)h(Cra)m(y)g(T3E)g(and)f(IBM)h(SP)
--8 b(.)31 b(When)g(y)m(ou)g(ha)m(v)m(e)h(selected)f(the)g(mac)m(hine)f
-(to)i(whic)m(h)d(y)m(ou)j(wish)d(to)i(install)0 4790
-y Fu(superlud)p Fw(,)c(y)m(ou)i(ma)m(y)h(cop)m(y)f(the)g(appropriate)f
-(sample)g(include)f(\014le)h(\(if)g(one)h(is)f(presen)m(t\))h(in)m(to)g
-Fu(make.inc)p Fw(.)38 b(F)-8 b(or)0 4903 y(example,)30
-b(if)g(y)m(ou)g(wish)f(to)i(run)e(on)h(a)h(Cra)m(y)f(T3E,)h(y)m(ou)g
-(can)f(do:)381 5016 y Fu(cp)47 b(MAKE)p 722 5016 V 34
-w(INC/make.t3e)d(make.inc)141 5129 y Fw(F)-8 b(or)39
-b(the)g(systems)g(other)g(than)f(those)h(listed)e(ab)s(o)m(v)m(e,)42
-b(sligh)m(t)c(mo)s(di\014cations)f(to)i(the)g Fu(make.inc)d
-Fw(\014le)i(will)0 5242 y(need)30 b(to)h(b)s(e)f(made.)41
-b(In)29 b(particular,)g(the)i(follo)m(wing)e(items)h(should)e(b)s(e)i
-(examined:)111 5416 y(1.)46 b(The)30 b(BLAS)g(library)-8
-b(.)227 5529 y(If)20 b(there)h(is)e(a)i(BLAS)f(library)e(a)m(v)-5
-b(ailable)20 b(on)g(y)m(our)h(mac)m(hine,)h(y)m(ou)f(ma)m(y)g(de\014ne)
-e(the)i(follo)m(wing)e(in)g Fu(make.inc)p Fw(:)1905 5778
-y(58)p eop
-%%Page: 59 60
-59 59 bop 467 280 a Fu(BLASDEF)46 b(=)i(-DUSE)p 1191
-280 29 4 v 33 w(VENDOR)p 1512 280 V 32 w(BLAS)467 380
-y(BLASLIB)e(=)i(<BLAS)e(library)g(you)h(wish)f(to)h(link)g(with>)227
-530 y Fw(The)41 b Fu(CBLAS/)e Fw(sub)s(directory)h(con)m(tains)h(the)g
-(part)g(of)h(the)f(BLAS)g(\(in)g(C\))g(needed)g(b)m(y)g
-Fu(SuperLU)p 3683 530 V 32 w(DIST)227 643 y Fw(pac)m(k)-5
-b(age.)41 b(Ho)m(w)m(ev)m(er,)26 b(these)e(routines)e(are)h(in)m
-(tended)f(for)h(use)g(only)f(if)g(there)h(is)f(no)h(faster)g(implemen)m
-(tation)227 756 y(of)31 b(the)f(BLAS)h(already)f(a)m(v)-5
-b(ailable)29 b(on)i(y)m(our)f(mac)m(hine.)40 b(In)30
-b(this)f(case,)j(y)m(ou)f(should)d(do)i(the)h(follo)m(wing:)301
-942 y(1\))46 b(In)30 b(mak)m(e.inc,)h(unde\014ne)e(\(commen)m(t)i
-(out\))g(BLASDEF,)g(de\014ne:)667 1071 y Fu(BLASLIB)46
-b(=)i(../blas$\(PLAT\).a)301 1216 y Fw(2\))e(A)m(t)32
-b(the)e(top)h(lev)m(el)f(Sup)s(erLU)p 1446 1216 28 4
-v 31 w(DIST)f(directory)-8 b(,)31 b(t)m(yp)s(e:)667 1345
-y Fu(make)47 b(blaslib)427 1474 y Fw(to)31 b(create)h(the)f(BLAS)f
-(library)e(from)i(the)h(routines)e(in)g Fu(CBLAS/)f Fw(sub)s(directory)
--8 b(.)111 1660 y(2.)46 b(C)30 b(prepro)s(cessor)g(de\014nition)e
-Fu(CDEFS)p Fw(.)227 1773 y(In)22 b(the)i(header)e(\014le)g
-Fu(SRC/Cnames.h)p Fw(,)g(w)m(e)h(use)g(macros)g(to)h(determine)e(ho)m
-(w)h(C)f(routines)g(should)f(b)s(e)h(named)227 1886 y(so)31
-b(that)g(they)f(are)h(callable)e(b)m(y)i(F)-8 b(ortran.)1671
-1853 y FC(1)1752 1886 y Fw(The)29 b(p)s(ossible)f(options)i(for)g
-Fu(CDEFS)f Fw(are:)336 2072 y Fq(\017)46 b Fu(-DAdd)p
-673 2072 29 4 v 33 w Fw(:)41 b(F)-8 b(ortran)31 b(exp)s(ects)g(a)f(C)g
-(routine)g(to)h(ha)m(v)m(e)h(an)e(underscore)f(p)s(ost\014xed)h(to)h
-(the)f(name;)336 2217 y Fq(\017)46 b Fu(-DNoChange)p
-Fw(:)38 b(F)-8 b(ortran)31 b(exp)s(ects)g(a)g(C)f(routine)f(name)i(to)g
-(b)s(e)e(iden)m(tical)h(to)h(that)g(compiled)d(b)m(y)j(C;)336
-2362 y Fq(\017)46 b Fu(-DUpCase)p Fw(:)39 b(F)-8 b(ortran)31
-b(exp)s(ects)g(a)f(C)g(routine)g(name)g(to)h(b)s(e)f(all)f(upp)s
-(ercase.)141 2549 y(A)36 b Fu(Makefile)e Fw(is)h(pro)m(vided)g(in)f
-(eac)m(h)j(sub)s(directory)-8 b(.)56 b(The)36 b(installation)e(can)i(b)
-s(e)f(done)h(completely)g(auto-)0 2661 y(matically)29
-b(b)m(y)i(simply)d(t)m(yping)h Fu(make)h Fw(at)h(the)f(top)h(lev)m(el.)
-0 2904 y Fm(4.8.2)112 b(P)m(erformance-tuning)37 b(parameters)0
-3076 y Fw(Similar)26 b(to)j(sequen)m(tial)f(Sup)s(erLU,)f(sev)m(eral)i
-(p)s(erformance)f(related)g(parameters)h(are)g(set)h(in)d(the)i
-(inquiry)d(func-)0 3189 y(tion)k Fu(sp)p 289 3189 V 34
-w(ienv\(\))p Fw(.)39 b(The)30 b(declaration)g(of)g(this)f(function)g
-(is)141 3362 y Fu(int)47 b(sp)p 434 3362 V 34 w(ienv\(int)e(ispec\);)
-141 3535 y(Ispec)29 b Fw(sp)s(eci\014es)g(the)i(parameter)g(to)g(b)s(e)
-e(returned)1928 3502 y FC(2)1967 3535 y Fw(:)318 3719
-y(isp)s(ec)d(=)k(2:)42 b(the)30 b(relaxation)g(parameter)h(to)g(con)m
-(trol)g(sup)s(erno)s(de)d(amalgamation)540 3832 y(=)i(3:)42
-b(the)30 b(maxim)m(um)f(allo)m(w)m(able)h(size)g(for)h(a)f(blo)s(c)m(k)
-540 3945 y(=)g(6:)42 b(the)30 b(estimated)h(\014lls)d(factor)j(for)f
-(the)h(adjacency)g(structures)f(of)g Fv(L)h Fw(and)e
-Fv(U)141 4130 y Fw(The)24 b(v)-5 b(alues)23 b(to)h(b)s(e)g(returned)e
-(ma)m(y)j(b)s(e)e(set)i(di\013eren)m(tly)d(on)i(di\013eren)m(t)f(mac)m
-(hines.)39 b(The)23 b(setting)h(of)g(maxim)m(um)0 4243
-y(blo)s(c)m(k)c(size)h(\(parameter)h(3\))g(should)d(tak)m(e)j(in)m(to)f
-(accoun)m(t)h(the)f(lo)s(cal)g(Lev)m(el)g(3)g(BLAS)g(sp)s(eed,)h(the)f
-(load)g(balance)g(and)0 4355 y(the)30 b(degree)g(of)f(parallelism.)37
-b(Small)28 b(blo)s(c)m(k)h(size)g(ma)m(y)h(result)e(in)g(b)s(etter)h
-(load)g(balance)h(and)e(more)i(parallelism,)0 4468 y(but)g(p)s(o)s(or)f
-(individual)d(no)s(de)k(p)s(erformance,)f(and)h(vice)h(v)m(ersa)g(for)f
-(large)g(blo)s(c)m(k)g(size.)0 4754 y Fr(4.9)135 b(Example)46
-b(programs)0 4957 y Fw(In)27 b(the)h Fu(SuperLU)p 607
-4957 V 33 w(DIST/EXAMPLE/)c Fw(directory)-8 b(,)28 b(w)m(e)h(presen)m
-(t)f(a)g(few)g(sample)f(programs)g(to)i(illustrate)d(the)i(com-)0
-5070 y(plete)e(calling)g(sequences)h(to)g(use)f(the)h(exp)s(ert)f(driv)
-m(er)g(to)h(solv)m(e)g(systems)g(of)g(equations.)39 b(These)26
-b(include)f(ho)m(w)h(to)0 5183 y(set)33 b(up)e(the)i(pro)s(cess)e(grid)
-h(and)f(the)i(input)d(matrix,)i(ho)m(w)h(to)g(obtain)f(a)g
-(\014ll-reducing)e(ordering.)45 b(A)32 b Fu(Makefile)p
-0 5261 1560 4 v 104 5315 a Fi(1)138 5346 y Fg(Some)h(v)n
-(endor-supplied)g(BLAS)g(libraries)i(do)f(not)g(ha)n(v)n(e)f(C)h(in)n
-(terfaces.)61 b(So)34 b(the)f(re-naming)g(is)i(needed)e(in)h(order)g
-(for)g(the)0 5438 y(Sup)r(erLU)24 b(BLAS)i(calls)h(\(in)e(C\))h(to)g
-(in)n(terface)h(with)f(the)f(F)-6 b(ortran-st)n(yle)25
-b(BLAS.)104 5497 y Fi(2)138 5529 y Fg(The)h(n)n(um)n(b)r(ering)e(of)j
-(2,)f(3)g(and)f(6)h(is)g(consisten)n(t)h(with)f(that)f(used)g(in)h(Sup)
-r(erLU)e(and)i(Sup)r(erLU)p 2950 5529 24 4 v 26 w(MT.)1905
-5778 y Fw(59)p eop
-%%Page: 60 61
-60 60 bop 0 280 a Fw(is)36 b(pro)m(vided)g(to)i(generate)h(the)e
-(executables.)61 b(A)38 b Fu(README)d Fw(\014le)h(in)g(this)g
-(directory)h(sho)m(ws)g(ho)m(w)g(to)h(run)d(these)0 393
-y(examples.)53 b(The)34 b(leading)g(commen)m(t)h(in)e(eac)m(h)j
-(routine)e(describ)s(es)f(the)i(functionalit)m(y)e(of)h(the)h(example.)
-53 b(The)0 506 y(t)m(w)m(o)26 b(basic)e(examples)g(are)h
-Fu(pddrive)p 1262 506 29 4 v 32 w(ABglobal\(\))d Fw(and)i
-Fu(pddrive\(\))p Fw(.)36 b(The)24 b(\014rst)g(sho)m(ws)g(ho)m(w)g(to)i
-(use)e(the)h(global)0 619 y(input)j(in)m(terface,)k(and)d(the)i(second)
-f(sho)m(ws)g(ho)m(w)h(to)g(use)f(the)h(distributed)c(input)h(in)m
-(terface.)0 906 y Fr(4.10)136 b(F)-11 b(ortran)44 b(90)i(In)l(terface)0
-1108 y Fw(W)-8 b(e)43 b(dev)m(elop)s(ed)e(a)h(complete)g(F)-8
-b(ortran)42 b(90)h(in)m(terface)f(for)g Fu(SuperLU)p
-2430 1108 V 32 w(DIST)p Fw(.)f(All)f(the)i(in)m(terface)g(\014les)f
-(and)g(an)0 1221 y(example)35 b(driv)m(er)g(program)g(are)h(lo)s(cated)
-g(in)e(the)i Fu(SuperLU)p 2092 1221 V 32 w(DIST/FORTRAN/)c
-Fw(directory)-8 b(.)56 b(T)-8 b(able)35 b(4.1)i(lists)d(all)0
-1334 y(the)d(\014les.)50 1504 y FA(f)p 80 1504 25 4 v
-30 w(p)r(ddriv)n(e.f90)397 b(An)28 b(example)f(F)-7 b(ortran)27
-b(driv)n(er)f(routine.)50 1703 y(sup)r(erlu)p 321 1703
-V 30 w(mo)r(d.f90)272 b(F)-7 b(ortran)26 b(90)h(mo)r(dule)h(that)g
-(de\014nes)f(the)h(in)n(terface)f(functions)h(to)g(access)e
-Fc(SuperLU)p 3564 1703 27 4 v 29 w(DIST)p FA('s)909 1803
-y(data)h(structures.)50 2002 y(sup)r(erlupara.f90)298
-b(It)28 b(con)n(tains)e(parameters)g(that)i(corresp)r(ond)e(to)i
-Fc(SuperLU)p 2772 2002 V 28 w(DIST)p FA('s)e(en)n(ums.)50
-2201 y(h)n(b)r(co)r(de1.f90)429 b(F)-7 b(ortran)26 b(function)i(for)g
-(reading)e(a)h(sparse)f(Harw)n(ell-Bo)r(eing)g(matrix)h(from)909
-2301 y(the)h(\014le.)50 2500 y(sup)r(erlu)p 321 2500
-25 4 v 30 w(c2f)p 455 2500 V 29 w(wrap.c)189 b(C)28 b(wrapp)r(er)e
-(functions,)i(callable)f(from)g(F)-7 b(ortran.)36 b(The)28
-b(functions)f(fall)909 2600 y(in)n(to)g(three)h(classes:)35
-b(1\))28 b(Those)f(that)g(allo)r(cate)g(a)g(structure)g(and)h(return)
-909 2699 y(a)f(handle,)h(or)e(deallo)r(cate)h(the)h(memory)f(of)g(a)h
-(structure.)36 b(2\))27 b(Those)g(that)909 2799 y(get)g(or)g(set)h(the)
-g(v)-5 b(alue)27 b(of)h(a)f(comp)r(onen)n(t)g(of)h(a)f(struct.)37
-b(3\))27 b(Those)g(that)909 2898 y(are)g(wrapp)r(ers)f(for)h
-Fc(SuperLU)p 1846 2898 27 4 v 28 w(DIST)f FA(functions.)50
-3098 y(dcreate)p 319 3098 25 4 v 29 w(dist)p 482 3098
-V 30 w(matrix.c)99 b(C)28 b(function)g(for)f(distributing)g(the)h
-(matrix)g(in)f(a)h(distributed)909 3197 y(compressed)e(ro)n(w)h
-(format.)524 3382 y Fw(T)-8 b(able)30 b(4.1:)42 b(The)30
-b(F)-8 b(ortran)31 b(90)g(in)m(terface)g(\014les)e(and)h(an)g(example)g
-(driv)m(er)g(routine.)141 3612 y(Note)h(that)f(in)e(this)h(in)m
-(terface,)h(all)e(ob)5 b(jects)31 b(\(suc)m(h)e(as)h
-Ft(grid)p Fw(,)g Ft(options)p Fw(,)g(etc.\))42 b(in)28
-b Fu(SuperLU)p 3210 3612 29 4 v 32 w(DIST)h Fw(are)h
-Fp(op)-5 b(aque)p Fw(,)0 3725 y(meaning)39 b(their)f(size)h(and)g
-(structure)g(are)h(not)g(visible)d(to)j(the)f(F)-8 b(ortran)40
-b(user.)68 b(These)39 b(opaque)g(ob)5 b(jects)41 b(are)0
-3838 y(allo)s(cated,)g(deallo)s(cated)d(and)g(op)s(erated)h(in)e(the)h
-(C)g(side)g(and)g(not)g(directly)f(accessible)i(from)f(F)-8
-b(ortran)39 b(side.)0 3951 y(They)33 b(can)h(only)e(b)s(e)h(accessed)i
-(via)e Fp(hand)5 b(les)43 b Fw(that)34 b(exist)f(in)f(F)-8
-b(ortran's)34 b(user)f(space.)51 b(In)33 b(F)-8 b(ortran,)35
-b(all)e(handles)0 4064 y(ha)m(v)m(e)24 b(t)m(yp)s(e)g
-Ft(INTEGER)p Fw(.)f(Sp)s(eci\014cally)-8 b(,)23 b(in)f(our)g(in)m
-(terface,)k(the)d(size)g(of)g(F)-8 b(ortran)24 b(handle)e(is)g
-(de\014ned)g(b)m(y)i Ft(sup)s(erlu)p 3762 4064 28 4 v
-32 w(ptr)0 4176 y Fw(in)38 b Ft(sup)s(erlupa)m(ra.f90)p
-Fw(.)68 b(F)-8 b(or)40 b(di\013eren)m(t)f(systems,)j(the)e(size)f(migh)
-m(t)g(need)h(to)g(b)s(e)f(c)m(hanged.)68 b(Then)39 b(using)e(these)0
-4289 y(handles,)27 b(F)-8 b(ortran)30 b(user)d(can)i(call)f(C)g(wrapp)s
-(er)e(routines)i(to)h(manipulate)e(the)h(opaque)h(ob)5
-b(jects.)41 b(F)-8 b(or)29 b(example,)0 4402 y(y)m(ou)d(can)g(call)f
-Ft(f)p 524 4402 V 32 w(create)p 784 4402 V 34 w(gridinfo\(grid)p
-1285 4402 V 33 w(handle\))h Fw(to)g(allo)s(cate)g(memory)g(for)f
-(structure)g Ft(grid)p Fw(,)i(and)e(return)f(a)i(handle)0
-4515 y Ft(grid)p 150 4515 V 33 w(handle)p Fw(.)141 4628
-y(The)e(sample)g(program)g(illustrates)e(the)j(basic)f(steps)g
-(required)f(to)i(use)f Fu(SuperLU)p 2936 4628 29 4 v
-33 w(DIST)f Fw(in)g(F)-8 b(ortran)25 b(to)h(solv)m(e)0
-4741 y(systems)i(of)g(equations.)39 b(These)28 b(include)d(ho)m(w)j(to)
-h(set)f(up)f(the)h(pro)s(cessor)f(grid)g(and)g(the)h(input)e(matrix,)h
-(ho)m(w)h(to)0 4854 y(call)e(the)h(linear)e(equation)i(solv)m(er.)39
-b(This)25 b(program)i(is)f(listed)f(b)s(elo)m(w,)i(and)f(is)g(also)g(a)
-m(v)-5 b(ailable)27 b(as)g Ft(f)p 3348 4854 28 4 v 32
-w(p)s(ddrive.f90)g Fw(in)0 4967 y(the)34 b(sub)s(directory)-8
-b(.)48 b(Note)34 b(that)g(the)g(routine)e(m)m(ust)i(include)d(the)i
-(moudle)f Ft(sup)s(erlu)p 2923 4967 V 33 w(mo)s(d)h Fw(whic)m(h)f(con)m
-(tains)i(the)0 5080 y(de\014nitions)25 b(of)i(all)f(parameters)i(and)e
-(the)h(F)-8 b(ortran)28 b(wrapp)s(er)e(functions.)38
-b(A)27 b Ft(Mak)m(e\014le)h Fw(is)e(pro)m(vided)g(to)h(generate)0
-5193 y(the)k(executable.)41 b(A)30 b Ft(README)g Fw(\014le)f(in)g(this)
-h(directory)f(sho)m(ws)i(ho)m(w)f(to)h(run)e(the)i(example.)286
-5405 y Fu(program)46 b(f_pddrive)0 5518 y(!)1905 5778
-y Fw(60)p eop
-%%Page: 61 62
-61 61 bop 0 280 a Fu(!)47 b(Purpose)0 393 y(!)g(=======)0
-506 y(!)0 619 y(!)g(The)g(driver)f(program)g(F_PDDRIVE.)0
-732 y(!)0 845 y(!)h(This)g(example)f(illustrates)f(how)i(to)g(use)g
-(F_PDGSSVX)e(with)i(the)f(full)0 958 y(!)h(\(default\))f(options)g(to)h
-(solve)f(a)i(linear)e(system.)0 1071 y(!)0 1184 y(!)h(Seven)g(basic)f
-(steps)h(are)f(required:)0 1297 y(!)143 b(1.)47 b(Create)f(C)i
-(structures)d(used)h(in)h(SuperLU)0 1409 y(!)143 b(2.)47
-b(Initialize)e(the)i(MPI)g(environment)e(and)i(the)f(SuperLU)g(process)
-g(grid)0 1522 y(!)143 b(3.)47 b(Set)g(up)g(the)g(input)f(matrix)h(and)f
-(the)h(right-hand)e(side)0 1635 y(!)143 b(4.)47 b(Set)g(the)g(options)f
-(argument)0 1748 y(!)143 b(5.)47 b(Call)g(f_pdgssvx)0
-1861 y(!)143 b(6.)47 b(Release)f(the)h(process)f(grid)g(and)h
-(terminate)e(the)i(MPI)g(environment)0 1974 y(!)143 b(7.)47
-b(Release)f(all)h(structures)0 2087 y(!)286 2200 y(use)g(superlu_mod)
-286 2313 y(include)f('mpif.h')286 2426 y(implicit)g(none)286
-2539 y(integer)g(maxn,)h(maxnz,)f(maxnrhs)286 2652 y(parameter)g(\()h
-(maxn)g(=)g(10000,)f(maxnz)h(=)g(100000,)f(maxnrhs)g(=)h(10)g(\))286
-2764 y(integer)f(rowind\(maxnz\),)e(colptr\(maxn\))286
-2877 y(real*8)94 b(values\(maxnz\),)44 b(b\(maxn\),)i(berr\(maxnrhs\))
-286 2990 y(integer)g(n,)h(m,)h(nnz,)e(nrhs,)h(ldb,)f(i,)h(ierr,)g
-(info,)f(iam)286 3103 y(integer)g(nprow,)g(npcol)286
-3216 y(integer)g(init)286 3442 y(integer\(superlu_ptr\))d(::)k(grid)286
-3555 y(integer\(superlu_ptr\))c(::)k(options)286 3668
-y(integer\(superlu_ptr\))c(::)k(ScalePermstruct)286 3781
-y(integer\(superlu_ptr\))c(::)k(LUstruct)286 3894 y
-(integer\(superlu_ptr\))c(::)k(SOLVEstruct)286 4006 y
-(integer\(superlu_ptr\))c(::)k(A)286 4119 y(integer\(superlu_ptr\))c
-(::)k(stat)0 4458 y(!)g(Create)g(Fortran)e(handles)h(for)h(the)g(C)g
-(structures)e(used)i(in)g(SuperLU_DIST)286 4571 y(call)g
-(f_create_gridinfo\(grid\))286 4684 y(call)g(f_create_options\(options)
-o(\))286 4797 y(call)g(f_create_ScalePermstruct)o(\(Sca)o(lePe)o(rms)o
-(truc)o(t\))286 4910 y(call)g(f_create_LUstruct\(LUstru)o(ct\))286
-5023 y(call)g(f_create_SOLVEstruct\(SOL)o(VEst)o(ruct)o(\))286
-5136 y(call)g(f_create_SuperMatrix\(A\))286 5248 y(call)g
-(f_create_SuperLUStat\(sta)o(t\))0 5474 y(!)g(Initialize)e(MPI)i
-(environment)1905 5778 y Fw(61)p eop
-%%Page: 62 63
-62 62 bop 286 280 a Fu(call)47 b(mpi_init\(ierr\))0 506
-y(!)g(Initialize)e(the)i(SuperLU_DIST)e(process)h(grid)286
-619 y(nprow)h(=)g(2)286 732 y(npcol)g(=)g(2)286 845 y(call)g
-(f_superlu_gridinit\(MPI_C)o(OMM_)o(WORL)o(D,)41 b(nprow,)47
-b(npcol,)f(grid\))0 1071 y(!)h(Bail)g(out)g(if)g(I)h(do)f(not)g(belong)
-f(in)h(the)g(grid.)286 1184 y(call)g(get_GridInfo\(grid,)c(iam=iam\))
-286 1297 y(if)48 b(\()f(iam)g(>=)g(nprow)f(*)i(npcol)e(\))i(then)430
-1409 y(go)f(to)g(100)286 1522 y(endif)286 1635 y(if)h(\()f(iam)g(==)g
-(0)h(\))f(then)430 1748 y(write\(*,*\))e(')i(Process)f(grid)g(',)i
-(nprow,)e(')h(X)h(',)f(npcol)286 1861 y(endif)0 2087
-y(!)g(Read)g(Harwell-Boeing)d(matrix,)i(and)h(adjust)f(the)h(pointers)e
-(and)i(indices)0 2200 y(!)g(to)h(0-based)d(indexing,)h(as)h(required)e
-(by)j(C)f(routines.)286 2313 y(if)h(\()f(iam)g(==)g(0)h(\))f(then)430
-2426 y(open\(file)e(=)i("g20.rua",)e(status)h(=)i("old",)e(unit)h(=)g
-(5\))430 2539 y(call)f(hbcode1\(m,)f(n,)i(nnz,)g(values,)f(rowind,)g
-(colptr\))430 2652 y(close\(unit)f(=)i(5\))0 2764 y(!)430
-2877 y(do)g(i)g(=)h(1,)f(n+1)573 2990 y(colptr\(i\))e(=)i(colptr\(i\))f
-(-)h(1)430 3103 y(enddo)430 3216 y(do)g(i)g(=)h(1,)f(nnz)573
-3329 y(rowind\(i\))e(=)i(rowind\(i\))f(-)h(1)430 3442
-y(enddo)286 3555 y(endif)0 3781 y(!)g(Distribute)e(the)i(matrix)f(to)i
-(the)f(gird)286 3894 y(call)95 b(f_dcreate_matrix_dist\(A)o(,)42
-b(m,)47 b(n,)g(nnz,)g(values,)f(rowind,)g(colptr,)f(grid\))0
-4119 y(!)i(Setup)g(the)g(right)f(hand)h(side)286 4232
-y(nrhs)g(=)g(1)286 4345 y(call)95 b(get_CompRowLoc_Matrix\(A)o(,)42
-b(nrow_loc=ldb\))286 4458 y(do)48 b(i)f(=)g(1,)h(ldb)430
-4571 y(b\(i\))e(=)i(1.0)286 4684 y(enddo)0 4910 y(!)f(Set)g(the)g
-(default)f(input)g(options)286 5023 y(call)h(f_set_default_options\(op)
-o(tion)o(s\))0 5248 y(!)g(Change)g(one)f(or)i(more)e(options)0
-5361 y(!)286 b(call)47 b(set_superlu_options\(opt)o(ions)o(,Fac)o(t=F)o
-(ACTO)o(RED\))1905 5778 y Fw(62)p eop
-%%Page: 63 64
-63 63 bop 0 280 a Fu(!)47 b(Initialize)e(ScalePermstruct)f(and)j
-(LUstruct)286 393 y(call)g(get_SuperMatrix\(A,nrow=m)o(,nco)o(l=n\))286
-506 y(call)g(f_ScalePermstructInit\(m,)41 b(n,)47 b(ScalePermstruct\))
-286 619 y(call)g(f_LUstructInit\(m,)c(n,)k(LUstruct\))0
-845 y(!)g(Initialize)e(the)i(statistics)e(variables)286
-958 y(call)i(f_PStatInit\(stat\))0 1184 y(!)g(Call)g(the)g(linear)f
-(equation)g(solver)286 1297 y(call)h(f_pdgssvx\(options,)c(A,)k
-(ScalePermstruct,)c(b,)48 b(ldb,)e(nrhs,)h(&)1002 1409
-y(grid,)g(LUstruct,)e(SOLVEstruct,)f(berr,)j(stat,)f(info\))286
-1635 y(if)i(\(info)e(==)h(0\))g(then)430 1748 y(write)f(\(*,*\))g
-('Backward)g(error:)g(',)h(\(berr\(i\),)e(i)j(=)f(1,)g(nrhs\))286
-1861 y(else)430 1974 y(write\(*,*\))e('INFO)h(from)h(f_pdgssvx)e(=)i
-(',)g(info)286 2087 y(endif)0 2313 y(!)g(Deallocate)e(SuperLU)h
-(allocated)g(storage)286 2426 y(call)h(f_PStatFree\(stat\))286
-2539 y(call)g(f_Destroy_CompRowLoc_Mat)o(rix_)o(dist)o(\(A\))286
-2652 y(call)g(f_ScalePermstructFree\(Sc)o(aleP)o(erms)o(tru)o(ct\))286
-2764 y(call)g(f_Destroy_LU\(n,)d(grid,)i(LUstruct\))286
-2877 y(call)h(f_LUstructFree\(LUstruct\))286 2990 y(call)g
-(get_superlu_options\(opti)o(ons,)41 b(SolveInitialized=init\))286
-3103 y(if)48 b(\(init)e(==)h(YES\))g(then)430 3216 y(call)f
-(f_dSolveFinalize\(options,)41 b(SOLVEstruct\))286 3329
-y(endif)0 3555 y(!)47 b(Release)f(the)h(SuperLU)f(process)g(grid)0
-3668 y(100)142 b(call)47 b(f_superlu_gridexit\(grid\))0
-3894 y(!)g(Terminate)f(the)h(MPI)g(execution)e(environment)286
-4006 y(call)i(mpi_finalize\(ierr\))0 4232 y(!)g(Destroy)f(all)h(C)h
-(structures)286 4345 y(call)f(f_destroy_gridinfo\(grid\))286
-4458 y(call)g(f_destroy_options\(option)o(s\))286 4571
-y(call)g(f_destroy_ScalePermstruc)o(t\(Sc)o(aleP)o(erm)o(stru)o(ct\))
-286 4684 y(call)g(f_destroy_LUstruct\(LUstr)o(uct\))286
-4797 y(call)g(f_destroy_SOLVEstruct\(SO)o(LVEs)o(truc)o(t\))286
-4910 y(call)g(f_destroy_SuperMatrix\(A\))286 5023 y(call)g
-(f_destroy_SuperLUStat\(st)o(at\))286 5248 y(stop)286
-5361 y(end)141 5529 y Fw(Similar)20 b(to)k(the)f(driv)m(er)e(routine)h
-Ft(p)s(ddrive.c)h Fw(in)e(C,)i(sev)m(en)h(basic)e(steps)g(are)i
-(required)d(to)i(call)f(a)i Fu(SuperLU)p 3683 5529 29
-4 v 32 w(DIST)1905 5778 y Fw(63)p eop
-%%Page: 64 65
-64 64 bop 0 280 a Fw(routine)29 b(in)g(F)-8 b(ortran:)111
-463 y(1.)46 b(Create)34 b(C)f(structures)g(used)f(in)g(Sup)s(erLU:)f
-Ft(grid)p Fw(,)j Ft(options)p Fw(,)h Ft(ScaleP)m(ermstruct)p
-Fw(,)g Ft(LUstruct)p Fw(,)e Ft(SOL)-10 b(VEstruct)p Fw(,)227
-576 y Ft(A)31 b Fw(and)g Ft(stat)p Fw(.)42 b(This)29
-b(is)i(ac)m(hiev)m(ed)h(b)m(y)f(the)g(calls)f(to)i(the)g(C)f(wrapp)s
-(er)e Fp(\\cr)-5 b(e)g(ate")38 b Fw(routines)30 b Ft(f)p
-3333 576 28 4 v 33 w(create)p 3594 576 V 33 w(XXX\(\))p
-Fw(,)227 689 y(where)g Ft(XXX)f Fw(is)h(the)g(name)h(of)f(the)h
-(corresp)s(onding)d(structure.)111 875 y(2.)46 b(Initialize)23
-b(the)i(MPI)g(en)m(vironmen)m(t)f(and)g(the)h(Sup)s(erLU)e(pro)s(cess)h
-(grid.)38 b(This)22 b(is)i(ac)m(hiev)m(ed)i(b)m(y)e(the)h(calls)f(to)
-227 988 y Ft(mpi)p 373 988 V 33 w(init\(\))g Fw(and)g(the)g(C)g(wrapp)s
-(er)f(routine)g Ft(f)p 1721 988 V 33 w(sup)s(erlu)p 2026
-988 V 32 w(gridinit\(\))p Fw(.)39 b(Note)25 b(that)g
-Ft(f)p 2893 988 V 33 w(sup)s(erlu)p 3198 988 V 32 w(gridinit\(\))f
-Fw(requires)227 1101 y(the)35 b(n)m(um)m(b)s(ers)f(of)h(ro)m(w)g(and)f
-(column)g(of)h(the)g(pro)s(cess)f(grid.)53 b(In)34 b(this)g(example,)i
-(w)m(e)f(set)h(them)e(to)i(b)s(e)e(2,)227 1214 y(resp)s(ectiv)m(ely)-8
-b(.)111 1400 y(3.)46 b(Set)37 b(up)f(the)h(input)d(matrix)i(and)h(the)f
-(righ)m(t-hand)g(side.)59 b(This)35 b(example)h(uses)g(the)h
-(distributed)d(input)227 1512 y(in)m(terface,)f(so)e(w)m(e)h(need)f(to)
-i(con)m(v)m(ert)g(the)e(input)f(matrix)g(to)j(the)e(distributed)e
-(compressed)i(ro)m(w)g(format.)227 1625 y(Pro)s(cess)40
-b(0)h(\014rst)e(reads)h(the)g(input)e(matrix)h(stored)h(on)g(disk)f(in)
-g(Harw)m(ell-Bo)s(eing)g(format)i(b)m(y)e(calling)227
-1738 y(F)-8 b(ortran)40 b(routine)d Ft(hb)s(co)s(de1\(\))p
-Fw(.)68 b(The)38 b(\014le)g(name)h(in)e(this)h(example)g(is)g
-Fu(g20.rua)p Fw(.)64 b(Then)37 b(all)h(pro)s(cesses)227
-1851 y(call)c(a)g(C)f(wrapp)s(er)g(routine)g Ft(f)p 1287
-1851 V 32 w(dcreate)p 1594 1851 V 34 w(dist)p 1765 1851
-V 32 w(matrix\(\))h Fw(to)g(distribute)e(the)i(matrix)f(to)i(all)e(the)
-h(pro)s(cesses)227 1964 y(distributed)28 b(b)m(y)j(blo)s(c)m(k)g(ro)m
-(ws.)43 b(The)31 b(righ)m(t-hand)e(side)i(matrix)f(in)g(this)g(example)
-h(is)f(a)h(column)f(v)m(ector)j(of)227 2077 y(all)g(ones.)52
-b(Note)35 b(that,)h(b)s(efore)d(setting)h(the)h(righ)m(t-hand)d(side,)i
-(w)m(e)h(use)f Ft(get)p 2879 2077 V 33 w(CompRo)m(wLo)s(c)p
-3434 2077 V 35 w(Matrix\(\))f Fw(to)227 2190 y(get)f(the)e(n)m(um)m(b)s
-(er)f(of)i(lo)s(cal)f(ro)m(ws)g(in)f(the)i(distributed)c(matrix)j
-Fv(A)p Fw(.)227 2339 y Fp(One)k(imp)-5 b(ortant)37 b(note)e(is)f(that)i
-(al)5 b(l)35 b(the)g(C)f(r)-5 b(outines)35 b(use)f(0-b)-5
-b(ase)g(d)36 b(indexing)f(scheme.)47 b(Ther)-5 b(efor)g(e,)36
-b(after)227 2452 y(pr)-5 b(o)g(c)g(ess)40 b(0)e(r)-5
-b(e)g(ads)40 b(the)e(matrix)h(in)f(c)-5 b(ompr)g(esse)g(d)40
-b(c)-5 b(olumn)39 b(format,)i(we)c(de)-5 b(cr)g(ement)40
-b(its)d(c)-5 b(olumn)39 b(p)-5 b(ointers)227 2565 y(\()p
-Fu(colptr)p Fp(\))32 b(and)h(r)-5 b(ow)34 b(indic)-5
-b(es)33 b(\()p Fu(rowind)p Fp(\))e(by)i(1)g(so)g(they)g(b)-5
-b(e)g(c)g(ome)34 b(0-b)-5 b(ase)g(d)34 b(indexing.)111
-2751 y Fw(4.)46 b(Set)35 b(the)g(input)d(argumen)m(ts:)49
-b Ft(options)p Fw(,)36 b Ft(ScaleP)m(ermstruct)p Fw(,)h
-Ft(LUstruct)p Fw(,)e(and)f Ft(stat)p Fw(.)52 b(The)34
-b(input)e(argumen)m(t)227 2864 y Ft(options)23 b Fw(con)m(trols)h(ho)m
-(w)e(the)h(linear)f(system)h(w)m(ould)e(b)s(e)i(slo)m(v)m(ed.)38
-b(The)23 b(routine)f Ft(f)p 2925 2864 V 32 w(set)p 3065
-2864 V 33 w(default)p 3359 2864 V 32 w(options)p 3665
-2864 V 33 w(dist\(\))227 2977 y Fw(sets)h(the)g Ft(options)g
-Fw(argumen)m(t)g(so)g(that)g(the)g(slo)m(v)m(er)g(p)s(erforms)e(all)g
-(the)i(functionalities.)36 b(Y)-8 b(ou)23 b(can)g(also)f(set)h(it)227
-3090 y(according)g(to)g(y)m(our)f(o)m(wn)h(needs,)h(using)d(a)i(call)f
-(to)h(the)g(F)-8 b(ortran)23 b(routine)e Ft(set)p 2829
-3090 V 33 w(sup)s(erlu)p 3134 3090 V 32 w(options\(\))p
-Fw(.)39 b Ft(LUstruct)227 3203 y Fw(is)32 b(the)i(data)f(struture)g(in)
-e(whic)m(h)h(the)h(distributed)d Fv(L)j Fw(and)g Fv(U)43
-b Fw(factors)34 b(are)f(stored.)49 b Ft(ScaleP)m(ermstruct)34
-b Fw(is)227 3315 y(the)h(data)g(struture)e(in)g(whic)m(h)g(sev)m(eral)i
-(v)m(ectors)h(describing)c(the)i(transformations)g(done)g(to)h(matrix)f
-Fv(A)227 3428 y Fw(are)i(stored.)56 b Ft(stat)35 b Fw(is)f(a)i
-(structure)f(collecting)g(the)h(statistcs)g(ab)s(out)f(run)m(time)g
-(and)g(\015op)f(coun)m(t.)57 b(These)227 3541 y(three)31
-b(structures)f(can)g(b)s(e)g(set)h(b)m(y)f(calling)f(the)i(C)f(wrapp)s
-(er)e Fp(\\init")36 b Fw(routines)30 b Ft(f)p 2991 3541
-V 32 w(XXXInit)p Fw(.)111 3727 y(5.)46 b(Call)29 b(the)i(C)f(wrapp)s
-(er)e(routine)i Ft(f)p 1375 3727 V 32 w(p)s(dgssvx\(\))h
-Fw(to)g(solv)m(e)f(the)h(equation.)111 3913 y(6.)46 b(Release)23
-b(the)e(pro)s(cess)h(grid)e(and)h(terminate)h(the)g(MPI)g(en)m
-(vironmen)m(t.)37 b(After)22 b(the)g(computation)f(on)h(a)g(pro-)227
-4026 y(cess)f(grid)e(has)h(b)s(een)g(completed,)i(the)f(pro)s(cess)e
-(grid)g(should)g(b)s(e)g(released)h(b)m(y)h(a)f(call)g(to)h
-Ft(f)p 3214 4026 V 32 w(spuerlu)p 3515 4026 V 33 w(gridexit\(\))p
-Fw(.)227 4139 y(When)30 b(all)e(computations)h(ha)m(v)m(e)i(b)s(een)e
-(completed,)h(the)f(C)g(wrapp)s(er)f(routine)h Ft(mpi)p
-3129 4139 V 32 w(\014nalize\(\))g Fw(should)f(b)s(e)227
-4252 y(called.)111 4437 y(7.)46 b(Deallo)s(cate)22 b(all)d(the)i
-(structures.)36 b(First)20 b(w)m(e)h(need)f(to)h(deallo)s(cate)f(the)h
-(storage)h(allo)s(cated)e(b)m(y)g Fu(SuperLU)p 3723 4437
-29 4 v 32 w(DIST)227 4550 y Fw(b)m(y)j(a)g(set)h(of)f
-Fp(\\fr)-5 b(e)g(e")29 b Fw(calls.)37 b(Note)24 b(that)g(this)d(should)
-g(b)s(e)h(called)g(b)s(efore)h Ft(f)p 2660 4550 28 4
-v 32 w(spuerlu)p 2961 4550 V 33 w(gridexit\(\))p Fw(,)i(since)e(some)g
-(of)227 4663 y(the)30 b Fp(\\fr)-5 b(e)g(e")35 b Fw(calls)28
-b(use)h(the)h(grid.)39 b(Then)28 b(w)m(e)h(call)g(the)g(C)g(wrapp)s(er)
-e Fp(\\destr)-5 b(oy")37 b Fw(routines)28 b Ft(f)p 3316
-4663 V 33 w(destro)m(y)p 3619 4663 V 33 w(XXX\(\))227
-4776 y Fw(to)49 b(destro)m(y)f(all)f(the)g(F)-8 b(ortran)49
-b(handles.)91 b(Note)49 b(that)f Ft(f)p 2257 4776 V 33
-w(destro)m(y)p 2560 4776 V 33 w(gridinfo\(\))h Fw(should)c(b)s(e)j
-(called)e(after)227 4889 y Ft(f)p 260 4889 V 33 w(spuerlu)p
-562 4889 V 32 w(gridexit\(\))p Fw(.)0 5132 y Fm(4.10.1)113
-b(Callable)36 b(functions)h(in)g(the)g(F)-9 b(ortran)37
-b(90)h(mo)s(dule)e(\014le)h Fb(spuerlu)p 3105 5132 33
-4 v 40 w(mo)s(d.f90)0 5303 y Fw(The)20 b(F)-8 b(ortran)21
-b(90)g(mo)s(dule)d Fu(superlu)p 1260 5303 29 4 v 33 w(mod)h
-Fw(con)m(tains)i(the)f(in)m(terface)h(routines)e(that)i(can)g
-(manipulate)d(a)j Fu(SuperLU)p 3857 5303 V 32 w(DIST)0
-5416 y Fw(ob)5 b(ject)29 b(from)e(F)-8 b(ortran.)40 b(The)27
-b(ob)5 b(ject)29 b(is)e(p)s(oin)m(ted)f(to)i(b)m(y)g(the)g(corresp)s
-(onding)d(handle)i(input)e(to)k(these)f(routines.)0 5529
-y(The)39 b(routines)g(are)g(divided)e(in)m(to)j(t)m(w)m(o)h(sets.)69
-b(One)39 b(set)h(is)e(to)j(get)g(the)e(prop)s(erties)f(of)i(an)f(ob)5
-b(ject,)43 b(with)c(the)1905 5778 y(64)p eop
-%%Page: 65 66
-65 65 bop 0 280 a Fw(routine)31 b(names)h(\\)p Fu(get)p
-790 280 29 4 v 34 w(XXX\(\))p Fw(".)44 b(Another)31 b(set)i(is)e(to)h
-(set)g(some)h(prop)s(erties)d(for)h(an)h(ob)5 b(ject,)33
-b(with)e(the)h(routine)0 393 y(names)c(\\)p Fu(set)p
-471 393 V 34 w(XXX\(\))p Fw(".)38 b(These)28 b(functions)e(ha)m(v)m(e)j
-(optional)e(argumen)m(ts,)i(so)e(the)h(users)f(do)h(not)g(ha)m(v)m(e)g
-(to)h(pro)m(vide)0 506 y(the)37 b(full)d(set)j(of)f(parameters.)59
-b Fu(Superlu)p 1451 506 V 33 w(mod)35 b Fw(mo)s(dule)g(uses)h
-Fu(superluparam)p 2765 506 V 31 w(mod)g Fw(mo)s(dule)f(that)i
-(de\014nes)e(all)0 619 y(the)30 b(in)m(teger)g(constan)m(ts)i(corresp)s
-(onding)27 b(to)k(the)f(en)m(umeration)g(constan)m(ts)h(in)d
-Fu(SuperLU)p 3081 619 V 33 w(DIST)p Fw(.)h(Belo)m(w)h(are)h(the)0
-732 y(calling)e(sequences)i(of)f(all)f(the)i(routines.)0
-945 y Fu(subroutine)45 b(get_GridInfo\(grid,)e(iam,)j(nprow,)h(npcol\))
-95 1057 y(integer\(superlu_ptr\))c(::)k(grid)95 1170
-y(integer,)f(optional)g(::)h(iam,)f(nprow,)g(npcol)0
-1396 y(subroutine)f(get_SuperMatrix\(A,)e(nrow,)j(ncol\))95
-1509 y(integer\(superlu_ptr\))d(::)k(A)95 1622 y(integer,)f(optional)g
-(::)h(nrow,)f(ncol)0 1848 y(subroutine)f(set_SuperMatrix\(A,)e(nrow,)j
-(ncol\))95 1961 y(integer\(superlu_ptr\))d(::)k(A)95
-2074 y(integer,)f(optional)g(::)h(nrow,)f(ncol)0 2299
-y(subroutine)f(get_CompRowLoc_Matrix\(A,)c(nrow,)47 b(ncol,)f(nnz_loc,)
-f(nrow_loc,)h(fst_row\))95 2412 y(integer\(superlu_ptr\))d(::)k(A)95
-2525 y(integer,)f(optional)g(::)h(nrow,)f(ncol,)g(nnz_loc,)g(nrow_loc,)
-f(fst_row)0 2751 y(subroutine)g(set_CompRowLoc_Matrix\(A,)c(nrow,)47
-b(ncol,)f(nnz_loc,)f(nrow_loc,)h(fst_row\))95 2864 y
-(integer\(superlu_ptr\))d(::)k(A)95 2977 y(integer,)f(optional)g(::)h
-(nrow,)f(ncol,)g(nnz_loc,)g(nrow_loc,)f(fst_row)0 3203
-y(subroutine)g(get_superlu_options\(opt,)c(Fact,)47 b(Trans,)f(Equil,)g
-(RowPerm,)f(&)1480 3316 y(ColPerm,)g(ReplaceTinyPivot,)e(IterRefine,)i
-(&)1480 3429 y(SolveInitialized,)e(RefineInitialized\))0
-3542 y(integer\(superlu_ptr\))f(::)47 b(opt)95 3654 y(integer,)f
-(optional)g(::)h(Fact,)f(Trans,)g(Equil,)g(RowPerm,)g(ColPerm,)f(&)1098
-3767 y(ReplaceTinyPivot,)e(IterRefine,)i(SolveInitialized,)e(&)1098
-3880 y(RefineInitialized)0 4106 y(subroutine)i
-(set_superlu_options\(opt,)c(Fact,)47 b(Trans,)f(Equil,)g(RowPerm,)f(&)
-1480 4219 y(ColPerm,)g(ReplaceTinyPivot,)e(IterRefine,)i(&)1480
-4332 y(SolveInitialized,)e(RefineInitialized\))95 4445
-y(integer\(superlu_ptr\))g(::)k(opt)95 4558 y(integer,)f(optional)g(::)
-h(Fact,)f(Trans,)g(Equil,)g(RowPerm,)g(ColPerm,)f(&)1098
-4671 y(ReplaceTinyPivot,)e(IterRefine,)i(SolveInitialized,)e(&)1098
-4784 y(RefineInitialized)0 5027 y Fm(4.10.2)113 b(C)37
-b(wrapp)s(er)h(functions)f(callable)f(b)m(y)i(F)-9 b(ortran)37
-b(in)g(\014le)g Fb(spuerlu)p 3051 5027 33 4 v 39 w(c2f)p
-3227 5027 V 40 w(wrap.c)0 5199 y Fw(This)26 b(\014le)g(con)m(tains)i
-(the)g(F)-8 b(ortran-callable)27 b(C)g(functions)f(whic)m(h)g(wraps)h
-(around)f(the)i(user-callable)e(C)h(routines)0 5311 y(in)f
-Fu(SuperLU)p 445 5311 29 4 v 32 w(DIST)p Fw(.)g(The)h(functions)f(are)h
-(divided)e(in)m(to)i(three)g(classes:)39 b(1\))28 b(allo)s(cate)g(a)f
-(C)g(structure)g(and)f(return)0 5424 y(a)31 b(handle)e(to)j(F)-8
-b(ortran,)31 b(or)g(deallo)s(cate)g(the)g(memory)g(of)f(of)h(a)g(C)f
-(structure)h(giv)m(en)f(its)g(F)-8 b(ortran)32 b(handle;)d(2\))j(get)
-1905 5778 y(65)p eop
-%%Page: 66 67
-66 66 bop 0 280 a Fw(or)29 b(set)g(the)g(v)-5 b(alue)28
-b(of)h(certain)f(\014elds)f(of)i(a)g(C)f(structure)h(giv)m(en)f(its)g
-(F)-8 b(ortran)30 b(handle;)e(3\))h(wrapp)s(er)e(functions)g(for)0
-393 y(the)k Fu(SuperLU)p 499 393 29 4 v 32 w(DIST)e Fw(C)h(functions.)
-39 b(Belo)m(w)31 b(are)g(the)g(calling)e(sequences)h(of)h(these)g
-(routines.)0 561 y Fu(/*)47 b(functions)e(that)i(allocate)f(memory)g
-(for)h(a)g(structure)e(and)i(return)f(a)i(handle)e(*/)0
-674 y(void)h(f_create_gridinfo\(fptr)41 b(*handle\))0
-787 y(void)47 b(f_create_options\(fptr)42 b(*handle\))0
-900 y(void)47 b(f_create_ScalePermstruc)o(t\(fp)o(tr)41
-b(*handle\))0 1013 y(void)47 b(f_create_LUstruct\(fptr)41
-b(*handle\))0 1126 y(void)47 b(f_create_SOLVEstruct\(fp)o(tr)42
-b(*handle\))0 1238 y(void)47 b(f_create_SuperMatrix\(fp)o(tr)42
-b(*handle\))0 1351 y(void)47 b(f_create_SuperLUStat\(fp)o(tr)42
-b(*handle\))0 1577 y(/*)47 b(functions)e(that)i(free)g(the)g(memory)f
-(allocated)f(by)i(the)g(above)f(functions)g(*/)0 1690
-y(void)h(f_destroy_gridinfo\(fptr)41 b(*handle\))0 1803
-y(void)47 b(f_destroy_options\(fptr)41 b(*handle\))0
-1916 y(void)47 b(f_destroy_ScalePermstru)o(ct\(f)o(ptr)41
-b(*handle\))0 2029 y(void)47 b(f_destroy_LUstruct\(fptr)41
-b(*handle\))0 2142 y(void)47 b(f_destroy_SOLVEstruct\(f)o(ptr)41
-b(*handle\))0 2255 y(void)47 b(f_destroy_SuperMatrix\(f)o(ptr)41
-b(*handle\))0 2368 y(void)47 b(f_destroy_SuperLUStat\(f)o(ptr)41
-b(*handle\))0 2593 y(/*)47 b(functions)e(that)i(get)g(or)g(set)g
-(certain)f(fields)g(in)h(a)h(C)f(structure.)e(*/)0 2706
-y(void)i(f_get_gridinfo\(fptr)42 b(*grid,)k(int)h(*iam,)g(int)f
-(*nprow,)g(int)h(*npcol\))0 2819 y(void)g(f_get_SuperMatrix\(fptr)41
-b(*A,)47 b(int)g(*nrow,)f(int)h(*ncol\))0 2932 y(void)g
-(f_set_SuperMatrix\(fptr)41 b(*A,)47 b(int)g(*nrow,)f(int)h(*ncol\))0
-3045 y(void)g(f_get_CompRowLoc_Matrix)o(\(fpt)o(r)42
-b(*A,)47 b(int)g(*m,)f(int)h(*n,)g(int)g(*nnz_loc,)1814
-3158 y(int)g(*m_loc,)e(int)i(*fst_row\))0 3271 y(void)g
-(f_set_CompRowLoc_Matrix)o(\(fpt)o(r)42 b(*A,)47 b(int)g(*m,)f(int)h
-(*n,)g(int)g(*nnz_loc,)1814 3384 y(int)g(*m_loc,)e(int)i(*fst_row\))0
-3497 y(void)g(f_get_superlu_options\(f)o(ptr)41 b(*opt,)47
-b(int)g(*Fact,)f(int)h(*Trans,)e(int)i(*Equil,)1289 3610
-y(int)g(*RowPerm,)e(int)i(*ColPerm,)e(int)i(*ReplaceTinyPivot,)1289
-3723 y(int)g(*IterRefine,)d(int)j(*SolveInitialized,)1289
-3835 y(int)g(*RefineInitialized\))0 3948 y(void)g
-(f_set_superlu_options\(f)o(ptr)41 b(*opt,)47 b(int)g(*Fact,)f(int)h
-(*Trans,)e(int)i(*Equil,)1289 4061 y(int)g(*RowPerm,)e(int)i(*ColPerm,)
-e(int)i(*ReplaceTinyPivot,)1289 4174 y(int)g(*IterRefine,)d(int)j
-(*SolveInitialized,)1289 4287 y(int)g(*RefineInitialized\))0
-4513 y(/*)g(wrappers)f(for)h(SuperLU_DIST)d(routines)i(*/)0
-4626 y(void)h(f_dCreate_CompRowLoc_Ma)o(trix)o(_di)o(st\(f)o(ptr)41
-b(*A,)47 b(int)g(*m,)g(int)g(*n,)g(int)g(*nnz_loc,)1814
-4739 y(int)g(*m_loc,)e(int)i(*fst_row,)f(double)g(*nzval,)1814
-4852 y(int)h(*colind,)e(int)i(*rowptr,)f(int)g(*stype,)1814
-4965 y(int)h(*dtype,)e(int)i(*mtype\))0 5077 y(void)g
-(f_set_default_options\(f)o(ptr)41 b(*options\))0 5190
-y(void)47 b(f_superlu_gridinit\(int)41 b(*Bcomm,)46 b(int)h(*nprow,)f
-(int)h(*npcol,)f(fptr)g(*grid\))0 5303 y(void)h
-(f_superlu_gridexit\(fptr)41 b(*grid\))0 5416 y(void)47
-b(f_ScalePermstructInit\(i)o(nt)42 b(*m,)k(int)h(*n,)g(fptr)g
-(*ScalePermstruct\))0 5529 y(void)g(f_ScalePermstructFree\(f)o(ptr)41
-b(*ScalePermstruct\))1905 5778 y Fw(66)p eop
-%%Page: 67 68
-67 67 bop 0 280 a Fu(void)47 b(f_PStatInit\(fptr)c(*stat\))0
-393 y(void)k(f_PStatFree\(fptr)c(*stat\))0 506 y(void)k
-(f_LUstructInit\(int)42 b(*m,)47 b(int)g(*n,)g(fptr)g(*LUstruct\))0
-619 y(void)g(f_LUstructFree\(fptr)42 b(*LUstruct\))0
-732 y(void)47 b(f_Destroy_LU\(int)c(*n,)k(fptr)g(*grid,)f(fptr)g
-(*LUstruct\))0 845 y(void)h(f_Destroy_CompRowLoc_Ma)o(trix)o(_di)o
-(st\(f)o(ptr)41 b(*A\))0 958 y(void)47 b(f_dSolveFinalize\(fptr)42
-b(*options,)j(fptr)i(*SOLVEstruct\))0 1071 y(void)g(f_pdgssvx\(fptr)d
-(*options,)h(fptr)h(*A,)h(fptr)g(*ScalePermstruct,)c(double)j(*B,)716
-1184 y(int)h(*ldb,)f(int)h(*nrhs,)f(fptr)h(*grid,)f(fptr)h(*LUstruct,)
-716 1297 y(fptr)g(*SOLVEstruct,)d(double)i(*berr,)g(fptr)h(*stat,)f
-(int)h(*info\))0 1409 y(void)g(f_check_malloc\(int)42
-b(*iam\))1905 5778 y Fw(67)p eop
-%%Page: 68 69
-68 68 bop 0 945 a Fy(Bibliograph)-6 b(y)45 1390 y Fw([1])47
-b(E.)25 b(Anderson,)g(Z.)g(Bai,)i(C.)e(Bisc)m(hof,)h(J.)f(Demmel,)i(J.)
-e(Dongarra,)i(J.)e(Du)g(Croz,)i(A.)e(Green)m(baum,)h(S.)f(Ham-)187
-1502 y(marling,)i(A.)h(McKenney)-8 b(,)29 b(S.)e(Ostrouc)m(ho)m(v,)i
-(and)e(D.)i(Sorensen.)35 b Fp(LAP)-7 b(A)n(CK)29 b(Users')h(Guide,)h(R)
--5 b(ele)g(ase)31 b(2.0)p Fw(.)187 1615 y(SIAM,)f(Philadelphia,)d
-(1995.)42 b(324)32 b(pages.)45 1803 y([2])47 b(M.)31
-b(Arioli,)e(J.)i(W.)g(Demmel,)h(and)e(I.)h(S.)f(Du\013.)42
-b(Solving)29 b(sparse)i(linear)e(systems)i(with)e(sparse)h(bac)m(kw)m
-(ard)187 1916 y(error.)40 b Fp(SIAM)32 b(J.)g(Matrix)h(A)n(nal.)g
-(Appl.)p Fw(,)e(10\(2\):165{190,)36 b(April)28 b(1989.)45
-2104 y([3])47 b(L.)33 b(S.)g(Blac)m(kford,)h(J.)f(Choi,)f(E.)h(D'Azev)m
-(edo,)k(J.)32 b(Demmel,)i(I.)f(Dhillon,)f(J.)h(Dongarra,)h(S.)f
-(Hammarling,)187 2216 y(G.)g(Henry)-8 b(,)34 b(A.)g(P)m(etitet,)h(K.)e
-(Stanley)-8 b(,)34 b(D.)g(W)-8 b(alk)m(er,)35 b(and)d(R.)h(C.)g(Whaley)
--8 b(.)49 b Fp(Sc)-5 b(aLAP)e(A)n(CK)35 b(Users')f(Guide)p
-Fw(.)187 2329 y(SIAM,)c(Philadelphia,)d(1997.)42 b(325)32
-b(pages.)45 2517 y([4])47 b(Timoth)m(y)c(A.)g(Da)m(vis,)48
-b(John)42 b(R.)h(Gilb)s(ert,)i(Stefan)f(I.)f(Larimore,)j(and)d(Esmond)f
-(Ng.)80 b(A)44 b(column)e(ap-)187 2630 y(pro)m(ximate)32
-b(minim)m(um)e(degree)j(ordering)e(algorithm.)46 b(T)-8
-b(ec)m(hnical)32 b(Rep)s(ort)g(TR-00-005,)j(Computer)d(and)187
-2743 y(Information)42 b(Sciences)g(Departmen)m(t,)48
-b(Univ)m(ersit)m(y)42 b(of)h(Florida,)j(2000.)80 b(submitted)41
-b(to)j Fp(A)n(CM)f(T)-7 b(r)i(ans.)187 2856 y(Math.)33
-b(Softwar)-5 b(e)p Fw(.)45 3043 y([5])47 b(James)24 b(W.)g(Demmel,)i
-(Stanley)d(C.)h(Eisenstat,)h(John)e(R.)h(Gilb)s(ert,)g(Xiao)m(y)m(e)i
-(S.)d(Li,)i(and)e(Joseph)g(W.)i(H.)f(Liu.)187 3156 y(A)j(sup)s(erno)s
-(dal)d(approac)m(h)k(to)g(sparse)e(partial)g(piv)m(oting.)35
-b Fp(SIAM)29 b(J.)g(Matrix)h(A)n(nalysis)g(and)h(Applic)-5
-b(ations)p Fw(,)187 3269 y(20\(3\):720{755,)36 b(1999.)45
-3457 y([6])47 b(James)41 b(W.)g(Demmel,)j(John)39 b(R.)i(Gilb)s(ert,)h
-(and)e(Xiao)m(y)m(e)i(S.)f(Li.)70 b(An)41 b(async)m(hronous)f(parallel)
-f(sup)s(ern-)187 3570 y(o)s(dal)d(algorithm)g(for)g(sparse)h(gaussian)f
-(elimination.)57 b Fp(SIAM)38 b(J.)g(Matrix)h(A)n(nalysis)g(and)h
-(Applic)-5 b(ations)p Fw(,)187 3683 y(20\(4\):915{952,)36
-b(1999.)45 3870 y([7])47 b(J.)25 b(Dongarra,)j(J.)d(Du)h(Croz,)h(I.)e
-(S.)h(Du\013,)g(and)f(S.)g(Hammarling.)32 b(A)26 b(Set)f(of)h(Lev)m(el)
-g(3)g(Basic)g(Linear)e(Algebra)187 3983 y(Subprograms.)39
-b Fp(A)n(CM)31 b(T)-7 b(r)i(ans.)34 b(Math.)f(Soft.)p
-Fw(,)e(16:1{17,)j(1990.)45 4171 y([8])47 b(J.)31 b(Dongarra,)h(J.)e(Du)
-h(Croz,)g(S.)g(Hammarling,)f(and)g(Ric)m(hard)g(J.)h(Hanson.)41
-b(An)31 b(Extended)f(Set)h(of)g(F)m(OR-)187 4284 y(TRAN)c(Basic)g
-(Linear)f(Algebra)h(Subprograms.)34 b Fp(A)n(CM)28 b(T)-7
-b(r)i(ans.)31 b(Math.)f(Soft.)p Fw(,)f(14\(1\):1{17,)j(Marc)m(h)c
-(1988.)45 4471 y([9])47 b(Iain)32 b(S.)h(Du\013)g(and)g(Jac)m(k)m(o)i
-(Koster.)49 b(The)33 b(design)f(and)g(use)h(of)g(algorithms)f(for)h(p)s
-(erm)m(uting)f(large)h(en)m(tries)187 4584 y(to)28 b(the)g(diagonal)f
-(of)h(sparse)g(matrices.)36 b Fp(SIAM)30 b(J.)f(Matrix)i(A)n(nalysis)g
-(and)g(Applic)-5 b(ations)p Fw(,)30 b(20\(4\):889{901,)187
-4697 y(1999.)0 4885 y([10])47 b(I.S.)26 b(Du\013,)h(R.G.)f(Grimes,)h
-(and)e(J.G.)i(Lewis.)32 b(Users')26 b(guide)f(for)h(the)g(Harw)m
-(ell-Bo)s(eing)g(sparse)f(matrix)h(col-)187 4998 y(lection)e(\(release)
-h(1\).)32 b(T)-8 b(ec)m(hnical)24 b(Rep)s(ort)g(RAL-92-086,)29
-b(Rutherford)23 b(Appleton)h(Lab)s(oratory)-8 b(,)26
-b(Decem)m(b)s(er)187 5111 y(1992.)0 5298 y([11])47 b(Alan)29
-b(George,)i(Joseph)e(Liu,)f(and)h(Esmond)f(Ng.)40 b(A)29
-b(data)h(structure)f(for)g(sparse)g(QR)g(and)g(LU)h(factoriza-)187
-5411 y(tions.)40 b Fp(SIAM)32 b(J.)g(Sci.)g(Stat.)h(Comput.)p
-Fw(,)f(9:100{121,)j(1988.)1905 5778 y(68)p eop
-%%Page: 69 70
-69 69 bop 0 280 a Fw([12])47 b(Alan)38 b(George)h(and)f(Esmond)f(Ng.)65
-b(Sym)m(b)s(olic)37 b(factorization)i(for)f(sparse)g(Gaussian)f
-(elimination)f(with)187 393 y(partial)29 b(piv)m(oting.)40
-b Fp(SIAM)32 b(J.)g(Sci.)g(Stat.)h(Comput.)p Fw(,)f(8\(6\):877{898,)k
-(1987.)0 578 y([13])47 b(J.)32 b(R.)g(Gilb)s(ert,)f(X.)i(S.)e(Li,)h(E.)
-g(G.)h(Ng,)g(and)f(B.)h(W.)f(P)m(eyton.)47 b(Computing)31
-b(ro)m(w)h(and)g(column)f(coun)m(ts)h(for)187 691 y(sparse)e
-Fv(QR)h Fw(and)f Fv(LU)40 b Fw(factorization.)h Fp(BIT)p
-Fw(,)31 b(41\(4\):693{710,)36 b(2001.)0 875 y([14])47
-b(J.)24 b(R.)g(Gilb)s(ert)f(and)h(E.)g(G.)h(Ng.)31 b(Predicting)23
-b(structure)h(in)f(nonsymmetric)g(sparse)h(matrix)f(factorizations.)187
-988 y(In)34 b(Alan)h(George,)j(John)d(R.)g(Gilb)s(ert,)g(and)g(Joseph)f
-(W.)i(H.)g(Liu,)f(editors,)h Fp(Gr)-5 b(aph)40 b(The)-5
-b(ory)38 b(and)g(Sp)-5 b(arse)187 1101 y(Matrix)33 b(Computation)p
-Fw(,)g(pages)e(107{139.)j(Springer-V)-8 b(erlag,)29 b(1993.)0
-1285 y([15])47 b(B.)66 b(Hendric)m(kson)e(and)h(R.)h(Leland.)144
-b(The)65 b(CHA)m(CO)g(User's)g(Guide.)g(V)-8 b(ersion)65
-b(1.0.)146 b(T)-8 b(ec)m(hni-)187 1398 y(cal)56 b(Rep)s(ort)f
-(SAND93-2339)k Fq(\017)e Fw(UC-405,)63 b(Sandia)55 b(National)h(Lab)s
-(oratories,)62 b(Albuquerque,)e(1993.)187 1511 y(h)m
-(ttp://www.cs.sandia.go)m(v/)p Fq(\030)p Fw(bahendr/c)m(haco.h)m(tml.)0
-1695 y([16])47 b(N.)40 b(J.)f(Higham.)68 b(Algorithm)39
-b(674:)60 b(F)m(OR)-8 b(TRAN)41 b(co)s(des)f(for)f(estimating)g(the)h
-(one-norm)g(of)g(a)g(real)f(or)187 1808 y(complex)30
-b(matrix,)g(with)f(applications)f(to)k(condition)d(estimation.)40
-b Fp(A)n(CM)31 b(T)-7 b(r)i(ans.)34 b(Math.)f(Soft.)p
-Fw(,)e(14:381{)187 1921 y(396,)h(1988.)0 2105 y([17])47
-b(N.)31 b(J.)f(Higham.)40 b Fp(A)-5 b(c)g(cur)g(acy)33
-b(and)h(Stability)f(of)g(Numeric)-5 b(al)33 b(A)n(lgorithms)p
-Fw(.)42 b(SIAM,)31 b(1996.)0 2290 y([18])47 b(G.)22 b(Karypis)e(and)h
-(V.)h(Kumar.)k Fa(Me)-15 b(T)g(iS)24 b Fp({)h(A)g(Softwar)-5
-b(e)26 b(Package)f(for)g(Partitioning)h(Unstructur)-5
-b(e)g(d)26 b(Gr)-5 b(aphs,)187 2402 y(Partitioning)24
-b(Meshes,)h(and)g(Computing)f(Fil)5 b(l-R)-5 b(e)g(ducing)24
-b(Or)-5 b(derings)25 b(of)e(Sp)-5 b(arse)25 b(Matric)-5
-b(es)24 b({)g(V)-7 b(ersion)24 b(4.0)p Fw(.)187 2515
-y(Univ)m(ersit)m(y)29 b(of)i(Minnesota,)g(Septem)m(b)s(er)e(1998.)43
-b(h)m(ttp://www-users.cs.umn.edu/)p Fq(\030)p Fw(k)-5
-b(arypis/metis.)0 2700 y([19])47 b(George)35 b(Karypis)c(and)h(Vipin)f
-(Kumar.)48 b(Serial)31 b(and)h(parallel)g(soft)m(w)m(are)i(pac)m(k)-5
-b(ages)35 b(for)e(partitioning)e(un-)187 2813 y(structured)39
-b(graphs)h(and)g(for)h(computing)e(\014ll-reducing)f(orderings)h(of)i
-(sparse)f(matrices.)71 b(AHPCR)m(C,)187 2925 y(Univ)m(ersit)m(y)29
-b(of)i(Minnesota.)g(h)m(ttp://www.arc.umn.edu/soft)m(w)m(are/.)0
-3110 y([20])47 b(C.)39 b(La)m(wson,)j(R.)e(Hanson,)i(D.)e(Kincaid,)g
-(and)f(F.)h(Krogh.)68 b(Basic)40 b(Linear)e(Algebra)h(Subprograms)f
-(for)187 3223 y(Fortran)30 b(usage.)42 b Fp(A)n(CM)31
-b(T)-7 b(r)i(ans.)34 b(Math.)f(Soft.)p Fw(,)e(5:308{323,)k(1979.)0
-3407 y([21])47 b(Xiao)m(y)m(e)41 b(S.)f(Li.)68 b(Sparse)39
-b(Gaussian)g(elimination)e(on)j(high)e(p)s(erformance)h(computers.)69
-b(T)-8 b(ec)m(hnical)39 b(Re-)187 3520 y(p)s(ort)c(UCB//CSD-96-919,)40
-b(Computer)35 b(Science)g(Division,)g(U.C.)h(Berk)m(eley)-8
-b(,)38 b(Septem)m(b)s(er)d(1996.)58 b(Ph.D)187 3633 y(dissertation.)0
-3817 y([22])47 b(Xiao)m(y)m(e)29 b(S.)e(Li.)35 b(An)27
-b(o)m(v)m(erview)g(of)h(Sup)s(erLU:)e(Algorithms,)g(implemen)m(tation,)
-h(and)g(user)g(in)m(terface.)36 b(T)-8 b(ec)m(h-)187
-3930 y(nical)29 b(Rep)s(ort)h(LBNL-53848,)j(La)m(wrence)e(Berk)m(eley)h
-(National)e(Lab)s(oratory)-8 b(,)31 b(Septem)m(b)s(er)f(2003.)0
-4114 y([23])47 b(Xiao)m(y)m(e)35 b(S.)f(Li)f(and)g(James)h(W.)h
-(Demmel.)51 b(Making)34 b(sparse)g(Gaussian)f(elimination)e(scalable)i
-(b)m(y)h(static)187 4227 y(piv)m(oting.)40 b(In)30 b
-Fp(Pr)-5 b(o)g(c)g(e)g(e)g(dings)34 b(of)f(SC98:)43 b(High)32
-b(Performanc)-5 b(e)34 b(Networking)f(and)h(Computing)g(Confer)-5
-b(enc)g(e)p Fw(,)187 4340 y(Orlando,)29 b(Florida,)g(No)m(v)m(em)m(b)s
-(er)j(7{13)g(1998.)0 4524 y([24])47 b(Xiao)m(y)m(e)35
-b(S.)f(Li)f(and)g(James)h(W.)g(Demmel.)51 b(Sup)s(erLU)p
-2089 4524 28 4 v 31 w(DIST:)33 b(A)h(scalable)f(distributed-memory)e
-(sparse)187 4637 y(direct)d(solv)m(er)h(for)g(unsymmetric)e(linear)g
-(systems.)39 b Fp(A)n(CM)29 b(T)-7 b(r)i(ans.)33 b(Mathematic)-5
-b(al)33 b(Softwar)-5 b(e)p Fw(,)32 b(29\(2\):110{)187
-4750 y(140,)g(June)d(2003.)0 4935 y([25])47 b(Joseph)39
-b(W.H.)j(Liu.)68 b(Mo)s(di\014cation)39 b(of)h(the)g(minim)m(um)e
-(degree)i(algorithm)g(b)m(y)g(m)m(ultiple)d(elimination.)187
-5048 y Fp(A)n(CM)31 b(T)-7 b(r)i(ans.)34 b(Math.)f(Softwar)-5
-b(e)p Fw(,)33 b(11:141{153,)i(1985.)0 5232 y([26])47
-b(Message)32 b(Passing)d(In)m(terface)j(\(MPI\))f(forum.)40
-b(h)m(ttp://www.mpi-forum.org/.)0 5416 y([27])47 b(W.)25
-b(Oettli)e(and)g(W.)i(Prager.)31 b(Compatibilit)m(y)21
-b(of)k(appro)m(ximate)f(solution)f(of)h(linear)e(equations)i(with)f
-(giv)m(en)187 5529 y(error)30 b(b)s(ounds)e(for)i(co)s(e\016cien)m(ts)h
-(and)f(righ)m(t)g(hand)f(sides.)40 b Fp(Num.)32 b(Math.)p
-Fw(,)f(6:405{409,)j(1964.)1905 5778 y(69)p eop
-%%Page: 70 71
-70 70 bop 0 280 a Fw([28])47 b(F)-8 b(rancois)33 b(P)m(ellegrini.)44
-b(Scotc)m(h)34 b(3.4)g(user's)e(guide.)46 b(T)-8 b(ec)m(h)33
-b(rep)s(ort)f(1264-01,)k(LaBRI,)d(URM)g(CNRS)f(5800,)187
-393 y(Univ)m(ersit)m(y)d(Bordeaux)i(I,)f(F)-8 b(rance,)32
-b(No)m(v)m(em)m(b)s(er)g(2001.)42 b(h)m(ttp://www.labri.fr/)p
-Fq(\030)p Fw(p)s(elegrin/scotc)m(h.)0 581 y([29])47 b(POSIX)f(System)h
-(Application)f(Arogram)i(In)m(terface:)75 b(Threads)47
-b(extension)g([C)g(Language],)53 b(POSIX)187 694 y(1003.1c)33
-b(draft)d(4.)41 b(IEEE)30 b(Standards)f(Departmen)m(t.)0
-881 y([30])47 b(R.D.)32 b(Sk)m(eel.)44 b(Iterativ)m(e)33
-b(re\014nemen)m(t)e(implies)e(n)m(umerical)h(stabilit)m(y)g(for)i
-(Gaussian)e(elimination.)42 b Fp(Mathe-)187 994 y(matics)33
-b(of)g(Computation)p Fw(,)g(35\(151\):817{832)q(,)j(1980.)1905
-5778 y(70)p eop
-%%Trailer
-end
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/MAKE_INC/make.alpha b/MAKE_INC/make.alpha
index a19aa2c..18edf24 100644
--- a/MAKE_INC/make.alpha
+++ b/MAKE_INC/make.alpha
@@ -21,10 +21,12 @@ PLAT = _alpha
 #
 #  The name of the libraries to be created/linked to
 #
-TMGLIB       = libtmglib.a
-SUPERLULIB   =lib superlu_3.0.a
-BLASDEF      = -DUSE_VENDOR_BLAS
-BLASLIB      = -ldxml
+SuperLUroot	= $(HOME)/Codes/SuperLU_4.3
+SUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_4.3.a
+BLASDEF      	= -DUSE_VENDOR_BLAS
+BLASLIB      	= -ldxml
+TMGLIB       	= libtmglib.a
+LIBS		= $(SUPERLULIB) $(BLASLIB)
 
 #
 #  The archiver and the flag(s) to use when building archive (library)
@@ -36,9 +38,10 @@ RANLIB       = ranlib
 
 CC           = cc
 CFLAGS	     = -O2
+NOOPTS       = 
 FORTRAN	     = f77
 FFLAGS       = -O
-LOADER       = cc
+LOADER       = ${CC}
 LOADOPTS     = -O2
 #
 # The directory in which Matlab is installed
diff --git a/MAKE_INC/make.sp b/MAKE_INC/make.altix
similarity index 57%
copy from MAKE_INC/make.sp
copy to MAKE_INC/make.altix
index a6d08f7..3c38206 100644
--- a/MAKE_INC/make.sp
+++ b/MAKE_INC/make.altix
@@ -16,20 +16,20 @@
 #
 #  The machine (platform) identifier to append to the library names
 #
-PLAT = _sp
+PLAT = _Altix
 
 #
 #  The name of the libraries to be created/linked to
 #
-TMGLIB       = libtmglib.a
-SUPERLULIB   = libsuperlu_3.0.a
-# 
-# If you don't have ESSL, you can use the following blaslib instead:
-#           BLASLIB = -lblas -lxlf -lxlf90
-# which may be slower than ESSL
-#
+SuperLUroot	= $(HOME)/Codes/SuperLU_4.3
+SUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_4.3.a
+
 BLASDEF	     = -DUSE_VENDOR_BLAS
-BLASLIB      = -lessl
+#BLASLIB      = -L/usr/common/intel/mkl/8.1.014/lib/64 \
+#		-lmkl_solver -lmkl_lapack -lmkl_ipf -lguide -lm
+BLASLIB	     = $(MKL)
+TMGLIB       = tmglib$(PLAT).a
+LIBS	= $(SUPERLULIB) $(BLASLIB)
 
 #
 #  The archiver and the flag(s) to use when building archive (library)
@@ -39,20 +39,20 @@ ARCH         = ar
 ARCHFLAGS    = cr
 RANLIB       = ranlib
 
-CC           = xlc
-CFLAGS       = -O3 -qarch=pwr3 -qalias=allptrs
-FORTRAN	     = xlf
-FFLAGS       = -O3 -qarch=pwr3
-LOADER       = xlc
-LOADOPTS     = -bmaxdata:0x80000000
+CC           = icc
+ISA	     = -ftz -mp
+CFLAGS       = $(ISA) -O3
+NOOPTS	     = $(ISA) -O0
+FORTRAN	     = ifort
+FFLAGS       = -ftz -mp -O3
+LOADER       = ${CC}
+LOADOPTS     = $(ISA)
+
 #
-#  C preprocessor defs for compilation for the Fortran interface
-#  (-DNoChange, -DAdd_, -DUpCase, or -DAdd__)
+#  C preprocessor defs for compilation (-DNoChange, -DAdd_, or -DUpCase)
 #
-CDEFS        = -DNoChange
+CDEFS        = -DAdd_
 #
 # The directory in which Matlab is installed
 #
-MATLAB	     = /usr/local/matlab
-
-
+MATLAB	= /usr/common/usg/matlab/7.1.0.R14
diff --git a/MAKE_INC/make.cray b/MAKE_INC/make.cray
index e2d5846..1e1cc03 100644
--- a/MAKE_INC/make.cray
+++ b/MAKE_INC/make.cray
@@ -19,12 +19,14 @@ PLAT = _cray
 #
 #  The name of the libraries to be created/linked to
 #
-TMGLIB       = libtmglib.a
-SUPERLULIB   = libsuperlu_3.0.a
-# 
+SuperLUroot	= $(HOME)/Codes/SuperLU_4.3
+SUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_4.3.a
+
 #
 BLASDEF	     = -DUSE_VENDOR_BLAS
 BLASLIB      =
+TMGLIB       = libtmglib.a
+LIBS	     = $(SUPERLULIB) $(BLASLIB)
 
 #
 #  The archiver and the flag(s) to use when building archive (library)
@@ -38,13 +40,14 @@ CC           = cc
 CFLAGS       = -D_CRAY -O3 -h aggress 
 #CFLAGS       = -O3 -h scalar3,aggress,split,unroll,inline3 -D_CRAY
 PTROPT	     = -h restrict=a
+NOOPTS       = 
 FORTRAN	     = f77
 FFLAGS       = -O
-LOADER       = cc
+LOADER       = ${CC}
 LOADOPTS     =
 #
 #  C preprocessor defs for compilation for the Fortran interface
-#  (-DNoChange, -DAdd_, -DUpCase, or -DAdd__)
+#  (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
 #
 CDEFS        = -DUpCase
 #
diff --git a/MAKE_INC/make.hppa b/MAKE_INC/make.hppa
index c7c1484..cb6a9a2 100644
--- a/MAKE_INC/make.hppa
+++ b/MAKE_INC/make.hppa
@@ -21,10 +21,13 @@ PLAT = _hppa
 #
 #  The name of the libraries to be created/linked to
 #
-TMGLIB       = libtmglib.a
-SUPERLULIB   = libsuperlu_3.0.a
+SuperLUroot	= $(HOME)/Codes/SuperLU_4.3
+SUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_4.3.a
+
 BLASDEF      = -DUSE_VENDOR_BLAS
 BLASLIB      = -lblas -lcl
+TMGLIB       = libtmglib.a
+LIBS	     = $(SUPERLULIB) $(BLASLIB)
 
 #
 #  The archiver and the flag(s) to use when building archive (library)
@@ -38,13 +41,14 @@ RANLIB       = echo
 #
 CC           = gcc
 CFLAGS       = -O3
+NOOPTS       = 
 FORTRAN	     = f77
 FFLAGS       = -O
-LOADER       = gcc
+LOADER       = ${CC}
 LOADOPTS     = -O3
 #
 #  C preprocessor defs for compilation for the Fortran interface
-#  (-DNoChange, -DAdd_, -DUpCase, or -DAdd__)
+#  (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
 #
 CDEFS        = -DNoChange
 #
diff --git a/MAKE_INC/make.inc b/MAKE_INC/make.inc
index 707a52c..bcab8f2 100644
--- a/MAKE_INC/make.inc
+++ b/MAKE_INC/make.inc
@@ -21,9 +21,10 @@ PLAT = _linux
 #
 #  The name of the libraries to be created/linked to
 #
-TMGLIB       = libtmglib.a
-SUPERLULIB   = libsuperlu_3.0.a
-BLASLIB      = ../libblas.a
+SuperLUroot	= $(HOME)/Codes/SuperLU_4.3
+SUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_4.3.a
+BLASLIB      	= $(SuperLUroot)/lib/libblas.a
+TMGLIB       	= libtmglib.a
 
 #
 #  The archiver and the flag(s) to use when building archive (library)
@@ -37,12 +38,12 @@ CC           = gcc
 CFLAGS       = -O2 
 FORTRAN	     = g77
 FFLAGS       = -O2
-LOADER       = gcc
+LOADER       = g77
 LOADOPTS     =
 
 #
 #  C preprocessor defs for compilation for the Fortran interface
-#  (-DNoChange, -DAdd_, -DUpCase, or -DAdd__)
+#  (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
 #
 CDEFS        = -DAdd_
 #
diff --git a/MAKE_INC/make.linux b/MAKE_INC/make.linux
index 50bdda9..bdebc3f 100644
--- a/MAKE_INC/make.linux
+++ b/MAKE_INC/make.linux
@@ -21,9 +21,21 @@ PLAT = _linux
 #
 #  The name of the libraries to be created/linked to
 #
-TMGLIB       = libtmglib.a
-SUPERLULIB   = libsuperlu_3.0.a
-BLASLIB      = ../libblas.a
+SuperLUroot	= $(HOME)/Codes/SuperLU_4.3
+SUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_4.3.a
+
+#BLASLIB   	= $(SuperLUroot)/lib/libblas.a
+
+## ATLAS BLAS causes single-precision to fail
+#BLASDEF = -DUSE_VENDOR_BLAS
+#BLASLIB   	= -L/usr/lib/atlas -lblas
+
+## This BLAS causes single-precision to fail the test in SuperLU
+BLASDEF 	= -DUSE_VENDOR_BLAS
+BLASLIB 	= -L/usr/lib -lblas
+
+TMGLIB       	= libtmglib.a
+LIBS		= $(SUPERLULIB) $(BLASLIB)
 
 #
 #  The archiver and the flag(s) to use when building archive (library)
@@ -34,17 +46,18 @@ ARCHFLAGS    = cr
 RANLIB       = ranlib
 
 CC           = gcc
-CFLAGS       = -O2 
+CFLAGS       = -O3
+NOOPTS       = 
 FORTRAN	     = g77
 FFLAGS       = -O2
-LOADER       = gcc
+LOADER       = $(CC)
 LOADOPTS     =
 
 #
 #  C preprocessor defs for compilation for the Fortran interface
-#  (-DNoChange, -DAdd_, -DUpCase, or -DAdd__)
+#  (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
 #
-CDEFS        = -DAdd__
+CDEFS        = -DAdd_
 #
 # The directory in which Matlab is installed
 #
diff --git a/MAKE_INC/make.inc b/MAKE_INC/make.mac-x
similarity index 68%
copy from MAKE_INC/make.inc
copy to MAKE_INC/make.mac-x
index 707a52c..69bc7ce 100644
--- a/MAKE_INC/make.inc
+++ b/MAKE_INC/make.mac-x
@@ -1,52 +1,55 @@
-############################################################################
-#
-#  Program:         SuperLU
-#
-#  Module:          make.inc
-#
-#  Purpose:         Top-level Definitions
-#
-#  Creation date:   October 2, 1995
-#
-#  Modified:	    February 4, 1997  Version 1.0
-#		    November 15, 1997 Version 1.1
-#		    September 1, 1999 Version 2.0
-#
-############################################################################
-#
-#  The machine (platform) identifier to append to the library names
-#
-PLAT = _linux
-
-#
-#  The name of the libraries to be created/linked to
-#
-TMGLIB       = libtmglib.a
-SUPERLULIB   = libsuperlu_3.0.a
-BLASLIB      = ../libblas.a
-
-#
-#  The archiver and the flag(s) to use when building archive (library)
-#  If your system has no ranlib, set RANLIB = echo.
-#
-ARCH         = ar
-ARCHFLAGS    = cr
-RANLIB       = ranlib
-
-CC           = gcc
-CFLAGS       = -O2 
-FORTRAN	     = g77
-FFLAGS       = -O2
-LOADER       = gcc
-LOADOPTS     =
-
-#
-#  C preprocessor defs for compilation for the Fortran interface
-#  (-DNoChange, -DAdd_, -DUpCase, or -DAdd__)
-#
-CDEFS        = -DAdd_
-#
-# The directory in which Matlab is installed
-#
-MATLAB	     = /usr/sww/matlab
-
+############################################################################
+#
+#  Program:         SuperLU
+#
+#  Module:          make.inc
+#
+#  Purpose:         Top-level Definitions
+#
+#  Creation date:   October 2, 1995
+#
+#  Modified:	    February 4, 1997  Version 1.0
+#		    November 15, 1997 Version 1.1
+#		    September 1, 1999 Version 2.0
+#
+############################################################################
+#
+#  The machine (platform) identifier to append to the library names
+#
+PLAT = _mac_x
+
+#
+#  The name of the libraries to be created/linked to
+#
+SuperLUroot	= $(HOME)/Codes/SuperLU_4.3
+SUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_4.3.a
+BLASLIB   	= $(SuperLUroot)/lib/libblas.a
+TMGLIB       	= libtmglib.a
+LIBS		= $(SUPERLULIB) $(BLASLIB)
+
+#
+#  The archiver and the flag(s) to use when building archive (library)
+#  If your system has no ranlib, set RANLIB = echo.
+#
+ARCH         = ar
+ARCHFLAGS    = cr
+RANLIB       = ranlib
+
+CC           = gcc
+CFLAGS       = -O2 
+NOOPTS       = 
+FORTRAN	     = /Applications/Absoft/bin/f90
+FFLAGS       = -O3 -cpu:g5 -YEXT_NAMES=LCS -s -YEXT_SFX=_
+LOADER       = $(CC)
+LOADOPTS     =
+
+#
+#  C preprocessor defs for compilation for the Fortran interface
+#  (-DNoChange, -DAdd_, -DUpCase, or -DAdd__)
+#
+CDEFS        = -DAdd_
+#
+# The directory in which Matlab is installed
+#
+MATLAB	     = /Applications/MATLAB74/bin/matlab
+
diff --git a/MAKE_INC/make.rs6k b/MAKE_INC/make.rs6k
index f68151c..e1d0009 100644
--- a/MAKE_INC/make.rs6k
+++ b/MAKE_INC/make.rs6k
@@ -21,15 +21,17 @@ PLAT = _rs6k
 #
 #  The name of the libraries to be created/linked to
 #
-TMGLIB       = libtmglib.a
-SUPERLULIB   = libsuperlu_3.0.a
+SuperLUroot	= $(HOME)/Codes/SuperLU_4.3
+SUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_4.3.a
 # 
 # If you don't have ESSL, you can use the following blaslib instead:
 #           BLASLIB = -lblas -lxlf -lxlf90
 # which may be slower than ESSL
 #
-BLASDEF	     = -DUSE_VENDOR_BLAS
-BLASLIB      = -lessl
+BLASDEF	     	= -DUSE_VENDOR_BLAS
+BLASLIB      	= -lessl
+TMGLIB       	= libtmglib.a
+LIBS		= $(SUPERLULIB) $(BLASLIB)
 
 #
 #  The archiver and the flag(s) to use when building archive (library)
@@ -41,13 +43,14 @@ RANLIB       = ranlib
 
 CC           = xlc
 CFLAGS       = -O3
+NOOPTS       = 
 FORTRAN	     = xlf
 FFLAGS       = -O3
-LOADER       = xlc
+LOADER       = $(CC)
 LOADOPTS     = -bmaxdata:0x80000000
 #
 #  C preprocessor defs for compilation for the Fortran interface
-#  (-DNoChange, -DAdd_, -DUpCase, or -DAdd__)
+#  (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
 #
 CDEFS        = -DNoChange
 #
diff --git a/MAKE_INC/make.sgi b/MAKE_INC/make.sgi
index 61e2197..eaaec2c 100644
--- a/MAKE_INC/make.sgi
+++ b/MAKE_INC/make.sgi
@@ -21,9 +21,11 @@ PLAT = _sgi
 #
 #  The name of the libraries to be created/linked to
 #
-TMGLIB       = libtmglib.a
-SUPERLULIB   = libsuperlu_3.0.a
-BLASLIB      = ../libblas.a
+SuperLUroot	= $(HOME)/Codes/SuperLU_4.3
+SUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_4.3.a
+BLASLIB   	= $(SuperLUroot)/lib/libblas.a
+TMGLIB       	= libtmglib.a
+LIBS		= $(SUPERLULIB) $(BLASLIB)
 
 #
 #  The archiver and the flag(s) to use when building archive (library)
@@ -38,11 +40,11 @@ CFLAGS       = -O2
 NOOPTS	     =
 FORTRAN	     = f77
 FFLAGS       = -O
-LOADER       = cc
+LOADER       = $(CC)
 LOADOPTS     =
 #
 #  C preprocessor defs for compilation for the Fortran interface
-#  (-DNoChange, -DAdd_, -DUpCase, or -DAdd__)
+#  (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
 #
 CDEFS        = -DAdd_
 #
diff --git a/MAKE_INC/make.solaris b/MAKE_INC/make.solaris
index 2f864b3..44873ea 100644
--- a/MAKE_INC/make.solaris
+++ b/MAKE_INC/make.solaris
@@ -21,9 +21,11 @@ PLAT = _solaris
 #
 #  The name of the libraries to be created/linked to
 #
-TMGLIB       = libtmglib.a
-SUPERLULIB   = libsuperlu_3.0.a
-BLASLIB      = ../libblas.a
+SuperLUroot	= $(HOME)/Codes/SuperLU_4.3
+SUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_4.3.a
+BLASLIB   	= $(SuperLUroot)/lib/libblas.a
+TMGLIB       	= libtmglib.a
+LIBS		= $(SUPERLULIB) $(BLASLIB)
 
 #
 #  The archiver and the flag(s) to use when building archive (library)
@@ -35,14 +37,15 @@ RANLIB       = ranlib
 
 CC           = cc
 CFLAGS       = -xO3 -xcg92
+NOOPTS       = 
 FORTRAN	     = f77
 FFLAGS       = -O
-LOADER       = cc
+LOADER       = $(CC)
 LOADOPTS     = -xO3
 
 #
 #  C preprocessor defs for compilation for the Fortran interface
-#  (-DNoChange, -DAdd_, -DUpCase, or -DAdd__)
+#  (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
 #
 CDEFS        = -DAdd_
 #
diff --git a/MAKE_INC/make.sp b/MAKE_INC/make.sp
index a6d08f7..d37076a 100644
--- a/MAKE_INC/make.sp
+++ b/MAKE_INC/make.sp
@@ -21,15 +21,18 @@ PLAT = _sp
 #
 #  The name of the libraries to be created/linked to
 #
-TMGLIB       = libtmglib.a
-SUPERLULIB   = libsuperlu_3.0.a
+SuperLUroot	= $(HOME)/Codes/SuperLU_4.3
+SUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_4.3.a
 # 
 # If you don't have ESSL, you can use the following blaslib instead:
 #           BLASLIB = -lblas -lxlf -lxlf90
 # which may be slower than ESSL
 #
-BLASDEF	     = -DUSE_VENDOR_BLAS
-BLASLIB      = -lessl
+BLASDEF	     	= -DUSE_VENDOR_BLAS
+BLASLIB      	= -lessl
+
+TMGLIB       	= libtmglib.a
+LIBS		= $(SUPERLULIB) $(BLASLIB)
 
 #
 #  The archiver and the flag(s) to use when building archive (library)
@@ -41,13 +44,14 @@ RANLIB       = ranlib
 
 CC           = xlc
 CFLAGS       = -O3 -qarch=pwr3 -qalias=allptrs
+NOOPTS       = 
 FORTRAN	     = xlf
 FFLAGS       = -O3 -qarch=pwr3
-LOADER       = xlc
+LOADER       = $(CC)
 LOADOPTS     = -bmaxdata:0x80000000
 #
 #  C preprocessor defs for compilation for the Fortran interface
-#  (-DNoChange, -DAdd_, -DUpCase, or -DAdd__)
+#  (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
 #
 CDEFS        = -DNoChange
 #
diff --git a/MAKE_INC/make.sun4 b/MAKE_INC/make.sun4
index b15fa2b..bebbcca 100644
--- a/MAKE_INC/make.sun4
+++ b/MAKE_INC/make.sun4
@@ -21,9 +21,11 @@ PLAT = _sun4
 #
 #  The name of the libraries to be created/linked to
 #
-TMGLIB       = libtmglib.a
-SUPERLULIB   = libsuperlu_3.0.a
-BLASLIB      = ../libblas.a
+SuperLUroot	= $(HOME)/Codes/SuperLU_4.3
+SUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_4.3.a
+BLASLIB   	= $(SuperLUroot)/lib/libblas.a
+TMGLIB       	= libtmglib.a
+LIBS		= $(SUPERLULIB) $(BLASLIB)
 
 #
 #  The archiver and the flag(s) to use when building archive (library)
@@ -37,14 +39,15 @@ RANLIB       = ranlib
 #
 CC           = gcc
 CFLAGS       = -O3
+NOOPTS       = 
 FORTRAN	     = f77
 FFLAGS       = -O
-LOADER       = gcc
+LOADER       = $(CC)
 LOADOPTS     = -O3
 
 #
 #  C preprocessor defs for compilation for the Fortran interface
-#  (-DNoChange, -DAdd_, -DUpCase, or -DAdd__)
+#  (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
 #
 CDEFS        = -DAdd_
 #
diff --git a/MATLAB/Makefile b/MATLAB/Makefile
index d4c94d5..4d8335c 100644
--- a/MATLAB/Makefile
+++ b/MATLAB/Makefile
@@ -3,18 +3,18 @@ include ../make.inc
 LUSRC   = ../SRC
 HEADER	= -I$(LUSRC) -I$(MATLAB)/extern/include 
 #
-# For Matlab Version 4 compatibility: comment out -DV5, add -V4 in FFLAGS
-FLAGS   = -O -DV5
+# For Matlab Version 4 compatibility: comment out -DV5, add -V4 in FLAGS
+FLAGS   = -O -largeArrayDims
 
 all:            mexlusolve mexsuperlu
 
-mexlusolve:	mexlusolve.c ../$(SUPERLULIB)
+mexlusolve:	mexlusolve.c $(SUPERLULIB)
 		${MATLAB}/bin/mex $(HEADER) ${FLAGS} mexlusolve.c \
-		../$(SUPERLULIB) $(BLASLIB) -lm
+		$(SUPERLULIB) $(BLASLIB) -lm
 
-mexsuperlu:	mexsuperlu.c ../$(SUPERLULIB)
+mexsuperlu:	mexsuperlu.c $(SUPERLULIB)
 		${MATLAB}/bin/mex $(HEADER) ${FLAGS} mexsuperlu.c \
-		../$(SUPERLULIB) $(BLASLIB) -lm
+		$(SUPERLULIB) $(BLASLIB) -lm
 
 clean:	
 	rm -f *.o *.mex*
diff --git a/MATLAB/lusolve.m b/MATLAB/lusolve.m
index a536652..fab2b38 100644
--- a/MATLAB/lusolve.m
+++ b/MATLAB/lusolve.m
@@ -39,7 +39,7 @@ end;
 % convert it from a permutation vector to a permutation matrix
 % to fit the internal data structures of mexlusolve.
 if nargin < 3 
-    Pcol = colmmd(A);
+    Pcol = colamd(A);
 end;
 if isempty(Pcol) | Pcol == 0
     Pcol = speye(n); 
diff --git a/MATLAB/mexlusolve.c b/MATLAB/mexlusolve.c
index 6db98a5..b0be6f6 100644
--- a/MATLAB/mexlusolve.c
+++ b/MATLAB/mexlusolve.c
@@ -1,17 +1,18 @@
 /*
- * -- SuperLU routine (version 3.0) --
+ * -- SuperLU routine (version 4.2) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Modified: September 25, 2011,  compatible with 64-bit integer in R2006b
  */
 #include <stdio.h>
 #include "mex.h"
 #include "slu_ddefs.h"
 
-#ifdef V5
 #define  MatlabMatrix mxArray
-#else    /* V4 */
+
+#if 0   /* V4 */
 #define  MatlabMatrix Matrix
 #endif
 
@@ -30,19 +31,14 @@ void mexFunction(
     int          nlhs,           /* number of expected outputs */
     MatlabMatrix *plhs[],        /* matrix pointer array returning outputs */
     int          nrhs,           /* number of inputs */
-#ifdef V5
     const MatlabMatrix *prhs[]   /* matrix pointer array for inputs. */
-#else /* V4 */
+#if 0 /* V4 */
     MatlabMatrix *prhs[]         /* matrix pointer array for inputs */
 #endif
     )
 {
     int SPUMONI;             /* ... as should the sparse monitor flag */
-#ifdef V5
     double FlopsInSuperLU;   /* ... as should the flop counter. */
-#else /* V4 */
-    Real FlopsInSuperLU;     /* ... as should the flop counter */
-#endif
     extern flops_t LUFactFlops(SuperLUStat_t*);
     extern flops_t LUSolveFlops(SuperLUStat_t*);
     
@@ -57,6 +53,9 @@ void mexFunction(
     int       	*rowind;
     int		*colptr;
     int    	*perm_r, *perm_c;
+    mwSize      *perm_c_64;
+    mwSize      *rowind_64;
+    mwSize      *colptr_64;
     int		info;
     MatlabMatrix *X, *Y;            /* args to calls back to Matlab */
     int         i, mexerr;
@@ -74,10 +73,9 @@ void mexFunction(
     X = mxCreateString("spumoni");
     mexerr = mexCallMATLAB(1, &Y, 1, &X, "sparsfun");
     SPUMONI = mxGetScalar(Y);
-#ifdef V5
     mxDestroyArray(Y);
     mxDestroyArray(X);
-#else
+#if 0 /* V4 */
     mxFreeMatrix(Y);
     mxFreeMatrix(X);
 #endif
@@ -87,19 +85,26 @@ void mexFunction(
     numrhs = mxGetN(b_in);
     if ( babble ) printf("m=%d, n=%d, numrhs=%d\n", m, n, numrhs);
     vb = mxGetPr(b_in);
-#ifdef V5
     x_out = mxCreateDoubleMatrix(m, numrhs, mxREAL);
-#else
-    x_out = mxCreateFull(m, numrhs, REAL);
-#endif
+
     x = mxGetPr(x_out);
+    val = mxGetPr(A_in);
+    rowind_64 = mxGetIr(A_in);
+    colptr_64 = mxGetJc(A_in);
+    perm_c_64 = mxGetIr(Pc_in); 
+    nnz = colptr_64[n];
     perm_r = (int *) mxCalloc(m, sizeof(int));
-    perm_c = mxGetIr(Pc_in); 
+    perm_c = (int *) mxMalloc(n * sizeof(int));
+    rowind = (int *) mxMalloc(nnz * sizeof(int));
+    colptr = (int *) mxMalloc((n+1) * sizeof(int));
+    for (i = 0; i < n; ++i) {
+	perm_c[i] = perm_c_64[i];
+	colptr[i] = colptr_64[i];
+	/*printf("perm_c[%d] %d\n", i, perm_c[i]);*/
+    }
+    colptr[n] = colptr_64[n];
+    for (i = 0; i < nnz; ++i) rowind[i] = rowind_64[i];
 
-    val = mxGetPr(A_in);
-    rowind = mxGetIr(A_in);
-    colptr = mxGetJc(A_in);
-    nnz = colptr[n];
     dCreate_CompCol_Matrix(&A, m, n, nnz, val, rowind, colptr,
 			   SLU_NC, SLU_D, SLU_GE);
     dCopy_Dense_Matrix(m, numrhs, vb, m, x, m);
@@ -123,13 +128,8 @@ void mexFunction(
     mexerr = mexCallMATLAB(1, &X, 0, NULL, "flops");
     *(mxGetPr(X)) += FlopsInSuperLU;
     mexerr = mexCallMATLAB(1, &Y, 1, &X, "flops");
-#ifdef V5
     mxDestroyArray(Y);
     mxDestroyArray(X);
-#else
-    mxFreeMatrix(Y);
-    mxFreeMatrix(X);
-#endif
 #endif
 
     /* Construct Matlab solution matrix. */
@@ -138,10 +138,14 @@ void mexFunction(
         Destroy_CompCol_Matrix(&U);
         if ( babble ) printf("Destroy L & U from SuperLU...\n");
     } else {
+        printf("dgssv info = %d\n", info);
 	mexErrMsgTxt("Error returned from C dgssv().");
     }
 
     mxFree(perm_r);
+    mxFree(perm_c);
+    mxFree(rowind);
+    mxFree(colptr);
     StatFree(&stat);
 
     return;
diff --git a/MATLAB/mexsuperlu.c b/MATLAB/mexsuperlu.c
index 90d4a96..08fe3fd 100644
--- a/MATLAB/mexsuperlu.c
+++ b/MATLAB/mexsuperlu.c
@@ -1,21 +1,18 @@
 /*
- * -- SuperLU routine (version 3.0) --
+ * -- SuperLU routine (version 4.2) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * October 15, 2003
+ * June 30, 2009
  *
+ * Modified: September 25, 2011,  compatible with 64-bit integer in R2006b
  */
 #include <stdio.h>
 #include "mex.h"
-#include "slu_ddefs.h"
+#include "matrix.h"
 
+#include "slu_ddefs.h"
 
-#ifdef V5
 #define  MatlabMatrix mxArray
-#else    /* V4 */
-#define  MatlabMatrix Matrix
-#endif
-
 
 
 /* Aliases for input and output arguments */
@@ -26,8 +23,8 @@
 #define Pr_out     	plhs[2]
 #define Pc_out   	plhs[3]
 
-void LUextract(SuperMatrix *, SuperMatrix *, double *, int *, int *, 
-	       double *, int *, int *, int *, int*);
+void LUextract(SuperMatrix *, SuperMatrix *, double *, mwIndex *, mwIndex *, 
+	       double *, mwIndex *, mwIndex *, int *, int*);
 
 #define verbose (SPUMONI>0)
 #define babble  (SPUMONI>1)
@@ -37,19 +34,11 @@ void mexFunction(
     int          nlhs,           /* number of expected outputs */
     MatlabMatrix *plhs[],        /* matrix pointer array returning outputs */
     int          nrhs,           /* number of inputs */
-#ifdef V5
     const MatlabMatrix *prhs[]   /* matrix pointer array for inputs */
-#else /* V4 */
-    MatlabMatrix *prhs[]         /* matrix pointer array for inputs */
-#endif
     )
 {
     int SPUMONI;             /* ... as should the sparse monitor flag */
-#ifdef V5
     double FlopsInSuperLU;   /* ... as should the flop counter */
-#else
-    Real FlopsInSuperLU;     /* ... as should the flop counter */
-#endif
     extern flops_t LUFactFlops(SuperLUStat_t *);
     
     /* Arguments to C dgstrf(). */
@@ -61,9 +50,11 @@ void mexFunction(
     int       	*rowind;
     int		*colptr;
     int    	*etree, *perm_r, *perm_c;
+    mwSize      *perm_c_64;
+    mwSize      *rowind_64;
+    mwSize      *colptr_64;
     int         panel_size, relax;
     double      thresh = 1.0;       /* diagonal pivoting threshold */
-    double      drop_tol = 0.0;     /* drop tolerance parameter */
     int		info;
     MatlabMatrix *X, *Y;            /* args to calls back to Matlab */
     int         i, mexerr;
@@ -71,6 +62,7 @@ void mexFunction(
     double      *Lval, *Uval;
     int         *Lrow, *Urow;
     int         *Lcol, *Ucol;
+    mwIndex     *Lrow_64, *Lcol_64, *Urow_64, *Ucol_64;
     int         nnzL, nnzU, snnzL, snnzU;
     superlu_options_t options;
     SuperLUStat_t stat;
@@ -86,29 +78,37 @@ void mexFunction(
     X = mxCreateString("spumoni");
     mexerr = mexCallMATLAB(1, &Y, 1, &X, "sparsfun");
     SPUMONI = mxGetScalar(Y);
-#ifdef V5
     mxDestroyArray(Y);
     mxDestroyArray(X);
-#else
-    mxFreeMatrix(Y);
-    mxFreeMatrix(X);
-#endif
 
     m = mxGetM(A_in);
     n = mxGetN(A_in);
+    val = mxGetPr(A_in);
+    rowind_64 = mxGetIr(A_in);
+    colptr_64 = mxGetJc(A_in);
+    perm_c_64 = mxGetIr(Pc_in); 
+    nnz = colptr_64[n];
+    if ( verbose ) mexPrintf("m = %d, n = %d, nnz  = %d\n", m, n, nnz);
+
     etree = (int *) mxCalloc(n, sizeof(int));
     perm_r = (int *) mxCalloc(m, sizeof(int));
-    perm_c = mxGetIr(Pc_in); 
-    val = mxGetPr(A_in);
-    rowind = mxGetIr(A_in);
-    colptr = mxGetJc(A_in);
-    nnz = colptr[n];
+    perm_c = (int *) mxMalloc(n * sizeof(int));
+    rowind = (int *) mxMalloc(nnz * sizeof(int));
+    colptr = (int *) mxMalloc((n+1) * sizeof(int));
+
+    for (i = 0; i < n; ++i) {
+	perm_c[i] = perm_c_64[i];
+	colptr[i] = colptr_64[i];
+	/*printf("perm_c[%d] %d\n", i, perm_c[i]);*/
+    }
+    colptr[n] = colptr_64[n];
+    for (i = 0; i < nnz; ++i) rowind[i] = rowind_64[i];
+    
     dCreate_CompCol_Matrix(&A, m, n, nnz, val, rowind, colptr,
 			   SLU_NC, SLU_D, SLU_GE);
     panel_size = sp_ienv(1);
     relax      = sp_ienv(2);
     thresh     = 1.0;
-    drop_tol   = 0.0;
     FlopsInSuperLU      = 0;
 
     set_default_options(&options);
@@ -122,7 +122,8 @@ void mexFunction(
 	mexPrintf("\tpanel_size %d, relax %d, diag_pivot_thresh %.2g\n",
 		  panel_size, relax, thresh);
     }
-    dgstrf(&options, &Ac, drop_tol, relax, panel_size, etree,
+
+    dgstrf(&options, &Ac, relax, panel_size, etree,
 	   NULL, 0, perm_c, perm_r, &L, &U, &stat, &info);
 
     if ( verbose ) mexPrintf("INFO from dgstrf %d\n", info);
@@ -134,61 +135,51 @@ void mexFunction(
     mexerr = mexCallMATLAB(1, &X, 0, NULL, "flops");
     *(mxGetPr(X)) += FlopsInSuperLU;
     mexerr = mexCallMATLAB(1, &Y, 1, &X, "flops");
-#ifdef V5
     mxDestroyArray(Y);
     mxDestroyArray(X);
-#else
-    mxFreeMatrix(Y);
-    mxFreeMatrix(X);
-#endif
 #endif
 	
     /* Construct output arguments for Matlab. */
     if ( info >= 0 && info <= n ) {
-#ifdef V5
-	Pr_out = mxCreateDoubleMatrix(m, 1, mxREAL);
-#else
-	Pr_out = mxCreateFull(m, 1, REAL);
-#endif
+	Pr_out = mxCreateDoubleMatrix(m, 1, mxREAL);   /* output row perm */
 	dp = mxGetPr(Pr_out);
 	for (i = 0; i < m; *dp++ = (double) perm_r[i++]+1);
-#ifdef V5
-	Pc_out = mxCreateDoubleMatrix(n, 1, mxREAL);
-#else
-	Pc_out = mxCreateFull(n, 1, REAL);
-#endif
+
+	Pc_out = mxCreateDoubleMatrix(n, 1, mxREAL);   /* output col perm */
 	dp = mxGetPr(Pc_out);
-	for (i = 0; i < n; *dp++ = (double) perm_c[i++]+1);
+	for (i = 0; i < m; ++i) dp[i] = (double) perm_c[i]+1;
 	
 	/* Now for L and U */
 	nnzL = ((SCformat*)L.Store)->nnz; /* count diagonals */
    	nnzU = ((NCformat*)U.Store)->nnz;
-
-#ifdef V5
 	L_out = mxCreateSparse(m, n, nnzL, mxREAL);
-#else
-	L_out = mxCreateSparse(m, n, nnzL, REAL);
-#endif
 	Lval = mxGetPr(L_out);
-	Lrow = mxGetIr(L_out);
-	Lcol = mxGetJc(L_out);
-
-#ifdef V5
+	Lrow_64 = mxGetIr(L_out);
+	Lcol_64 = mxGetJc(L_out);
 	U_out = mxCreateSparse(m, n, nnzU, mxREAL);
-#else
-	U_out = mxCreateSparse(m, n, nnzU, REAL);
-#endif
 	Uval = mxGetPr(U_out);
-	Urow = mxGetIr(U_out);
-	Ucol = mxGetJc(U_out);
+	Urow_64 = mxGetIr(U_out);
+	Ucol_64 = mxGetJc(U_out);
+
+	LUextract(&L, &U, Lval, Lrow_64, Lcol_64, Uval, Urow_64, Ucol_64,
+		  &snnzL, &snnzU);
+
+	if ( babble ) 
+	  for (i = 0; i <= n; ++i) printf("Lcol_64[%d] %d\n", i, Lcol_64[i]);
+
+	printf("nnzL = %d, nnzU = %d\n", nnzL, nnzU);
+	if ( babble ) {
+	  for (i=0; i < nnzL; ++i) 
+	    mexPrintf("Lrow_64[%d] %d\n", i, Lrow_64[i]);
+	  for (i = 0; i < snnzU; ++i) 
+	    mexPrintf("Urow_64[%d] = %d\n", i, Urow_64[i]);
+	}
 
-	LUextract(&L, &U, Lval, Lrow, Lcol, Uval, Urow, Ucol, &snnzL, &snnzU);
-	
         Destroy_CompCol_Permuted(&Ac);
 	Destroy_SuperNode_Matrix(&L);
 	Destroy_CompCol_Matrix(&U);
 
-	if (babble) mexPrintf("factor nonzeros: %d unsqueezed, %d squeezed.\n",
+	if (verbose) mexPrintf("factor nonzeros: %d unsqueezed, %d squeezed.\n",
 			      nnzL + nnzU, snnzL + snnzU);
     } else {
 	mexErrMsgTxt("Error returned from C dgstrf().");
@@ -196,14 +187,19 @@ void mexFunction(
 
     mxFree(etree);
     mxFree(perm_r);
+    mxFree(perm_c);
+    mxFree(rowind);
+    mxFree(colptr);
+
     StatFree(&stat);
+
     return;
 }
 
 void
-LUextract(SuperMatrix *L, SuperMatrix *U, double *Lval, int *Lrow,
-	  int *Lcol, double *Uval, int *Urow, int *Ucol, int *snnzL,
-	  int *snnzU)
+LUextract(SuperMatrix *L, SuperMatrix *U, double *Lval, mwIndex *Lrow,
+	  mwIndex *Lcol, double *Uval, mwIndex *Urow, mwIndex *Ucol,
+	  int *snnzL, int *snnzU)
 {
     int         i, j, k;
     int         upper;
@@ -234,12 +230,12 @@ LUextract(SuperMatrix *L, SuperMatrix *U, double *Lval, int *Lrow,
 	    for (i = U_NZ_START(j); i < U_NZ_START(j+1); ++i) {
 		Uval[lastu] = ((double*)Ustore->nzval)[i];
  		/* Matlab doesn't like explicit zero. */
-		if (Uval[lastu] != 0.0) Urow[lastu++] = U_SUB(i);
+		if (Uval[lastu] != 0.0) Urow[lastu++] = (mwIndex) U_SUB(i);
 	    }
 	    for (i = 0; i < upper; ++i) { /* upper triangle in the supernode */
 		Uval[lastu] = SNptr[i];
  		/* Matlab doesn't like explicit zero. */
-		if (Uval[lastu] != 0.0) Urow[lastu++] = L_SUB(istart+i);
+		if (Uval[lastu] != 0.0) Urow[lastu++] = (mwIndex)L_SUB(istart+i);
 	    }
 	    Ucol[j+1] = lastu;
 
@@ -249,7 +245,7 @@ LUextract(SuperMatrix *L, SuperMatrix *U, double *Lval, int *Lrow,
 	    for (i = upper; i < nsupr; ++i) {
 		Lval[lastl] = SNptr[i];
  		/* Matlab doesn't like explicit zero. */
-		if (Lval[lastl] != 0.0) Lrow[lastl++] = L_SUB(istart+i);
+		if (Lval[lastl] != 0.0) Lrow[lastl++] = (mwIndex)L_SUB(istart+i);
 	    }
 	    Lcol[j+1] = lastl;
 
diff --git a/MATLAB/permutation.m b/MATLAB/permutation.m
index 0ced40b..c6d4d04 100644
--- a/MATLAB/permutation.m
+++ b/MATLAB/permutation.m
@@ -51,7 +51,7 @@
 % the memory of a permutation vector.  The Matlab function LU returns
 % a permutation matrix (sparse if the input was sparse); most other 
 % built-in Matlab functions return permutation vectors, including 
-% SYMRCM, SYMMMD, COLMMD, DMPERM, and ETREE.
+% SYMRCM, SYMMMD, COLAMD, DMPERM, and ETREE.
 
 % John Gilbert, 6 April 1995
 % Copyright (c) 1995 by Xerox Corporation.  All rights reserved.
diff --git a/MATLAB/spypart.m b/MATLAB/spypart.m
deleted file mode 100644
index c83ee54..0000000
--- a/MATLAB/spypart.m
+++ /dev/null
@@ -1,35 +0,0 @@
-function spypart(S, rp, cp);
-%SPYPART Spy plot with partitioning.
-%   SPYPART(S,rp,cp) plots the sparsity pattern of a matrix S,
-%   with lines marking a block partition described by 
-%   rp (rows) and cp (columns).
-%   If S is square, cp may be omitted and defaults to rp.
-%
-%   Partitions are specified as in the output of DMPERM:
-%   There are length(rp)-1 row blocks, of sizes diff(rp), with rp(1)=1.
-
-%   Copyright (c) 1984-98 by The MathWorks, Inc.
-%   $Revision: 5.3 $  $Date: 1997/11/21 23:27:12 $
-
-if (nargin < 3), cp = rp; end
-
-spy(S)
-hold on
-
-[m,n] = size(S);
-if length(rp) > 2
-   k = length(rp)-2;
-   X = [zeros(1,k); n+ones(1,k)];
-   Y = rp(2:k+1) - 0.5;
-   Y = [Y; Y];
-   plot(X,Y,'w-') 
-end
-if length(cp) > 2
-   k = length(cp)-2;
-   X = cp(2:k+1) - .5;
-   X = [X; X];
-   Y = [zeros(1,k); m+ones(1,k)];
-   plot(X,Y,'w-') 
-end
-axis('ij')
-hold off
diff --git a/MATLAB/superlu.m b/MATLAB/superlu.m
index 40cae36..e9c96a3 100644
--- a/MATLAB/superlu.m
+++ b/MATLAB/superlu.m
@@ -24,7 +24,7 @@ function [L,U,prow,pcol] = superlu(A,psparse)
 %  [L,U] = superlu(A,psparse) returns permuted triangular L and triangular U 
 %            with A(:,psparse) = L*U.
 %  Here psparse will normally be a user-supplied permutation matrix or vector
-%  to be applied to the columns of A for sparsity.  COLMMD is one way to get
+%  to be applied to the columns of A for sparsity.  COLAMD is one way to get
 %  such a permutation; see below to make SUPERLU compute it automatically.
 %  (If psparse is a permutation matrix, the matrix factored is A*psparse'.)
 %
@@ -40,13 +40,13 @@ function [L,U,prow,pcol] = superlu(A,psparse)
 %            sparsity, but makes supernodes in L consecutive.
 %  [L,U,prow,pcol] = superlu(A,0) is the same as ... = superlu(A,I); it does
 %            not permute for sparsity but it does postorder the etree.
-%  [L,U,prow,pcol] = superlu(A) is the same as ... = superlu(A,colmmd(A));
+%  [L,U,prow,pcol] = superlu(A) is the same as ... = superlu(A,colamd(A));
 %            it uses column minimum degree to permute columns for sparsity,
 %            then postorders the etree and factors.
 %
 %  This m-file calls the mex-file MEXSUPERLU to do the work.
 %
-% See also COLMMD, LUSOLVE.
+% See also COLAMD, LUSOLVE.
 %
 % John Gilbert, 6 April 1995.
 % Copyright (c) 1995 by Xerox Corporation.  All rights reserved.
@@ -75,7 +75,7 @@ end;
 % If necessary, compute the column sparsity permutation.
 if nargin < 2 
     if nargout >= 4
-        psparse = colmmd(A);
+        psparse = colamd(A);
     else
         psparse = 1:n;
     end;
@@ -109,6 +109,18 @@ prow(prowInv) = 1:n;
 pcol = zeros(1,n);
 pcol(pcolInv) = 1:n;
 
+% -- Added 12/14/2011 --
+% The row indices of L & U matrices are not sorted from SuperLU, but 
+% Matlab requires the matrices to be sorted.
+% Now, we do double-transpose to achieve sorting. This acts like bucket sort,
+% should be faster than find / sparse combination, which probably uses
+% quicksort.
+% [i,j,s] = find(L); L = sparse(i,j,s,m,n);
+
+L1 = L'; L = L1';
+U1 = U'; U = U1';
+% ----
+
 % We now have
 %
 %    Prow*A*Psparse'*Post' = L*U   (1)
diff --git a/MATLAB/time.m b/MATLAB/time.m
deleted file mode 100644
index 8286451..0000000
--- a/MATLAB/time.m
+++ /dev/null
@@ -1,12 +0,0 @@
-function y = time()
-%TIME   Timestamp.
-%       S = TIME returns a string containing the date and time.
- 
-%       Copyright (c) 1984-93 by The MathWorks, Inc.
- 
-t = clock;
-base = t(1) - rem(t(1),100);
-months = ['Jan';'Feb';'Mar';'Apr';'May';'Jun';
-          'Jul';'Aug';'Sep';'Oct';'Nov';'Dec'];
-y = [int2str(t(3)),'-',months(t(2),:),'-',int2str(t(1)-base), ...
-     '  ',int2str(t(4)),':', int2str(t(5)),':', int2str(t(6))];
diff --git a/MATLAB/trylusolve.m b/MATLAB/trylusolve.m
index 08ae152..9abac68 100644
--- a/MATLAB/trylusolve.m
+++ b/MATLAB/trylusolve.m
@@ -94,7 +94,7 @@ if residual_norm > tol
 end;
 
 ntest=ntest+1;
-fprintf('Test %d: No input perm (colmmd done internally).\n',ntest);
+fprintf('Test %d: No input perm (colamd done internally).\n',ntest);
 x = lusolve(A,b);
 residual_norm = norm(A*x-b,inf)
 disp(' ');
diff --git a/MATLAB/trysuperlu.m b/MATLAB/trysuperlu.m
index 4036a1a..012703f 100644
--- a/MATLAB/trysuperlu.m
+++ b/MATLAB/trysuperlu.m
@@ -170,7 +170,7 @@ r = try2(PivPostA(:,pinv),p);
 if r > tol, disp('*** FAILED ***'), disp(' '), failed = [failed ntest]; end;
 
 ntest=ntest+1;
-fprintf('Test %d: No input perm (colmmd done internally), pivot, postorder, 4 outputs.\n',ntest);
+fprintf('Test %d: No input perm (colamd done internally), pivot, postorder, 4 outputs.\n',ntest);
 r = try4(PivPostA);
 if r > tol, disp('*** FAILED ***'), disp(' '), failed = [failed ntest]; end;
 
@@ -206,7 +206,7 @@ fprintf('Test %d: Timing versus LU on the 3-element airfoil matrix.\n',ntest);
 A = hbo('airfoil2');
 n = max(size(A));
 A = sprandn(A);
-pmmd = colmmd(A);
+pmmd = colamd(A);
 A = A(:,pmmd);
 r = trytime(A);
 if r > tol, disp('*** FAILED ***'), disp(' '), failed = [failed ntest]; end;
diff --git a/Makefile b/Makefile
index f822ede..d8d822c 100644
--- a/Makefile
+++ b/Makefile
@@ -8,10 +8,11 @@
 #
 #  Creation date:   October 2, 1995
 #
-#  Modified:        February 4, 1997  Version 1.0
-#		    November 15, 1997 Version 1.1
-#		    September 1, 1999 Version 2.0
-#		    October 15, 2003 Version 3.0
+#  Modified:        February 4,  1997  Version 1.0
+#		    November 15, 1997  Version 1.1
+#		    September 1, 1999  Version 2.0
+#		    October 15,  2003  Version 3.0
+#		    August 1,    2008  Version 3.1
 #
 ############################################################################
 
@@ -43,6 +44,9 @@ matlabmex:
 testing:
 	( cd TESTING ; $(MAKE) )
 
+doc:
+	doxygen Doxyfile
+
 cleanlib:
 	( cd SRC; $(MAKE) clean )
 	( cd TESTING/MATGEN; $(MAKE) clean )
diff --git a/README b/README
index 102c476..e99e99a 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-		SuperLU (Version 3.0)
+		SuperLU (Version 4.1)
 		=====================
 
 Copyright (c) 2003, The Regents of the University of California, through
@@ -52,6 +52,7 @@ SuperLU contains the following directory structure:
 
     SuperLU/README    instructions on installation
     SuperLU/CBLAS/    needed BLAS routines in C, not necessarily fast
+    SuperLU/DOC/      Users' Guide and documentation of source code
     SuperLU/EXAMPLE/  example programs
     SuperLU/FORTRAN/  Fortran interface
     SuperLU/INSTALL/  test machine dependent parameters; the Users' Guide.
@@ -76,14 +77,14 @@ on your system setup:
    machine specific has been defined in this include file. 
 
    Example machine-specific make.inc include files are provided 
-   in the MAKE_INC/ directory for several systems, such as 
-   IBM RS/6000, DEC Alpha, SunOS 4.x, SunOS 5.x (Solaris), HP-PA and
-   SGI Iris 4.x.  When you have selected the machine to which you wish 
+   in the MAKE_INC/ directory for several systems, such as Linux,
+   IBM RS/6000, SunOS 5.x (Solaris), HP-PA and MacX.
+   When you have selected the machine to which you wish 
    to install SuperLU, copy the appropriate sample include file (if one 
    is present) into make.inc. For example, if you wish to run 
-   SuperLU on an IBM RS/6000, you can do
+   SuperLU on an linux, you can do
 
-       cp MAKE_INC/make.rs6k make.inc
+       cp MAKE_INC/make.linux make.inc
    
    For the systems other than listed above, slight modifications to the 
    make.inc file will need to be made.
@@ -100,7 +101,7 @@ on your system setup:
    In this case, you should do the following:
 
     1) In SuperLU/make.inc, undefine (comment out) BLASDEF, and define:
-          BLASLIB = ../blas$(PLAT).a
+          BLASLIB = ../lib/blas$(PLAT).a
 
     2) Go to the SuperLU/ directory, type:
           make blaslib
@@ -144,14 +145,15 @@ The test results are in the files below:
        TESTING/ztest.out
 
 
-
------------------
-| RELEASE NOTES |
------------------
-* Version 3.0, 10-15-03
-   - add "options" and "stat" argument for the driver routines
-     DGSSV/DGSSVX. This interface is more user-friendly and flexible.
-   - add more examples in EXAMPLE/
-   - add a "symmetric mode" with better performance when the matrix is
-     symmetric, or diagonal dominant, or positive definite, or nearly so.
+--------------------
+| RELEASE VERSIONS |
+--------------------
+    February 4,  1997  Version 1.0
+    November 15, 1997  Version 1.1
+    September 1, 1999  Version 2.0
+    October 15,  2003  Version 3.0
+    August 1,    2008  Version 3.1
+    June 30,     2009  Version 4.0
+    November 23, 2010  Version 4.1
+    August 25,   2011  Version 4.2
 
diff --git a/SRC/Makefile b/SRC/Makefile
index 83200a7..9f8f550 100644
--- a/SRC/Makefile
+++ b/SRC/Makefile
@@ -49,7 +49,9 @@ DZLAUX 	= dlamch.o
 ### SuperLU 
 ALLAUX 	= superlu_timer.o util.o memory.o get_perm_c.o mmd.o \
 	  sp_coletree.o sp_preorder.o sp_ienv.o relax_snode.o \
-	  heap_relax_snode.o colamd.o
+	  heap_relax_snode.o colamd.o \
+	  ilu_relax_snode.o ilu_heap_relax_snode.o mark_relax.o \
+	  mc64ad.o qselect.o
 
 SLUSRC = \
 	sgssv.o sgssvx.o \
@@ -57,59 +59,79 @@ SLUSRC = \
 	slangs.o sgsequ.o slaqgs.o spivotgrowth.o \
 	sgsrfs.o sgstrf.o sgstrs.o scopy_to_ucol.o \
 	ssnode_dfs.o ssnode_bmod.o \
-	spanel_dfs.o spanel_bmod.o sreadhb.o \
+	spanel_dfs.o spanel_bmod.o \
+	sreadhb.o sreadrb.o sreadtriple.o \
 	scolumn_dfs.o scolumn_bmod.o spivotL.o spruneL.o \
-	smemory.o sutil.o smyblas2.o
+	smemory.o sutil.o smyblas2.o \
+	sgsisx.o sgsitrf.o sldperm.o \
+	ilu_sdrop_row.o ilu_ssnode_dfs.o \
+	ilu_scolumn_dfs.o ilu_spanel_dfs.o ilu_scopy_to_ucol.o \
+	ilu_spivotL.o sdiagonal.o
 
 DLUSRC = \
 	dgssv.o dgssvx.o \
 	dsp_blas2.o dsp_blas3.o dgscon.o \
 	dlangs.o dgsequ.o dlaqgs.o dpivotgrowth.o  \
 	dgsrfs.o dgstrf.o dgstrs.o dcopy_to_ucol.o \
-	dsnode_dfs.o dsnode_bmod.o \
-	dpanel_dfs.o dpanel_bmod.o dreadhb.o \
+	dsnode_dfs.o dsnode_bmod.o dpanel_dfs.o dpanel_bmod.o \
+	dreadhb.o dreadrb.o dreadtriple.o \
 	dcolumn_dfs.o dcolumn_bmod.o dpivotL.o dpruneL.o \
-	dmemory.o dutil.o dmyblas2.o
+	dmemory.o dutil.o dmyblas2.o \
+	dgsisx.o dgsitrf.o dldperm.o \
+	ilu_ddrop_row.o ilu_dsnode_dfs.o \
+	ilu_dcolumn_dfs.o ilu_dpanel_dfs.o ilu_dcopy_to_ucol.o \
+	ilu_dpivotL.o ddiagonal.o 
+        ## dgstrsL.o dgstrsU.o
 
 CLUSRC = \
 	scomplex.o cgssv.o cgssvx.o csp_blas2.o csp_blas3.o cgscon.o \
 	clangs.o cgsequ.o claqgs.o cpivotgrowth.o  \
 	cgsrfs.o cgstrf.o cgstrs.o ccopy_to_ucol.o \
 	csnode_dfs.o csnode_bmod.o \
-	cpanel_dfs.o cpanel_bmod.o creadhb.o \
+	cpanel_dfs.o cpanel_bmod.o \
+	creadhb.o creadrb.o creadtriple.o \
 	ccolumn_dfs.o ccolumn_bmod.o cpivotL.o cpruneL.o \
-	cmemory.o cutil.o cmyblas2.o
+	cmemory.o cutil.o cmyblas2.o \
+	cgsisx.o cgsitrf.o cldperm.o \
+	ilu_cdrop_row.o ilu_csnode_dfs.o \
+	ilu_ccolumn_dfs.o ilu_cpanel_dfs.o ilu_ccopy_to_ucol.o \
+	ilu_cpivotL.o cdiagonal.o
 
 ZLUSRC = \
 	dcomplex.o zgssv.o zgssvx.o zsp_blas2.o zsp_blas3.o zgscon.o \
 	zlangs.o zgsequ.o zlaqgs.o zpivotgrowth.o  \
 	zgsrfs.o zgstrf.o zgstrs.o zcopy_to_ucol.o \
 	zsnode_dfs.o zsnode_bmod.o \
-	zpanel_dfs.o zpanel_bmod.o zreadhb.o \
+	zpanel_dfs.o zpanel_bmod.o \
+	zreadhb.o zreadrb.o zreadtriple.o \
 	zcolumn_dfs.o zcolumn_bmod.o zpivotL.o zpruneL.o \
-	zmemory.o zutil.o zmyblas2.o
+	zmemory.o zutil.o zmyblas2.o \
+	zgsisx.o zgsitrf.o zldperm.o \
+	ilu_zdrop_row.o ilu_zsnode_dfs.o \
+	ilu_zcolumn_dfs.o ilu_zpanel_dfs.o ilu_zcopy_to_ucol.o \
+	ilu_zpivotL.o zdiagonal.o
 
 all:    single double complex complex16
 
 single: $(SLUSRC) $(ALLAUX) $(LAAUX) $(SLASRC) $(SCLAUX)
-	$(ARCH) $(ARCHFLAGS) ../$(SUPERLULIB) \
+	$(ARCH) $(ARCHFLAGS) $(SUPERLULIB) \
 		$(SLUSRC) $(ALLAUX) $(LAAUX) $(SLASRC) $(SCLAUX)
-	$(RANLIB) ../$(SUPERLULIB)
+	$(RANLIB) $(SUPERLULIB)
 
 double: $(DLUSRC) $(ALLAUX) $(LAAUX) $(DLASRC) $(DZLAUX)
-	$(ARCH) $(ARCHFLAGS) ../$(SUPERLULIB) \
+	$(ARCH) $(ARCHFLAGS) $(SUPERLULIB) \
                 $(DLUSRC) $(ALLAUX) $(LAAUX) $(DLASRC) $(DZLAUX)
-	$(RANLIB) ../$(SUPERLULIB)
+	$(RANLIB) $(SUPERLULIB)
 
 complex: $(CLUSRC) $(ALLAUX) $(LAAUX) $(CLASRC) $(SCLAUX)
-	$(ARCH) $(ARCHFLAGS) ../$(SUPERLULIB) \
+	$(ARCH) $(ARCHFLAGS) $(SUPERLULIB) \
 		$(CLUSRC) $(ALLAUX) $(LAAUX) $(CLASRC) $(SCLAUX)
-	$(RANLIB) ../$(SUPERLULIB)
+	$(RANLIB) $(SUPERLULIB)
 
 complex16: $(ZLUSRC) $(ALLAUX) $(LAAUX) $(ZLASRC) $(DZLAUX)
-	$(ARCH) $(ARCHFLAGS) ../$(SUPERLULIB) \
+	$(ARCH) $(ARCHFLAGS) $(SUPERLULIB) \
 		$(ZLUSRC) $(ALLAUX) $(LAAUX) $(ZLASRC) $(DZLAUX)
-	$(RANLIB) ../$(SUPERLULIB)
+	$(RANLIB) $(SUPERLULIB)
 
 
 ##################################
@@ -123,5 +145,8 @@ superlu_timer.o:  superlu_timer.c ; $(CC) -c $(NOOPTS) $<
 .c.o:
 	$(CC) $(CFLAGS) $(CDEFS) $(BLASDEF) -c $< $(VERBOSE)
 
+.f.o:
+	$(FORTRAN) $(FFLAGS) -c $<
+
 clean:	
-	rm -f *.o ../libsuperlu_3.0.a
+	rm -f *.o $(SUPERLULIB)
diff --git a/SRC/ccolumn_bmod.c b/SRC/ccolumn_bmod.c
index 72ae5be..d20e95c 100644
--- a/SRC/ccolumn_bmod.c
+++ b/SRC/ccolumn_bmod.c
@@ -1,22 +1,24 @@
 
-/*
+/*! @file ccolumn_bmod.c
+ *  \brief performs numeric block updates
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
- */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ *  Permission is hereby granted to use or copy this program for any
+ *  purpose, provided the above notices are retained on all copies.
+ *  Permission to modify the code and to distribute modified code is
+ *  granted, provided the above notices are retained, and a notice that
+ *  the code was modified is included with the above copyright notice.
+ * </pre>
 */
 
 #include <stdio.h>
@@ -32,8 +34,17 @@ void cmatvec(int, int, int, complex*, complex*, complex*);
 
 
 
-/* Return value:   0 - successful return
+/*! \brief 
+ *
+ * <pre>
+ * Purpose:
+ * ========
+ * Performs numeric block updates (sup-col) in topological order.
+ * It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ * Special processing on the supernodal portion of L\U[*,j]
+ * Return value:   0 - successful return
  *               > 0 - number of bytes allocated when run out of space
+ * </pre>
  */
 int
 ccolumn_bmod (
@@ -48,14 +59,7 @@ ccolumn_bmod (
 	     SuperLUStat_t *stat  /* output */
 	     )
 {
-/*
- * Purpose:
- * ========
- *    Performs numeric block updates (sup-col) in topological order.
- *    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
- *    Special processing on the supernodal portion of L\U[*,j]
- *
- */
+
 #ifdef _CRAY
     _fcd ftcs1 = _cptofcd("L", strlen("L")),
          ftcs2 = _cptofcd("N", strlen("N")),
diff --git a/SRC/ccolumn_dfs.c b/SRC/ccolumn_dfs.c
index 10f0fb6..58940ef 100644
--- a/SRC/ccolumn_dfs.c
+++ b/SRC/ccolumn_dfs.c
@@ -1,49 +1,38 @@
 
-/*
+/*! @file ccolumn_dfs.c
+ * \brief Performs a symbolic factorization
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
- */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
 */
 
 #include "slu_cdefs.h"
 
-/* What type of supernodes we want */
+/*! \brief What type of supernodes we want */
 #define T2_SUPER
 
-int
-ccolumn_dfs(
-	   const int  m,         /* in - number of rows in the matrix */
-	   const int  jcol,      /* in */
-	   int        *perm_r,   /* in */
-	   int        *nseg,     /* modified - with new segments appended */
-	   int        *lsub_col, /* in - defines the RHS vector to start the dfs */
-	   int        *segrep,   /* modified - with new segments appended */
-	   int        *repfnz,   /* modified */
-	   int        *xprune,   /* modified */
-	   int        *marker,   /* modified */
-	   int        *parent,	 /* working array */
-	   int        *xplore,   /* working array */
-	   GlobalLU_t *Glu       /* modified */
-	   )
-{
-/* 
+
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
- *   "column_dfs" performs a symbolic factorization on column jcol, and
+ *   CCOLUMN_DFS performs a symbolic factorization on column jcol, and
  *   decide the supernode boundary.
  *
  *   This routine does not use numeric values, but only use the RHS 
@@ -71,8 +60,25 @@ ccolumn_dfs(
  * ============
  *     0  success;
  *   > 0  number of bytes allocated when run out of space.
- *
+ * </pre>
  */
+int
+ccolumn_dfs(
+	   const int  m,         /* in - number of rows in the matrix */
+	   const int  jcol,      /* in */
+	   int        *perm_r,   /* in */
+	   int        *nseg,     /* modified - with new segments appended */
+	   int        *lsub_col, /* in - defines the RHS vector to start the dfs */
+	   int        *segrep,   /* modified - with new segments appended */
+	   int        *repfnz,   /* modified */
+	   int        *xprune,   /* modified */
+	   int        *marker,   /* modified */
+	   int        *parent,	 /* working array */
+	   int        *xplore,   /* working array */
+	   GlobalLU_t *Glu       /* modified */
+	   )
+{
+
     int     jcolp1, jcolm1, jsuper, nsuper, nextl;
     int     k, krep, krow, kmark, kperm;
     int     *marker2;           /* Used for small panel LU */
diff --git a/SRC/ccopy_to_ucol.c b/SRC/ccopy_to_ucol.c
index a0972fa..3e4b396 100644
--- a/SRC/ccopy_to_ucol.c
+++ b/SRC/ccopy_to_ucol.c
@@ -1,23 +1,24 @@
 
-/*
+/*! @file ccopy_to_ucol.c
+ * \brief Copy a computed column of U to the compressed data structure
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
  *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
 
 #include "slu_cdefs.h"
 
@@ -45,7 +46,6 @@ ccopy_to_ucol(
     complex    *ucol;
     int       *usub, *xusub;
     int       nzumax;
-
     complex zero = {0.0, 0.0};
 
     xsup    = Glu->xsup;
diff --git a/SRC/cdiagonal.c b/SRC/cdiagonal.c
new file mode 100644
index 0000000..7384da1
--- /dev/null
+++ b/SRC/cdiagonal.c
@@ -0,0 +1,133 @@
+
+/*! @file cdiagonal.c
+ * \brief Auxiliary routines to work with diagonal elements
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_cdefs.h"
+
+int cfill_diag(int n, NCformat *Astore)
+/* fill explicit zeros on the diagonal entries, so that the matrix is not
+   structurally singular. */
+{
+    complex *nzval = (complex *)Astore->nzval;
+    int *rowind = Astore->rowind;
+    int *colptr = Astore->colptr;
+    int nnz = colptr[n];
+    int fill = 0;
+    complex *nzval_new;
+    complex zero = {1.0, 0.0};
+    int *rowind_new;
+    int i, j, diag;
+
+    for (i = 0; i < n; i++)
+    {
+	diag = -1;
+	for (j = colptr[i]; j < colptr[i + 1]; j++)
+	    if (rowind[j] == i) diag = j;
+	if (diag < 0) fill++;
+    }
+    if (fill)
+    {
+	nzval_new = complexMalloc(nnz + fill);
+	rowind_new = intMalloc(nnz + fill);
+	fill = 0;
+	for (i = 0; i < n; i++)
+	{
+	    diag = -1;
+	    for (j = colptr[i] - fill; j < colptr[i + 1]; j++)
+	    {
+		if ((rowind_new[j + fill] = rowind[j]) == i) diag = j;
+		nzval_new[j + fill] = nzval[j];
+	    }
+	    if (diag < 0)
+	    {
+		rowind_new[colptr[i + 1] + fill] = i;
+		nzval_new[colptr[i + 1] + fill] = zero;
+		fill++;
+	    }
+	    colptr[i + 1] += fill;
+	}
+	Astore->nzval = nzval_new;
+	Astore->rowind = rowind_new;
+	SUPERLU_FREE(nzval);
+	SUPERLU_FREE(rowind);
+    }
+    Astore->nnz += fill;
+    return fill;
+}
+
+int cdominate(int n, NCformat *Astore)
+/* make the matrix diagonally dominant */
+{
+    complex *nzval = (complex *)Astore->nzval;
+    int *rowind = Astore->rowind;
+    int *colptr = Astore->colptr;
+    int nnz = colptr[n];
+    int fill = 0;
+    complex *nzval_new;
+    int *rowind_new;
+    int i, j, diag;
+    double s;
+
+    for (i = 0; i < n; i++)
+    {
+	diag = -1;
+	for (j = colptr[i]; j < colptr[i + 1]; j++)
+	    if (rowind[j] == i) diag = j;
+	if (diag < 0) fill++;
+    }
+    if (fill)
+    {
+	nzval_new = complexMalloc(nnz + fill);
+	rowind_new = intMalloc(nnz+ fill);
+	fill = 0;
+	for (i = 0; i < n; i++)
+	{
+	    s = 1e-6;
+	    diag = -1;
+	    for (j = colptr[i] - fill; j < colptr[i + 1]; j++)
+	    {
+		if ((rowind_new[j + fill] = rowind[j]) == i) diag = j;
+                nzval_new[j + fill] = nzval[j];
+		s += c_abs1(&nzval_new[j + fill]);
+	    }
+	    if (diag >= 0) {
+		nzval_new[diag+fill].r = s * 3.0;
+		nzval_new[diag+fill].i = 0.0;
+	    } else {
+		rowind_new[colptr[i + 1] + fill] = i;
+		nzval_new[colptr[i + 1] + fill].r = s * 3.0;
+		nzval_new[colptr[i + 1] + fill].i = 0.0;
+		fill++;
+	    }
+	    colptr[i + 1] += fill;
+	}
+	Astore->nzval = nzval_new;
+	Astore->rowind = rowind_new;
+	SUPERLU_FREE(nzval);
+	SUPERLU_FREE(rowind);
+    }
+    else
+    {
+	for (i = 0; i < n; i++)
+	{
+	    s = 1e-6;
+	    diag = -1;
+	    for (j = colptr[i]; j < colptr[i + 1]; j++)
+	    {
+		if (rowind[j] == i) diag = j;
+		s += c_abs1(&nzval[j]);
+	    }
+	    nzval[diag].r = s * 3.0;
+	    nzval[diag].i = 0.0;
+	}
+    }
+    Astore->nnz += fill;
+    return fill;
+}
diff --git a/SRC/cgscon.c b/SRC/cgscon.c
index ee8bb4b..e17532d 100644
--- a/SRC/cgscon.c
+++ b/SRC/cgscon.c
@@ -1,11 +1,17 @@
 
-/*
+/*! @file cgscon.c
+ * \brief Estimates reciprocal of the condition number of a general matrix
+ * 
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Modified from lapack routines CGECON.
+ * </pre> 
  */
+
 /*
  * File name:	cgscon.c
  * History:     Modified from lapack routines CGECON.
@@ -13,57 +19,62 @@
 #include <math.h>
 #include "slu_cdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   CGSCON estimates the reciprocal of the condition number of a general 
+ *   real matrix A, in either the 1-norm or the infinity-norm, using   
+ *   the LU factorization computed by CGETRF.   *
+ *
+ *   An estimate is obtained for norm(inv(A)), and the reciprocal of the   
+ *   condition number is computed as   
+ *      RCOND = 1 / ( norm(A) * norm(inv(A)) ).   
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ * 
+ *   Arguments   
+ *   =========   
+ *
+ *    NORM    (input) char*
+ *            Specifies whether the 1-norm condition number or the   
+ *            infinity-norm condition number is required:   
+ *            = '1' or 'O':  1-norm;   
+ *            = 'I':         Infinity-norm.
+ *	    
+ *    L       (input) SuperMatrix*
+ *            The factor L from the factorization Pr*A*Pc=L*U as computed by
+ *            cgstrf(). Use compressed row subscripts storage for supernodes,
+ *            i.e., L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.
+ * 
+ *    U       (input) SuperMatrix*
+ *            The factor U from the factorization Pr*A*Pc=L*U as computed by
+ *            cgstrf(). Use column-wise storage scheme, i.e., U has types:
+ *            Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.
+ *	    
+ *    ANORM   (input) float
+ *            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
+ *            If NORM = 'I', the infinity-norm of the original matrix A.
+ *	    
+ *    RCOND   (output) float*
+ *           The reciprocal of the condition number of the matrix A,   
+ *           computed as RCOND = 1/(norm(A) * norm(inv(A))).
+ *	    
+ *    INFO    (output) int*
+ *           = 0:  successful exit   
+ *           < 0:  if INFO = -i, the i-th argument had an illegal value   
+ *
+ *    ===================================================================== 
+ * </pre>
+ */
+
 void
 cgscon(char *norm, SuperMatrix *L, SuperMatrix *U,
        float anorm, float *rcond, SuperLUStat_t *stat, int *info)
 {
-/*
-    Purpose   
-    =======   
-
-    CGSCON estimates the reciprocal of the condition number of a general 
-    real matrix A, in either the 1-norm or the infinity-norm, using   
-    the LU factorization computed by CGETRF.   
-
-    An estimate is obtained for norm(inv(A)), and the reciprocal of the   
-    condition number is computed as   
-       RCOND = 1 / ( norm(A) * norm(inv(A)) ).   
-
-    See supermatrix.h for the definition of 'SuperMatrix' structure.
- 
-    Arguments   
-    =========   
-
-    NORM    (input) char*
-            Specifies whether the 1-norm condition number or the   
-            infinity-norm condition number is required:   
-            = '1' or 'O':  1-norm;   
-            = 'I':         Infinity-norm.
-	    
-    L       (input) SuperMatrix*
-            The factor L from the factorization Pr*A*Pc=L*U as computed by
-            cgstrf(). Use compressed row subscripts storage for supernodes,
-            i.e., L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.
- 
-    U       (input) SuperMatrix*
-            The factor U from the factorization Pr*A*Pc=L*U as computed by
-            cgstrf(). Use column-wise storage scheme, i.e., U has types:
-            Stype = SLU_NC, Dtype = SLU_C, Mtype = TRU.
-	    
-    ANORM   (input) float
-            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
-            If NORM = 'I', the infinity-norm of the original matrix A.
-	    
-    RCOND   (output) float*
-            The reciprocal of the condition number of the matrix A,   
-            computed as RCOND = 1/(norm(A) * norm(inv(A))).
-	    
-    INFO    (output) int*
-            = 0:  successful exit   
-            < 0:  if INFO = -i, the i-th argument had an illegal value   
 
-    ===================================================================== 
-*/
 
     /* Local variables */
     int    kase, kase1, onenrm, i;
diff --git a/SRC/cgsequ.c b/SRC/cgsequ.c
index 77a4961..db31e35 100644
--- a/SRC/cgsequ.c
+++ b/SRC/cgsequ.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file cgsequ.c
+ * \brief Computes row and column scalings
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Modified from LAPACK routine CGEEQU
+ * </pre>
  */
 /*
  * File name:	cgsequ.c
@@ -13,67 +18,73 @@
 #include <math.h>
 #include "slu_cdefs.h"
 
+
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose   
+ *   =======   
+ *
+ *   CGSEQU computes row and column scalings intended to equilibrate an   
+ *   M-by-N sparse matrix A and reduce its condition number. R returns the row
+ *   scale factors and C the column scale factors, chosen to try to make   
+ *   the largest element in each row and column of the matrix B with   
+ *   elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.   
+ *
+ *   R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
+ *   number and BIGNUM = largest safe number.  Use of these scaling   
+ *   factors is not guaranteed to reduce the condition number of A but   
+ *   works well in practice.   
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   A       (input) SuperMatrix*
+ *           The matrix of dimension (A->nrow, A->ncol) whose equilibration
+ *           factors are to be computed. The type of A can be:
+ *           Stype = SLU_NC; Dtype = SLU_C; Mtype = SLU_GE.
+ *	    
+ *   R       (output) float*, size A->nrow
+ *           If INFO = 0 or INFO > M, R contains the row scale factors   
+ *           for A.
+ *	    
+ *   C       (output) float*, size A->ncol
+ *           If INFO = 0,  C contains the column scale factors for A.
+ *	    
+ *   ROWCND  (output) float*
+ *           If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
+ *           smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
+ *           AMAX is neither too large nor too small, it is not worth   
+ *           scaling by R.
+ *	    
+ *   COLCND  (output) float*
+ *           If INFO = 0, COLCND contains the ratio of the smallest   
+ *           C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
+ *           worth scaling by C.
+ *	    
+ *   AMAX    (output) float*
+ *           Absolute value of largest matrix element.  If AMAX is very   
+ *           close to overflow or very close to underflow, the matrix   
+ *           should be scaled.
+ *	    
+ *   INFO    (output) int*
+ *           = 0:  successful exit   
+ *           < 0:  if INFO = -i, the i-th argument had an illegal value   
+ *           > 0:  if INFO = i,  and i is   
+ *                 <= A->nrow:  the i-th row of A is exactly zero   
+ *                 >  A->ncol:  the (i-M)-th column of A is exactly zero   
+ *
+ *   ===================================================================== 
+ * </pre>
+ */
 void
 cgsequ(SuperMatrix *A, float *r, float *c, float *rowcnd,
 	float *colcnd, float *amax, int *info)
 {
-/*    
-    Purpose   
-    =======   
-
-    CGSEQU computes row and column scalings intended to equilibrate an   
-    M-by-N sparse matrix A and reduce its condition number. R returns the row
-    scale factors and C the column scale factors, chosen to try to make   
-    the largest element in each row and column of the matrix B with   
-    elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.   
-
-    R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
-    number and BIGNUM = largest safe number.  Use of these scaling   
-    factors is not guaranteed to reduce the condition number of A but   
-    works well in practice.   
-
-    See supermatrix.h for the definition of 'SuperMatrix' structure.
- 
-    Arguments   
-    =========   
-
-    A       (input) SuperMatrix*
-            The matrix of dimension (A->nrow, A->ncol) whose equilibration
-            factors are to be computed. The type of A can be:
-            Stype = SLU_NC; Dtype = SLU_C; Mtype = SLU_GE.
-	    
-    R       (output) float*, size A->nrow
-            If INFO = 0 or INFO > M, R contains the row scale factors   
-            for A.
-	    
-    C       (output) float*, size A->ncol
-            If INFO = 0,  C contains the column scale factors for A.
-	    
-    ROWCND  (output) float*
-            If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
-            smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
-            AMAX is neither too large nor too small, it is not worth   
-            scaling by R.
-	    
-    COLCND  (output) float*
-            If INFO = 0, COLCND contains the ratio of the smallest   
-            C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
-            worth scaling by C.
-	    
-    AMAX    (output) float*
-            Absolute value of largest matrix element.  If AMAX is very   
-            close to overflow or very close to underflow, the matrix   
-            should be scaled.
-	    
-    INFO    (output) int*
-            = 0:  successful exit   
-            < 0:  if INFO = -i, the i-th argument had an illegal value   
-            > 0:  if INFO = i,  and i is   
-                  <= A->nrow:  the i-th row of A is exactly zero   
-                  >  A->ncol:  the (i-M)-th column of A is exactly zero   
-
-    ===================================================================== 
-*/
+
 
     /* Local variables */
     NCformat *Astore;
@@ -81,7 +92,7 @@ cgsequ(SuperMatrix *A, float *r, float *c, float *rowcnd,
     int i, j, irow;
     float rcmin, rcmax;
     float bignum, smlnum;
-    extern double slamch_(char *);
+    extern float slamch_(char *);
     
     /* Test the input parameters. */
     *info = 0;
diff --git a/SRC/cgsisx.c b/SRC/cgsisx.c
new file mode 100644
index 0000000..9b3634c
--- /dev/null
+++ b/SRC/cgsisx.c
@@ -0,0 +1,727 @@
+
+/*! @file cgsisx.c
+ * \brief Computes an approximate solutions of linear equations A*X=B or A'*X=B
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.2) --
+ * Lawrence Berkeley National Laboratory.
+ * November, 2010
+ * August, 2011
+ * </pre>
+ */
+#include "slu_cdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * CGSISX computes an approximate solutions of linear equations
+ * A*X=B or A'*X=B, using the ILU factorization from cgsitrf().
+ * An estimation of the condition number is provided. 
+ * The routine performs the following steps:
+ *
+ *   1. If A is stored column-wise (A->Stype = SLU_NC):
+ *  
+ *	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A is
+ *	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+ *	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+ *	     = TRANS or CONJ).
+ *
+ *	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+ *	     matrix that usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the matrix A (after equilibration if options->Equil = YES)
+ *	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.
+ *
+ *	1.4. Compute the reciprocal pivot growth factor.
+ *
+ *	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+ *	     and info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	1.6. The system of equations is solved for X using the factored form
+ *	     of A.
+ *
+ *	1.7. options->IterRefine is not used
+ *
+ *	1.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *	1.9. options for ILU only
+ *	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+ *		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+ *		entries of modulus 1 on the diagonal and off-diagonal entries
+ *		of modulus at most 1. If MC64 fails, dgsequ() is used to
+ *		equilibrate the system.
+ *              ( Default: LargeDiag )
+ *	     2) options->ILU_DropTol = tau is the threshold for dropping.
+ *		For L, it is used directly (for the whole row in a supernode);
+ *		For U, ||A(:,i)||_oo * tau is used as the threshold
+ *	        for the	i-th column.
+ *		If a secondary dropping rule is required, tau will
+ *	        also be used to compute the second threshold.
+ *              ( Default: 1e-4 )
+ *	     3) options->ILU_FillFactor = gamma, used as the initial guess
+ *		of memory growth.
+ *		If a secondary dropping rule is required, it will also
+ *              be used as an upper bound of the memory.
+ *              ( Default: 10 )
+ *	     4) options->ILU_DropRule specifies the dropping rule.
+ *		Option	      Meaning
+ *		======	      ===========
+ *		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+ *		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+ *		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+ *			      p = gamma * nnz(A(:,j)).
+ *		DROP_AREA:    Variation of ILUTP, for j-th column, use
+ *			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+ *		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+ *			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+ *				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+ *			      Otherwise
+ *				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+ *			      tau_U(j) uses the similar rule.
+ *			      NOTE: the thresholds used by L and U are separate.
+ *		DROP_INTERP:  Compute the second dropping threshold by
+ *			      interpolation instead of sorting (default).
+ *			      In this case, the actual fill ratio is not
+ *			      guaranteed smaller than gamma.
+ *		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+ *		( Default: DROP_BASIC | DROP_AREA )
+ *	     5) options->ILU_Norm is the criterion of measuring the magnitude
+ *		of a row in a supernode of L. ( Default is INF_NORM )
+ *		options->ILU_Norm	RowSize(x[1:n])
+ *		=================	===============
+ *		ONE_NORM		||x||_1 / n
+ *		TWO_NORM		||x||_2 / sqrt(n)
+ *		INF_NORM		max{|x[i]|}
+ *	     6) options->ILU_MILU specifies the type of MILU's variation.
+ *		= SILU: do not perform Modified ILU;
+ *		= SMILU_1 (not recommended):
+ *		    U(i,i) := U(i,i) + sum(dropped entries);
+ *		= SMILU_2:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+ *		= SMILU_3:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+ *		NOTE: Even SMILU_1 does not preserve the column sum because of
+ *		late dropping.
+ *              ( Default: SILU )
+ *	     7) options->ILU_FillTol is used as the perturbation when
+ *		encountering zero pivots. If some U(i,i) = 0, so that U is
+ *		exactly singular, then
+ *		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+ *              ( Default: 1e-2 )
+ *
+ *   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ *	to the transpose of A:
+ *
+ *	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A' is
+ *	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+ *	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').
+ *
+ *	2.2. Permute columns of transpose(A) (rows of A),
+ *	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+ *	     usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the transpose(A) (after equilibration if
+ *	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+ *	     permutation Pr determined by partial pivoting.
+ *
+ *	2.4. Compute the reciprocal pivot growth factor.
+ *
+ *	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+ *	     And info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	2.6. The system of equations is solved for X using the factored form
+ *	     of transpose(A).
+ *
+ *	2.7. If options->IterRefine is not used.
+ *
+ *	2.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the LU decomposition will be performed and how the
+ *	   system will be solved.
+ *
+ * A	   (input/output) SuperMatrix*
+ *	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+ *	   of the linear equations is A->nrow. Currently, the type of A can be:
+ *	   Stype = SLU_NC or SLU_NR, Dtype = SLU_C, Mtype = SLU_GE.
+ *	   In the future, more general A may be handled.
+ *
+ *	   On entry, If options->Fact = FACTORED and equed is not 'N',
+ *	   then A must have been equilibrated by the scaling factors in
+ *	   R and/or C.
+ *	   On exit, A is not modified
+ *         if options->Equil = NO, or
+ *         if options->Equil = YES but equed = 'N' on exit, or
+ *         if options->RowPerm = NO.
+ *
+ *	   Otherwise, if options->Equil = YES and equed is not 'N',
+ *	   A is scaled as follows:
+ *	   If A->Stype = SLU_NC:
+ *	     equed = 'R':  A := diag(R) * A
+ *	     equed = 'C':  A := A * diag(C)
+ *	     equed = 'B':  A := diag(R) * A * diag(C).
+ *	   If A->Stype = SLU_NR:
+ *	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+ *	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+ *	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).
+ *
+ *         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+ *            the matrix to an I-matrix, that is A is modified as follows:
+ *            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+ *            off-diagonal entries of modulus at most 1. P is a permutation
+ *            obtained from MC64.
+ *            If MC64 fails, cgsequ() is used to equilibrate the system,
+ *            and A is scaled as above, but no permutation is involved.
+ *            On exit, A is restored to the orginal row numbering, so
+ *            Dr*A*Dc is returned.
+ *
+ * perm_c  (input/output) int*
+ *	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+ *	   which defines the permutation matrix Pc; perm_c[i] = j means
+ *	   column i of A is in position j in A*Pc.
+ *	   On exit, perm_c may be overwritten by the product of the input
+ *	   perm_c and a permutation that postorders the elimination tree
+ *	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+ *	   is already in postorder.
+ *
+ *	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+ *	   which describes permutation of columns of transpose(A) 
+ *	   (rows of A) as described above.
+ *
+ * perm_r  (input/output) int*
+ *	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+ *	   which defines the permutation matrix Pr, and is determined
+ *	   by MC64 first then followed by partial pivoting.
+ *         perm_r[i] = j means row i of A is in position j in Pr*A.
+ *
+ *	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+ *	   determines permutation of rows of transpose(A)
+ *	   (columns of A) as described above.
+ *
+ *	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	   will try to use the input perm_r, unless a certain threshold
+ *	   criterion is violated. In that case, perm_r is overwritten by a
+ *	   new permutation determined by partial pivoting or diagonal
+ *	   threshold pivoting.
+ *	   Otherwise, perm_r is output argument.
+ *
+ * etree   (input/output) int*,  dimension (A->ncol)
+ *	   Elimination tree of Pc'*A'*A*Pc.
+ *	   If options->Fact != FACTORED and options->Fact != DOFACT,
+ *	   etree is an input argument, otherwise it is an output argument.
+ *	   Note: etree is a vector of parent pointers for a forest whose
+ *	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *
+ * equed   (input/output) char*
+ *	   Specifies the form of equilibration that was done.
+ *	   = 'N': No equilibration.
+ *	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+ *	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+ *	   = 'B': Both row and column equilibration, i.e., A was replaced 
+ *		  by diag(R)*A*diag(C).
+ *	   If options->Fact = FACTORED, equed is an input argument,
+ *	   otherwise it is an output argument.
+ *
+ * R	   (input/output) float*, dimension (A->nrow)
+ *	   The row scale factors for A or transpose(A).
+ *	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+ *	   If equed = 'N' or 'C', R is not accessed.
+ *	   If options->Fact = FACTORED, R is an input argument,
+ *	       otherwise, R is output.
+ *	   If options->Fact = FACTORED and equed = 'R' or 'B', each element
+ *	       of R must be positive.
+ *
+ * C	   (input/output) float*, dimension (A->ncol)
+ *	   The column scale factors for A or transpose(A).
+ *	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+ *	   If equed = 'N' or 'R', C is not accessed.
+ *	   If options->Fact = FACTORED, C is an input argument,
+ *	       otherwise, C is output.
+ *	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+ *	       of C must be positive.
+ *
+ * L	   (output) SuperMatrix*
+ *	   The factor L from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses compressed row subscripts storage for supernodes, i.e.,
+ *	   L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.
+ *
+ * U	   (output) SuperMatrix*
+ *	   The factor U from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses column-wise storage scheme, i.e., U has types:
+ *	   Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.
+ *
+ * work    (workspace/output) void*, size (lwork) (in bytes)
+ *	   User supplied workspace, should be large enough
+ *	   to hold data structures for factors L and U.
+ *	   On exit, if fact is not 'F', L and U point to this array.
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 mem_usage->total_needed; no other side effects.
+ *
+ *	   See argument 'mem_usage' for memory usage statistics.
+ *
+ * B	   (input/output) SuperMatrix*
+ *	   B has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+ *	   On entry, the right hand side matrix.
+ *	   If B->ncol = 0, only LU decomposition is performed, the triangular
+ *			   solve is skipped.
+ *	   On exit,
+ *	      if equed = 'N', B is not modified; otherwise
+ *	      if A->Stype = SLU_NC:
+ *		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+ *		    B is overwritten by diag(R)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+ *		    B is overwritten by diag(C)*B;
+ *	      if A->Stype = SLU_NR:
+ *		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+ *		    B is overwritten by diag(C)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+ *		    B is overwritten by diag(R)*B.
+ *
+ * X	   (output) SuperMatrix*
+ *	   X has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+ *	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+ *	   to the original system of equations. Note that A and B are modified
+ *	   on exit if equed is not 'N', and the solution to the equilibrated
+ *	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+ *	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+ *	   and equed = 'R' or 'B'.
+ *
+ * recip_pivot_growth (output) float*
+ *	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+ *	   The infinity norm is used. If recip_pivot_growth is much less
+ *	   than 1, the stability of the LU factorization could be poor.
+ *
+ * rcond   (output) float*
+ *	   The estimate of the reciprocal condition number of the matrix A
+ *	   after equilibration (if done). If rcond is less than the machine
+ *	   precision (in particular, if rcond = 0), the matrix is singular
+ *	   to working precision. This condition is indicated by a return
+ *	   code of info > 0.
+ *
+ * mem_usage (output) mem_usage_t*
+ *	   Record the memory usage statistics, consisting of following fields:
+ *	   - for_lu (float)
+ *	     The amount of space used in bytes for L\U data structures.
+ *	   - total_needed (float)
+ *	     The amount of space needed in bytes to perform factorization.
+ *	   - expansions (int)
+ *	     The number of memory expansions during the LU factorization.
+ *
+ * stat   (output) SuperLUStat_t*
+ *	  Record the statistics on runtime and floating-point operation count.
+ *	  See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info    (output) int*
+ *	   = 0: successful exit
+ *	   < 0: if info = -i, the i-th argument had an illegal value
+ *	   > 0: if info = i, and i is
+ *		<= A->ncol: number of zero pivots. They are replaced by small
+ *		      entries due to options->ILU_FillTol.
+ *		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+ *		      precision, meaning that the matrix is singular to
+ *		      working precision. Nevertheless, the solution and
+ *		      error bounds are computed because there are a number
+ *		      of situations where the computed solution can be more
+ *		      accurate than the value of RCOND would suggest.
+ *		> A->ncol+1: number of bytes allocated when memory allocation
+ *		      failure occurred, plus A->ncol.
+ * </pre>
+ */
+
+void
+cgsisx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+       int *etree, char *equed, float *R, float *C,
+       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
+       SuperMatrix *B, SuperMatrix *X,
+       float *recip_pivot_growth, float *rcond,
+       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)
+{
+
+    DNformat  *Bstore, *Xstore;
+    complex    *Bmat, *Xmat;
+    int       ldb, ldx, nrhs, n;
+    SuperMatrix *AA;/* A in SLU_NC format used by the factorization routine.*/
+    SuperMatrix AC; /* Matrix postmultiplied by Pc */
+    int       colequ, equil, nofact, notran, rowequ, permc_spec, mc64;
+    trans_t   trant;
+    char      norm[1];
+    int       i, j, info1;
+    float    amax, anorm, bignum, smlnum, colcnd, rowcnd, rcmax, rcmin;
+    int       relax, panel_size;
+    float    diag_pivot_thresh;
+    double    t0;      /* temporary time */
+    double    *utime;
+
+    int *perm = NULL; /* permutation returned from MC64 */
+
+    /* External functions */
+    extern float clangs(char *, SuperMatrix *);
+
+    Bstore = B->Store;
+    Xstore = X->Store;
+    Bmat   = Bstore->nzval;
+    Xmat   = Xstore->nzval;
+    ldb    = Bstore->lda;
+    ldx    = Xstore->lda;
+    nrhs   = B->ncol;
+    n      = B->nrow;
+
+    *info = 0;
+    nofact = (options->Fact != FACTORED);
+    equil = (options->Equil == YES);
+    notran = (options->Trans == NOTRANS);
+    mc64 = (options->RowPerm == LargeDiag);
+    if ( nofact ) {
+	*(unsigned char *)equed = 'N';
+	rowequ = FALSE;
+	colequ = FALSE;
+    } else {
+	rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+	colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	smlnum = slamch_("Safe minimum");
+	bignum = 1. / smlnum;
+    }
+
+    /* Test the input parameters */
+    if (options->Fact != DOFACT && options->Fact != SamePattern &&
+	options->Fact != SamePattern_SameRowPerm &&
+	options->Fact != FACTORED &&
+	options->Trans != NOTRANS && options->Trans != TRANS && 
+	options->Trans != CONJ &&
+	options->Equil != NO && options->Equil != YES)
+	*info = -1;
+    else if ( A->nrow != A->ncol || A->nrow < 0 ||
+	      (A->Stype != SLU_NC && A->Stype != SLU_NR) ||
+	      A->Dtype != SLU_C || A->Mtype != SLU_GE )
+	*info = -2;
+    else if (options->Fact == FACTORED &&
+	     !(rowequ || colequ || lsame_(equed, "N")))
+	*info = -6;
+    else {
+	if (rowequ) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, R[j]);
+		rcmax = SUPERLU_MAX(rcmax, R[j]);
+	    }
+	    if (rcmin <= 0.) *info = -7;
+	    else if ( A->nrow > 0)
+		rowcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else rowcnd = 1.;
+	}
+	if (colequ && *info == 0) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, C[j]);
+		rcmax = SUPERLU_MAX(rcmax, C[j]);
+	    }
+	    if (rcmin <= 0.) *info = -8;
+	    else if (A->nrow > 0)
+		colcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else colcnd = 1.;
+	}
+	if (*info == 0) {
+	    if ( lwork < -1 ) *info = -12;
+	    else if ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      B->Stype != SLU_DN || B->Dtype != SLU_C || 
+		      B->Mtype != SLU_GE )
+		*info = -13;
+	    else if ( X->ncol < 0 || Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      (B->ncol != 0 && B->ncol != X->ncol) ||
+		      X->Stype != SLU_DN ||
+		      X->Dtype != SLU_C || X->Mtype != SLU_GE )
+		*info = -14;
+	}
+    }
+    if (*info != 0) {
+	i = -(*info);
+	xerbla_("cgsisx", &i);
+	return;
+    }
+
+    /* Initialization for factor parameters */
+    panel_size = sp_ienv(1);
+    relax      = sp_ienv(2);
+    diag_pivot_thresh = options->DiagPivotThresh;
+
+    utime = stat->utime;
+
+    /* Convert A to SLU_NC format when necessary. */
+    if ( A->Stype == SLU_NR ) {
+	NRformat *Astore = A->Store;
+	AA = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+	cCreate_CompCol_Matrix(AA, A->ncol, A->nrow, Astore->nnz,
+			       Astore->nzval, Astore->colind, Astore->rowptr,
+			       SLU_NC, A->Dtype, A->Mtype);
+	if ( notran ) { /* Reverse the transpose argument. */
+	    trant = TRANS;
+	    notran = 0;
+	} else {
+	    trant = NOTRANS;
+	    notran = 1;
+	}
+    } else { /* A->Stype == SLU_NC */
+	trant = options->Trans;
+	AA = A;
+    }
+
+    if ( nofact ) {
+	register int i, j;
+	NCformat *Astore = AA->Store;
+	int nnz = Astore->nnz;
+	int *colptr = Astore->colptr;
+	int *rowind = Astore->rowind;
+	complex *nzval = (complex *)Astore->nzval;
+
+	if ( mc64 ) {
+	    t0 = SuperLU_timer_();
+	    if ((perm = intMalloc(n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for perm[]");
+
+	    info1 = cldperm(5, n, nnz, colptr, rowind, nzval, perm, R, C);
+
+	    if (info1 != 0) { /* MC64 fails, call cgsequ() later */
+		mc64 = 0;
+		SUPERLU_FREE(perm);
+		perm = NULL;
+	    } else {
+	        if ( equil ) {
+	            rowequ = colequ = 1;
+		    for (i = 0; i < n; i++) {
+		        R[i] = exp(R[i]);
+		        C[i] = exp(C[i]);
+		    }
+		    /* scale the matrix */
+		    for (j = 0; j < n; j++) {
+		        for (i = colptr[j]; i < colptr[j + 1]; i++) {
+                            cs_mult(&nzval[i], &nzval[i], R[rowind[i]] * C[j]);
+		        }
+		    }
+	            *equed = 'B';
+                }
+
+                /* permute the matrix */
+		for (j = 0; j < n; j++) {
+		    for (i = colptr[j]; i < colptr[j + 1]; i++) {
+			/*nzval[i] *= R[rowind[i]] * C[j];*/
+			rowind[i] = perm[rowind[i]];
+		    }
+		}
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+
+	if ( !mc64 & equil ) { /* Only perform equilibration, no row perm */
+	    t0 = SuperLU_timer_();
+	    /* Compute row and column scalings to equilibrate the matrix A. */
+	    cgsequ(AA, R, C, &rowcnd, &colcnd, &amax, &info1);
+
+	    if ( info1 == 0 ) {
+		/* Equilibrate matrix A. */
+		claqgs(AA, R, C, rowcnd, colcnd, amax, equed);
+		rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+		colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+    }
+
+
+    if ( nofact ) {
+	
+	t0 = SuperLU_timer_();
+	/*
+	 * Gnet column permutation vector perm_c[], according to permc_spec:
+	 *   permc_spec = NATURAL:  natural ordering 
+	 *   permc_spec = MMD_AT_PLUS_A: minimum degree on structure of A'+A
+	 *   permc_spec = MMD_ATA:  minimum degree on structure of A'*A
+	 *   permc_spec = COLAMD:   approximate minimum degree column ordering
+	 *   permc_spec = MY_PERMC: the ordering already supplied in perm_c[]
+	 */
+	permc_spec = options->ColPerm;
+	if ( permc_spec != MY_PERMC && options->Fact == DOFACT )
+	    get_perm_c(permc_spec, AA, perm_c);
+	utime[COLPERM] = SuperLU_timer_() - t0;
+
+	t0 = SuperLU_timer_();
+	sp_preorder(options, AA, perm_c, etree, &AC);
+	utime[ETREE] = SuperLU_timer_() - t0;
+
+	/* Compute the LU factorization of A*Pc. */
+	t0 = SuperLU_timer_();
+	cgsitrf(options, &AC, relax, panel_size, etree, work, lwork,
+                perm_c, perm_r, L, U, stat, info);
+	utime[FACT] = SuperLU_timer_() - t0;
+
+	if ( lwork == -1 ) {
+	    mem_usage->total_needed = *info - A->ncol;
+	    return;
+	}
+
+	if ( mc64 ) { /* Fold MC64's perm[] into perm_r[]. */
+	    NCformat *Astore = AA->Store;
+	    int nnz = Astore->nnz, *rowind = Astore->rowind;
+	    int *perm_tmp, *iperm;
+	    if ((perm_tmp = intMalloc(2*n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for perm_tmp[]");
+	    iperm = perm_tmp + n;
+	    for (i = 0; i < n; ++i) perm_tmp[i] = perm_r[perm[i]];
+	    for (i = 0; i < n; ++i) {
+		perm_r[i] = perm_tmp[i];
+		iperm[perm[i]] = i;
+	    }
+
+	    /* Restore A's original row indices. */
+	    for (i = 0; i < nnz; ++i) rowind[i] = iperm[rowind[i]];
+
+	    SUPERLU_FREE(perm); /* MC64 permutation */
+	    SUPERLU_FREE(perm_tmp);
+	}
+    }
+
+    if ( options->PivotGrowth ) {
+	if ( *info > 0 ) return;
+
+	/* Compute the reciprocal pivot growth factor *recip_pivot_growth. */
+	*recip_pivot_growth = cPivotGrowth(A->ncol, AA, perm_c, L, U);
+    }
+
+    if ( options->ConditionNumber ) {
+	/* Estimate the reciprocal of the condition number of A. */
+	t0 = SuperLU_timer_();
+	if ( notran ) {
+	    *(unsigned char *)norm = '1';
+	} else {
+	    *(unsigned char *)norm = 'I';
+	}
+	anorm = clangs(norm, AA);
+	cgscon(norm, L, U, anorm, rcond, stat, &info1);
+	utime[RCOND] = SuperLU_timer_() - t0;
+    }
+
+    if ( nrhs > 0 ) { /* Solve the system */
+        complex *rhs_work;
+
+	/* Scale and permute the right-hand side if equilibration
+           and permutation from MC64 were performed. */
+	if ( notran ) {
+	    if ( rowequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i)
+                        cs_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], R[i]);
+	    }
+	} else if ( colequ ) {
+	    for (j = 0; j < nrhs; ++j)
+		for (i = 0; i < n; ++i) {
+                    cs_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], C[i]);
+		}
+	}
+
+	/* Compute the solution matrix X. */
+	for (j = 0; j < nrhs; j++)  /* Save a copy of the right hand sides */
+	    for (i = 0; i < B->nrow; i++)
+		Xmat[i + j*ldx] = Bmat[i + j*ldb];
+
+	t0 = SuperLU_timer_();
+	cgstrs (trant, L, U, perm_c, perm_r, X, stat, &info1);
+	utime[SOLVE] = SuperLU_timer_() - t0;
+
+	/* Transform the solution matrix X to a solution of the original
+	   system. */
+	if ( notran ) {
+	    if ( colequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i) {
+                        cs_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], C[i]);
+                    }
+	    }
+	} else { /* transposed system */
+	    if ( rowequ ) {
+	        for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < A->nrow; ++i) {
+                        cs_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], R[i]);
+                    }
+	    }
+	}
+
+    } /* end if nrhs > 0 */
+
+    if ( options->ConditionNumber ) {
+	/* The matrix is singular to working precision. */
+	if ( *rcond < slamch_("E") && *info == 0) *info = A->ncol + 1;
+    }
+
+    if ( nofact ) {
+	ilu_cQuerySpace(L, U, mem_usage);
+	Destroy_CompCol_Permuted(&AC);
+    }
+    if ( A->Stype == SLU_NR ) {
+	Destroy_SuperMatrix_Store(AA);
+	SUPERLU_FREE(AA);
+    }
+
+}
diff --git a/SRC/cgsisx.c.bak b/SRC/cgsisx.c.bak
new file mode 100644
index 0000000..f6af8a6
--- /dev/null
+++ b/SRC/cgsisx.c.bak
@@ -0,0 +1,723 @@
+
+/*! @file cgsisx.c
+ * \brief Computes an approximate solutions of linear equations A*X=B or A'*X=B
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory.
+ * November, 2010
+ * </pre>
+ */
+#include "slu_cdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * CGSISX computes an approximate solutions of linear equations
+ * A*X=B or A'*X=B, using the ILU factorization from cgsitrf().
+ * An estimation of the condition number is provided. 
+ * The routine performs the following steps:
+ *
+ *   1. If A is stored column-wise (A->Stype = SLU_NC):
+ *  
+ *	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A is
+ *	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+ *	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+ *	     = TRANS or CONJ).
+ *
+ *	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+ *	     matrix that usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the matrix A (after equilibration if options->Equil = YES)
+ *	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.
+ *
+ *	1.4. Compute the reciprocal pivot growth factor.
+ *
+ *	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+ *	     and info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	1.6. The system of equations is solved for X using the factored form
+ *	     of A.
+ *
+ *	1.7. options->IterRefine is not used
+ *
+ *	1.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *	1.9. options for ILU only
+ *	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+ *		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+ *		entries of modulus 1 on the diagonal and off-diagonal entries
+ *		of modulus at most 1. If MC64 fails, dgsequ() is used to
+ *		equilibrate the system.
+ *              ( Default: LargeDiag )
+ *	     2) options->ILU_DropTol = tau is the threshold for dropping.
+ *		For L, it is used directly (for the whole row in a supernode);
+ *		For U, ||A(:,i)||_oo * tau is used as the threshold
+ *	        for the	i-th column.
+ *		If a secondary dropping rule is required, tau will
+ *	        also be used to compute the second threshold.
+ *              ( Default: 1e-4 )
+ *	     3) options->ILU_FillFactor = gamma, used as the initial guess
+ *		of memory growth.
+ *		If a secondary dropping rule is required, it will also
+ *              be used as an upper bound of the memory.
+ *              ( Default: 10 )
+ *	     4) options->ILU_DropRule specifies the dropping rule.
+ *		Option	      Meaning
+ *		======	      ===========
+ *		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+ *		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+ *		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+ *			      p = gamma * nnz(A(:,j)).
+ *		DROP_AREA:    Variation of ILUTP, for j-th column, use
+ *			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+ *		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+ *			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+ *				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+ *			      Otherwise
+ *				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+ *			      tau_U(j) uses the similar rule.
+ *			      NOTE: the thresholds used by L and U are separate.
+ *		DROP_INTERP:  Compute the second dropping threshold by
+ *			      interpolation instead of sorting (default).
+ *			      In this case, the actual fill ratio is not
+ *			      guaranteed smaller than gamma.
+ *		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+ *		( Default: DROP_BASIC | DROP_AREA )
+ *	     5) options->ILU_Norm is the criterion of measuring the magnitude
+ *		of a row in a supernode of L. ( Default is INF_NORM )
+ *		options->ILU_Norm	RowSize(x[1:n])
+ *		=================	===============
+ *		ONE_NORM		||x||_1 / n
+ *		TWO_NORM		||x||_2 / sqrt(n)
+ *		INF_NORM		max{|x[i]|}
+ *	     6) options->ILU_MILU specifies the type of MILU's variation.
+ *		= SILU: do not perform Modified ILU;
+ *		= SMILU_1 (not recommended):
+ *		    U(i,i) := U(i,i) + sum(dropped entries);
+ *		= SMILU_2:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+ *		= SMILU_3:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+ *		NOTE: Even SMILU_1 does not preserve the column sum because of
+ *		late dropping.
+ *              ( Default: SILU )
+ *	     7) options->ILU_FillTol is used as the perturbation when
+ *		encountering zero pivots. If some U(i,i) = 0, so that U is
+ *		exactly singular, then
+ *		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+ *              ( Default: 1e-2 )
+ *
+ *   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ *	to the transpose of A:
+ *
+ *	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A' is
+ *	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+ *	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').
+ *
+ *	2.2. Permute columns of transpose(A) (rows of A),
+ *	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+ *	     usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the transpose(A) (after equilibration if
+ *	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+ *	     permutation Pr determined by partial pivoting.
+ *
+ *	2.4. Compute the reciprocal pivot growth factor.
+ *
+ *	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+ *	     And info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	2.6. The system of equations is solved for X using the factored form
+ *	     of transpose(A).
+ *
+ *	2.7. If options->IterRefine is not used.
+ *
+ *	2.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the LU decomposition will be performed and how the
+ *	   system will be solved.
+ *
+ * A	   (input/output) SuperMatrix*
+ *	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+ *	   of the linear equations is A->nrow. Currently, the type of A can be:
+ *	   Stype = SLU_NC or SLU_NR, Dtype = SLU_C, Mtype = SLU_GE.
+ *	   In the future, more general A may be handled.
+ *
+ *	   On entry, If options->Fact = FACTORED and equed is not 'N',
+ *	   then A must have been equilibrated by the scaling factors in
+ *	   R and/or C.
+ *	   On exit, A is not modified
+ *         if options->Equil = NO, or
+ *         if options->Equil = YES but equed = 'N' on exit, or
+ *         if options->RowPerm = NO.
+ *
+ *	   Otherwise, if options->Equil = YES and equed is not 'N',
+ *	   A is scaled as follows:
+ *	   If A->Stype = SLU_NC:
+ *	     equed = 'R':  A := diag(R) * A
+ *	     equed = 'C':  A := A * diag(C)
+ *	     equed = 'B':  A := diag(R) * A * diag(C).
+ *	   If A->Stype = SLU_NR:
+ *	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+ *	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+ *	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).
+ *
+ *         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+ *            the matrix to an I-matrix, that is A is modified as follows:
+ *            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+ *            off-diagonal entries of modulus at most 1. P is a permutation
+ *            obtained from MC64.
+ *            If MC64 fails, cgsequ() is used to equilibrate the system,
+ *            and A is scaled as above, there is no permutation involved.
+ *
+ * perm_c  (input/output) int*
+ *	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+ *	   which defines the permutation matrix Pc; perm_c[i] = j means
+ *	   column i of A is in position j in A*Pc.
+ *	   On exit, perm_c may be overwritten by the product of the input
+ *	   perm_c and a permutation that postorders the elimination tree
+ *	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+ *	   is already in postorder.
+ *
+ *	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+ *	   which describes permutation of columns of transpose(A) 
+ *	   (rows of A) as described above.
+ *
+ * perm_r  (input/output) int*
+ *	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+ *	   which defines the permutation matrix Pr, and is determined
+ *	   by partial pivoting.  perm_r[i] = j means row i of A is in 
+ *	   position j in Pr*A.
+ *
+ *	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+ *	   determines permutation of rows of transpose(A)
+ *	   (columns of A) as described above.
+ *
+ *	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	   will try to use the input perm_r, unless a certain threshold
+ *	   criterion is violated. In that case, perm_r is overwritten by a
+ *	   new permutation determined by partial pivoting or diagonal
+ *	   threshold pivoting.
+ *	   Otherwise, perm_r is output argument.
+ *
+ * etree   (input/output) int*,  dimension (A->ncol)
+ *	   Elimination tree of Pc'*A'*A*Pc.
+ *	   If options->Fact != FACTORED and options->Fact != DOFACT,
+ *	   etree is an input argument, otherwise it is an output argument.
+ *	   Note: etree is a vector of parent pointers for a forest whose
+ *	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *
+ * equed   (input/output) char*
+ *	   Specifies the form of equilibration that was done.
+ *	   = 'N': No equilibration.
+ *	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+ *	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+ *	   = 'B': Both row and column equilibration, i.e., A was replaced 
+ *		  by diag(R)*A*diag(C).
+ *	   If options->Fact = FACTORED, equed is an input argument,
+ *	   otherwise it is an output argument.
+ *
+ * R	   (input/output) float*, dimension (A->nrow)
+ *	   The row scale factors for A or transpose(A).
+ *	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+ *	   If equed = 'N' or 'C', R is not accessed.
+ *	   If options->Fact = FACTORED, R is an input argument,
+ *	       otherwise, R is output.
+ *	   If options->zFact = FACTORED and equed = 'R' or 'B', each element
+ *	       of R must be positive.
+ *
+ * C	   (input/output) float*, dimension (A->ncol)
+ *	   The column scale factors for A or transpose(A).
+ *	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+ *	   If equed = 'N' or 'R', C is not accessed.
+ *	   If options->Fact = FACTORED, C is an input argument,
+ *	       otherwise, C is output.
+ *	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+ *	       of C must be positive.
+ *
+ * L	   (output) SuperMatrix*
+ *	   The factor L from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses compressed row subscripts storage for supernodes, i.e.,
+ *	   L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.
+ *
+ * U	   (output) SuperMatrix*
+ *	   The factor U from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses column-wise storage scheme, i.e., U has types:
+ *	   Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.
+ *
+ * work    (workspace/output) void*, size (lwork) (in bytes)
+ *	   User supplied workspace, should be large enough
+ *	   to hold data structures for factors L and U.
+ *	   On exit, if fact is not 'F', L and U point to this array.
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 mem_usage->total_needed; no other side effects.
+ *
+ *	   See argument 'mem_usage' for memory usage statistics.
+ *
+ * B	   (input/output) SuperMatrix*
+ *	   B has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+ *	   On entry, the right hand side matrix.
+ *	   If B->ncol = 0, only LU decomposition is performed, the triangular
+ *			   solve is skipped.
+ *	   On exit,
+ *	      if equed = 'N', B is not modified; otherwise
+ *	      if A->Stype = SLU_NC:
+ *		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+ *		    B is overwritten by diag(R)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+ *		    B is overwritten by diag(C)*B;
+ *	      if A->Stype = SLU_NR:
+ *		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+ *		    B is overwritten by diag(C)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+ *		    B is overwritten by diag(R)*B.
+ *
+ *         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+ *            the matrix A to an I-matrix. Then, in addition to the scaling
+ *            above, B is further permuted by P*B if options->Trans = NOTRANS,
+ *            where P is obtained from MC64.
+ *
+ * X	   (output) SuperMatrix*
+ *	   X has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = SLU_GE.
+ *	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+ *	   to the original system of equations. Note that A and B are modified
+ *	   on exit if equed is not 'N', and the solution to the equilibrated
+ *	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+ *	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+ *	   and equed = 'R' or 'B'.
+ *
+ * recip_pivot_growth (output) float*
+ *	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+ *	   The infinity norm is used. If recip_pivot_growth is much less
+ *	   than 1, the stability of the LU factorization could be poor.
+ *
+ * rcond   (output) float*
+ *	   The estimate of the reciprocal condition number of the matrix A
+ *	   after equilibration (if done). If rcond is less than the machine
+ *	   precision (in particular, if rcond = 0), the matrix is singular
+ *	   to working precision. This condition is indicated by a return
+ *	   code of info > 0.
+ *
+ * mem_usage (output) mem_usage_t*
+ *	   Record the memory usage statistics, consisting of following fields:
+ *	   - for_lu (float)
+ *	     The amount of space used in bytes for L\U data structures.
+ *	   - total_needed (float)
+ *	     The amount of space needed in bytes to perform factorization.
+ *	   - expansions (int)
+ *	     The number of memory expansions during the LU factorization.
+ *
+ * stat   (output) SuperLUStat_t*
+ *	  Record the statistics on runtime and floating-point operation count.
+ *	  See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info    (output) int*
+ *	   = 0: successful exit
+ *	   < 0: if info = -i, the i-th argument had an illegal value
+ *	   > 0: if info = i, and i is
+ *		<= A->ncol: number of zero pivots. They are replaced by small
+ *		      entries due to options->ILU_FillTol.
+ *		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+ *		      precision, meaning that the matrix is singular to
+ *		      working precision. Nevertheless, the solution and
+ *		      error bounds are computed because there are a number
+ *		      of situations where the computed solution can be more
+ *		      accurate than the value of RCOND would suggest.
+ *		> A->ncol+1: number of bytes allocated when memory allocation
+ *		      failure occurred, plus A->ncol.
+ * </pre>
+ */
+
+void
+cgsisx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+       int *etree, char *equed, float *R, float *C,
+       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
+       SuperMatrix *B, SuperMatrix *X,
+       float *recip_pivot_growth, float *rcond,
+       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)
+{
+
+    DNformat  *Bstore, *Xstore;
+    complex    *Bmat, *Xmat;
+    int       ldb, ldx, nrhs;
+    SuperMatrix *AA;/* A in SLU_NC format used by the factorization routine.*/
+    SuperMatrix AC; /* Matrix postmultiplied by Pc */
+    int       colequ, equil, nofact, notran, rowequ, permc_spec, mc64;
+    trans_t   trant;
+    char      norm[1];
+    int       i, j, info1;
+    float    amax, anorm, bignum, smlnum, colcnd, rowcnd, rcmax, rcmin;
+    int       relax, panel_size;
+    float    diag_pivot_thresh;
+    double    t0;      /* temporary time */
+    double    *utime;
+
+    int *perm = NULL; /* permutation returned from MC64 */
+
+    /* External functions */
+    extern float clangs(char *, SuperMatrix *);
+
+    Bstore = B->Store;
+    Xstore = X->Store;
+    Bmat   = Bstore->nzval;
+    Xmat   = Xstore->nzval;
+    ldb    = Bstore->lda;
+    ldx    = Xstore->lda;
+    nrhs   = B->ncol;
+
+    *info = 0;
+    nofact = (options->Fact != FACTORED);
+    equil = (options->Equil == YES);
+    notran = (options->Trans == NOTRANS);
+    mc64 = (options->RowPerm == LargeDiag);
+    if ( nofact ) {
+	*(unsigned char *)equed = 'N';
+	rowequ = FALSE;
+	colequ = FALSE;
+    } else {
+	rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+	colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	smlnum = slamch_("Safe minimum");
+	bignum = 1. / smlnum;
+    }
+
+    /* Test the input parameters */
+    if (!nofact && options->Fact != DOFACT && options->Fact != SamePattern &&
+	options->Fact != SamePattern_SameRowPerm &&
+	!notran && options->Trans != TRANS && options->Trans != CONJ &&
+	!equil && options->Equil != NO)
+	*info = -1;
+    else if ( A->nrow != A->ncol || A->nrow < 0 ||
+	      (A->Stype != SLU_NC && A->Stype != SLU_NR) ||
+	      A->Dtype != SLU_C || A->Mtype != SLU_GE )
+	*info = -2;
+    else if (options->Fact == FACTORED &&
+	     !(rowequ || colequ || lsame_(equed, "N")))
+	*info = -6;
+    else {
+	if (rowequ) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, R[j]);
+		rcmax = SUPERLU_MAX(rcmax, R[j]);
+	    }
+	    if (rcmin <= 0.) *info = -7;
+	    else if ( A->nrow > 0)
+		rowcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else rowcnd = 1.;
+	}
+	if (colequ && *info == 0) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, C[j]);
+		rcmax = SUPERLU_MAX(rcmax, C[j]);
+	    }
+	    if (rcmin <= 0.) *info = -8;
+	    else if (A->nrow > 0)
+		colcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else colcnd = 1.;
+	}
+	if (*info == 0) {
+	    if ( lwork < -1 ) *info = -12;
+	    else if ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      B->Stype != SLU_DN || B->Dtype != SLU_C || 
+		      B->Mtype != SLU_GE )
+		*info = -13;
+	    else if ( X->ncol < 0 || Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      (B->ncol != 0 && B->ncol != X->ncol) ||
+		      X->Stype != SLU_DN ||
+		      X->Dtype != SLU_C || X->Mtype != SLU_GE )
+		*info = -14;
+	}
+    }
+    if (*info != 0) {
+	i = -(*info);
+	xerbla_("cgsisx", &i);
+	return;
+    }
+
+    /* Initialization for factor parameters */
+    panel_size = sp_ienv(1);
+    relax      = sp_ienv(2);
+    diag_pivot_thresh = options->DiagPivotThresh;
+
+    utime = stat->utime;
+
+    /* Convert A to SLU_NC format when necessary. */
+    if ( A->Stype == SLU_NR ) {
+	NRformat *Astore = A->Store;
+	AA = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+	cCreate_CompCol_Matrix(AA, A->ncol, A->nrow, Astore->nnz,
+			       Astore->nzval, Astore->colind, Astore->rowptr,
+			       SLU_NC, A->Dtype, A->Mtype);
+	if ( notran ) { /* Reverse the transpose argument. */
+	    trant = TRANS;
+	    notran = 0;
+	} else {
+	    trant = NOTRANS;
+	    notran = 1;
+	}
+    } else { /* A->Stype == SLU_NC */
+	trant = options->Trans;
+	AA = A;
+    }
+
+    if ( nofact ) {
+	register int i, j;
+	NCformat *Astore = AA->Store;
+	int nnz = Astore->nnz;
+	int *colptr = Astore->colptr;
+	int *rowind = Astore->rowind;
+	complex *nzval = (complex *)Astore->nzval;
+	int n = AA->nrow;
+
+	if ( mc64 ) {
+	    *equed = 'B';
+    	    /*rowequ = colequ = 1;*/
+	    t0 = SuperLU_timer_();
+	    if ((perm = intMalloc(n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for perm[]");
+
+	    info1 = cldperm(5, n, nnz, colptr, rowind, nzval, perm, R, C);
+
+	    if (info1 > 0) { /* MC64 fails, call cgsequ() later */
+		mc64 = 0;
+		SUPERLU_FREE(perm);
+		perm = NULL;
+	    } else {
+	        rowequ = colequ = 1;
+		for (i = 0; i < n; i++) {
+		    R[i] = exp(R[i]);
+		    C[i] = exp(C[i]);
+		}
+		/* permute and scale the matrix */
+		for (j = 0; j < n; j++) {
+		    for (i = colptr[j]; i < colptr[j + 1]; i++) {
+                        cs_mult(&nzval[i], &nzval[i], R[rowind[i]] * C[j]);
+			rowind[i] = perm[rowind[i]];
+		    }
+		}
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+	if ( !mc64 & equil ) {
+	    t0 = SuperLU_timer_();
+	    /* Compute row and column scalings to equilibrate the matrix A. */
+	    cgsequ(AA, R, C, &rowcnd, &colcnd, &amax, &info1);
+
+	    if ( info1 == 0 ) {
+		/* Equilibrate matrix A. */
+		claqgs(AA, R, C, rowcnd, colcnd, amax, equed);
+		rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+		colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+    }
+
+
+    if ( nofact ) {
+	
+	t0 = SuperLU_timer_();
+	/*
+	 * Gnet column permutation vector perm_c[], according to permc_spec:
+	 *   permc_spec = NATURAL:  natural ordering 
+	 *   permc_spec = MMD_AT_PLUS_A: minimum degree on structure of A'+A
+	 *   permc_spec = MMD_ATA:  minimum degree on structure of A'*A
+	 *   permc_spec = COLAMD:   approximate minimum degree column ordering
+	 *   permc_spec = MY_PERMC: the ordering already supplied in perm_c[]
+	 */
+	permc_spec = options->ColPerm;
+	if ( permc_spec != MY_PERMC && options->Fact == DOFACT )
+	    get_perm_c(permc_spec, AA, perm_c);
+	utime[COLPERM] = SuperLU_timer_() - t0;
+
+	t0 = SuperLU_timer_();
+	sp_preorder(options, AA, perm_c, etree, &AC);
+	utime[ETREE] = SuperLU_timer_() - t0;
+
+	/* Compute the LU factorization of A*Pc. */
+	t0 = SuperLU_timer_();
+	cgsitrf(options, &AC, relax, panel_size, etree, work, lwork,
+                perm_c, perm_r, L, U, stat, info);
+	utime[FACT] = SuperLU_timer_() - t0;
+
+	if ( lwork == -1 ) {
+	    mem_usage->total_needed = *info - A->ncol;
+	    return;
+	}
+    }
+
+    if ( options->PivotGrowth ) {
+	if ( *info > 0 ) return;
+
+	/* Compute the reciprocal pivot growth factor *recip_pivot_growth. */
+	*recip_pivot_growth = cPivotGrowth(A->ncol, AA, perm_c, L, U);
+    }
+
+    if ( options->ConditionNumber ) {
+	/* Estimate the reciprocal of the condition number of A. */
+	t0 = SuperLU_timer_();
+	if ( notran ) {
+	    *(unsigned char *)norm = '1';
+	} else {
+	    *(unsigned char *)norm = 'I';
+	}
+	anorm = clangs(norm, AA);
+	cgscon(norm, L, U, anorm, rcond, stat, &info1);
+	utime[RCOND] = SuperLU_timer_() - t0;
+    }
+
+    if ( nrhs > 0 ) { /* Solve the system */
+        complex *tmp, *rhs_work;
+        int n = A->nrow;
+        if ( mc64 ) {
+	    if ((tmp = complexMalloc(n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for tmp[]");
+        }
+
+	/* Scale and permute the right-hand side if equilibration
+           and permutation from MC64 were performed. */
+	if ( notran ) {
+	    if ( rowequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i)
+                        cs_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], R[i]);
+	    }
+	    if ( mc64 ) {
+		for (j = 0; j < nrhs; ++j) {
+                   rhs_work = &Bmat[j*ldb];
+  	           for (i = 0; i < n; i++) tmp[perm[i]] = rhs_work[i];
+	           for (i = 0; i < n; i++) rhs_work[i] = tmp[i];
+                }
+	    }
+	} else if ( colequ ) {
+	    for (j = 0; j < nrhs; ++j)
+		for (i = 0; i < n; ++i) {
+                    cs_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], C[i]);
+		}
+	}
+
+	/* Compute the solution matrix X. */
+	for (j = 0; j < nrhs; j++)  /* Save a copy of the right hand sides */
+	    for (i = 0; i < B->nrow; i++)
+		Xmat[i + j*ldx] = Bmat[i + j*ldb];
+
+	t0 = SuperLU_timer_();
+	cgstrs (trant, L, U, perm_c, perm_r, X, stat, &info1);
+	utime[SOLVE] = SuperLU_timer_() - t0;
+
+	/* Transform the solution matrix X to a solution of the original
+	   system. */
+	if ( notran ) {
+	    if ( colequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i) {
+                        cs_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], C[i]);
+                    }
+	    }
+	} else { /* transposed system */
+	    if ( rowequ ) {
+		if ( mc64 ) {
+		    for (j = 0; j < nrhs; j++) {
+			for (i = 0; i < n; i++)
+			    tmp[i] = Xmat[i + j * ldx]; /*dcopy*/
+			for (i = 0; i < n; i++)
+                           cs_mult(&Xmat[i+j*ldx], &tmp[perm[i]], R[i]);
+		    }
+		} else {
+		    for (j = 0; j < nrhs; ++j)
+			for (i = 0; i < A->nrow; ++i) {
+                           cs_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], R[i]);
+                        }
+		}
+	    }
+	}
+
+        if ( mc64 ) SUPERLU_FREE(tmp);
+
+    } /* end if nrhs > 0 */
+
+    if ( options->ConditionNumber ) {
+	/* Set INFO = A->ncol+1 if the matrix is singular to working precision. */
+	if ( *rcond < slamch_("E") && *info == 0) *info = A->ncol + 1;
+    }
+
+    if (perm) SUPERLU_FREE(perm);
+
+    if ( nofact ) {
+	ilu_cQuerySpace(L, U, mem_usage);
+	Destroy_CompCol_Permuted(&AC);
+    }
+    if ( A->Stype == SLU_NR ) {
+	Destroy_SuperMatrix_Store(AA);
+	SUPERLU_FREE(AA);
+    }
+
+}
diff --git a/SRC/cgsitrf.c b/SRC/cgsitrf.c
new file mode 100644
index 0000000..717bc38
--- /dev/null
+++ b/SRC/cgsitrf.c
@@ -0,0 +1,637 @@
+
+/*! @file cgsitrf.c
+ * \brief Computes an ILU factorization of a general sparse matrix
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ *
+ * </pre>
+ */
+
+#include "slu_cdefs.h"
+
+#ifdef DEBUG
+int num_drop_L;
+#endif
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * CGSITRF computes an ILU factorization of a general sparse m-by-n
+ * matrix A using partial pivoting with row interchanges.
+ * The factorization has the form
+ *     Pr * A = L * U
+ * where Pr is a row permutation matrix, L is lower triangular with unit
+ * diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ * triangular (upper trapezoidal if A->nrow < A->ncol).
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the ILU decomposition will be performed.
+ *
+ * A	    (input) SuperMatrix*
+ *	    Original matrix A, permuted by columns, of dimension
+ *	    (A->nrow, A->ncol). The type of A can be:
+ *	    Stype = SLU_NCP; Dtype = SLU_C; Mtype = SLU_GE.
+ *
+ * relax    (input) int
+ *	    To control degree of relaxing supernodes. If the number
+ *	    of nodes (columns) in a subtree of the elimination tree is less
+ *	    than relax, this subtree is considered as one supernode,
+ *	    regardless of the row structures of those columns.
+ *
+ * panel_size (input) int
+ *	    A panel consists of at most panel_size consecutive columns.
+ *
+ * etree    (input) int*, dimension (A->ncol)
+ *	    Elimination tree of A'*A.
+ *	    Note: etree is a vector of parent pointers for a forest whose
+ *	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *	    On input, the columns of A should be permuted so that the
+ *	    etree is in a certain postorder.
+ *
+ * work     (input/output) void*, size (lwork) (in bytes)
+ *	    User-supplied work space and space for the output data structures.
+ *	    Not referenced if lwork = 0;
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 *info; no other side effects.
+ *
+ * perm_c   (input) int*, dimension (A->ncol)
+ *	    Column permutation vector, which defines the
+ *	    permutation matrix Pc; perm_c[i] = j means column i of A is
+ *	    in position j in A*Pc.
+ *	    When searching for diagonal, perm_c[*] is applied to the
+ *	    row subscripts of A, so that diagonal threshold pivoting
+ *	    can find the diagonal of A, rather than that of A*Pc.
+ *
+ * perm_r   (input/output) int*, dimension (A->nrow)
+ *	    Row permutation vector which defines the permutation matrix Pr,
+ *	    perm_r[i] = j means row i of A is in position j in Pr*A.
+ *	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	       will try to use the input perm_r, unless a certain threshold
+ *	       criterion is violated. In that case, perm_r is overwritten by
+ *	       a new permutation determined by partial pivoting or diagonal
+ *	       threshold pivoting.
+ *	    Otherwise, perm_r is output argument;
+ *
+ * L	    (output) SuperMatrix*
+ *	    The factor L from the factorization Pr*A=L*U; use compressed row
+ *	    subscripts storage for supernodes, i.e., L has type:
+ *	    Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.
+ *
+ * U	    (output) SuperMatrix*
+ *	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+ *	    storage scheme, i.e., U has types: Stype = SLU_NC,
+ *	    Dtype = SLU_C, Mtype = SLU_TRU.
+ *
+ * stat     (output) SuperLUStat_t*
+ *	    Record the statistics on runtime and floating-point operation count.
+ *	    See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info     (output) int*
+ *	    = 0: successful exit
+ *	    < 0: if info = -i, the i-th argument had an illegal value
+ *	    > 0: if info = i, and i is
+ *	       <= A->ncol: number of zero pivots. They are replaced by small
+ *		  entries according to options->ILU_FillTol.
+ *	       > A->ncol: number of bytes allocated when memory allocation
+ *		  failure occurred, plus A->ncol. If lwork = -1, it is
+ *		  the estimated amount of space needed, plus A->ncol.
+ *
+ * ======================================================================
+ *
+ * Local Working Arrays:
+ * ======================
+ *   m = number of rows in the matrix
+ *   n = number of columns in the matrix
+ *
+ *   marker[0:3*m-1]: marker[i] = j means that node i has been
+ *	reached when working on column j.
+ *	Storage: relative to original row subscripts
+ *	NOTE: There are 4 of them:
+ *	      marker/marker1 are used for panel dfs, see (ilu_)dpanel_dfs.c;
+ *	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+ *	      marker_relax(has its own space) is used for relaxed supernodes.
+ *
+ *   parent[0:m-1]: parent vector used during dfs
+ *	Storage: relative to new row subscripts
+ *
+ *   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ *	unexplored neighbor of i in lsub[*]
+ *
+ *   segrep[0:nseg-1]: contains the list of supernodal representatives
+ *	in topological order of the dfs. A supernode representative is the
+ *	last column of a supernode.
+ *	The maximum size of segrep[] is n.
+ *
+ *   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+ *	supernodal representative r, repfnz[r] is the location of the first
+ *	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+ *	indicates the supernode r has been explored.
+ *	NOTE: There are W of them, each used for one column of a panel.
+ *
+ *   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+ *	the panel diagonal. These are filled in during dpanel_dfs(), and are
+ *	used later in the inner LU factorization within the panel.
+ *	panel_lsub[]/dense[] pair forms the SPA data structure.
+ *	NOTE: There are W of them.
+ *
+ *   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ *		   NOTE: there are W of them.
+ *
+ *   tempv[0:*]: real temporary used for dense numeric kernels;
+ *	The size of this array is defined by NUM_TEMPV() in slu_util.h.
+ *	It is also used by the dropping routine ilu_ddrop_row().
+ * </pre>
+ */
+
+void
+cgsitrf(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size,
+	int *etree, void *work, int lwork, int *perm_c, int *perm_r,
+	SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)
+{
+    /* Local working arrays */
+    NCPformat *Astore;
+    int       *iperm_r = NULL; /* inverse of perm_r; used when
+				  options->Fact == SamePattern_SameRowPerm */
+    int       *iperm_c; /* inverse of perm_c */
+    int       *swap, *iswap; /* swap is used to store the row permutation
+				during the factorization. Initially, it is set
+				to iperm_c (row indeces of Pc*A*Pc').
+				iswap is the inverse of swap. After the
+				factorization, it is equal to perm_r. */
+    int       *iwork;
+    complex   *cwork;
+    int       *segrep, *repfnz, *parent, *xplore;
+    int       *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
+    int       *marker, *marker_relax;
+    complex    *dense, *tempv;
+    float *stempv;
+    int       *relax_end, *relax_fsupc;
+    complex    *a;
+    int       *asub;
+    int       *xa_begin, *xa_end;
+    int       *xsup, *supno;
+    int       *xlsub, *xlusup, *xusub;
+    int       nzlumax;
+    float    *amax; 
+    complex    drop_sum;
+    float alpha, omega;  /* used in MILU, mimicing DRIC */
+    static GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
+    float    *swork2;	   /* used by the second dropping rule */
+
+    /* Local scalars */
+    fact_t    fact = options->Fact;
+    double    diag_pivot_thresh = options->DiagPivotThresh;
+    double    drop_tol = options->ILU_DropTol; /* tau */
+    double    fill_ini = options->ILU_FillTol; /* tau^hat */
+    double    gamma = options->ILU_FillFactor;
+    int       drop_rule = options->ILU_DropRule;
+    milu_t    milu = options->ILU_MILU;
+    double    fill_tol;
+    int       pivrow;	/* pivotal row number in the original matrix A */
+    int       nseg1;	/* no of segments in U-column above panel row jcol */
+    int       nseg;	/* no of segments in each U-column */
+    register int jcol;
+    register int kcol;	/* end column of a relaxed snode */
+    register int icol;
+    register int i, k, jj, new_next, iinfo;
+    int       m, n, min_mn, jsupno, fsupc, nextlu, nextu;
+    int       w_def;	/* upper bound on panel width */
+    int       usepr, iperm_r_allocated = 0;
+    int       nnzL, nnzU;
+    int       *panel_histo = stat->panel_histo;
+    flops_t   *ops = stat->ops;
+
+    int       last_drop;/* the last column which the dropping rules applied */
+    int       quota;
+    int       nnzAj;	/* number of nonzeros in A(:,1:j) */
+    int       nnzLj, nnzUj;
+    double    tol_L = drop_tol, tol_U = drop_tol;
+    complex zero = {0.0, 0.0};
+    float one = 1.0;
+
+    /* Executable */	   
+    iinfo    = 0;
+    m	     = A->nrow;
+    n	     = A->ncol;
+    min_mn   = SUPERLU_MIN(m, n);
+    Astore   = A->Store;
+    a	     = Astore->nzval;
+    asub     = Astore->rowind;
+    xa_begin = Astore->colbeg;
+    xa_end   = Astore->colend;
+
+    /* Allocate storage common to the factor routines */
+    *info = cLUMemInit(fact, work, lwork, m, n, Astore->nnz, panel_size,
+		       gamma, L, U, &Glu, &iwork, &cwork);
+    if ( *info ) return;
+
+    xsup    = Glu.xsup;
+    supno   = Glu.supno;
+    xlsub   = Glu.xlsub;
+    xlusup  = Glu.xlusup;
+    xusub   = Glu.xusub;
+
+    SetIWork(m, n, panel_size, iwork, &segrep, &parent, &xplore,
+	     &repfnz, &panel_lsub, &marker_relax, &marker);
+    cSetRWork(m, panel_size, cwork, &dense, &tempv);
+
+    usepr = (fact == SamePattern_SameRowPerm);
+    if ( usepr ) {
+	/* Compute the inverse of perm_r */
+	iperm_r = (int *) intMalloc(m);
+	for (k = 0; k < m; ++k) iperm_r[perm_r[k]] = k;
+	iperm_r_allocated = 1;
+    }
+
+    iperm_c = (int *) intMalloc(n);
+    for (k = 0; k < n; ++k) iperm_c[perm_c[k]] = k;
+    swap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) swap[k] = iperm_c[k];
+    iswap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) iswap[k] = perm_c[k];
+    amax = (float *) floatMalloc(panel_size);
+    if (drop_rule & DROP_SECONDARY)
+	swork2 = (float *)floatMalloc(n);
+    else
+	swork2 = NULL;
+
+    nnzAj = 0;
+    nnzLj = 0;
+    nnzUj = 0;
+    last_drop = SUPERLU_MAX(min_mn - 2 * sp_ienv(7), (int)(min_mn * 0.95));
+    alpha = pow((double)n, -1.0 / options->ILU_MILU_Dim);
+
+    /* Identify relaxed snodes */
+    relax_end = (int *) intMalloc(n);
+    relax_fsupc = (int *) intMalloc(n);
+    if ( options->SymmetricMode == YES )
+	ilu_heap_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+    else
+	ilu_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+
+    ifill (perm_r, m, EMPTY);
+    ifill (marker, m * NO_MARKER, EMPTY);
+    supno[0] = -1;
+    xsup[0]  = xlsub[0] = xusub[0] = xlusup[0] = 0;
+    w_def    = panel_size;
+
+    /* Mark the rows used by relaxed supernodes */
+    ifill (marker_relax, m, EMPTY);
+    i = mark_relax(m, relax_end, relax_fsupc, xa_begin, xa_end,
+	         asub, marker_relax);
+#if ( PRNTlevel >= 1)
+    printf("%d relaxed supernodes.\n", i);
+#endif
+
+    /*
+     * Work on one "panel" at a time. A panel is one of the following:
+     *	   (a) a relaxed supernode at the bottom of the etree, or
+     *	   (b) panel_size contiguous columns, defined by the user
+     */
+    for (jcol = 0; jcol < min_mn; ) {
+
+	if ( relax_end[jcol] != EMPTY ) { /* start of a relaxed snode */
+	    kcol = relax_end[jcol];	  /* end of the relaxed snode */
+	    panel_histo[kcol-jcol+1]++;
+
+	    /* Drop small rows in the previous supernode. */
+	    if (jcol > 0 && jcol < last_drop) {
+		int first = xsup[supno[jcol - 1]];
+		int last = jcol - 1;
+		int quota;
+
+		/* Compute the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * (m - first) / m
+			    * (last - first + 1);
+		else if (drop_rule & DROP_COLUMN) {
+		    int i;
+		    quota = 0;
+		    for (i = first; i <= last; i++)
+			quota += xa_end[i] - xa_begin[i];
+		    quota = gamma * quota * (m - first) / m;
+		} else if (drop_rule & DROP_AREA)
+		    quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			    - nnzLj;
+		else
+		    quota = m * n;
+		fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) / min_mn);
+
+		/* Drop small rows */
+                stempv = (float *) tempv;
+		i = ilu_cdrop_row(options, first, last, tol_L, quota, &nnzLj,
+				  &fill_tol, &Glu, stempv, swork2, 0);
+		/* Reset the parameters */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			     < nnzLj)
+			tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+		    else
+			tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		}
+		if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		num_drop_L += i * (last - first + 1);
+#endif
+	    }
+
+	    /* --------------------------------------
+	     * Factorize the relaxed supernode(jcol:kcol)
+	     * -------------------------------------- */
+	    /* Determine the union of the row structure of the snode */
+	    if ( (*info = ilu_csnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
+					 marker, &Glu)) != 0 )
+		return;
+
+	    nextu    = xusub[jcol];
+	    nextlu   = xlusup[jcol];
+	    jsupno   = supno[jcol];
+	    fsupc    = xsup[jsupno];
+	    new_next = nextlu + (xlsub[fsupc+1]-xlsub[fsupc])*(kcol-jcol+1);
+	    nzlumax = Glu.nzlumax;
+	    while ( new_next > nzlumax ) {
+		if ((*info = cLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, &Glu)))
+		    return;
+	    }
+
+	    for (icol = jcol; icol <= kcol; icol++) {
+		xusub[icol+1] = nextu;
+
+		amax[0] = 0.0;
+		/* Scatter into SPA dense[*] */
+		for (k = xa_begin[icol]; k < xa_end[icol]; k++) {
+                    register float tmp = c_abs1 (&a[k]);
+		    if (tmp > amax[0]) amax[0] = tmp;
+		    dense[asub[k]] = a[k];
+		}
+		nnzAj += xa_end[icol] - xa_begin[icol];
+		if (amax[0] == 0.0) {
+		    amax[0] = fill_ini;
+#if ( PRNTlevel >= 1)
+		    printf("Column %d is entirely zero!\n", icol);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Numeric update within the snode */
+		csnode_bmod(icol, jsupno, fsupc, dense, tempv, &Glu, stat);
+
+		if (usepr) pivrow = iperm_r[icol];
+		fill_tol = pow(fill_ini, 1.0 - (double)icol / (double)min_mn);
+		if ( (*info = ilu_cpivotL(icol, diag_pivot_thresh, &usepr,
+					  perm_r, iperm_c[icol], swap, iswap,
+					  marker_relax, &pivrow,
+                                          amax[0] * fill_tol, milu, zero,
+                                          &Glu, stat)) ) {
+		    iinfo++;
+		    marker[pivrow] = kcol;
+		}
+
+	    }
+
+	    jcol = kcol + 1;
+
+	} else { /* Work on one panel of panel_size columns */
+
+	    /* Adjust panel_size so that a panel won't overlap with the next
+	     * relaxed snode.
+	     */
+	    panel_size = w_def;
+	    for (k = jcol + 1; k < SUPERLU_MIN(jcol+panel_size, min_mn); k++)
+		if ( relax_end[k] != EMPTY ) {
+		    panel_size = k - jcol;
+		    break;
+		}
+	    if ( k == min_mn ) panel_size = min_mn - jcol;
+	    panel_histo[panel_size]++;
+
+	    /* symbolic factor on a panel of columns */
+	    ilu_cpanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
+                          dense, amax, panel_lsub, segrep, repfnz,
+                          marker, parent, xplore, &Glu);
+
+	    /* numeric sup-panel updates in topological order */
+	    cpanel_bmod(m, panel_size, jcol, nseg1, dense,
+			tempv, segrep, repfnz, &Glu, stat);
+
+	    /* Sparse LU within the panel, and below panel diagonal */
+	    for (jj = jcol; jj < jcol + panel_size; jj++) {
+
+		k = (jj - jcol) * m; /* column index for w-wide arrays */
+
+		nseg = nseg1;	/* Begin after all the panel segments */
+
+		nnzAj += xa_end[jj] - xa_begin[jj];
+
+		if ((*info = ilu_ccolumn_dfs(m, jj, perm_r, &nseg,
+					     &panel_lsub[k], segrep, &repfnz[k],
+					     marker, parent, xplore, &Glu)))
+		    return;
+
+		/* Numeric updates */
+		if ((*info = ccolumn_bmod(jj, (nseg - nseg1), &dense[k],
+					  tempv, &segrep[nseg1], &repfnz[k],
+					  jcol, &Glu, stat)) != 0) return;
+
+		/* Make a fill-in position if the column is entirely zero */
+		if (xlsub[jj + 1] == xlsub[jj]) {
+		    register int i, row;
+		    int nextl;
+		    int nzlmax = Glu.nzlmax;
+		    int *lsub = Glu.lsub;
+		    int *marker2 = marker + 2 * m;
+
+		    /* Allocate memory */
+		    nextl = xlsub[jj] + 1;
+		    if (nextl >= nzlmax) {
+			int error = cLUMemXpand(jj, nextl, LSUB, &nzlmax, &Glu);
+			if (error) { *info = error; return; }
+			lsub = Glu.lsub;
+		    }
+		    xlsub[jj + 1]++;
+		    assert(xlusup[jj]==xlusup[jj+1]);
+		    xlusup[jj + 1]++;
+		    Glu.lusup[xlusup[jj]] = zero;
+
+		    /* Choose a row index (pivrow) for fill-in */
+		    for (i = jj; i < n; i++)
+			if (marker_relax[swap[i]] <= jj) break;
+		    row = swap[i];
+		    marker2[row] = jj;
+		    lsub[xlsub[jj]] = row;
+#ifdef DEBUG
+		    printf("Fill col %d.\n", jj);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Computer the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * jj / m;
+		else if (drop_rule & DROP_COLUMN)
+		    quota = gamma * (xa_end[jj] - xa_begin[jj]) *
+			    (jj + 1) / m;
+		else if (drop_rule & DROP_AREA)
+		    quota = gamma * 0.9 * nnzAj * 0.5 - nnzUj;
+		else
+		    quota = m;
+
+		/* Copy the U-segments to ucol[*] and drop small entries */
+		if ((*info = ilu_ccopy_to_ucol(jj, nseg, segrep, &repfnz[k],
+					       perm_r, &dense[k], drop_rule,
+					       milu, amax[jj - jcol] * tol_U,
+					       quota, &drop_sum, &nnzUj, &Glu,
+					       swork2)) != 0)
+		    return;
+
+		/* Reset the dropping threshold if required */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * 0.9 * nnzAj * 0.5 < nnzLj)
+			tol_U = SUPERLU_MIN(1.0, tol_U * 2.0);
+		    else
+			tol_U = SUPERLU_MAX(drop_tol, tol_U * 0.5);
+		}
+
+		if (drop_sum.r != 0.0 && drop_sum.i != 0.0)
+		{
+                    omega = SUPERLU_MIN(2.0*(1.0-alpha)/c_abs1(&drop_sum), 1.0);
+                    cs_mult(&drop_sum, &drop_sum, omega);
+		}
+		if (usepr) pivrow = iperm_r[jj];
+		fill_tol = pow(fill_ini, 1.0 - (double)jj / (double)min_mn);
+		if ( (*info = ilu_cpivotL(jj, diag_pivot_thresh, &usepr, perm_r,
+					  iperm_c[jj], swap, iswap,
+					  marker_relax, &pivrow,
+					  amax[jj - jcol] * fill_tol, milu,
+					  drop_sum, &Glu, stat)) ) {
+		    iinfo++;
+		    marker[m + pivrow] = jj;
+		    marker[2 * m + pivrow] = jj;
+		}
+
+		/* Reset repfnz[] for this column */
+		resetrep_col (nseg, segrep, &repfnz[k]);
+
+		/* Start a new supernode, drop the previous one */
+		if (jj > 0 && supno[jj] > supno[jj - 1] && jj < last_drop) {
+		    int first = xsup[supno[jj - 1]];
+		    int last = jj - 1;
+		    int quota;
+
+		    /* Compute the quota */
+		    if (drop_rule & DROP_PROWS)
+			quota = gamma * Astore->nnz / m * (m - first) / m
+				* (last - first + 1);
+		    else if (drop_rule & DROP_COLUMN) {
+			int i;
+			quota = 0;
+			for (i = first; i <= last; i++)
+			    quota += xa_end[i] - xa_begin[i];
+			quota = gamma * quota * (m - first) / m;
+		    } else if (drop_rule & DROP_AREA)
+			quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0)
+				/ m) - nnzLj;
+		    else
+			quota = m * n;
+		    fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) /
+			    (double)min_mn);
+
+		    /* Drop small rows */
+                    stempv = (float *) tempv;
+		    i = ilu_cdrop_row(options, first, last, tol_L, quota,
+				      &nnzLj, &fill_tol, &Glu, stempv, swork2,
+				      1);
+
+		    /* Reset the parameters */
+		    if (drop_rule & DROP_DYNAMIC) {
+			if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+				< nnzLj)
+			    tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+			else
+			    tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		    }
+		    if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		    num_drop_L += i * (last - first + 1);
+#endif
+		} /* if start a new supernode */
+
+	    } /* for */
+
+	    jcol += panel_size; /* Move to the next panel */
+
+	} /* else */
+
+    } /* for */
+
+    *info = iinfo;
+
+    if ( m > n ) {
+	k = 0;
+	for (i = 0; i < m; ++i)
+	    if ( perm_r[i] == EMPTY ) {
+		perm_r[i] = n + k;
+		++k;
+	    }
+    }
+
+    ilu_countnz(min_mn, &nnzL, &nnzU, &Glu);
+    fixupL(min_mn, perm_r, &Glu);
+
+    cLUWorkFree(iwork, cwork, &Glu); /* Free work space and compress storage */
+
+    if ( fact == SamePattern_SameRowPerm ) {
+	/* L and U structures may have changed due to possibly different
+	   pivoting, even though the storage is available.
+	   There could also be memory expansions, so the array locations
+	   may have changed, */
+	((SCformat *)L->Store)->nnz = nnzL;
+	((SCformat *)L->Store)->nsuper = Glu.supno[n];
+	((SCformat *)L->Store)->nzval = Glu.lusup;
+	((SCformat *)L->Store)->nzval_colptr = Glu.xlusup;
+	((SCformat *)L->Store)->rowind = Glu.lsub;
+	((SCformat *)L->Store)->rowind_colptr = Glu.xlsub;
+	((NCformat *)U->Store)->nnz = nnzU;
+	((NCformat *)U->Store)->nzval = Glu.ucol;
+	((NCformat *)U->Store)->rowind = Glu.usub;
+	((NCformat *)U->Store)->colptr = Glu.xusub;
+    } else {
+	cCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL, Glu.lusup,
+				 Glu.xlusup, Glu.lsub, Glu.xlsub, Glu.supno,
+				 Glu.xsup, SLU_SC, SLU_C, SLU_TRLU);
+	cCreate_CompCol_Matrix(U, min_mn, min_mn, nnzU, Glu.ucol,
+			       Glu.usub, Glu.xusub, SLU_NC, SLU_C, SLU_TRU);
+    }
+
+    ops[FACT] += ops[TRSV] + ops[GEMV];
+    stat->expansions = --(Glu.num_expansions);
+
+    if ( iperm_r_allocated ) SUPERLU_FREE (iperm_r);
+    SUPERLU_FREE (iperm_c);
+    SUPERLU_FREE (relax_end);
+    SUPERLU_FREE (swap);
+    SUPERLU_FREE (iswap);
+    SUPERLU_FREE (relax_fsupc);
+    SUPERLU_FREE (amax);
+    if ( swork2 ) SUPERLU_FREE (swork2);
+
+}
diff --git a/SRC/cgsitrf.c.bak b/SRC/cgsitrf.c.bak
new file mode 100644
index 0000000..03474b1
--- /dev/null
+++ b/SRC/cgsitrf.c.bak
@@ -0,0 +1,629 @@
+
+/*! @file cgsitf.c
+ * \brief Computes an ILU factorization of a general sparse matrix
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_cdefs.h"
+
+#ifdef DEBUG
+int num_drop_L;
+#endif
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * CGSITRF computes an ILU factorization of a general sparse m-by-n
+ * matrix A using partial pivoting with row interchanges.
+ * The factorization has the form
+ *     Pr * A = L * U
+ * where Pr is a row permutation matrix, L is lower triangular with unit
+ * diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ * triangular (upper trapezoidal if A->nrow < A->ncol).
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the ILU decomposition will be performed.
+ *
+ * A	    (input) SuperMatrix*
+ *	    Original matrix A, permuted by columns, of dimension
+ *	    (A->nrow, A->ncol). The type of A can be:
+ *	    Stype = SLU_NCP; Dtype = SLU_C; Mtype = SLU_GE.
+ *
+ * relax    (input) int
+ *	    To control degree of relaxing supernodes. If the number
+ *	    of nodes (columns) in a subtree of the elimination tree is less
+ *	    than relax, this subtree is considered as one supernode,
+ *	    regardless of the row structures of those columns.
+ *
+ * panel_size (input) int
+ *	    A panel consists of at most panel_size consecutive columns.
+ *
+ * etree    (input) int*, dimension (A->ncol)
+ *	    Elimination tree of A'*A.
+ *	    Note: etree is a vector of parent pointers for a forest whose
+ *	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *	    On input, the columns of A should be permuted so that the
+ *	    etree is in a certain postorder.
+ *
+ * work     (input/output) void*, size (lwork) (in bytes)
+ *	    User-supplied work space and space for the output data structures.
+ *	    Not referenced if lwork = 0;
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 *info; no other side effects.
+ *
+ * perm_c   (input) int*, dimension (A->ncol)
+ *	    Column permutation vector, which defines the
+ *	    permutation matrix Pc; perm_c[i] = j means column i of A is
+ *	    in position j in A*Pc.
+ *	    When searching for diagonal, perm_c[*] is applied to the
+ *	    row subscripts of A, so that diagonal threshold pivoting
+ *	    can find the diagonal of A, rather than that of A*Pc.
+ *
+ * perm_r   (input/output) int*, dimension (A->nrow)
+ *	    Row permutation vector which defines the permutation matrix Pr,
+ *	    perm_r[i] = j means row i of A is in position j in Pr*A.
+ *	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	       will try to use the input perm_r, unless a certain threshold
+ *	       criterion is violated. In that case, perm_r is overwritten by
+ *	       a new permutation determined by partial pivoting or diagonal
+ *	       threshold pivoting.
+ *	    Otherwise, perm_r is output argument;
+ *
+ * L	    (output) SuperMatrix*
+ *	    The factor L from the factorization Pr*A=L*U; use compressed row
+ *	    subscripts storage for supernodes, i.e., L has type:
+ *	    Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.
+ *
+ * U	    (output) SuperMatrix*
+ *	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+ *	    storage scheme, i.e., U has types: Stype = SLU_NC,
+ *	    Dtype = SLU_C, Mtype = SLU_TRU.
+ *
+ * stat     (output) SuperLUStat_t*
+ *	    Record the statistics on runtime and floating-point operation count.
+ *	    See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info     (output) int*
+ *	    = 0: successful exit
+ *	    < 0: if info = -i, the i-th argument had an illegal value
+ *	    > 0: if info = i, and i is
+ *	       <= A->ncol: number of zero pivots. They are replaced by small
+ *		  entries according to options->ILU_FillTol.
+ *	       > A->ncol: number of bytes allocated when memory allocation
+ *		  failure occurred, plus A->ncol. If lwork = -1, it is
+ *		  the estimated amount of space needed, plus A->ncol.
+ *
+ * ======================================================================
+ *
+ * Local Working Arrays:
+ * ======================
+ *   m = number of rows in the matrix
+ *   n = number of columns in the matrix
+ *
+ *   marker[0:3*m-1]: marker[i] = j means that node i has been
+ *	reached when working on column j.
+ *	Storage: relative to original row subscripts
+ *	NOTE: There are 4 of them:
+ *	      marker/marker1 are used for panel dfs, see (ilu_)dpanel_dfs.c;
+ *	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+ *	      marker_relax(has its own space) is used for relaxed supernodes.
+ *
+ *   parent[0:m-1]: parent vector used during dfs
+ *	Storage: relative to new row subscripts
+ *
+ *   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ *	unexplored neighbor of i in lsub[*]
+ *
+ *   segrep[0:nseg-1]: contains the list of supernodal representatives
+ *	in topological order of the dfs. A supernode representative is the
+ *	last column of a supernode.
+ *	The maximum size of segrep[] is n.
+ *
+ *   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+ *	supernodal representative r, repfnz[r] is the location of the first
+ *	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+ *	indicates the supernode r has been explored.
+ *	NOTE: There are W of them, each used for one column of a panel.
+ *
+ *   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+ *	the panel diagonal. These are filled in during dpanel_dfs(), and are
+ *	used later in the inner LU factorization within the panel.
+ *	panel_lsub[]/dense[] pair forms the SPA data structure.
+ *	NOTE: There are W of them.
+ *
+ *   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ *		   NOTE: there are W of them.
+ *
+ *   tempv[0:*]: real temporary used for dense numeric kernels;
+ *	The size of this array is defined by NUM_TEMPV() in slu_util.h.
+ *	It is also used by the dropping routine ilu_ddrop_row().
+ * </pre>
+ */
+
+void
+cgsitrf(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size,
+	int *etree, void *work, int lwork, int *perm_c, int *perm_r,
+	SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)
+{
+    /* Local working arrays */
+    NCPformat *Astore;
+    int       *iperm_r = NULL; /* inverse of perm_r; used when
+				  options->Fact == SamePattern_SameRowPerm */
+    int       *iperm_c; /* inverse of perm_c */
+    int       *swap, *iswap; /* swap is used to store the row permutation
+				during the factorization. Initially, it is set
+				to iperm_c (row indeces of Pc*A*Pc').
+				iswap is the inverse of swap. After the
+				factorization, it is equal to perm_r. */
+    int       *iwork;
+    complex   *cwork;
+    int       *segrep, *repfnz, *parent, *xplore;
+    int       *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
+    int       *marker, *marker_relax;
+    complex    *dense, *tempv;
+    float *stempv;
+    int       *relax_end, *relax_fsupc;
+    complex    *a;
+    int       *asub;
+    int       *xa_begin, *xa_end;
+    int       *xsup, *supno;
+    int       *xlsub, *xlusup, *xusub;
+    int       nzlumax;
+    float    *amax; 
+    complex    drop_sum;
+    static GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
+    int       *iwork2;	   /* used by the second dropping rule */
+
+    /* Local scalars */
+    fact_t    fact = options->Fact;
+    double    diag_pivot_thresh = options->DiagPivotThresh;
+    double    drop_tol = options->ILU_DropTol; /* tau */
+    double    fill_ini = options->ILU_FillTol; /* tau^hat */
+    double    gamma = options->ILU_FillFactor;
+    int       drop_rule = options->ILU_DropRule;
+    milu_t    milu = options->ILU_MILU;
+    double    fill_tol;
+    int       pivrow;	/* pivotal row number in the original matrix A */
+    int       nseg1;	/* no of segments in U-column above panel row jcol */
+    int       nseg;	/* no of segments in each U-column */
+    register int jcol;
+    register int kcol;	/* end column of a relaxed snode */
+    register int icol;
+    register int i, k, jj, new_next, iinfo;
+    int       m, n, min_mn, jsupno, fsupc, nextlu, nextu;
+    int       w_def;	/* upper bound on panel width */
+    int       usepr, iperm_r_allocated = 0;
+    int       nnzL, nnzU;
+    int       *panel_histo = stat->panel_histo;
+    flops_t   *ops = stat->ops;
+
+    int       last_drop;/* the last column which the dropping rules applied */
+    int       quota;
+    int       nnzAj;	/* number of nonzeros in A(:,1:j) */
+    int       nnzLj, nnzUj;
+    double    tol_L = drop_tol, tol_U = drop_tol;
+    complex zero = {0.0, 0.0};
+
+    /* Executable */	   
+    iinfo    = 0;
+    m	     = A->nrow;
+    n	     = A->ncol;
+    min_mn   = SUPERLU_MIN(m, n);
+    Astore   = A->Store;
+    a	     = Astore->nzval;
+    asub     = Astore->rowind;
+    xa_begin = Astore->colbeg;
+    xa_end   = Astore->colend;
+
+    /* Allocate storage common to the factor routines */
+    *info = cLUMemInit(fact, work, lwork, m, n, Astore->nnz, panel_size,
+		       gamma, L, U, &Glu, &iwork, &cwork);
+    if ( *info ) return;
+
+    xsup    = Glu.xsup;
+    supno   = Glu.supno;
+    xlsub   = Glu.xlsub;
+    xlusup  = Glu.xlusup;
+    xusub   = Glu.xusub;
+
+    SetIWork(m, n, panel_size, iwork, &segrep, &parent, &xplore,
+	     &repfnz, &panel_lsub, &marker_relax, &marker);
+    cSetRWork(m, panel_size, cwork, &dense, &tempv);
+
+    usepr = (fact == SamePattern_SameRowPerm);
+    if ( usepr ) {
+	/* Compute the inverse of perm_r */
+	iperm_r = (int *) intMalloc(m);
+	for (k = 0; k < m; ++k) iperm_r[perm_r[k]] = k;
+	iperm_r_allocated = 1;
+    }
+
+    iperm_c = (int *) intMalloc(n);
+    for (k = 0; k < n; ++k) iperm_c[perm_c[k]] = k;
+    swap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) swap[k] = iperm_c[k];
+    iswap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) iswap[k] = perm_c[k];
+    amax = (float *) floatMalloc(panel_size);
+    if (drop_rule & DROP_SECONDARY)
+	iwork2 = (int *)intMalloc(n);
+    else
+	iwork2 = NULL;
+
+    nnzAj = 0;
+    nnzLj = 0;
+    nnzUj = 0;
+    last_drop = SUPERLU_MAX(min_mn - 2 * sp_ienv(7), (int)(min_mn * 0.95));
+
+    /* Identify relaxed snodes */
+    relax_end = (int *) intMalloc(n);
+    relax_fsupc = (int *) intMalloc(n);
+    if ( options->SymmetricMode == YES )
+	ilu_heap_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+    else
+	ilu_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+
+    ifill (perm_r, m, EMPTY);
+    ifill (marker, m * NO_MARKER, EMPTY);
+    supno[0] = -1;
+    xsup[0]  = xlsub[0] = xusub[0] = xlusup[0] = 0;
+    w_def    = panel_size;
+
+    /* Mark the rows used by relaxed supernodes */
+    ifill (marker_relax, m, EMPTY);
+    i = mark_relax(m, relax_end, relax_fsupc, xa_begin, xa_end,
+	         asub, marker_relax);
+#if ( PRNTlevel >= 1)
+    printf("%d relaxed supernodes.\n", i);
+#endif
+
+    /*
+     * Work on one "panel" at a time. A panel is one of the following:
+     *	   (a) a relaxed supernode at the bottom of the etree, or
+     *	   (b) panel_size contiguous columns, defined by the user
+     */
+    for (jcol = 0; jcol < min_mn; ) {
+
+	if ( relax_end[jcol] != EMPTY ) { /* start of a relaxed snode */
+	    kcol = relax_end[jcol];	  /* end of the relaxed snode */
+	    panel_histo[kcol-jcol+1]++;
+
+	    /* Drop small rows in the previous supernode. */
+	    if (jcol > 0 && jcol < last_drop) {
+		int first = xsup[supno[jcol - 1]];
+		int last = jcol - 1;
+		int quota;
+
+		/* Compute the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * (m - first) / m
+			    * (last - first + 1);
+		else if (drop_rule & DROP_COLUMN) {
+		    int i;
+		    quota = 0;
+		    for (i = first; i <= last; i++)
+			quota += xa_end[i] - xa_begin[i];
+		    quota = gamma * quota * (m - first) / m;
+		} else if (drop_rule & DROP_AREA)
+		    quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			    - nnzLj;
+		else
+		    quota = m * n;
+		fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) / min_mn);
+
+		/* Drop small rows */
+                stempv = (float *) tempv;
+		i = ilu_cdrop_row(options, first, last, tol_L, quota, &nnzLj,
+				  &fill_tol, &Glu, stempv, iwork2, 0);
+		/* Reset the parameters */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			     < nnzLj)
+			tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+		    else
+			tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		}
+		if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		num_drop_L += i * (last - first + 1);
+#endif
+	    }
+
+	    /* --------------------------------------
+	     * Factorize the relaxed supernode(jcol:kcol)
+	     * -------------------------------------- */
+	    /* Determine the union of the row structure of the snode */
+	    if ( (*info = ilu_csnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
+					 marker, &Glu)) != 0 )
+		return;
+
+	    nextu    = xusub[jcol];
+	    nextlu   = xlusup[jcol];
+	    jsupno   = supno[jcol];
+	    fsupc    = xsup[jsupno];
+	    new_next = nextlu + (xlsub[fsupc+1]-xlsub[fsupc])*(kcol-jcol+1);
+	    nzlumax = Glu.nzlumax;
+	    while ( new_next > nzlumax ) {
+		if ((*info = cLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, &Glu)))
+		    return;
+	    }
+
+	    for (icol = jcol; icol <= kcol; icol++) {
+		xusub[icol+1] = nextu;
+
+		amax[0] = 0.0;
+		/* Scatter into SPA dense[*] */
+		for (k = xa_begin[icol]; k < xa_end[icol]; k++) {
+                    register float tmp = c_abs1 (&a[k]);
+		    if (tmp > amax[0]) amax[0] = tmp;
+		    dense[asub[k]] = a[k];
+		}
+		nnzAj += xa_end[icol] - xa_begin[icol];
+		if (amax[0] == 0.0) {
+		    amax[0] = fill_ini;
+#if ( PRNTlevel >= 1)
+		    printf("Column %d is entirely zero!\n", icol);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Numeric update within the snode */
+		csnode_bmod(icol, jsupno, fsupc, dense, tempv, &Glu, stat);
+
+		if (usepr) pivrow = iperm_r[icol];
+		fill_tol = pow(fill_ini, 1.0 - (double)icol / (double)min_mn);
+		if ( (*info = ilu_cpivotL(icol, diag_pivot_thresh, &usepr,
+					  perm_r, iperm_c[icol], swap, iswap,
+					  marker_relax, &pivrow,
+                                          amax[0] * fill_tol, milu, zero,
+                                          &Glu, stat)) ) {
+		    iinfo++;
+		    marker[pivrow] = kcol;
+		}
+
+	    }
+
+	    jcol = kcol + 1;
+
+	} else { /* Work on one panel of panel_size columns */
+
+	    /* Adjust panel_size so that a panel won't overlap with the next
+	     * relaxed snode.
+	     */
+	    panel_size = w_def;
+	    for (k = jcol + 1; k < SUPERLU_MIN(jcol+panel_size, min_mn); k++)
+		if ( relax_end[k] != EMPTY ) {
+		    panel_size = k - jcol;
+		    break;
+		}
+	    if ( k == min_mn ) panel_size = min_mn - jcol;
+	    panel_histo[panel_size]++;
+
+	    /* symbolic factor on a panel of columns */
+	    ilu_cpanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
+                          dense, amax, panel_lsub, segrep, repfnz,
+                          marker, parent, xplore, &Glu);
+
+	    /* numeric sup-panel updates in topological order */
+	    cpanel_bmod(m, panel_size, jcol, nseg1, dense,
+			tempv, segrep, repfnz, &Glu, stat);
+
+	    /* Sparse LU within the panel, and below panel diagonal */
+	    for (jj = jcol; jj < jcol + panel_size; jj++) {
+
+		k = (jj - jcol) * m; /* column index for w-wide arrays */
+
+		nseg = nseg1;	/* Begin after all the panel segments */
+
+		nnzAj += xa_end[jj] - xa_begin[jj];
+
+		if ((*info = ilu_ccolumn_dfs(m, jj, perm_r, &nseg,
+					     &panel_lsub[k], segrep, &repfnz[k],
+					     marker, parent, xplore, &Glu)))
+		    return;
+
+		/* Numeric updates */
+		if ((*info = ccolumn_bmod(jj, (nseg - nseg1), &dense[k],
+					  tempv, &segrep[nseg1], &repfnz[k],
+					  jcol, &Glu, stat)) != 0) return;
+
+		/* Make a fill-in position if the column is entirely zero */
+		if (xlsub[jj + 1] == xlsub[jj]) {
+		    register int i, row;
+		    int nextl;
+		    int nzlmax = Glu.nzlmax;
+		    int *lsub = Glu.lsub;
+		    int *marker2 = marker + 2 * m;
+
+		    /* Allocate memory */
+		    nextl = xlsub[jj] + 1;
+		    if (nextl >= nzlmax) {
+			int error = cLUMemXpand(jj, nextl, LSUB, &nzlmax, &Glu);
+			if (error) { *info = error; return; }
+			lsub = Glu.lsub;
+		    }
+		    xlsub[jj + 1]++;
+		    assert(xlusup[jj]==xlusup[jj+1]);
+		    xlusup[jj + 1]++;
+		    Glu.lusup[xlusup[jj]] = zero;
+
+		    /* Choose a row index (pivrow) for fill-in */
+		    for (i = jj; i < n; i++)
+			if (marker_relax[swap[i]] <= jj) break;
+		    row = swap[i];
+		    marker2[row] = jj;
+		    lsub[xlsub[jj]] = row;
+#ifdef DEBUG
+		    printf("Fill col %d.\n", jj);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Computer the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * jj / m;
+		else if (drop_rule & DROP_COLUMN)
+		    quota = gamma * (xa_end[jj] - xa_begin[jj]) *
+			    (jj + 1) / m;
+		else if (drop_rule & DROP_AREA)
+		    quota = gamma * 0.9 * nnzAj * 0.5 - nnzUj;
+		else
+		    quota = m;
+
+		/* Copy the U-segments to ucol[*] and drop small entries */
+		if ((*info = ilu_ccopy_to_ucol(jj, nseg, segrep, &repfnz[k],
+					       perm_r, &dense[k], drop_rule,
+					       milu, amax[jj - jcol] * tol_U,
+					       quota, &drop_sum, &nnzUj, &Glu,
+					       iwork2)) != 0)
+		    return;
+
+		/* Reset the dropping threshold if required */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * 0.9 * nnzAj * 0.5 < nnzLj)
+			tol_U = SUPERLU_MIN(1.0, tol_U * 2.0);
+		    else
+			tol_U = SUPERLU_MAX(drop_tol, tol_U * 0.5);
+		}
+
+                cs_mult(&drop_sum, &drop_sum, MILU_ALPHA);
+		if (usepr) pivrow = iperm_r[jj];
+		fill_tol = pow(fill_ini, 1.0 - (double)jj / (double)min_mn);
+		if ( (*info = ilu_cpivotL(jj, diag_pivot_thresh, &usepr, perm_r,
+					  iperm_c[jj], swap, iswap,
+					  marker_relax, &pivrow,
+					  amax[jj - jcol] * fill_tol, milu,
+					  drop_sum, &Glu, stat)) ) {
+		    iinfo++;
+		    marker[m + pivrow] = jj;
+		    marker[2 * m + pivrow] = jj;
+		}
+
+		/* Reset repfnz[] for this column */
+		resetrep_col (nseg, segrep, &repfnz[k]);
+
+		/* Start a new supernode, drop the previous one */
+		if (jj > 0 && supno[jj] > supno[jj - 1] && jj < last_drop) {
+		    int first = xsup[supno[jj - 1]];
+		    int last = jj - 1;
+		    int quota;
+
+		    /* Compute the quota */
+		    if (drop_rule & DROP_PROWS)
+			quota = gamma * Astore->nnz / m * (m - first) / m
+				* (last - first + 1);
+		    else if (drop_rule & DROP_COLUMN) {
+			int i;
+			quota = 0;
+			for (i = first; i <= last; i++)
+			    quota += xa_end[i] - xa_begin[i];
+			quota = gamma * quota * (m - first) / m;
+		    } else if (drop_rule & DROP_AREA)
+			quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0)
+				/ m) - nnzLj;
+		    else
+			quota = m * n;
+		    fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) /
+			    (double)min_mn);
+
+		    /* Drop small rows */
+                    stempv = (float *) tempv;
+		    i = ilu_cdrop_row(options, first, last, tol_L, quota,
+				      &nnzLj, &fill_tol, &Glu, stempv, iwork2,
+				      1);
+
+		    /* Reset the parameters */
+		    if (drop_rule & DROP_DYNAMIC) {
+			if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+				< nnzLj)
+			    tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+			else
+			    tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		    }
+		    if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		    num_drop_L += i * (last - first + 1);
+#endif
+		} /* if start a new supernode */
+
+	    } /* for */
+
+	    jcol += panel_size; /* Move to the next panel */
+
+	} /* else */
+
+    } /* for */
+
+    *info = iinfo;
+
+    if ( m > n ) {
+	k = 0;
+	for (i = 0; i < m; ++i)
+	    if ( perm_r[i] == EMPTY ) {
+		perm_r[i] = n + k;
+		++k;
+	    }
+    }
+
+    ilu_countnz(min_mn, &nnzL, &nnzU, &Glu);
+    fixupL(min_mn, perm_r, &Glu);
+
+    cLUWorkFree(iwork, cwork, &Glu); /* Free work space and compress storage */
+
+    if ( fact == SamePattern_SameRowPerm ) {
+	/* L and U structures may have changed due to possibly different
+	   pivoting, even though the storage is available.
+	   There could also be memory expansions, so the array locations
+	   may have changed, */
+	((SCformat *)L->Store)->nnz = nnzL;
+	((SCformat *)L->Store)->nsuper = Glu.supno[n];
+	((SCformat *)L->Store)->nzval = Glu.lusup;
+	((SCformat *)L->Store)->nzval_colptr = Glu.xlusup;
+	((SCformat *)L->Store)->rowind = Glu.lsub;
+	((SCformat *)L->Store)->rowind_colptr = Glu.xlsub;
+	((NCformat *)U->Store)->nnz = nnzU;
+	((NCformat *)U->Store)->nzval = Glu.ucol;
+	((NCformat *)U->Store)->rowind = Glu.usub;
+	((NCformat *)U->Store)->colptr = Glu.xusub;
+    } else {
+	cCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL, Glu.lusup,
+				 Glu.xlusup, Glu.lsub, Glu.xlsub, Glu.supno,
+				 Glu.xsup, SLU_SC, SLU_C, SLU_TRLU);
+	cCreate_CompCol_Matrix(U, min_mn, min_mn, nnzU, Glu.ucol,
+			       Glu.usub, Glu.xusub, SLU_NC, SLU_C, SLU_TRU);
+    }
+
+    ops[FACT] += ops[TRSV] + ops[GEMV];
+    stat->expansions = --(Glu.num_expansions);
+
+    if ( iperm_r_allocated ) SUPERLU_FREE (iperm_r);
+    SUPERLU_FREE (iperm_c);
+    SUPERLU_FREE (relax_end);
+    SUPERLU_FREE (swap);
+    SUPERLU_FREE (iswap);
+    SUPERLU_FREE (relax_fsupc);
+    SUPERLU_FREE (amax);
+    if ( iwork2 ) SUPERLU_FREE (iwork2);
+
+}
diff --git a/SRC/cgsrfs.c b/SRC/cgsrfs.c
index 68568cf..e7c2bc7 100644
--- a/SRC/cgsrfs.c
+++ b/SRC/cgsrfs.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file cgsrfs.c
+ * \brief Improves computed solution to a system of inear equations
+ * 
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Modified from lapack routine CGERFS
+ * </pre>
  */
 /*
  * File name:	cgsrfs.c
@@ -13,13 +18,9 @@
 #include <math.h>
 #include "slu_cdefs.h"
 
-void
-cgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
-       int *perm_c, int *perm_r, char *equed, float *R, float *C,
-       SuperMatrix *B, SuperMatrix *X, float *ferr, float *berr,
-       SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  *   Purpose   
  *   =======   
  *
@@ -123,7 +124,15 @@ cgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
  *
  *    ITMAX is the maximum number of steps of iterative refinement.   
  *
- */  
+ * </pre>
+ */
+void
+cgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
+       int *perm_c, int *perm_r, char *equed, float *R, float *C,
+       SuperMatrix *B, SuperMatrix *X, float *ferr, float *berr,
+       SuperLUStat_t *stat, int *info)
+{
+
 
 #define ITMAX 5
     
@@ -148,7 +157,7 @@ cgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
     complex   *work;
     float   *rwork;
     int      *iwork;
-    extern double slamch_(char *);
+
     extern int clacon_(int *, complex *, complex *, float *, int *);
 #ifdef _CRAY
     extern int CCOPY(int *, complex *, int *, complex *, int *);
@@ -224,6 +233,8 @@ cgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
     nz     = A->ncol + 1;
     eps    = slamch_("Epsilon");
     safmin = slamch_("Safe minimum");
+    /* Set SAFE1 essentially to be the underflow threshold times the
+       number of additions in each row. */
     safe1  = nz * safmin;
     safe2  = safe1 / eps;
 
@@ -274,7 +285,7 @@ cgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
 	       where abs(Z) is the componentwise absolute value of the matrix
 	       or vector Z.  If the i-th component of the denominator is less
 	       than SAFE2, then SAFE1 is added to the i-th component of the   
-	       numerator and denominator before dividing. */
+	       numerator before dividing. */
 
 	    for (i = 0; i < A->nrow; ++i) rwork[i] = c_abs1( &Bptr[i] );
 	    
@@ -297,11 +308,13 @@ cgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
 	    }
 	    s = 0.;
 	    for (i = 0; i < A->nrow; ++i) {
-		if (rwork[i] > safe2)
+		if (rwork[i] > safe2) {
 		    s = SUPERLU_MAX( s, c_abs1(&work[i]) / rwork[i] );
-		else
-		    s = SUPERLU_MAX( s, (c_abs1(&work[i]) + safe1) / 
-				(rwork[i] + safe1) );
+                } else if ( rwork[i] != 0.0 ) {
+		    s = SUPERLU_MAX( s, (c_abs1(&work[i]) + safe1) / rwork[i] );
+                }
+                /* If rwork[i] is exactly 0.0, then we know the true 
+                   residual also must be exactly 0.0. */
 	    }
 	    berr[j] = s;
 
diff --git a/SRC/cgssv.c b/SRC/cgssv.c
index d0ecf19..07f4784 100644
--- a/SRC/cgssv.c
+++ b/SRC/cgssv.c
@@ -1,19 +1,19 @@
 
-/*
+/*! @file cgssv.c
+ * \brief Solves the system of linear equations A*X=B 
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
- *
+ * </pre>  
  */
 #include "slu_cdefs.h"
 
-void
-cgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
-      SuperMatrix *L, SuperMatrix *U, SuperMatrix *B,
-      SuperLUStat_t *stat, int *info )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -126,15 +126,21 @@ cgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *                so the solution could not be computed.
  *             > A->ncol: number of bytes allocated when memory allocation
  *                failure occurred, plus A->ncol.
- *   
+ * </pre>
  */
+
+void
+cgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+      SuperMatrix *L, SuperMatrix *U, SuperMatrix *B,
+      SuperLUStat_t *stat, int *info )
+{
+
     DNformat *Bstore;
     SuperMatrix *AA;/* A in SLU_NC format used by the factorization routine.*/
     SuperMatrix AC; /* Matrix postmultiplied by Pc */
     int      lwork = 0, *etree, i;
     
     /* Set default values for some parameters */
-    float   drop_tol = 0.;
     int      panel_size;     /* panel size */
     int      relax;          /* no of columns in a relaxed snodes */
     int      permc_spec;
@@ -200,8 +206,8 @@ cgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
 	  relax, panel_size, sp_ienv(3), sp_ienv(4));*/
     t = SuperLU_timer_(); 
     /* Compute the LU factorization of A. */
-    cgstrf(options, &AC, drop_tol, relax, panel_size,
-	   etree, NULL, lwork, perm_c, perm_r, L, U, stat, info);
+    cgstrf(options, &AC, relax, panel_size, etree,
+            NULL, lwork, perm_c, perm_r, L, U, stat, info);
     utime[FACT] = SuperLU_timer_() - t;
 
     t = SuperLU_timer_();
diff --git a/SRC/cgssvx.c b/SRC/cgssvx.c
index 36e6fdb..0056025 100644
--- a/SRC/cgssvx.c
+++ b/SRC/cgssvx.c
@@ -1,22 +1,19 @@
 
-/*
+/*! @file cgssvx.c
+ * \brief Solves the system of linear equations A*X=B or A'*X=B
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
- *
+ * </pre>
  */
 #include "slu_cdefs.h"
 
-void
-cgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
-       int *etree, char *equed, float *R, float *C,
-       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
-       SuperMatrix *B, SuperMatrix *X, float *recip_pivot_growth, 
-       float *rcond, float *ferr, float *berr, 
-       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -314,7 +311,7 @@ cgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *
  * stat   (output) SuperLUStat_t*
  *        Record the statistics on runtime and floating-point operation count.
- *        See util.h for the definition of 'SuperLUStat_t'.
+ *        See slu_util.h for the definition of 'SuperLUStat_t'.
  *
  * info    (output) int*
  *         = 0: successful exit   
@@ -332,9 +329,19 @@ cgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *                    accurate than the value of RCOND would suggest.   
  *              > A->ncol+1: number of bytes allocated when memory allocation
  *                    failure occurred, plus A->ncol.
- *
+ * </pre>
  */
 
+void
+cgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+       int *etree, char *equed, float *R, float *C,
+       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
+       SuperMatrix *B, SuperMatrix *X, float *recip_pivot_growth, 
+       float *rcond, float *ferr, float *berr, 
+       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info )
+{
+
+
     DNformat  *Bstore, *Xstore;
     complex    *Bmat, *Xmat;
     int       ldb, ldx, nrhs;
@@ -346,13 +353,12 @@ cgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
     int       i, j, info1;
     float    amax, anorm, bignum, smlnum, colcnd, rowcnd, rcmax, rcmin;
     int       relax, panel_size;
-    float    diag_pivot_thresh, drop_tol;
+    float    diag_pivot_thresh;
     double    t0;      /* temporary time */
     double    *utime;
 
     /* External functions */
     extern float clangs(char *, SuperMatrix *);
-    extern double slamch_(char *);
 
     Bstore = B->Store;
     Xstore = X->Store;
@@ -383,10 +389,12 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 #endif
 
     /* Test the input parameters */
-    if (!nofact && options->Fact != DOFACT && options->Fact != SamePattern &&
+    if (options->Fact != DOFACT && options->Fact != SamePattern &&
 	options->Fact != SamePattern_SameRowPerm &&
-	!notran && options->Trans != TRANS && options->Trans != CONJ &&
-	!equil && options->Equil != NO)
+	options->Fact != FACTORED &&
+	options->Trans != NOTRANS && options->Trans != TRANS && 
+	options->Trans != CONJ &&
+	options->Equil != NO && options->Equil != YES)
 	*info = -1;
     else if ( A->nrow != A->ncol || A->nrow < 0 ||
 	      (A->Stype != SLU_NC && A->Stype != SLU_NR) ||
@@ -422,15 +430,21 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 	}
 	if (*info == 0) {
 	    if ( lwork < -1 ) *info = -12;
-	    else if ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+	    else if ( B->ncol < 0 ) *info = -13;
+	    else if ( B->ncol > 0 ) { /* no checking if B->ncol=0 */
+	         if ( Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
 		      B->Stype != SLU_DN || B->Dtype != SLU_C || 
 		      B->Mtype != SLU_GE )
 		*info = -13;
-	    else if ( X->ncol < 0 || Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
+            }
+	    if ( X->ncol < 0 ) *info = -14;
+            else if ( X->ncol > 0 ) { /* no checking if X->ncol=0 */
+                 if ( Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
 		      (B->ncol != 0 && B->ncol != X->ncol) ||
                       X->Stype != SLU_DN ||
 		      X->Dtype != SLU_C || X->Mtype != SLU_GE )
 		*info = -14;
+            }
 	}
     }
     if (*info != 0) {
@@ -443,7 +457,6 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
     panel_size = sp_ienv(1);
     relax      = sp_ienv(2);
     diag_pivot_thresh = options->DiagPivotThresh;
-    drop_tol   = 0.0;
 
     utime = stat->utime;
     
@@ -480,22 +493,6 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 	utime[EQUIL] = SuperLU_timer_() - t0;
     }
 
-    if ( nrhs > 0 ) {
-        /* Scale the right hand side if equilibration was performed. */
-        if ( notran ) {
-	    if ( rowequ ) {
-	        for (j = 0; j < nrhs; ++j)
-		    for (i = 0; i < A->nrow; ++i) {
-                        cs_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], R[i]);
-	            }
-	    }
-        } else if ( colequ ) {
-	    for (j = 0; j < nrhs; ++j)
-	        for (i = 0; i < A->nrow; ++i) {
-                    cs_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], C[i]);
-	        }
-        }
-    }
 
     if ( nofact ) {
 	
@@ -523,8 +520,8 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 	
 	/* Compute the LU factorization of A*Pc. */
 	t0 = SuperLU_timer_();
-	cgstrf(options, &AC, drop_tol, relax, panel_size,
-	       etree, work, lwork, perm_c, perm_r, L, U, stat, info);
+	cgstrf(options, &AC, relax, panel_size, etree,
+                work, lwork, perm_c, perm_r, L, U, stat, info);
 	utime[FACT] = SuperLU_timer_() - t0;
 	
 	if ( lwork == -1 ) {
@@ -561,6 +558,19 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
     }
     
     if ( nrhs > 0 ) {
+        /* Scale the right hand side if equilibration was performed. */
+        if ( notran ) {
+	    if ( rowequ ) {
+	        for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < A->nrow; ++i)
+                        cs_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], R[i]);
+	    }
+        } else if ( colequ ) {
+	    for (j = 0; j < nrhs; ++j)
+	        for (i = 0; i < A->nrow; ++i)
+                    cs_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], C[i]);
+        }
+
         /* Compute the solution matrix X. */
         for (j = 0; j < nrhs; j++)  /* Save a copy of the right hand sides */
             for (i = 0; i < B->nrow; i++)
@@ -585,15 +595,13 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
         if ( notran ) {
 	    if ( colequ ) {
 	        for (j = 0; j < nrhs; ++j)
-		    for (i = 0; i < A->nrow; ++i) {
+		    for (i = 0; i < A->nrow; ++i)
                         cs_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], C[i]);
-	            }
 	    }
         } else if ( rowequ ) {
 	    for (j = 0; j < nrhs; ++j)
-	        for (i = 0; i < A->nrow; ++i) {
+	        for (i = 0; i < A->nrow; ++i)
                     cs_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], R[i]);
-                }
         }
     } /* end if nrhs > 0 */
 
diff --git a/SRC/cgssvx.c b/SRC/cgssvx.c.bak
similarity index 98%
copy from SRC/cgssvx.c
copy to SRC/cgssvx.c.bak
index 36e6fdb..428ecb0 100644
--- a/SRC/cgssvx.c
+++ b/SRC/cgssvx.c.bak
@@ -1,22 +1,19 @@
 
-/*
+/*! @file cgssvx.c
+ * \brief Solves the system of linear equations A*X=B or A'*X=B
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
- *
+ * </pre>
  */
 #include "slu_cdefs.h"
 
-void
-cgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
-       int *etree, char *equed, float *R, float *C,
-       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
-       SuperMatrix *B, SuperMatrix *X, float *recip_pivot_growth, 
-       float *rcond, float *ferr, float *berr, 
-       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -314,7 +311,7 @@ cgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *
  * stat   (output) SuperLUStat_t*
  *        Record the statistics on runtime and floating-point operation count.
- *        See util.h for the definition of 'SuperLUStat_t'.
+ *        See slu_util.h for the definition of 'SuperLUStat_t'.
  *
  * info    (output) int*
  *         = 0: successful exit   
@@ -332,9 +329,19 @@ cgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *                    accurate than the value of RCOND would suggest.   
  *              > A->ncol+1: number of bytes allocated when memory allocation
  *                    failure occurred, plus A->ncol.
- *
+ * </pre>
  */
 
+void
+cgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+       int *etree, char *equed, float *R, float *C,
+       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
+       SuperMatrix *B, SuperMatrix *X, float *recip_pivot_growth, 
+       float *rcond, float *ferr, float *berr, 
+       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info )
+{
+
+
     DNformat  *Bstore, *Xstore;
     complex    *Bmat, *Xmat;
     int       ldb, ldx, nrhs;
@@ -346,13 +353,12 @@ cgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
     int       i, j, info1;
     float    amax, anorm, bignum, smlnum, colcnd, rowcnd, rcmax, rcmin;
     int       relax, panel_size;
-    float    diag_pivot_thresh, drop_tol;
+    float    diag_pivot_thresh;
     double    t0;      /* temporary time */
     double    *utime;
 
     /* External functions */
     extern float clangs(char *, SuperMatrix *);
-    extern double slamch_(char *);
 
     Bstore = B->Store;
     Xstore = X->Store;
@@ -443,7 +449,6 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
     panel_size = sp_ienv(1);
     relax      = sp_ienv(2);
     diag_pivot_thresh = options->DiagPivotThresh;
-    drop_tol   = 0.0;
 
     utime = stat->utime;
     
@@ -523,8 +528,8 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 	
 	/* Compute the LU factorization of A*Pc. */
 	t0 = SuperLU_timer_();
-	cgstrf(options, &AC, drop_tol, relax, panel_size,
-	       etree, work, lwork, perm_c, perm_r, L, U, stat, info);
+	cgstrf(options, &AC, relax, panel_size, etree,
+                work, lwork, perm_c, perm_r, L, U, stat, info);
 	utime[FACT] = SuperLU_timer_() - t0;
 	
 	if ( lwork == -1 ) {
diff --git a/SRC/cgstrf.c b/SRC/cgstrf.c
index 65700ce..d3c23da 100644
--- a/SRC/cgstrf.c
+++ b/SRC/cgstrf.c
@@ -1,33 +1,32 @@
 
-/*
+/*! @file cgstrf.c
+ * \brief Computes an LU factorization of a general sparse matrix
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
+ * 
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
  *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_cdefs.h"
 
-void
-cgstrf (superlu_options_t *options, SuperMatrix *A, float drop_tol,
-        int relax, int panel_size, int *etree, void *work, int lwork,
-        int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U,
-        SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -53,11 +52,6 @@ cgstrf (superlu_options_t *options, SuperMatrix *A, float drop_tol,
  *          (A->nrow, A->ncol). The type of A can be:
  *          Stype = SLU_NCP; Dtype = SLU_C; Mtype = SLU_GE.
  *
- * drop_tol (input) float (NOT IMPLEMENTED)
- *	    Drop tolerance parameter. At step j of the Gaussian elimination,
- *          if abs(A_ij)/(max_i abs(A_ij)) < drop_tol, drop entry A_ij.
- *          0 <= drop_tol <= 1. The default value of drop_tol is 0.
- *
  * relax    (input) int
  *          To control degree of relaxing supernodes. If the number
  *          of nodes (columns) in a subtree of the elimination tree is less
@@ -117,7 +111,7 @@ cgstrf (superlu_options_t *options, SuperMatrix *A, float drop_tol,
  *
  * stat     (output) SuperLUStat_t*
  *          Record the statistics on runtime and floating-point operation count.
- *          See util.h for the definition of 'SuperLUStat_t'.
+ *          See slu_util.h for the definition of 'SuperLUStat_t'.
  *
  * info     (output) int*
  *          = 0: successful exit
@@ -177,9 +171,16 @@ cgstrf (superlu_options_t *options, SuperMatrix *A, float drop_tol,
  *	    	   NOTE: there are W of them.
  *
  *   tempv[0:*]: real temporary used for dense numeric kernels;
- *	The size of this array is defined by NUM_TEMPV() in csp_defs.h.
- *
+ *	The size of this array is defined by NUM_TEMPV() in slu_cdefs.h.
+ * </pre>
  */
+
+void
+cgstrf (superlu_options_t *options, SuperMatrix *A,
+        int relax, int panel_size, int *etree, void *work, int lwork,
+        int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U,
+        SuperLUStat_t *stat, int *info)
+{
     /* Local working arrays */
     NCPformat *Astore;
     int       *iperm_r = NULL; /* inverse of perm_r; used when 
@@ -199,7 +200,8 @@ cgstrf (superlu_options_t *options, SuperMatrix *A, float drop_tol,
     int       *xsup, *supno;
     int       *xlsub, *xlusup, *xusub;
     int       nzlumax;
-    static GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
+    float fill_ratio = sp_ienv(6);  /* estimated fill ratio */
+    static    GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
 
     /* Local scalars */
     fact_t    fact = options->Fact;
@@ -230,7 +232,7 @@ cgstrf (superlu_options_t *options, SuperMatrix *A, float drop_tol,
 
     /* Allocate storage common to the factor routines */
     *info = cLUMemInit(fact, work, lwork, m, n, Astore->nnz,
-                       panel_size, L, U, &Glu, &iwork, &cwork);
+                       panel_size, fill_ratio, L, U, &Glu, &iwork, &cwork);
     if ( *info ) return;
     
     xsup    = Glu.xsup;
@@ -425,6 +427,7 @@ cgstrf (superlu_options_t *options, SuperMatrix *A, float drop_tol,
     }
     
     ops[FACT] += ops[TRSV] + ops[GEMV];	
+    stat->expansions = --(Glu.num_expansions);
     
     if ( iperm_r_allocated ) SUPERLU_FREE (iperm_r);
     SUPERLU_FREE (iperm_c);
diff --git a/SRC/cgstrs.c b/SRC/cgstrs.c
index 270a343..d7f5a3f 100644
--- a/SRC/cgstrs.c
+++ b/SRC/cgstrs.c
@@ -1,23 +1,25 @@
 
-/*
+/*! @file cgstrs.c
+ * \brief Solves a system using LU factorization
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
 
 #include "slu_cdefs.h"
 
@@ -29,13 +31,9 @@ void cusolve(int, int, complex*, complex*);
 void clsolve(int, int, complex*, complex*);
 void cmatvec(int, int, int, complex*, complex*, complex*);
 
-
-void
-cgstrs (trans_t trans, SuperMatrix *L, SuperMatrix *U,
-        int *perm_c, int *perm_r, SuperMatrix *B,
-        SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -85,8 +83,15 @@ cgstrs (trans_t trans, SuperMatrix *L, SuperMatrix *U,
  * info    (output) int*
  * 	   = 0: successful exit
  *	   < 0: if info = -i, the i-th argument had an illegal value
- *
+ * </pre>
  */
+
+void
+cgstrs (trans_t trans, SuperMatrix *L, SuperMatrix *U,
+        int *perm_c, int *perm_r, SuperMatrix *B,
+        SuperLUStat_t *stat, int *info)
+{
+
 #ifdef _CRAY
     _fcd ftcs1, ftcs2, ftcs3, ftcs4;
 #endif
diff --git a/SRC/clacon.c b/SRC/clacon.c
index 704f1bf..d206d5a 100644
--- a/SRC/clacon.c
+++ b/SRC/clacon.c
@@ -1,66 +1,74 @@
 
-/*
+/*! @file clacon.c
+ * \brief Estimates the 1-norm
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 #include <math.h>
 #include "slu_Cnames.h"
 #include "slu_scomplex.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   CLACON estimates the 1-norm of a square matrix A.   
+ *   Reverse communication is used for evaluating matrix-vector products. 
+ * 
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   N      (input) INT
+ *          The order of the matrix.  N >= 1.   
+ *
+ *   V      (workspace) COMPLEX PRECISION array, dimension (N)   
+ *          On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
+ *          (W is not returned).   
+ *
+ *   X      (input/output) COMPLEX PRECISION array, dimension (N)   
+ *          On an intermediate return, X should be overwritten by   
+ *                A * X,   if KASE=1,   
+ *                A' * X,  if KASE=2,
+ *          where A' is the conjugate transpose of A,
+ *         and CLACON must be re-called with all the other parameters   
+ *          unchanged.   
+ *
+ *
+ *   EST    (output) FLOAT PRECISION   
+ *          An estimate (a lower bound) for norm(A).   
+ *
+ *   KASE   (input/output) INT
+ *          On the initial call to CLACON, KASE should be 0.   
+ *          On an intermediate return, KASE will be 1 or 2, indicating   
+ *          whether X should be overwritten by A * X  or A' * X.   
+ *          On the final return from CLACON, KASE will again be 0.   
+ *
+ *   Further Details   
+ *   ======= =======   
+ *
+ *   Contributed by Nick Higham, University of Manchester.   
+ *   Originally named CONEST, dated March 16, 1988.   
+ *
+ *   Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
+ *   a real or complex matrix, with applications to condition estimation", 
+ *   ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
+ *   ===================================================================== 
+ * </pre>
+ */
+
 int
 clacon_(int *n, complex *v, complex *x, float *est, int *kase)
 
 {
-/*
-    Purpose   
-    =======   
-
-    CLACON estimates the 1-norm of a square matrix A.   
-    Reverse communication is used for evaluating matrix-vector products. 
-  
-
-    Arguments   
-    =========   
-
-    N      (input) INT
-           The order of the matrix.  N >= 1.   
-
-    V      (workspace) COMPLEX PRECISION array, dimension (N)   
-           On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
-           (W is not returned).   
-
-    X      (input/output) COMPLEX PRECISION array, dimension (N)   
-           On an intermediate return, X should be overwritten by   
-                 A * X,   if KASE=1,   
-                 A' * X,  if KASE=2,
-           where A' is the conjugate transpose of A,
-           and CLACON must be re-called with all the other parameters   
-           unchanged.   
-
-
-    EST    (output) FLOAT PRECISION   
-           An estimate (a lower bound) for norm(A).   
-
-    KASE   (input/output) INT
-           On the initial call to CLACON, KASE should be 0.   
-           On an intermediate return, KASE will be 1 or 2, indicating   
-           whether X should be overwritten by A * X  or A' * X.   
-           On the final return from CLACON, KASE will again be 0.   
-
-    Further Details   
-    ======= =======   
-
-    Contributed by Nick Higham, University of Manchester.   
-    Originally named CONEST, dated March 16, 1988.   
 
-    Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
-    a real or complex matrix, with applications to condition estimation", 
-    ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
-    ===================================================================== 
-*/
 
     /* Table of constant values */
     int c__1 = 1;
@@ -77,7 +85,7 @@ clacon_(int *n, complex *v, complex *x, float *est, int *kase)
     static int i, j;
     float temp;
     float safmin;
-    extern double slamch_(char *);
+    extern float slamch_(char *);
     extern int icmax1_(int *, complex *, int *);
     extern double scsum1_(int *, complex *, int *);
 
diff --git a/SRC/clacon.c b/SRC/clacon.c.bak
similarity index 64%
copy from SRC/clacon.c
copy to SRC/clacon.c.bak
index 704f1bf..3b826f5 100644
--- a/SRC/clacon.c
+++ b/SRC/clacon.c.bak
@@ -1,66 +1,74 @@
 
-/*
+/*! @file clacon.c
+ * \brief Estimates the 1-norm
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 #include <math.h>
 #include "slu_Cnames.h"
 #include "slu_scomplex.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   CLACON estimates the 1-norm of a square matrix A.   
+ *   Reverse communication is used for evaluating matrix-vector products. 
+ * 
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   N      (input) INT
+ *          The order of the matrix.  N >= 1.   
+ *
+ *   V      (workspace) COMPLEX PRECISION array, dimension (N)   
+ *          On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
+ *          (W is not returned).   
+ *
+ *   X      (input/output) COMPLEX PRECISION array, dimension (N)   
+ *          On an intermediate return, X should be overwritten by   
+ *                A * X,   if KASE=1,   
+ *                A' * X,  if KASE=2,
+ *          where A' is the conjugate transpose of A,
+ *         and CLACON must be re-called with all the other parameters   
+ *          unchanged.   
+ *
+ *
+ *   EST    (output) FLOAT PRECISION   
+ *          An estimate (a lower bound) for norm(A).   
+ *
+ *   KASE   (input/output) INT
+ *          On the initial call to CLACON, KASE should be 0.   
+ *          On an intermediate return, KASE will be 1 or 2, indicating   
+ *          whether X should be overwritten by A * X  or A' * X.   
+ *          On the final return from CLACON, KASE will again be 0.   
+ *
+ *   Further Details   
+ *   ======= =======   
+ *
+ *   Contributed by Nick Higham, University of Manchester.   
+ *   Originally named CONEST, dated March 16, 1988.   
+ *
+ *   Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
+ *   a real or complex matrix, with applications to condition estimation", 
+ *   ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
+ *   ===================================================================== 
+ * </pre>
+ */
+
 int
 clacon_(int *n, complex *v, complex *x, float *est, int *kase)
 
 {
-/*
-    Purpose   
-    =======   
-
-    CLACON estimates the 1-norm of a square matrix A.   
-    Reverse communication is used for evaluating matrix-vector products. 
-  
-
-    Arguments   
-    =========   
-
-    N      (input) INT
-           The order of the matrix.  N >= 1.   
-
-    V      (workspace) COMPLEX PRECISION array, dimension (N)   
-           On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
-           (W is not returned).   
-
-    X      (input/output) COMPLEX PRECISION array, dimension (N)   
-           On an intermediate return, X should be overwritten by   
-                 A * X,   if KASE=1,   
-                 A' * X,  if KASE=2,
-           where A' is the conjugate transpose of A,
-           and CLACON must be re-called with all the other parameters   
-           unchanged.   
-
-
-    EST    (output) FLOAT PRECISION   
-           An estimate (a lower bound) for norm(A).   
-
-    KASE   (input/output) INT
-           On the initial call to CLACON, KASE should be 0.   
-           On an intermediate return, KASE will be 1 or 2, indicating   
-           whether X should be overwritten by A * X  or A' * X.   
-           On the final return from CLACON, KASE will again be 0.   
-
-    Further Details   
-    ======= =======   
-
-    Contributed by Nick Higham, University of Manchester.   
-    Originally named CONEST, dated March 16, 1988.   
 
-    Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
-    a real or complex matrix, with applications to condition estimation", 
-    ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
-    ===================================================================== 
-*/
 
     /* Table of constant values */
     int c__1 = 1;
diff --git a/SRC/clangs.c b/SRC/clangs.c
index de7f91f..f6d8506 100644
--- a/SRC/clangs.c
+++ b/SRC/clangs.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file clangs.c
+ * \brief Returns the value of the one norm
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Modified from lapack routine CLANGE 
+ * </pre>
  */
 /*
  * File name:	clangs.c
@@ -13,44 +18,48 @@
 #include <math.h>
 #include "slu_cdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose   
+ *   =======   
+ *
+ *   CLANGS returns the value of the one norm, or the Frobenius norm, or 
+ *   the infinity norm, or the element of largest absolute value of a 
+ *   real matrix A.   
+ *
+ *   Description   
+ *   ===========   
+ *
+ *   CLANGE returns the value   
+ *
+ *      CLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm'   
+ *               (   
+ *               ( norm1(A),         NORM = '1', 'O' or 'o'   
+ *               (   
+ *               ( normI(A),         NORM = 'I' or 'i'   
+ *               (   
+ *               ( normF(A),         NORM = 'F', 'f', 'E' or 'e'   
+ *
+ *   where  norm1  denotes the  one norm of a matrix (maximum column sum), 
+ *   normI  denotes the  infinity norm  of a matrix  (maximum row sum) and 
+ *   normF  denotes the  Frobenius norm of a matrix (square root of sum of 
+ *   squares).  Note that  max(abs(A(i,j)))  is not a  matrix norm.   
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   NORM    (input) CHARACTER*1   
+ *           Specifies the value to be returned in CLANGE as described above.   
+ *   A       (input) SuperMatrix*
+ *           The M by N sparse matrix A. 
+ *
+ *  =====================================================================
+ * </pre>
+ */
+
 float clangs(char *norm, SuperMatrix *A)
 {
-/* 
-    Purpose   
-    =======   
-
-    CLANGS returns the value of the one norm, or the Frobenius norm, or 
-    the infinity norm, or the element of largest absolute value of a 
-    real matrix A.   
-
-    Description   
-    ===========   
-
-    CLANGE returns the value   
-
-       CLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm'   
-                (   
-                ( norm1(A),         NORM = '1', 'O' or 'o'   
-                (   
-                ( normI(A),         NORM = 'I' or 'i'   
-                (   
-                ( normF(A),         NORM = 'F', 'f', 'E' or 'e'   
-
-    where  norm1  denotes the  one norm of a matrix (maximum column sum), 
-    normI  denotes the  infinity norm  of a matrix  (maximum row sum) and 
-    normF  denotes the  Frobenius norm of a matrix (square root of sum of 
-    squares).  Note that  max(abs(A(i,j)))  is not a  matrix norm.   
-
-    Arguments   
-    =========   
-
-    NORM    (input) CHARACTER*1   
-            Specifies the value to be returned in CLANGE as described above.   
-    A       (input) SuperMatrix*
-            The M by N sparse matrix A. 
-
-   ===================================================================== 
-*/
     
     /* Local variables */
     NCformat *Astore;
diff --git a/SRC/claqgs.c b/SRC/claqgs.c
index 377b501..8d469cf 100644
--- a/SRC/claqgs.c
+++ b/SRC/claqgs.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file claqgs.c
+ * \brief Equlibrates a general sprase matrix
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * 
+ * Modified from LAPACK routine CLAQGE
+ * </pre>
  */
 /*
  * File name:	claqgs.c
@@ -13,66 +18,71 @@
 #include <math.h>
 #include "slu_cdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   CLAQGS equilibrates a general sparse M by N matrix A using the row and   
+ *   scaling factors in the vectors R and C.   
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   A       (input/output) SuperMatrix*
+ *           On exit, the equilibrated matrix.  See EQUED for the form of 
+ *           the equilibrated matrix. The type of A can be:
+ *	    Stype = NC; Dtype = SLU_C; Mtype = GE.
+ *	    
+ *   R       (input) float*, dimension (A->nrow)
+ *           The row scale factors for A.
+ *	    
+ *   C       (input) float*, dimension (A->ncol)
+ *           The column scale factors for A.
+ *	    
+ *   ROWCND  (input) float
+ *           Ratio of the smallest R(i) to the largest R(i).
+ *	    
+ *   COLCND  (input) float
+ *           Ratio of the smallest C(i) to the largest C(i).
+ *	    
+ *   AMAX    (input) float
+ *           Absolute value of largest matrix entry.
+ *	    
+ *   EQUED   (output) char*
+ *           Specifies the form of equilibration that was done.   
+ *           = 'N':  No equilibration   
+ *           = 'R':  Row equilibration, i.e., A has been premultiplied by  
+ *                   diag(R).   
+ *           = 'C':  Column equilibration, i.e., A has been postmultiplied  
+ *                   by diag(C).   
+ *           = 'B':  Both row and column equilibration, i.e., A has been
+ *                   replaced by diag(R) * A * diag(C).   
+ *
+ *   Internal Parameters   
+ *   ===================   
+ *
+ *   THRESH is a threshold value used to decide if row or column scaling   
+ *   should be done based on the ratio of the row or column scaling   
+ *   factors.  If ROWCND < THRESH, row scaling is done, and if   
+ *   COLCND < THRESH, column scaling is done.   
+ *
+ *   LARGE and SMALL are threshold values used to decide if row scaling   
+ *   should be done based on the absolute size of the largest matrix   
+ *   element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.   
+ *
+ *   ===================================================================== 
+ * </pre>
+ */
+
 void
 claqgs(SuperMatrix *A, float *r, float *c, 
 	float rowcnd, float colcnd, float amax, char *equed)
 {
-/*
-    Purpose   
-    =======   
-
-    CLAQGS equilibrates a general sparse M by N matrix A using the row and   
-    scaling factors in the vectors R and C.   
-
-    See supermatrix.h for the definition of 'SuperMatrix' structure.
-
-    Arguments   
-    =========   
-
-    A       (input/output) SuperMatrix*
-            On exit, the equilibrated matrix.  See EQUED for the form of 
-            the equilibrated matrix. The type of A can be:
-	    Stype = NC; Dtype = SLU_C; Mtype = GE.
-	    
-    R       (input) float*, dimension (A->nrow)
-            The row scale factors for A.
-	    
-    C       (input) float*, dimension (A->ncol)
-            The column scale factors for A.
-	    
-    ROWCND  (input) float
-            Ratio of the smallest R(i) to the largest R(i).
-	    
-    COLCND  (input) float
-            Ratio of the smallest C(i) to the largest C(i).
-	    
-    AMAX    (input) float
-            Absolute value of largest matrix entry.
-	    
-    EQUED   (output) char*
-            Specifies the form of equilibration that was done.   
-            = 'N':  No equilibration   
-            = 'R':  Row equilibration, i.e., A has been premultiplied by  
-                    diag(R).   
-            = 'C':  Column equilibration, i.e., A has been postmultiplied  
-                    by diag(C).   
-            = 'B':  Both row and column equilibration, i.e., A has been
-                    replaced by diag(R) * A * diag(C).   
-
-    Internal Parameters   
-    ===================   
-
-    THRESH is a threshold value used to decide if row or column scaling   
-    should be done based on the ratio of the row or column scaling   
-    factors.  If ROWCND < THRESH, row scaling is done, and if   
-    COLCND < THRESH, column scaling is done.   
-
-    LARGE and SMALL are threshold values used to decide if row scaling   
-    should be done based on the absolute size of the largest matrix   
-    element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.   
 
-    ===================================================================== 
-*/
 
 #define THRESH    (0.1)
     
@@ -81,7 +91,6 @@ claqgs(SuperMatrix *A, float *r, float *c,
     complex   *Aval;
     int i, j, irow;
     float large, small, cj;
-    extern double slamch_(char *);
     float temp;
 
 
diff --git a/SRC/cldperm.c b/SRC/cldperm.c
new file mode 100644
index 0000000..ed566bb
--- /dev/null
+++ b/SRC/cldperm.c
@@ -0,0 +1,168 @@
+
+/*! @file 
+ * \brief Finds a row permutation so that the matrix has large entries on the diagonal
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_cdefs.h"
+
+extern int_t mc64id_(int_t*);
+extern int_t mc64ad_(int_t*, int_t*, int_t*, int_t [], int_t [], double [],
+		    int_t*, int_t [], int_t*, int_t[], int_t*, double [],
+		    int_t [], int_t []);
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ *   CLDPERM finds a row permutation so that the matrix has large
+ *   entries on the diagonal.
+ *
+ * Arguments
+ * =========
+ *
+ * job    (input) int
+ *        Control the action. Possible values for JOB are:
+ *        = 1 : Compute a row permutation of the matrix so that the
+ *              permuted matrix has as many entries on its diagonal as
+ *              possible. The values on the diagonal are of arbitrary size.
+ *              HSL subroutine MC21A/AD is used for this.
+ *        = 2 : Compute a row permutation of the matrix so that the smallest 
+ *              value on the diagonal of the permuted matrix is maximized.
+ *        = 3 : Compute a row permutation of the matrix so that the smallest
+ *              value on the diagonal of the permuted matrix is maximized.
+ *              The algorithm differs from the one used for JOB = 2 and may
+ *              have quite a different performance.
+ *        = 4 : Compute a row permutation of the matrix so that the sum
+ *              of the diagonal entries of the permuted matrix is maximized.
+ *        = 5 : Compute a row permutation of the matrix so that the product
+ *              of the diagonal entries of the permuted matrix is maximized
+ *              and vectors to scale the matrix so that the nonzero diagonal 
+ *              entries of the permuted matrix are one in absolute value and 
+ *              all the off-diagonal entries are less than or equal to one in 
+ *              absolute value.
+ *        Restriction: 1 <= JOB <= 5.
+ *
+ * n      (input) int
+ *        The order of the matrix.
+ *
+ * nnz    (input) int
+ *        The number of nonzeros in the matrix.
+ *
+ * adjncy (input) int*, of size nnz
+ *        The adjacency structure of the matrix, which contains the row
+ *        indices of the nonzeros.
+ *
+ * colptr (input) int*, of size n+1
+ *        The pointers to the beginning of each column in ADJNCY.
+ *
+ * nzval  (input) complex*, of size nnz
+ *        The nonzero values of the matrix. nzval[k] is the value of
+ *        the entry corresponding to adjncy[k].
+ *        It is not used if job = 1.
+ *
+ * perm   (output) int*, of size n
+ *        The permutation vector. perm[i] = j means row i in the
+ *        original matrix is in row j of the permuted matrix.
+ *
+ * u      (output) double*, of size n
+ *        If job = 5, the natural logarithms of the row scaling factors. 
+ *
+ * v      (output) double*, of size n
+ *        If job = 5, the natural logarithms of the column scaling factors. 
+ *        The scaled matrix B has entries b_ij = a_ij * exp(u_i + v_j).
+ * </pre>
+ */
+
+int
+cldperm(int_t job, int_t n, int_t nnz, int_t colptr[], int_t adjncy[],
+	complex nzval[], int_t *perm, float u[], float v[])
+{ 
+    int_t i, liw, ldw, num;
+    int_t *iw, icntl[10], info[10];
+    double *dw;
+    double *nzval_d = (double *) SUPERLU_MALLOC(nnz * sizeof(double));
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Enter cldperm()");
+#endif
+    liw = 5*n;
+    if ( job == 3 ) liw = 10*n + nnz;
+    if ( !(iw = intMalloc(liw)) ) ABORT("Malloc fails for iw[]");
+    ldw = 3*n + nnz;
+    if ( !(dw = (double*) SUPERLU_MALLOC(ldw * sizeof(double))) )
+          ABORT("Malloc fails for dw[]");
+	    
+    /* Increment one to get 1-based indexing. */
+    for (i = 0; i <= n; ++i) ++colptr[i];
+    for (i = 0; i < nnz; ++i) ++adjncy[i];
+#if ( DEBUGlevel>=2 )
+    printf("LDPERM(): n %d, nnz %d\n", n, nnz);
+    slu_PrintInt10("colptr", n+1, colptr);
+    slu_PrintInt10("adjncy", nnz, adjncy);
+#endif
+	
+    /* 
+     * NOTE:
+     * =====
+     *
+     * MC64AD assumes that column permutation vector is defined as:
+     * perm(i) = j means column i of permuted A is in column j of original A.
+     *
+     * Since a symmetric permutation preserves the diagonal entries. Then
+     * by the following relation:
+     *     P'(A*P')P = P'A
+     * we can apply inverse(perm) to rows of A to get large diagonal entries.
+     * But, since 'perm' defined in MC64AD happens to be the reverse of
+     * SuperLU's definition of permutation vector, therefore, it is already
+     * an inverse for our purpose. We will thus use it directly.
+     *
+     */
+    mc64id_(icntl);
+#if 0
+    /* Suppress error and warning messages. */
+    icntl[0] = -1;
+    icntl[1] = -1;
+#endif
+
+    for (i = 0; i < nnz; ++i) nzval_d[i] = c_abs1(&nzval[i]);
+    mc64ad_(&job, &n, &nnz, colptr, adjncy, nzval_d, &num, perm,
+	    &liw, iw, &ldw, dw, icntl, info);
+
+#if ( DEBUGlevel>=2 )
+    slu_PrintInt10("perm", n, perm);
+    printf(".. After MC64AD info %d\tsize of matching %d\n", info[0], num);
+#endif
+    if ( info[0] == 1 ) { /* Structurally singular */
+        printf(".. The last %d permutations:\n", n-num);
+	slu_PrintInt10("perm", n-num, &perm[num]);
+    }
+
+    /* Restore to 0-based indexing. */
+    for (i = 0; i <= n; ++i) --colptr[i];
+    for (i = 0; i < nnz; ++i) --adjncy[i];
+    for (i = 0; i < n; ++i) --perm[i];
+
+    if ( job == 5 )
+        for (i = 0; i < n; ++i) {
+	    u[i] = dw[i];
+	    v[i] = dw[n+i];
+	}
+
+    SUPERLU_FREE(iw);
+    SUPERLU_FREE(dw);
+    SUPERLU_FREE(nzval_d);
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Exit cldperm()");
+#endif
+
+    return info[0];
+}
diff --git a/SRC/cmemory.c b/SRC/cmemory.c
index d50f58d..ef385c2 100644
--- a/SRC/cmemory.c
+++ b/SRC/cmemory.c
@@ -1,54 +1,32 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * October 15, 2003
+/*! @file cmemory.c
+ * \brief Memory details
  *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
  */
 #include "slu_cdefs.h"
 
-/* Constants */
-#define NO_MEMTYPE  4      /* 0: lusup;
-			      1: ucol;
-			      2: lsub;
-			      3: usub */
-#define GluIntArray(n)   (5 * (n) + 5)
 
 /* Internal prototypes */
 void  *cexpand (int *, MemType,int, int, GlobalLU_t *);
-int   cLUWorkInit (int, int, int, int **, complex **, LU_space_t);
+int   cLUWorkInit (int, int, int, int **, complex **, GlobalLU_t *);
 void  copy_mem_complex (int, void *, void *);
 void  cStackCompress (GlobalLU_t *);
-void  cSetupSpace (void *, int, LU_space_t *);
-void  *cuser_malloc (int, int);
-void  cuser_free (int, int);
+void  cSetupSpace (void *, int, GlobalLU_t *);
+void  *cuser_malloc (int, int, GlobalLU_t *);
+void  cuser_free (int, int, GlobalLU_t *);
 
-/* External prototypes (in memory.c - prec-indep) */
+/* External prototypes (in memory.c - prec-independent) */
 extern void    copy_mem_int    (int, void *, void *);
 extern void    user_bcopy      (char *, char *, int);
 
-/* Headers for 4 types of dynamatically managed memory */
-typedef struct e_node {
-    int size;      /* length of the memory that has been used */
-    void *mem;     /* pointer to the new malloc'd store */
-} ExpHeader;
-
-typedef struct {
-    int  size;
-    int  used;
-    int  top1;  /* grow upward, relative to &array[0] */
-    int  top2;  /* grow downward */
-    void *array;
-} LU_stack_t;
-
-/* Variables local to this file */
-static ExpHeader *expanders = 0; /* Array of pointers to 4 types of memory */
-static LU_stack_t stack;
-static int no_expand;
 
 /* Macros to manipulate stack */
-#define StackFull(x)         ( x + stack.used >= stack.size )
+#define StackFull(x)         ( x + Glu->stack.used >= Glu->stack.size )
 #define NotDoubleAlign(addr) ( (long int)addr & 7 )
 #define DoubleAlign(addr)    ( ((long int)addr + 7) & ~7L )
 #define TempSpace(m, w)      ( (2*w + 4 + NO_MARKER) * m * sizeof(int) + \
@@ -58,66 +36,67 @@ static int no_expand;
 
 
 
-/*
- * Setup the memory model to be used for factorization.
+/*! \brief Setup the memory model to be used for factorization.
+ *  
  *    lwork = 0: use system malloc;
  *    lwork > 0: use user-supplied work[] space.
  */
-void cSetupSpace(void *work, int lwork, LU_space_t *MemModel)
+void cSetupSpace(void *work, int lwork, GlobalLU_t *Glu)
 {
     if ( lwork == 0 ) {
-	*MemModel = SYSTEM; /* malloc/free */
+	Glu->MemModel = SYSTEM; /* malloc/free */
     } else if ( lwork > 0 ) {
-	*MemModel = USER;   /* user provided space */
-	stack.used = 0;
-	stack.top1 = 0;
-	stack.top2 = (lwork/4)*4; /* must be word addressable */
-	stack.size = stack.top2;
-	stack.array = (void *) work;
+	Glu->MemModel = USER;   /* user provided space */
+	Glu->stack.used = 0;
+	Glu->stack.top1 = 0;
+	Glu->stack.top2 = (lwork/4)*4; /* must be word addressable */
+	Glu->stack.size = Glu->stack.top2;
+	Glu->stack.array = (void *) work;
     }
 }
 
 
 
-void *cuser_malloc(int bytes, int which_end)
+void *cuser_malloc(int bytes, int which_end, GlobalLU_t *Glu)
 {
     void *buf;
     
     if ( StackFull(bytes) ) return (NULL);
 
     if ( which_end == HEAD ) {
-	buf = (char*) stack.array + stack.top1;
-	stack.top1 += bytes;
+	buf = (char*) Glu->stack.array + Glu->stack.top1;
+	Glu->stack.top1 += bytes;
     } else {
-	stack.top2 -= bytes;
-	buf = (char*) stack.array + stack.top2;
+	Glu->stack.top2 -= bytes;
+	buf = (char*) Glu->stack.array + Glu->stack.top2;
     }
     
-    stack.used += bytes;
+    Glu->stack.used += bytes;
     return buf;
 }
 
 
-void cuser_free(int bytes, int which_end)
+void cuser_free(int bytes, int which_end, GlobalLU_t *Glu)
 {
     if ( which_end == HEAD ) {
-	stack.top1 -= bytes;
+	Glu->stack.top1 -= bytes;
     } else {
-	stack.top2 += bytes;
+	Glu->stack.top2 += bytes;
     }
-    stack.used -= bytes;
+    Glu->stack.used -= bytes;
 }
 
 
 
-/*
+/*! \brief 
+ *
+ * <pre>
  * mem_usage consists of the following fields:
  *    - for_lu (float)
  *      The amount of space used in bytes for the L\U data structures.
  *    - total_needed (float)
  *      The amount of space needed in bytes to perform factorization.
- *    - expansions (int)
- *      Number of memory expansions during the LU factorization.
+ * </pre>
  */
 int cQuerySpace(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)
 {
@@ -132,33 +111,75 @@ int cQuerySpace(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)
     dword = sizeof(complex);
 
     /* For LU factors */
-    mem_usage->for_lu = (float)( (4*n + 3) * iword + Lstore->nzval_colptr[n] *
-				 dword + Lstore->rowind_colptr[n] * iword );
-    mem_usage->for_lu += (float)( (n + 1) * iword +
+    mem_usage->for_lu = (float)( (4.0*n + 3.0) * iword +
+                                 Lstore->nzval_colptr[n] * dword +
+                                 Lstore->rowind_colptr[n] * iword );
+    mem_usage->for_lu += (float)( (n + 1.0) * iword +
 				 Ustore->colptr[n] * (dword + iword) );
 
     /* Working storage to support factorization */
     mem_usage->total_needed = mem_usage->for_lu +
-	(float)( (2 * panel_size + 4 + NO_MARKER) * n * iword +
-		(panel_size + 1) * n * dword );
-
-    mem_usage->expansions = --no_expand;
+	(float)( (2.0 * panel_size + 4.0 + NO_MARKER) * n * iword +
+		(panel_size + 1.0) * n * dword );
 
     return 0;
 } /* cQuerySpace */
 
-/*
- * Allocate storage for the data structures common to all factor routines.
- * For those unpredictable size, make a guess as FILL * nnz(A).
+
+/*! \brief
+ *
+ * <pre>
+ * mem_usage consists of the following fields:
+ *    - for_lu (float)
+ *      The amount of space used in bytes for the L\U data structures.
+ *    - total_needed (float)
+ *      The amount of space needed in bytes to perform factorization.
+ * </pre>
+ */
+int ilu_cQuerySpace(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)
+{
+    SCformat *Lstore;
+    NCformat *Ustore;
+    register int n, panel_size = sp_ienv(1);
+    register float iword, dword;
+
+    Lstore = L->Store;
+    Ustore = U->Store;
+    n = L->ncol;
+    iword = sizeof(int);
+    dword = sizeof(double);
+
+    /* For LU factors */
+    mem_usage->for_lu = (float)( (4.0f * n + 3.0f) * iword +
+				 Lstore->nzval_colptr[n] * dword +
+				 Lstore->rowind_colptr[n] * iword );
+    mem_usage->for_lu += (float)( (n + 1.0f) * iword +
+				 Ustore->colptr[n] * (dword + iword) );
+
+    /* Working storage to support factorization.
+       ILU needs 5*n more integers than LU */
+    mem_usage->total_needed = mem_usage->for_lu +
+	(float)( (2.0f * panel_size + 9.0f + NO_MARKER) * n * iword +
+		(panel_size + 1.0f) * n * dword );
+
+    return 0;
+} /* ilu_cQuerySpace */
+
+
+/*! \brief Allocate storage for the data structures common to all factor routines.
+ *
+ * <pre>
+ * For those unpredictable size, estimate as fill_ratio * nnz(A).
  * Return value:
  *     If lwork = -1, return the estimated amount of space required, plus n;
  *     otherwise, return the amount of space actually allocated when
  *     memory allocation failure occurred.
+ * </pre> 
  */
 int
 cLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
-	  int panel_size, SuperMatrix *L, SuperMatrix *U, GlobalLU_t *Glu,
-	  int **iwork, complex **dwork)
+	  int panel_size, float fill_ratio, SuperMatrix *L, SuperMatrix *U,
+          GlobalLU_t *Glu, int **iwork, complex **dwork)
 {
     int      info, iword, dword;
     SCformat *Lstore;
@@ -170,32 +191,32 @@ cLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
     complex   *ucol;
     int      *usub, *xusub;
     int      nzlmax, nzumax, nzlumax;
-    int      FILL = sp_ienv(6);
     
-    Glu->n    = n;
-    no_expand = 0;
     iword     = sizeof(int);
     dword     = sizeof(complex);
+    Glu->n    = n;
+    Glu->num_expansions = 0;
 
-    if ( !expanders )	
-        expanders = (ExpHeader*)SUPERLU_MALLOC(NO_MEMTYPE * sizeof(ExpHeader));
-    if ( !expanders ) ABORT("SUPERLU_MALLOC fails for expanders");
+    if ( !Glu->expanders )	
+        Glu->expanders = (ExpHeader*)SUPERLU_MALLOC( NO_MEMTYPE *
+                                                     sizeof(ExpHeader) );
+    if ( !Glu->expanders ) ABORT("SUPERLU_MALLOC fails for expanders");
     
     if ( fact != SamePattern_SameRowPerm ) {
 	/* Guess for L\U factors */
-	nzumax = nzlumax = FILL * annz;
-	nzlmax = SUPERLU_MAX(1, FILL/4.) * annz;
+	nzumax = nzlumax = fill_ratio * annz;
+	nzlmax = SUPERLU_MAX(1, fill_ratio/4.) * annz;
 
 	if ( lwork == -1 ) {
 	    return ( GluIntArray(n) * iword + TempSpace(m, panel_size)
 		    + (nzlmax+nzumax)*iword + (nzlumax+nzumax)*dword + n );
         } else {
-	    cSetupSpace(work, lwork, &Glu->MemModel);
+	    cSetupSpace(work, lwork, Glu);
 	}
 	
 #if ( PRNTlevel >= 1 )
-	printf("cLUMemInit() called: FILL %ld, nzlmax %ld, nzumax %ld\n", 
-	       FILL, nzlmax, nzumax);
+	printf("cLUMemInit() called: fill_ratio %.0f, nzlmax %ld, nzumax %ld\n", 
+	       fill_ratio, nzlmax, nzumax);
 	fflush(stdout);
 #endif	
 	
@@ -207,11 +228,11 @@ cLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
 	    xlusup = intMalloc(n+1);
 	    xusub  = intMalloc(n+1);
 	} else {
-	    xsup   = (int *)cuser_malloc((n+1) * iword, HEAD);
-	    supno  = (int *)cuser_malloc((n+1) * iword, HEAD);
-	    xlsub  = (int *)cuser_malloc((n+1) * iword, HEAD);
-	    xlusup = (int *)cuser_malloc((n+1) * iword, HEAD);
-	    xusub  = (int *)cuser_malloc((n+1) * iword, HEAD);
+	    xsup   = (int *)cuser_malloc((n+1) * iword, HEAD, Glu);
+	    supno  = (int *)cuser_malloc((n+1) * iword, HEAD, Glu);
+	    xlsub  = (int *)cuser_malloc((n+1) * iword, HEAD, Glu);
+	    xlusup = (int *)cuser_malloc((n+1) * iword, HEAD, Glu);
+	    xusub  = (int *)cuser_malloc((n+1) * iword, HEAD, Glu);
 	}
 
 	lusup = (complex *) cexpand( &nzlumax, LUSUP, 0, 0, Glu );
@@ -226,7 +247,8 @@ cLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
 		SUPERLU_FREE(lsub); 
 		SUPERLU_FREE(usub);
 	    } else {
-		cuser_free((nzlumax+nzumax)*dword+(nzlmax+nzumax)*iword, HEAD);
+		cuser_free((nzlumax+nzumax)*dword+(nzlmax+nzumax)*iword,
+                            HEAD, Glu);
 	    }
 	    nzlumax /= 2;
 	    nzumax /= 2;
@@ -266,18 +288,18 @@ cLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
 	    Glu->MemModel = SYSTEM;
 	} else {
 	    Glu->MemModel = USER;
-	    stack.top2 = (lwork/4)*4; /* must be word-addressable */
-	    stack.size = stack.top2;
+	    Glu->stack.top2 = (lwork/4)*4; /* must be word-addressable */
+	    Glu->stack.size = Glu->stack.top2;
 	}
 	
-	lsub  = expanders[LSUB].mem  = Lstore->rowind;
-	lusup = expanders[LUSUP].mem = Lstore->nzval;
-	usub  = expanders[USUB].mem  = Ustore->rowind;
-	ucol  = expanders[UCOL].mem  = Ustore->nzval;;
-	expanders[LSUB].size         = nzlmax;
-	expanders[LUSUP].size        = nzlumax;
-	expanders[USUB].size         = nzumax;
-	expanders[UCOL].size         = nzumax;	
+	lsub  = Glu->expanders[LSUB].mem  = Lstore->rowind;
+	lusup = Glu->expanders[LUSUP].mem = Lstore->nzval;
+	usub  = Glu->expanders[USUB].mem  = Ustore->rowind;
+	ucol  = Glu->expanders[UCOL].mem  = Ustore->nzval;;
+	Glu->expanders[LSUB].size         = nzlmax;
+	Glu->expanders[LUSUP].size        = nzlumax;
+	Glu->expanders[USUB].size         = nzumax;
+	Glu->expanders[UCOL].size         = nzumax;	
     }
 
     Glu->xsup    = xsup;
@@ -293,43 +315,43 @@ cLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
     Glu->nzumax  = nzumax;
     Glu->nzlumax = nzlumax;
     
-    info = cLUWorkInit(m, n, panel_size, iwork, dwork, Glu->MemModel);
+    info = cLUWorkInit(m, n, panel_size, iwork, dwork, Glu);
     if ( info )
 	return ( info + cmemory_usage(nzlmax, nzumax, nzlumax, n) + n);
     
-    ++no_expand;
+    ++Glu->num_expansions;
     return 0;
     
 } /* cLUMemInit */
 
-/* Allocate known working storage. Returns 0 if success, otherwise
+/*! \brief Allocate known working storage. Returns 0 if success, otherwise
    returns the number of bytes allocated so far when failure occurred. */
 int
 cLUWorkInit(int m, int n, int panel_size, int **iworkptr, 
-            complex **dworkptr, LU_space_t MemModel)
+            complex **dworkptr, GlobalLU_t *Glu)
 {
     int    isize, dsize, extra;
     complex *old_ptr;
-    int    maxsuper = sp_ienv(3),
+    int    maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
            rowblk   = sp_ienv(4);
 
     isize = ( (2 * panel_size + 3 + NO_MARKER ) * m + n ) * sizeof(int);
     dsize = (m * panel_size +
 	     NUM_TEMPV(m,panel_size,maxsuper,rowblk)) * sizeof(complex);
     
-    if ( MemModel == SYSTEM ) 
+    if ( Glu->MemModel == SYSTEM ) 
 	*iworkptr = (int *) intCalloc(isize/sizeof(int));
     else
-	*iworkptr = (int *) cuser_malloc(isize, TAIL);
+	*iworkptr = (int *) cuser_malloc(isize, TAIL, Glu);
     if ( ! *iworkptr ) {
 	fprintf(stderr, "cLUWorkInit: malloc fails for local iworkptr[]\n");
 	return (isize + n);
     }
 
-    if ( MemModel == SYSTEM )
+    if ( Glu->MemModel == SYSTEM )
 	*dworkptr = (complex *) SUPERLU_MALLOC(dsize);
     else {
-	*dworkptr = (complex *) cuser_malloc(dsize, TAIL);
+	*dworkptr = (complex *) cuser_malloc(dsize, TAIL, Glu);
 	if ( NotDoubleAlign(*dworkptr) ) {
 	    old_ptr = *dworkptr;
 	    *dworkptr = (complex*) DoubleAlign(*dworkptr);
@@ -338,8 +360,8 @@ cLUWorkInit(int m, int n, int panel_size, int **iworkptr,
 #ifdef DEBUG	    
 	    printf("cLUWorkInit: not aligned, extra %d\n", extra);
 #endif	    
-	    stack.top2 -= extra;
-	    stack.used += extra;
+	    Glu->stack.top2 -= extra;
+	    Glu->stack.used += extra;
 	}
     }
     if ( ! *dworkptr ) {
@@ -351,8 +373,7 @@ cLUWorkInit(int m, int n, int panel_size, int **iworkptr,
 }
 
 
-/*
- * Set up pointers for real working arrays.
+/*! \brief Set up pointers for real working arrays.
  */
 void
 cSetRWork(int m, int panel_size, complex *dworkptr,
@@ -360,7 +381,7 @@ cSetRWork(int m, int panel_size, complex *dworkptr,
 {
     complex zero = {0.0, 0.0};
 
-    int maxsuper = sp_ienv(3),
+    int maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
         rowblk   = sp_ienv(4);
     *dense = dworkptr;
     *tempv = *dense + panel_size*m;
@@ -368,8 +389,7 @@ cSetRWork(int m, int panel_size, complex *dworkptr,
     cfill (*tempv, NUM_TEMPV(m,panel_size,maxsuper,rowblk), zero);     
 }
 	
-/*
- * Free the working storage used by factor routines.
+/*! \brief Free the working storage used by factor routines.
  */
 void cLUWorkFree(int *iwork, complex *dwork, GlobalLU_t *Glu)
 {
@@ -377,18 +397,21 @@ void cLUWorkFree(int *iwork, complex *dwork, GlobalLU_t *Glu)
 	SUPERLU_FREE (iwork);
 	SUPERLU_FREE (dwork);
     } else {
-	stack.used -= (stack.size - stack.top2);
-	stack.top2 = stack.size;
+	Glu->stack.used -= (Glu->stack.size - Glu->stack.top2);
+	Glu->stack.top2 = Glu->stack.size;
 /*	cStackCompress(Glu);  */
     }
     
-    SUPERLU_FREE (expanders);	
-    expanders = 0;
+    SUPERLU_FREE (Glu->expanders);	
+    Glu->expanders = NULL;
 }
 
-/* Expand the data structures for L and U during the factorization.
+/*! \brief Expand the data structures for L and U during the factorization.
+ * 
+ * <pre>
  * Return value:   0 - successful return
  *               > 0 - number of bytes allocated when run out of space
+ * </pre>
  */
 int
 cLUMemXpand(int jcol,
@@ -452,8 +475,7 @@ copy_mem_complex(int howmany, void *old, void *new)
     for (i = 0; i < howmany; i++) dnew[i] = dold[i];
 }
 
-/*
- * Expand the existing storage to accommodate more fill-ins.
+/*! \brief Expand the existing storage to accommodate more fill-ins.
  */
 void
 *cexpand (
@@ -469,12 +491,14 @@ void
     float    alpha;
     void     *new_mem, *old_mem;
     int      new_len, tries, lword, extra, bytes_to_copy;
+    ExpHeader *expanders = Glu->expanders; /* Array of 4 types of memory */
 
     alpha = EXPAND;
 
-    if ( no_expand == 0 || keep_prev ) /* First time allocate requested */
+    if ( Glu->num_expansions == 0 || keep_prev ) {
+        /* First time allocate requested */
         new_len = *prev_len;
-    else {
+    } else {
 	new_len = alpha * *prev_len;
     }
     
@@ -483,7 +507,7 @@ void
 
     if ( Glu->MemModel == SYSTEM ) {
 	new_mem = (void *) SUPERLU_MALLOC((size_t)new_len * lword);
-	if ( no_expand != 0 ) {
+	if ( Glu->num_expansions != 0 ) {
 	    tries = 0;
 	    if ( keep_prev ) {
 		if ( !new_mem ) return (NULL);
@@ -505,8 +529,8 @@ void
 	expanders[type].mem = (void *) new_mem;
 	
     } else { /* MemModel == USER */
-	if ( no_expand == 0 ) {
-	    new_mem = cuser_malloc(new_len * lword, HEAD);
+	if ( Glu->num_expansions == 0 ) {
+	    new_mem = cuser_malloc(new_len * lword, HEAD, Glu);
 	    if ( NotDoubleAlign(new_mem) &&
 		(type == LUSUP || type == UCOL) ) {
 		old_mem = new_mem;
@@ -515,12 +539,11 @@ void
 #ifdef DEBUG		
 		printf("expand(): not aligned, extra %d\n", extra);
 #endif		
-		stack.top1 += extra;
-		stack.used += extra;
+		Glu->stack.top1 += extra;
+		Glu->stack.used += extra;
 	    }
 	    expanders[type].mem = (void *) new_mem;
-	}
-	else {
+	} else {
 	    tries = 0;
 	    extra = (new_len - *prev_len) * lword;
 	    if ( keep_prev ) {
@@ -536,7 +559,7 @@ void
 
 	    if ( type != USUB ) {
 		new_mem = (void*)((char*)expanders[type + 1].mem + extra);
-		bytes_to_copy = (char*)stack.array + stack.top1
+		bytes_to_copy = (char*)Glu->stack.array + Glu->stack.top1
 		    - (char*)expanders[type + 1].mem;
 		user_bcopy(expanders[type+1].mem, new_mem, bytes_to_copy);
 
@@ -552,11 +575,11 @@ void
 		    Glu->ucol = expanders[UCOL].mem =
 			(void*)((char*)expanders[UCOL].mem + extra);
 		}
-		stack.top1 += extra;
-		stack.used += extra;
+		Glu->stack.top1 += extra;
+		Glu->stack.used += extra;
 		if ( type == UCOL ) {
-		    stack.top1 += extra;   /* Add same amount for USUB */
-		    stack.used += extra;
+		    Glu->stack.top1 += extra;   /* Add same amount for USUB */
+		    Glu->stack.used += extra;
 		}
 		
 	    } /* if ... */
@@ -566,15 +589,14 @@ void
 
     expanders[type].size = new_len;
     *prev_len = new_len;
-    if ( no_expand ) ++no_expand;
+    if ( Glu->num_expansions ) ++Glu->num_expansions;
     
     return (void *) expanders[type].mem;
     
 } /* cexpand */
 
 
-/*
- * Compress the work[] array to remove fragmentation.
+/*! \brief Compress the work[] array to remove fragmentation.
  */
 void
 cStackCompress(GlobalLU_t *Glu)
@@ -614,9 +636,9 @@ cStackCompress(GlobalLU_t *Glu)
     usub = ito;
     
     last = (char*)usub + xusub[ndim] * iword;
-    fragment = (char*) (((char*)stack.array + stack.top1) - last);
-    stack.used -= (long int) fragment;
-    stack.top1 -= (long int) fragment;
+    fragment = (char*) (((char*)Glu->stack.array + Glu->stack.top1) - last);
+    Glu->stack.used -= (long int) fragment;
+    Glu->stack.top1 -= (long int) fragment;
 
     Glu->ucol = ucol;
     Glu->lsub = lsub;
@@ -630,8 +652,7 @@ cStackCompress(GlobalLU_t *Glu)
     
 }
 
-/*
- * Allocate storage for original matrix A
+/*! \brief Allocate storage for original matrix A
  */
 void
 callocateA(int n, int nnz, complex **a, int **asub, int **xa)
diff --git a/SRC/cmyblas2.c b/SRC/cmyblas2.c
index 5998f87..d7cf6fa 100644
--- a/SRC/cmyblas2.c
+++ b/SRC/cmyblas2.c
@@ -1,22 +1,27 @@
 
-/*
+/*! @file cmyblas2.c
+ * \brief Level 2 Blas operations
+ * 
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
- */
-/*
- * File name:		cmyblas2.c
+ * </pre>
  * Purpose:
  *     Level 2 BLAS operations: solves and matvec, written in C.
  * Note:
  *     This is only used when the system lacks an efficient BLAS library.
+ * </pre>
+ */
+/*
+ * File name:		cmyblas2.c
  */
 #include "slu_scomplex.h"
 
-/*
- * Solves a dense UNIT lower triangular system. The unit lower 
+/*! \brief Solves a dense UNIT lower triangular system
+ * 
+ * The unit lower 
  * triangular matrix is stored in a 2D array M(1:nrow,1:ncol). 
  * The solution will be returned in the rhs vector.
  */
@@ -91,8 +96,9 @@ void clsolve ( int ldm, int ncol, complex *M, complex *rhs )
     
 }
 
-/*
- * Solves a dense upper triangular system. The upper triangular matrix is
+/*! \brief Solves a dense upper triangular system. 
+ *
+ * The upper triangular matrix is
  * stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned
  * in the rhs vector.
  */
@@ -124,8 +130,8 @@ complex *rhs;	/* modified */
 }
 
 
-/*
- * Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.
+/*! \brief Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.
+ *
  * The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[].
  */
 void cmatvec ( ldm, nrow, ncol, M, vec, Mxvec )
diff --git a/SRC/colamd.c b/SRC/colamd.c
index dc531f0..72c4390 100644
--- a/SRC/colamd.c
+++ b/SRC/colamd.c
@@ -1,8 +1,12 @@
-/* ========================================================================== */
-/* === colamd/symamd - a sparse matrix column ordering algorithm ============ */
-/* ========================================================================== */
+/*! @file colamd.c
+ *\brief A sparse matrix column ordering algorithm
+ 
+ <pre>
+    ========================================================================== 
+    === colamd/symamd - a sparse matrix column ordering algorithm ============ 
+    ========================================================================== 
+
 
-/*
     colamd:  an approximate minimum degree column ordering algorithm,
     	for LU factorization of symmetric or unsymmetric matrices,
 	QR factorization, least squares, interior point methods for
@@ -73,13 +77,11 @@
 
     See the ChangeLog file for changes since Version 1.0.
 
-*/
+    ========================================================================== 
+    === Description of user-callable routines ================================ 
+    ========================================================================== 
 
-/* ========================================================================== */
-/* === Description of user-callable routines ================================ */
-/* ========================================================================== */
 
-/*
     ----------------------------------------------------------------------------
     colamd_recommended:
     ----------------------------------------------------------------------------
@@ -574,7 +576,7 @@
 
 	    int stats [COLAMD_STATS] ;	Input only.  Statistics from symamd.
 
-
+ </pre>
 */
 
 /* ========================================================================== */
diff --git a/SRC/colamd.h b/SRC/colamd.h
index 6e30662..aacbd3f 100644
--- a/SRC/colamd.h
+++ b/SRC/colamd.h
@@ -1,8 +1,11 @@
-/* ========================================================================== */
-/* === colamd/symamd prototypes and definitions ============================= */
-/* ========================================================================== */
+/*! @file colamd.h
+    \brief Colamd prototypes and definitions
+
+	<pre> 
+    ==========================================================================
+    === colamd/symamd prototypes and definitions =============================
+    ==========================================================================
 
-/*
     You must include this file (colamd.h) in any routine that uses colamd,
     symamd, or the related macros and definitions.
 
@@ -46,7 +49,7 @@
 	file.  It is required by the colamd.c, colamdmex.c, and symamdmex.c
 	files, and by any C code that calls the routines whose prototypes are
 	listed below, or that uses the colamd/symamd definitions listed below.
-
+ </pre>
 */
 
 #ifndef COLAMD_H
diff --git a/SRC/cpanel_bmod.c b/SRC/cpanel_bmod.c
index c1246a1..93dc4ba 100644
--- a/SRC/cpanel_bmod.c
+++ b/SRC/cpanel_bmod.c
@@ -1,22 +1,27 @@
 
-/*
+/*! @file cpanel_bmod.c
+ * \brief Performs numeric block updates
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
 /*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+
 */
 
 #include <stdio.h>
@@ -30,6 +35,25 @@ void clsolve(int, int, complex *, complex *);
 void cmatvec(int, int, int, complex *, complex *, complex *);
 extern void ccheck_tempv();
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ *    Performs numeric block updates (sup-panel) in topological order.
+ *    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ *    Special processing on the supernodal portion of L\U[*,j]
+ *
+ *    Before entering this routine, the original nonzeros in the panel 
+ *    were already copied into the spa[m,w].
+ *
+ *    Updated/Output parameters-
+ *    dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
+ *    collectively in the m-by-w vector dense[*]. 
+ * </pre>
+ */
+
 void
 cpanel_bmod (
 	    const int  m,          /* in - number of rows in the matrix */
@@ -44,22 +68,7 @@ cpanel_bmod (
 	    SuperLUStat_t *stat    /* output */
 	    )
 {
-/* 
- * Purpose
- * =======
- *
- *    Performs numeric block updates (sup-panel) in topological order.
- *    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
- *    Special processing on the supernodal portion of L\U[*,j]
- *
- *    Before entering this routine, the original nonzeros in the panel 
- *    were already copied into the spa[m,w].
- *
- *    Updated/Output parameters-
- *	dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
- *      collectively in the m-by-w vector dense[*]. 
- *
- */
+
 
 #ifdef USE_VENDOR_BLAS
 #ifdef _CRAY
@@ -106,7 +115,7 @@ cpanel_bmod (
     xlusup  = Glu->xlusup;
     
     if ( first ) {
-	maxsuper = sp_ienv(3);
+	maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) );
 	rowblk   = sp_ienv(4);
 	colblk   = sp_ienv(5);
 	first = 0;
diff --git a/SRC/cpanel_dfs.c b/SRC/cpanel_dfs.c
index f20a8d2..57a603e 100644
--- a/SRC/cpanel_dfs.c
+++ b/SRC/cpanel_dfs.c
@@ -1,46 +1,32 @@
 
-/*
+/*! @file cpanel_dfs.c
+ * \brief Peforms a symbolic factorization on a panel of symbols
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_cdefs.h"
 
-void
-cpanel_dfs (
-	   const int  m,           /* in - number of rows in the matrix */
-	   const int  w,           /* in */
-	   const int  jcol,        /* in */
-	   SuperMatrix *A,       /* in - original matrix */
-	   int        *perm_r,     /* in */
-	   int        *nseg,	   /* out */
-	   complex     *dense,      /* out */
-	   int        *panel_lsub, /* out */
-	   int        *segrep,     /* out */
-	   int        *repfnz,     /* out */
-	   int        *xprune,     /* out */
-	   int        *marker,     /* out */     
-	   int        *parent,     /* working array */
-	   int        *xplore,     /* working array */
-	   GlobalLU_t *Glu         /* modified */
-	   )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -66,8 +52,29 @@ cpanel_dfs (
  *   repfnz: SuperA-col --> PA-row
  *   parent: SuperA-col --> SuperA-col
  *   xplore: SuperA-col --> index to L-structure
- *
+ * </pre>
  */
+
+void
+cpanel_dfs (
+	   const int  m,           /* in - number of rows in the matrix */
+	   const int  w,           /* in */
+	   const int  jcol,        /* in */
+	   SuperMatrix *A,       /* in - original matrix */
+	   int        *perm_r,     /* in */
+	   int        *nseg,	   /* out */
+	   complex     *dense,      /* out */
+	   int        *panel_lsub, /* out */
+	   int        *segrep,     /* out */
+	   int        *repfnz,     /* out */
+	   int        *xprune,     /* out */
+	   int        *marker,     /* out */     
+	   int        *parent,     /* working array */
+	   int        *xplore,     /* working array */
+	   GlobalLU_t *Glu         /* modified */
+	   )
+{
+
     NCPformat *Astore;
     complex    *a;
     int       *asub;
diff --git a/SRC/cpivotL.c b/SRC/cpivotL.c
index db24a0d..a14ea72 100644
--- a/SRC/cpivotL.c
+++ b/SRC/cpivotL.c
@@ -1,23 +1,26 @@
 
-/*
+/*! @file cpivotL.c
+ * \brief Performs numerical pivoting
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include <math.h>
 #include <stdlib.h>
@@ -25,20 +28,9 @@
 
 #undef DEBUG
 
-int
-cpivotL(
-        const int  jcol,     /* in */
-        const float u,      /* in - diagonal pivoting threshold */
-        int        *usepr,   /* re-use the pivot sequence given by perm_r/iperm_r */
-        int        *perm_r,  /* may be modified */
-        int        *iperm_r, /* in - inverse of perm_r */
-        int        *iperm_c, /* in - used to find diagonal of Pc*A*Pc' */
-        int        *pivrow,  /* out */
-        GlobalLU_t *Glu,     /* modified - global LU data structures */
-	SuperLUStat_t *stat  /* output */
-       )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *   Performs the numerical pivoting on the current column of L,
@@ -57,8 +49,23 @@ cpivotL(
  *
  *   Return value: 0      success;
  *                 i > 0  U(i,i) is exactly zero.
- *
+ * </pre>
  */
+
+int
+cpivotL(
+        const int  jcol,     /* in */
+        const double u,      /* in - diagonal pivoting threshold */
+        int        *usepr,   /* re-use the pivot sequence given by perm_r/iperm_r */
+        int        *perm_r,  /* may be modified */
+        int        *iperm_r, /* in - inverse of perm_r */
+        int        *iperm_c, /* in - used to find diagonal of Pc*A*Pc' */
+        int        *pivrow,  /* out */
+        GlobalLU_t *Glu,     /* modified - global LU data structures */
+	SuperLUStat_t *stat  /* output */
+       )
+{
+
     complex one = {1.0, 0.0};
     int          fsupc;	    /* first column in the supernode */
     int          nsupc;	    /* no of columns in the supernode */
@@ -117,8 +124,12 @@ if ( jcol == MIN_COL ) {
 
     /* Test for singularity */
     if ( pivmax == 0.0 ) {
+#if 1
 	*pivrow = lsub_ptr[pivptr];
 	perm_r[*pivrow] = jcol;
+#else
+	perm_r[diagind] = jcol;
+#endif
 	*usepr = 0;
 	return (jcol+1);
     }
diff --git a/SRC/cpivotgrowth.c b/SRC/cpivotgrowth.c
index 63bd7bf..db51443 100644
--- a/SRC/cpivotgrowth.c
+++ b/SRC/cpivotgrowth.c
@@ -1,19 +1,20 @@
 
-/*
+/*! @file cpivotgrowth.c
+ * \brief Computes the reciprocal pivot growth factor
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 #include <math.h>
 #include "slu_cdefs.h"
 
-float
-cPivotGrowth(int ncols, SuperMatrix *A, int *perm_c, 
-             SuperMatrix *L, SuperMatrix *U)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -41,8 +42,14 @@ cPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
  *	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
  *          storage scheme, i.e., U has types: Stype = NC;
  *          Dtype = SLU_C; Mtype = TRU.
- *
+ * </pre>
  */
+
+float
+cPivotGrowth(int ncols, SuperMatrix *A, int *perm_c, 
+             SuperMatrix *L, SuperMatrix *U)
+{
+
     NCformat *Astore;
     SCformat *Lstore;
     NCformat *Ustore;
@@ -51,7 +58,6 @@ cPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
     int      i, j, k, oldcol;
     int      *inv_perm_c;
     float   rpg, maxaj, maxuj;
-    extern   double slamch_(char *);
     float   smlnum;
     complex   *luval;
     complex   temp_comp;
diff --git a/SRC/cpruneL.c b/SRC/cpruneL.c
index 29f20d4..22a9ff5 100644
--- a/SRC/cpruneL.c
+++ b/SRC/cpruneL.c
@@ -1,26 +1,39 @@
 
-/*
+/*! @file cpruneL.c
+ * \brief Prunes the L-structure
+ *
+ *<pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ *</pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_cdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *   Prunes the L-structure of supernodes whose L-structure
+ *   contains the current pivot row "pivrow"
+ * </pre>
+ */
+
 void
 cpruneL(
        const int  jcol,	     /* in */
@@ -33,13 +46,7 @@ cpruneL(
        GlobalLU_t *Glu       /* modified - global LU data structures */
        )
 {
-/*
- * Purpose
- * =======
- *   Prunes the L-structure of supernodes whose L-structure
- *   contains the current pivot row "pivrow"
- *
- */
+
     complex     utemp;
     int        jsupno, irep, irep1, kmin, kmax, krow, movnum;
     int        i, ktemp, minloc, maxloc;
@@ -106,8 +113,8 @@ cpruneL(
 			kmax--;
 		    else if ( perm_r[lsub[kmin]] != EMPTY )
 			kmin++;
-		    else { /* kmin below pivrow, and kmax above pivrow: 
-		            * 	interchange the two subscripts
+		    else { /* kmin below pivrow (not yet pivoted), and kmax
+                            * above pivrow: interchange the two subscripts
 			    */
 		        ktemp = lsub[kmin];
 		        lsub[kmin] = lsub[kmax];
diff --git a/SRC/creadhb.c b/SRC/creadhb.c
index e437d27..a01bdc5 100644
--- a/SRC/creadhb.c
+++ b/SRC/creadhb.c
@@ -1,17 +1,85 @@
 
-/*
+/*! @file creadhb.c
+ * \brief Read a matrix stored in Harwell-Boeing format
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Purpose
+ * =======
+ * 
+ * Read a COMPLEX PRECISION matrix stored in Harwell-Boeing format 
+ * as described below.
+ * 
+ * Line 1 (A72,A8) 
+ *  	Col. 1 - 72   Title (TITLE) 
+ *	Col. 73 - 80  Key (KEY) 
+ * 
+ * Line 2 (5I14) 
+ * 	Col. 1 - 14   Total number of lines excluding header (TOTCRD) 
+ * 	Col. 15 - 28  Number of lines for pointers (PTRCRD) 
+ * 	Col. 29 - 42  Number of lines for row (or variable) indices (INDCRD) 
+ * 	Col. 43 - 56  Number of lines for numerical values (VALCRD) 
+ *	Col. 57 - 70  Number of lines for right-hand sides (RHSCRD) 
+ *                    (including starting guesses and solution vectors 
+ *		       if present) 
+ *           	      (zero indicates no right-hand side data is present) 
+ *
+ * Line 3 (A3, 11X, 4I14) 
+ *   	Col. 1 - 3    Matrix type (see below) (MXTYPE) 
+ * 	Col. 15 - 28  Number of rows (or variables) (NROW) 
+ * 	Col. 29 - 42  Number of columns (or elements) (NCOL) 
+ *	Col. 43 - 56  Number of row (or variable) indices (NNZERO) 
+ *	              (equal to number of entries for assembled matrices) 
+ * 	Col. 57 - 70  Number of elemental matrix entries (NELTVL) 
+ *	              (zero in the case of assembled matrices) 
+ * Line 4 (2A16, 2A20) 
+ * 	Col. 1 - 16   Format for pointers (PTRFMT) 
+ *	Col. 17 - 32  Format for row (or variable) indices (INDFMT) 
+ *	Col. 33 - 52  Format for numerical values of coefficient matrix (VALFMT) 
+ * 	Col. 53 - 72 Format for numerical values of right-hand sides (RHSFMT) 
+ *
+ * Line 5 (A3, 11X, 2I14) Only present if there are right-hand sides present 
+ *    	Col. 1 	      Right-hand side type: 
+ *	         	  F for full storage or M for same format as matrix 
+ *    	Col. 2        G if a starting vector(s) (Guess) is supplied. (RHSTYP) 
+ *    	Col. 3        X if an exact solution vector(s) is supplied. 
+ *	Col. 15 - 28  Number of right-hand sides (NRHS) 
+ *	Col. 29 - 42  Number of row indices (NRHSIX) 
+ *          	      (ignored in case of unassembled matrices) 
+ *
+ * The three character type field on line 3 describes the matrix type. 
+ * The following table lists the permitted values for each of the three 
+ * characters. As an example of the type field, RSA denotes that the matrix 
+ * is real, symmetric, and assembled. 
+ *
+ * First Character: 
+ *	R Real matrix 
+ *	C Complex matrix 
+ *	P Pattern only (no numerical values supplied) 
+ *
+ * Second Character: 
+ *	S Symmetric 
+ *	U Unsymmetric 
+ *	H Hermitian 
+ *	Z Skew symmetric 
+ *	R Rectangular 
+ *
+ * Third Character: 
+ *	A Assembled 
+ *	E Elemental matrices (unassembled) 
+ *
+ * </pre>
  */
 #include <stdio.h>
 #include <stdlib.h>
 #include "slu_cdefs.h"
 
 
-/* Eat up the rest of the current line */
+/*! \brief Eat up the rest of the current line */
 int cDumpLine(FILE *fp)
 {
     register int c;
@@ -59,7 +127,7 @@ int cParseFloatFormat(char *buf, int *num, int *size)
     return 0;
 }
 
-int cReadVector(FILE *fp, int n, int *where, int perline, int persize)
+static int ReadVector(FILE *fp, int n, int *where, int perline, int persize)
 {
     register int i, j, item;
     char tmp, buf[100];
@@ -79,7 +147,7 @@ int cReadVector(FILE *fp, int n, int *where, int perline, int persize)
     return 0;
 }
 
-/* Read complex numbers as pairs of (real, imaginary) */
+/*! \brief Read complex numbers as pairs of (real, imaginary) */
 int cReadValues(FILE *fp, int n, complex *destination, int perline, int persize)
 {
     register int i, j, k, s, pair;
@@ -117,72 +185,6 @@ void
 creadhb(int *nrow, int *ncol, int *nonz,
 	complex **nzval, int **rowind, int **colptr)
 {
-/* 
- * Purpose
- * =======
- * 
- * Read a COMPLEX PRECISION matrix stored in Harwell-Boeing format 
- * as described below.
- * 
- * Line 1 (A72,A8) 
- *  	Col. 1 - 72   Title (TITLE) 
- *	Col. 73 - 80  Key (KEY) 
- * 
- * Line 2 (5I14) 
- * 	Col. 1 - 14   Total number of lines excluding header (TOTCRD) 
- * 	Col. 15 - 28  Number of lines for pointers (PTRCRD) 
- * 	Col. 29 - 42  Number of lines for row (or variable) indices (INDCRD) 
- * 	Col. 43 - 56  Number of lines for numerical values (VALCRD) 
- *	Col. 57 - 70  Number of lines for right-hand sides (RHSCRD) 
- *                    (including starting guesses and solution vectors 
- *		       if present) 
- *           	      (zero indicates no right-hand side data is present) 
- *
- * Line 3 (A3, 11X, 4I14) 
- *   	Col. 1 - 3    Matrix type (see below) (MXTYPE) 
- * 	Col. 15 - 28  Number of rows (or variables) (NROW) 
- * 	Col. 29 - 42  Number of columns (or elements) (NCOL) 
- *	Col. 43 - 56  Number of row (or variable) indices (NNZERO) 
- *	              (equal to number of entries for assembled matrices) 
- * 	Col. 57 - 70  Number of elemental matrix entries (NELTVL) 
- *	              (zero in the case of assembled matrices) 
- * Line 4 (2A16, 2A20) 
- * 	Col. 1 - 16   Format for pointers (PTRFMT) 
- *	Col. 17 - 32  Format for row (or variable) indices (INDFMT) 
- *	Col. 33 - 52  Format for numerical values of coefficient matrix (VALFMT) 
- * 	Col. 53 - 72 Format for numerical values of right-hand sides (RHSFMT) 
- *
- * Line 5 (A3, 11X, 2I14) Only present if there are right-hand sides present 
- *    	Col. 1 	      Right-hand side type: 
- *	         	  F for full storage or M for same format as matrix 
- *    	Col. 2        G if a starting vector(s) (Guess) is supplied. (RHSTYP) 
- *    	Col. 3        X if an exact solution vector(s) is supplied. 
- *	Col. 15 - 28  Number of right-hand sides (NRHS) 
- *	Col. 29 - 42  Number of row indices (NRHSIX) 
- *          	      (ignored in case of unassembled matrices) 
- *
- * The three character type field on line 3 describes the matrix type. 
- * The following table lists the permitted values for each of the three 
- * characters. As an example of the type field, RSA denotes that the matrix 
- * is real, symmetric, and assembled. 
- *
- * First Character: 
- *	R Real matrix 
- *	C Complex matrix 
- *	P Pattern only (no numerical values supplied) 
- *
- * Second Character: 
- *	S Symmetric 
- *	U Unsymmetric 
- *	H Hermitian 
- *	Z Skew symmetric 
- *	R Rectangular 
- *
- * Third Character: 
- *	A Assembled 
- *	E Elemental matrices (unassembled) 
- *
- */
 
     register int i, numer_lines = 0, rhscrd = 0;
     int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
@@ -253,8 +255,8 @@ creadhb(int *nrow, int *ncol, int *nonz,
     printf("valnum %d, valsize %d\n", valnum, valsize);
 #endif
     
-    cReadVector(fp, *ncol+1, *colptr, colnum, colsize);
-    cReadVector(fp, *nonz, *rowind, rownum, rowsize);
+    ReadVector(fp, *ncol+1, *colptr, colnum, colsize);
+    ReadVector(fp, *nonz, *rowind, rownum, rowsize);
     if ( numer_lines ) {
         cReadValues(fp, *nonz, *nzval, valnum, valsize);
     }
diff --git a/SRC/creadrb.c b/SRC/creadrb.c
new file mode 100644
index 0000000..bd699af
--- /dev/null
+++ b/SRC/creadrb.c
@@ -0,0 +1,246 @@
+
+/*! @file creadrb.c
+ * \brief Read a matrix stored in Rutherford-Boeing format
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ *
+ * Purpose
+ * =======
+ *
+ * Read a COMPLEX PRECISION matrix stored in Rutherford-Boeing format 
+ * as described below.
+ *
+ * Line 1 (A72, A8)
+ *      Col. 1 - 72   Title (TITLE)
+ *      Col. 73 - 80  Matrix name / identifier (MTRXID)
+ *
+ * Line 2 (I14, 3(1X, I13))
+ *      Col. 1 - 14   Total number of lines excluding header (TOTCRD)
+ *      Col. 16 - 28  Number of lines for pointers (PTRCRD)
+ *      Col. 30 - 42  Number of lines for row (or variable) indices (INDCRD)
+ *      Col. 44 - 56  Number of lines for numerical values (VALCRD)
+ *
+ * Line 3 (A3, 11X, 4(1X, I13))
+ *      Col. 1 - 3    Matrix type (see below) (MXTYPE)
+ *      Col. 15 - 28  Compressed Column: Number of rows (NROW)
+ *                    Elemental: Largest integer used to index variable (MVAR)
+ *      Col. 30 - 42  Compressed Column: Number of columns (NCOL)
+ *                    Elemental: Number of element matrices (NELT)
+ *      Col. 44 - 56  Compressed Column: Number of entries (NNZERO)
+ *                    Elemental: Number of variable indeces (NVARIX)
+ *      Col. 58 - 70  Compressed Column: Unused, explicitly zero
+ *                    Elemental: Number of elemental matrix entries (NELTVL)
+ *
+ * Line 4 (2A16, A20)
+ *      Col. 1 - 16   Fortran format for pointers (PTRFMT)
+ *      Col. 17 - 32  Fortran format for row (or variable) indices (INDFMT)
+ *      Col. 33 - 52  Fortran format for numerical values of coefficient matrix
+ *                    (VALFMT)
+ *                    (blank in the case of matrix patterns)
+ *
+ * The three character type field on line 3 describes the matrix type.
+ * The following table lists the permitted values for each of the three
+ * characters. As an example of the type field, RSA denotes that the matrix
+ * is real, symmetric, and assembled.
+ *
+ * First Character:
+ *      R Real matrix
+ *      C Complex matrix
+ *      I integer matrix
+ *      P Pattern only (no numerical values supplied)
+ *      Q Pattern only (numerical values supplied in associated auxiliary value
+ *        file)
+ *
+ * Second Character:
+ *      S Symmetric
+ *      U Unsymmetric
+ *      H Hermitian
+ *      Z Skew symmetric
+ *      R Rectangular
+ *
+ * Third Character:
+ *      A Compressed column form
+ *      E Elemental form
+ *
+ * </pre>
+ */
+
+#include "slu_cdefs.h"
+
+
+/*! \brief Eat up the rest of the current line */
+static int cDumpLine(FILE *fp)
+{
+    register int c;
+    while ((c = fgetc(fp)) != '\n') ;
+    return 0;
+}
+
+static int cParseIntFormat(char *buf, int *num, int *size)
+{
+    char *tmp;
+
+    tmp = buf;
+    while (*tmp++ != '(') ;
+    sscanf(tmp, "%d", num);
+    while (*tmp != 'I' && *tmp != 'i') ++tmp;
+    ++tmp;
+    sscanf(tmp, "%d", size);
+    return 0;
+}
+
+static int cParseFloatFormat(char *buf, int *num, int *size)
+{
+    char *tmp, *period;
+
+    tmp = buf;
+    while (*tmp++ != '(') ;
+    *num = atoi(tmp); /*sscanf(tmp, "%d", num);*/
+    while (*tmp != 'E' && *tmp != 'e' && *tmp != 'D' && *tmp != 'd'
+           && *tmp != 'F' && *tmp != 'f') {
+        /* May find kP before nE/nD/nF, like (1P6F13.6). In this case the
+           num picked up refers to P, which should be skipped. */
+        if (*tmp=='p' || *tmp=='P') {
+           ++tmp;
+           *num = atoi(tmp); /*sscanf(tmp, "%d", num);*/
+        } else {
+           ++tmp;
+        }
+    }
+    ++tmp;
+    period = tmp;
+    while (*period != '.' && *period != ')') ++period ;
+    *period = '\0';
+    *size = atoi(tmp); /*sscanf(tmp, "%2d", size);*/
+
+    return 0;
+}
+
+static int ReadVector(FILE *fp, int n, int *where, int perline, int persize)
+{
+    register int i, j, item;
+    char tmp, buf[100];
+
+    i = 0;
+    while (i < n) {
+        fgets(buf, 100, fp);    /* read a line at a time */
+        for (j=0; j<perline && i<n; j++) {
+            tmp = buf[(j+1)*persize];     /* save the char at that place */
+            buf[(j+1)*persize] = 0;       /* null terminate */
+            item = atoi(&buf[j*persize]); 
+            buf[(j+1)*persize] = tmp;     /* recover the char at that place */
+            where[i++] = item - 1;
+        }
+    }
+
+    return 0;
+}
+
+/*! \brief Read complex numbers as pairs of (real, imaginary) */
+static int cReadValues(FILE *fp, int n, complex *destination, int perline, int persize)
+{
+    register int i, j, k, s, pair;
+    register float realpart;
+    char tmp, buf[100];
+    
+    i = pair = 0;
+    while (i < n) {
+	fgets(buf, 100, fp);    /* read a line at a time */
+	for (j=0; j<perline && i<n; j++) {
+	    tmp = buf[(j+1)*persize];     /* save the char at that place */
+	    buf[(j+1)*persize] = 0;       /* null terminate */
+	    s = j*persize;
+	    for (k = 0; k < persize; ++k) /* No D_ format in C */
+		if ( buf[s+k] == 'D' || buf[s+k] == 'd' ) buf[s+k] = 'E';
+	    if ( pair == 0 ) {
+	  	/* The value is real part */
+		realpart = atof(&buf[s]);
+		pair = 1;
+	    } else {
+		/* The value is imaginary part */
+	        destination[i].r = realpart;
+		destination[i++].i = atof(&buf[s]);
+		pair = 0;
+	    }
+	    buf[(j+1)*persize] = tmp;     /* recover the char at that place */
+	}
+    }
+
+    return 0;
+}
+
+
+void
+creadrb(int *nrow, int *ncol, int *nonz,
+        complex **nzval, int **rowind, int **colptr)
+{
+
+    register int i, numer_lines = 0;
+    int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
+    char buf[100], type[4];
+    FILE *fp;
+
+    fp = stdin;
+
+    /* Line 1 */
+    fgets(buf, 100, fp);
+    fputs(buf, stdout);
+
+    /* Line 2 */
+    for (i=0; i<4; i++) {
+        fscanf(fp, "%14c", buf); buf[14] = 0;
+        sscanf(buf, "%d", &tmp);
+        if (i == 3) numer_lines = tmp;
+    }
+    cDumpLine(fp);
+
+    /* Line 3 */
+    fscanf(fp, "%3c", type);
+    fscanf(fp, "%11c", buf); /* pad */
+    type[3] = 0;
+#ifdef DEBUG
+    printf("Matrix type %s\n", type);
+#endif
+
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", nrow);
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", ncol);
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", nonz);
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", &tmp);
+
+    if (tmp != 0)
+        printf("This is not an assembled matrix!\n");
+    if (*nrow != *ncol)
+        printf("Matrix is not square.\n");
+    cDumpLine(fp);
+
+    /* Allocate storage for the three arrays ( nzval, rowind, colptr ) */
+    callocateA(*ncol, *nonz, nzval, rowind, colptr);
+
+    /* Line 4: format statement */
+    fscanf(fp, "%16c", buf);
+    cParseIntFormat(buf, &colnum, &colsize);
+    fscanf(fp, "%16c", buf);
+    cParseIntFormat(buf, &rownum, &rowsize);
+    fscanf(fp, "%20c", buf);
+    cParseFloatFormat(buf, &valnum, &valsize);
+    cDumpLine(fp);
+
+#ifdef DEBUG
+    printf("%d rows, %d nonzeros\n", *nrow, *nonz);
+    printf("colnum %d, colsize %d\n", colnum, colsize);
+    printf("rownum %d, rowsize %d\n", rownum, rowsize);
+    printf("valnum %d, valsize %d\n", valnum, valsize);
+#endif
+
+    ReadVector(fp, *ncol+1, *colptr, colnum, colsize);
+    ReadVector(fp, *nonz, *rowind, rownum, rowsize);
+    if ( numer_lines ) {
+        cReadValues(fp, *nonz, *nzval, valnum, valsize);
+    }
+
+    fclose(fp);
+}
diff --git a/EXAMPLE/dreadtriple.c b/SRC/creadtriple.c
similarity index 56%
copy from EXAMPLE/dreadtriple.c
copy to SRC/creadtriple.c
index b8768fa..ab6c897 100644
--- a/EXAMPLE/dreadtriple.c
+++ b/SRC/creadtriple.c
@@ -1,11 +1,20 @@
-#include <stdio.h>
-#include "dsp_defs.h"
-#include "util.h"
+
+/*! @file creadtriple.c
+ * \brief Read a matrix stored in triplet (coordinate) format
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_cdefs.h"
 
 
 void
-dreadtriple(int *m, int *n, int *nonz,
-	    double **nzval, int **rowind, int **colptr)
+creadtriple(int *m, int *n, int *nonz,
+	    complex **nzval, int **rowind, int **colptr)
 {
 /*
  * Output parameters
@@ -15,11 +24,12 @@ dreadtriple(int *m, int *n, int *nonz,
  *	row i of A is given by a[k],k=xa[i],...,xa[i+1]-1.
  *
  */
-    int    i, j, k, jsize, lasta, nnz, nz;
-    double *a, *val;
+    int    j, k, jsize, nnz, nz;
+    complex *a, *val;
     int    *asub, *xa, *row, *col;
-    
-    /* 	Matrix format:
+    int    zero_base = 0;
+
+    /*  Matrix format:
      *    First line:  #rows, #cols, #non-zero
      *    Triplet in the rest of lines:
      *                 row, col, value
@@ -28,12 +38,12 @@ dreadtriple(int *m, int *n, int *nonz,
     scanf("%d%d", n, nonz);
     *m = *n;
     printf("m %d, n %d, nonz %d\n", *m, *n, *nonz);
-    dallocateA(*n, *nonz, nzval, rowind, colptr); /* Allocate storage */
+    callocateA(*n, *nonz, nzval, rowind, colptr); /* Allocate storage */
     a    = *nzval;
     asub = *rowind;
     xa   = *colptr;
 
-    val = (double *) SUPERLU_MALLOC(*nonz * sizeof(double));
+    val = (complex *) SUPERLU_MALLOC(*nonz * sizeof(complex));
     row = (int *) SUPERLU_MALLOC(*nonz * sizeof(int));
     col = (int *) SUPERLU_MALLOC(*nonz * sizeof(int));
 
@@ -41,16 +51,26 @@ dreadtriple(int *m, int *n, int *nonz,
 
     /* Read into the triplet array from a file */
     for (nnz = 0, nz = 0; nnz < *nonz; ++nnz) {
-	scanf("%d%d%lf\n", &row[nz], &col[nz], &val[nz]);
-	/* Change to 0-based indexing. */
-#if 0
-	--row[nz];
-	--col[nz];
-#endif
+	scanf("%d%d%f%f\n", &row[nz], &col[nz], &val[nz].r, &val[nz].i);
+
+        if ( nnz == 0 ) { /* first nonzero */
+	    if ( row[0] == 0 || col[0] == 0 ) {
+		zero_base = 1;
+		printf("triplet file: row/col indices are zero-based.\n");
+	    } else
+		printf("triplet file: row/col indices are one-based.\n");
+        }
+
+        if ( !zero_base ) { 
+ 	  /* Change to 0-based indexing. */
+	  --row[nz];
+	  --col[nz];
+        }
+
 	if (row[nz] < 0 || row[nz] >= *m || col[nz] < 0 || col[nz] >= *n
 	    /*|| val[nz] == 0.*/) {
-	    fprintf(stderr, "nz %d, (%d, %d) = %e out of bound, removed\n", 
-		    nz, row[nz], col[nz], val[nz]);
+	    fprintf(stderr, "nz %d, (%d, %d) = (%e,%e) out of bound, removed\n",
+		    nz, row[nz], col[nz], val[nz].r, val[nz].i);
 	    exit(-1);
 	} else {
 	    ++xa[col[nz]];
@@ -89,30 +109,32 @@ dreadtriple(int *m, int *n, int *nonz,
     SUPERLU_FREE(col);
 
 #ifdef CHK_INPUT
-    for (i = 0; i < *n; i++) {
-	printf("Col %d, xa %d\n", i, xa[i]);
-	for (k = xa[i]; k < xa[i+1]; k++)
-	    printf("%d\t%16.10f\n", asub[k], a[k]);
+    {
+	int i;
+	for (i = 0; i < *n; i++) {
+	    printf("Col %d, xa %d\n", i, xa[i]);
+	    for (k = xa[i]; k < xa[i+1]; k++)
+		printf("%d\t%16.10f\n", asub[k], a[k]);
+	}
     }
 #endif
 
 }
 
 
-void dreadrhs(int m, double *b)
+void creadrhs(int m, complex *b)
 {
     FILE *fp, *fopen();
-    int i, j;
+    int i;
+    /*int j;*/
 
     if ( !(fp = fopen("b.dat", "r")) ) {
         fprintf(stderr, "dreadrhs: file does not exist\n");
 	exit(-1);
     }
     for (i = 0; i < m; ++i)
-      fscanf(fp, "%lf\n", &b[i]);
-      /*fscanf(fp, "%d%lf\n", &j, &b[i]);*/
+      fscanf(fp, "%f%f\n", &b[i].r, &b[i].i);
+
     /*        readpair_(j, &b[i]);*/
     fclose(fp);
 }
-
-
diff --git a/SRC/csnode_bmod.c b/SRC/csnode_bmod.c
index 041737f..40c21f5 100644
--- a/SRC/csnode_bmod.c
+++ b/SRC/csnode_bmod.c
@@ -1,29 +1,31 @@
 
-/*
+/*! @file csnode_bmod.c
+ * \brief Performs numeric block updates within the relaxed snode.
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_cdefs.h"
 
 
-/*
- * Performs numeric block updates within the relaxed snode. 
+/*! \brief Performs numeric block updates within the relaxed snode. 
  */
 int
 csnode_bmod (
diff --git a/SRC/csnode_dfs.c b/SRC/csnode_dfs.c
index 19fb10c..175da09 100644
--- a/SRC/csnode_dfs.c
+++ b/SRC/csnode_dfs.c
@@ -1,26 +1,46 @@
 
-/*
+/*! @file csnode_dfs.c
+ * \brief Determines the union of row structures of columns within the relaxed node
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_cdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *    csnode_dfs() - Determine the union of the row structures of those 
+ *    columns within the relaxed snode.
+ *    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
+ *    the portion outside the rectangular supernode must be zero.
+ *
+ * Return value
+ * ============
+ *     0   success;
+ *    >0   number of bytes allocated when run out of memory.
+ * </pre>
+ */
+
 int
 csnode_dfs (
 	   const int  jcol,	    /* in - start of the supernode */
@@ -33,19 +53,7 @@ csnode_dfs (
 	   GlobalLU_t *Glu          /* modified */
 	   )
 {
-/* Purpose
- * =======
- *    csnode_dfs() - Determine the union of the row structures of those 
- *    columns within the relaxed snode.
- *    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
- *    the portion outside the rectangular supernode must be zero.
- *
- * Return value
- * ============
- *     0   success;
- *    >0   number of bytes allocated when run out of memory.
- *
- */
+
     register int i, k, ifrom, ito, nextl, new_next;
     int          nsuper, krow, kmark, mem_error;
     int          *xsup, *supno;
diff --git a/SRC/csp_blas2.c b/SRC/csp_blas2.c
index d1a0a53..2ab271d 100644
--- a/SRC/csp_blas2.c
+++ b/SRC/csp_blas2.c
@@ -1,10 +1,13 @@
 
-/*
+/*! @file csp_blas2.c
+ * \brief Sparse BLAS 2, using some dense BLAS 2 operations
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
- *
+ * </pre>
  */
 /*
  * File name:		csp_blas2.c
@@ -20,12 +23,9 @@ void cusolve(int, int, complex*, complex*);
 void clsolve(int, int, complex*, complex*);
 void cmatvec(int, int, int, complex*, complex*, complex*);
 
-
-int
-sp_ctrsv(char *uplo, char *trans, char *diag, SuperMatrix *L, 
-         SuperMatrix *U, complex *x, SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief Solves one of the systems of equations A*x = b,   or   A'*x = b
+ * 
+ * <pre>
  *   Purpose
  *   =======
  *
@@ -75,8 +75,12 @@ sp_ctrsv(char *uplo, char *trans, char *diag, SuperMatrix *L,
  *
  *   info    - (output) int*
  *             If *info = -i, the i-th argument had an illegal value.
- *
+ * </pre>
  */
+int
+sp_ctrsv(char *uplo, char *trans, char *diag, SuperMatrix *L, 
+         SuperMatrix *U, complex *x, SuperLUStat_t *stat, int *info)
+{
 #ifdef _CRAY
     _fcd ftcs1 = _cptofcd("L", strlen("L")),
 	 ftcs2 = _cptofcd("N", strlen("N")),
@@ -390,64 +394,68 @@ sp_ctrsv(char *uplo, char *trans, char *diag, SuperMatrix *L,
 
 
 
+/*! \brief Performs one of the matrix-vector operations y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y
+ *
+ * <pre>  
+ *   Purpose   
+ *   =======   
+ *
+ *   sp_cgemv()  performs one of the matrix-vector operations   
+ *      y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
+ *   where alpha and beta are scalars, x and y are vectors and A is a
+ *   sparse A->nrow by A->ncol matrix.   
+ *
+ *   Parameters   
+ *   ==========   
+ *
+ *   TRANS  - (input) char*
+ *            On entry, TRANS specifies the operation to be performed as   
+ *            follows:   
+ *               TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
+ *               TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
+ *               TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.   
+ *
+ *   ALPHA  - (input) complex
+ *            On entry, ALPHA specifies the scalar alpha.   
+ *
+ *   A      - (input) SuperMatrix*
+ *            Before entry, the leading m by n part of the array A must   
+ *            contain the matrix of coefficients.   
+ *
+ *   X      - (input) complex*, array of DIMENSION at least   
+ *            ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
+ *           and at least   
+ *            ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
+ *            Before entry, the incremented array X must contain the   
+ *            vector x.   
+ * 
+ *   INCX   - (input) int
+ *            On entry, INCX specifies the increment for the elements of   
+ *            X. INCX must not be zero.   
+ *
+ *   BETA   - (input) complex
+ *            On entry, BETA specifies the scalar beta. When BETA is   
+ *            supplied as zero then Y need not be set on input.   
+ *
+ *   Y      - (output) complex*,  array of DIMENSION at least   
+ *            ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
+ *            and at least   
+ *            ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
+ *            Before entry with BETA non-zero, the incremented array Y   
+ *            must contain the vector y. On exit, Y is overwritten by the 
+ *            updated vector y.
+ *	      
+ *   INCY   - (input) int
+ *            On entry, INCY specifies the increment for the elements of   
+ *            Y. INCY must not be zero.   
+ *
+ *    ==== Sparse Level 2 Blas routine.   
+ * </pre>
+*/
 int
 sp_cgemv(char *trans, complex alpha, SuperMatrix *A, complex *x, 
 	 int incx, complex beta, complex *y, int incy)
 {
-/*  Purpose   
-    =======   
-
-    sp_cgemv()  performs one of the matrix-vector operations   
-       y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
-    where alpha and beta are scalars, x and y are vectors and A is a
-    sparse A->nrow by A->ncol matrix.   
-
-    Parameters   
-    ==========   
-
-    TRANS  - (input) char*
-             On entry, TRANS specifies the operation to be performed as   
-             follows:   
-                TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
-                TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
-                TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.   
-
-    ALPHA  - (input) complex
-             On entry, ALPHA specifies the scalar alpha.   
-
-    A      - (input) SuperMatrix*
-             Before entry, the leading m by n part of the array A must   
-             contain the matrix of coefficients.   
-
-    X      - (input) complex*, array of DIMENSION at least   
-             ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
-             and at least   
-             ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
-             Before entry, the incremented array X must contain the   
-             vector x.   
-
-    INCX   - (input) int
-             On entry, INCX specifies the increment for the elements of   
-             X. INCX must not be zero.   
-
-    BETA   - (input) complex
-             On entry, BETA specifies the scalar beta. When BETA is   
-             supplied as zero then Y need not be set on input.   
-
-    Y      - (output) complex*,  array of DIMENSION at least   
-             ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
-             and at least   
-             ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
-             Before entry with BETA non-zero, the incremented array Y   
-             must contain the vector y. On exit, Y is overwritten by the 
-             updated vector y.
-	     
-    INCY   - (input) int
-             On entry, INCY specifies the increment for the elements of   
-             Y. INCY must not be zero.   
-
-    ==== Sparse Level 2 Blas routine.   
-*/
 
     /* Local variables */
     NCformat *Astore;
diff --git a/SRC/csp_blas3.c b/SRC/csp_blas3.c
index e11c11d..84ff940 100644
--- a/SRC/csp_blas3.c
+++ b/SRC/csp_blas3.c
@@ -1,10 +1,13 @@
 
-/*
+/*! @file csp_blas3.c
+ * \brief Sparse BLAS3, using some dense BLAS3 operations
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 /*
  * File name:		sp_blas3.c
@@ -13,102 +16,107 @@
 
 #include "slu_cdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose   
+ *   =======   
+ * 
+ *   sp_c performs one of the matrix-matrix operations   
+ * 
+ *      C := alpha*op( A )*op( B ) + beta*C,   
+ * 
+ *   where  op( X ) is one of 
+ * 
+ *      op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),
+ * 
+ *   alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
+ *   an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix. 
+ *   
+ * 
+ *   Parameters   
+ *   ==========   
+ * 
+ *   TRANSA - (input) char*
+ *            On entry, TRANSA specifies the form of op( A ) to be used in 
+ *            the matrix multiplication as follows:   
+ *               TRANSA = 'N' or 'n',  op( A ) = A.   
+ *               TRANSA = 'T' or 't',  op( A ) = A'.   
+ *               TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
+ *            Unchanged on exit.   
+ * 
+ *   TRANSB - (input) char*
+ *            On entry, TRANSB specifies the form of op( B ) to be used in 
+ *            the matrix multiplication as follows:   
+ *               TRANSB = 'N' or 'n',  op( B ) = B.   
+ *               TRANSB = 'T' or 't',  op( B ) = B'.   
+ *               TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
+ *            Unchanged on exit.   
+ * 
+ *   M      - (input) int   
+ *            On entry,  M  specifies  the number of rows of the matrix 
+ *	     op( A ) and of the matrix C.  M must be at least zero. 
+ *	     Unchanged on exit.   
+ * 
+ *   N      - (input) int
+ *            On entry,  N specifies the number of columns of the matrix 
+ *	     op( B ) and the number of columns of the matrix C. N must be 
+ *	     at least zero.
+ *	     Unchanged on exit.   
+ * 
+ *   K      - (input) int
+ *            On entry, K specifies the number of columns of the matrix 
+ *	     op( A ) and the number of rows of the matrix op( B ). K must 
+ *	     be at least  zero.   
+ *           Unchanged on exit.
+ *      
+ *   ALPHA  - (input) complex
+ *            On entry, ALPHA specifies the scalar alpha.   
+ * 
+ *   A      - (input) SuperMatrix*
+ *            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+ *            Currently, the type of A can be:
+ *                Stype = NC or NCP; Dtype = SLU_C; Mtype = GE. 
+ *            In the future, more general A can be handled.
+ * 
+ *   B      - COMPLEX PRECISION array of DIMENSION ( LDB, kb ), where kb is 
+ *            n when TRANSB = 'N' or 'n',  and is  k otherwise.   
+ *            Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
+ *            part of the array B must contain the matrix B, otherwise 
+ *            the leading n by k part of the array B must contain the 
+ *            matrix B.   
+ *            Unchanged on exit.   
+ * 
+ *   LDB    - (input) int
+ *            On entry, LDB specifies the first dimension of B as declared 
+ *            in the calling (sub) program. LDB must be at least max( 1, n ).  
+ *            Unchanged on exit.   
+ * 
+ *   BETA   - (input) complex
+ *            On entry, BETA specifies the scalar beta. When BETA is   
+ *            supplied as zero then C need not be set on input.   
+ *  
+ *   C      - COMPLEX PRECISION array of DIMENSION ( LDC, n ).   
+ *            Before entry, the leading m by n part of the array C must 
+ *            contain the matrix C,  except when beta is zero, in which 
+ *            case C need not be set on entry.   
+ *            On exit, the array C is overwritten by the m by n matrix 
+ *	     ( alpha*op( A )*B + beta*C ).   
+ *  
+ *   LDC    - (input) int
+ *            On entry, LDC specifies the first dimension of C as declared 
+ *            in the calling (sub)program. LDC must be at least max(1,m).   
+ *            Unchanged on exit.   
+ *  
+ *   ==== Sparse Level 3 Blas routine.   
+ * </pre>
+ */
+
 int
 sp_cgemm(char *transa, char *transb, int m, int n, int k, 
          complex alpha, SuperMatrix *A, complex *b, int ldb, 
          complex beta, complex *c, int ldc)
 {
-/*  Purpose   
-    =======   
-
-    sp_c performs one of the matrix-matrix operations   
-
-       C := alpha*op( A )*op( B ) + beta*C,   
-
-    where  op( X ) is one of 
-
-       op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),
-
-    alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
-    an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix. 
-  
-
-    Parameters   
-    ==========   
-
-    TRANSA - (input) char*
-             On entry, TRANSA specifies the form of op( A ) to be used in 
-             the matrix multiplication as follows:   
-                TRANSA = 'N' or 'n',  op( A ) = A.   
-                TRANSA = 'T' or 't',  op( A ) = A'.   
-                TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
-             Unchanged on exit.   
-
-    TRANSB - (input) char*
-             On entry, TRANSB specifies the form of op( B ) to be used in 
-             the matrix multiplication as follows:   
-                TRANSB = 'N' or 'n',  op( B ) = B.   
-                TRANSB = 'T' or 't',  op( B ) = B'.   
-                TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
-             Unchanged on exit.   
-
-    M      - (input) int   
-             On entry,  M  specifies  the number of rows of the matrix 
-	     op( A ) and of the matrix C.  M must be at least zero. 
-	     Unchanged on exit.   
-
-    N      - (input) int
-             On entry,  N specifies the number of columns of the matrix 
-	     op( B ) and the number of columns of the matrix C. N must be 
-	     at least zero.
-	     Unchanged on exit.   
-
-    K      - (input) int
-             On entry, K specifies the number of columns of the matrix 
-	     op( A ) and the number of rows of the matrix op( B ). K must 
-	     be at least  zero.   
-             Unchanged on exit.
-	     
-    ALPHA  - (input) complex
-             On entry, ALPHA specifies the scalar alpha.   
-
-    A      - (input) SuperMatrix*
-             Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
-             Currently, the type of A can be:
-                 Stype = NC or NCP; Dtype = SLU_C; Mtype = GE. 
-             In the future, more general A can be handled.
-
-    B      - COMPLEX PRECISION array of DIMENSION ( LDB, kb ), where kb is 
-             n when TRANSB = 'N' or 'n',  and is  k otherwise.   
-             Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
-             part of the array B must contain the matrix B, otherwise 
-             the leading n by k part of the array B must contain the 
-             matrix B.   
-             Unchanged on exit.   
-
-    LDB    - (input) int
-             On entry, LDB specifies the first dimension of B as declared 
-             in the calling (sub) program. LDB must be at least max( 1, n ).  
-             Unchanged on exit.   
-
-    BETA   - (input) complex
-             On entry, BETA specifies the scalar beta. When BETA is   
-             supplied as zero then C need not be set on input.   
-
-    C      - COMPLEX PRECISION array of DIMENSION ( LDC, n ).   
-             Before entry, the leading m by n part of the array C must 
-             contain the matrix C,  except when beta is zero, in which 
-             case C need not be set on entry.   
-             On exit, the array C is overwritten by the m by n matrix 
-	     ( alpha*op( A )*B + beta*C ).   
-
-    LDC    - (input) int
-             On entry, LDC specifies the first dimension of C as declared 
-             in the calling (sub)program. LDC must be at least max(1,m).   
-             Unchanged on exit.   
-
-    ==== Sparse Level 3 Blas routine.   
-*/
     int    incx = 1, incy = 1;
     int    j;
 
diff --git a/SRC/cutil.c b/SRC/cutil.c
index bb50965..e9489a3 100644
--- a/SRC/cutil.c
+++ b/SRC/cutil.c
@@ -1,23 +1,26 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
+/*! @file cutil.c
+ * \brief Matrix utility functions
+ *
+ * <pre>
+ * -- SuperLU routine (version 3.1) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * October 15, 2003
+ * August 1, 2008
+ *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
  *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include <math.h>
 #include "slu_cdefs.h"
@@ -64,7 +67,7 @@ cCreate_CompRow_Matrix(SuperMatrix *A, int m, int n, int nnz,
     Astore->rowptr = rowptr;
 }
 
-/* Copy matrix A into matrix B. */
+/*! \brief Copy matrix A into matrix B. */
 void
 cCopy_CompCol_Matrix(SuperMatrix *A, SuperMatrix *B)
 {
@@ -108,12 +111,7 @@ void
 cCopy_Dense_Matrix(int M, int N, complex *X, int ldx,
 			complex *Y, int ldy)
 {
-/*
- *
- *  Purpose
- *  =======
- *
- *  Copies a two-dimensional matrix X to another matrix Y.
+/*! \brief Copies a two-dimensional matrix X to another matrix Y.
  */
     int    i, j;
     
@@ -150,8 +148,7 @@ cCreate_SuperNode_Matrix(SuperMatrix *L, int m, int n, int nnz,
 }
 
 
-/*
- * Convert a row compressed storage into a column compressed storage.
+/*! \brief Convert a row compressed storage into a column compressed storage.
  */
 void
 cCompRow_to_CompCol(int m, int n, int nnz, 
@@ -267,13 +264,12 @@ cPrint_SuperNode_Matrix(char *what, SuperMatrix *A)
 void
 cPrint_Dense_Matrix(char *what, SuperMatrix *A)
 {
-    DNformat     *Astore;
+    DNformat     *Astore = (DNformat *) A->Store;
     register int i, j, lda = Astore->lda;
     float       *dp;
     
     printf("\nDense matrix %s:\n", what);
     printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
-    Astore = (DNformat *) A->Store;
     dp = (float *) Astore->nzval;
     printf("nrow %d, ncol %d, lda %d\n", A->nrow,A->ncol,lda);
     printf("\nnzval: ");
@@ -285,8 +281,7 @@ cPrint_Dense_Matrix(char *what, SuperMatrix *A)
     fflush(stdout);
 }
 
-/*
- * Diagnostic print of column "jcol" in the U/L factor.
+/*! \brief Diagnostic print of column "jcol" in the U/L factor.
  */
 void
 cprint_lu_col(char *msg, int jcol, int pivrow, int *xprune, GlobalLU_t *Glu)
@@ -328,9 +323,7 @@ cprint_lu_col(char *msg, int jcol, int pivrow, int *xprune, GlobalLU_t *Glu)
 }
 
 
-/*
- * Check whether tempv[] == 0. This should be true before and after 
- * calling any numeric routines, i.e., "panel_bmod" and "column_bmod". 
+/*! \brief Check whether tempv[] == 0. This should be true before and after calling any numeric routines, i.e., "panel_bmod" and "column_bmod". 
  */
 void ccheck_tempv(int n, complex *tempv)
 {
@@ -357,8 +350,7 @@ cGenXtrue(int n, int nrhs, complex *x, int ldx)
 	}
 }
 
-/*
- * Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's
+/*! \brief Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's
  */
 void
 cFillRHS(trans_t trans, int nrhs, complex *x, int ldx,
@@ -387,8 +379,7 @@ cFillRHS(trans_t trans, int nrhs, complex *x, int ldx,
 
 }
 
-/* 
- * Fills a complex precision array with a given value.
+/*! \brief Fills a complex precision array with a given value.
  */
 void 
 cfill(complex *a, int alen, complex dval)
@@ -399,8 +390,7 @@ cfill(complex *a, int alen, complex dval)
 
 
 
-/* 
- * Check the inf-norm of the error vector 
+/*! \brief Check the inf-norm of the error vector 
  */
 void cinf_norm_error(int nrhs, SuperMatrix *X, complex *xtrue)
 {
@@ -428,7 +418,7 @@ void cinf_norm_error(int nrhs, SuperMatrix *X, complex *xtrue)
 
 
 
-/* Print performance of the code. */
+/*! \brief Print performance of the code. */
 void
 cPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
            float rpg, float rcond, float *ferr,
@@ -456,9 +446,9 @@ cPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
     printf("\tNo of nonzeros in factor U = %d\n", Ustore->nnz);
     printf("\tNo of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz);
 	
-    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	   mem_usage->for_lu/1e6, mem_usage->total_needed/1e6,
-	   mem_usage->expansions);
+    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	   mem_usage->for_lu/1e6, mem_usage->total_needed/1e6);
+    printf("Number of memory expansions: %d\n", stat->expansions);
 	
     printf("\tFactor\tMflops\tSolve\tMflops\tEtree\tEquil\tRcond\tRefine\n");
     printf("PERF:%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f\n",
diff --git a/SRC/dGetDiagU.c b/SRC/dGetDiagU.c
deleted file mode 100644
index c644c07..0000000
--- a/SRC/dGetDiagU.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* 
- * -- Auxiliary routine in SuperLU (version 2.0) --
- * Lawrence Berkeley National Lab, Univ. of California Berkeley.
- * Xiaoye S. Li
- * September 11, 2003
- *
- */
-
-#include "dsp_defs.h"
-
-
-void dGetDiagU(SuperMatrix *L, double *diagU)
-{
-  /*
-   * Purpose
-   * =======
-   *
-   * GetDiagU extracts the main diagonal of matrix U of the LU factorization.
-   *  
-   * Arguments
-   * =========
-   *
-   * L      (input) SuperMatrix*
-   *        The factor L from the factorization Pr*A*Pc=L*U as computed by
-   *        dgstrf(). Use compressed row subscripts storage for supernodes,
-   *        i.e., L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.
-   *
-   * diagU  (output) double*, dimension (n)
-   *        The main diagonal of matrix U.
-   *
-   * Note
-   * ====
-   * The diagonal blocks of the L and U matrices are stored in the L
-   * data structures.
-   *
-   */
-    int_t i, k, nsupers;
-    int_t fsupc, nsupr, nsupc, luptr;
-    double *dblock, *Lval;
-    SCformat *Lstore;
-
-    Lstore = L->Store;
-    Lval = Lstore->nzval;
-    nsupers = Lstore->nsuper + 1;
-
-    for (k = 0; k < nsupers; ++k) {
-      fsupc = L_FST_SUPC(k);
-      nsupc = L_FST_SUPC(k+1) - fsupc;
-      nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
-      luptr = L_NZ_START(fsupc);
-
-      dblock = &diagU[fsupc];
-      for (i = 0; i < nsupc; ++i) {
-	dblock[i] = Lval[luptr];
-	luptr += nsupr + 1;
-      }
-    }
-}
-
diff --git a/SRC/dcolumn_bmod.c b/SRC/dcolumn_bmod.c
index 0ba9270..0eb2386 100644
--- a/SRC/dcolumn_bmod.c
+++ b/SRC/dcolumn_bmod.c
@@ -1,22 +1,24 @@
 
-/*
+/*! @file dcolumn_bmod.c
+ *  \brief performs numeric block updates
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
- */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ *  Permission is hereby granted to use or copy this program for any
+ *  purpose, provided the above notices are retained on all copies.
+ *  Permission to modify the code and to distribute modified code is
+ *  granted, provided the above notices are retained, and a notice that
+ *  the code was modified is included with the above copyright notice.
+ * </pre>
 */
 
 #include <stdio.h>
@@ -32,8 +34,17 @@ void dmatvec(int, int, int, double*, double*, double*);
 
 
 
-/* Return value:   0 - successful return
+/*! \brief 
+ *
+ * <pre>
+ * Purpose:
+ * ========
+ * Performs numeric block updates (sup-col) in topological order.
+ * It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ * Special processing on the supernodal portion of L\U[*,j]
+ * Return value:   0 - successful return
  *               > 0 - number of bytes allocated when run out of space
+ * </pre>
  */
 int
 dcolumn_bmod (
@@ -48,14 +59,7 @@ dcolumn_bmod (
 	     SuperLUStat_t *stat  /* output */
 	     )
 {
-/*
- * Purpose:
- * ========
- *    Performs numeric block updates (sup-col) in topological order.
- *    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
- *    Special processing on the supernodal portion of L\U[*,j]
- *
- */
+
 #ifdef _CRAY
     _fcd ftcs1 = _cptofcd("L", strlen("L")),
          ftcs2 = _cptofcd("N", strlen("N")),
diff --git a/SRC/dcolumn_dfs.c b/SRC/dcolumn_dfs.c
index c644ef7..deebf94 100644
--- a/SRC/dcolumn_dfs.c
+++ b/SRC/dcolumn_dfs.c
@@ -1,49 +1,38 @@
 
-/*
+/*! @file dcolumn_dfs.c
+ * \brief Performs a symbolic factorization
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
- */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
 */
 
 #include "slu_ddefs.h"
 
-/* What type of supernodes we want */
+/*! \brief What type of supernodes we want */
 #define T2_SUPER
 
-int
-dcolumn_dfs(
-	   const int  m,         /* in - number of rows in the matrix */
-	   const int  jcol,      /* in */
-	   int        *perm_r,   /* in */
-	   int        *nseg,     /* modified - with new segments appended */
-	   int        *lsub_col, /* in - defines the RHS vector to start the dfs */
-	   int        *segrep,   /* modified - with new segments appended */
-	   int        *repfnz,   /* modified */
-	   int        *xprune,   /* modified */
-	   int        *marker,   /* modified */
-	   int        *parent,	 /* working array */
-	   int        *xplore,   /* working array */
-	   GlobalLU_t *Glu       /* modified */
-	   )
-{
-/* 
+
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
- *   "column_dfs" performs a symbolic factorization on column jcol, and
+ *   DCOLUMN_DFS performs a symbolic factorization on column jcol, and
  *   decide the supernode boundary.
  *
  *   This routine does not use numeric values, but only use the RHS 
@@ -71,8 +60,25 @@ dcolumn_dfs(
  * ============
  *     0  success;
  *   > 0  number of bytes allocated when run out of space.
- *
+ * </pre>
  */
+int
+dcolumn_dfs(
+	   const int  m,         /* in - number of rows in the matrix */
+	   const int  jcol,      /* in */
+	   int        *perm_r,   /* in */
+	   int        *nseg,     /* modified - with new segments appended */
+	   int        *lsub_col, /* in - defines the RHS vector to start the dfs */
+	   int        *segrep,   /* modified - with new segments appended */
+	   int        *repfnz,   /* modified */
+	   int        *xprune,   /* modified */
+	   int        *marker,   /* modified */
+	   int        *parent,	 /* working array */
+	   int        *xplore,   /* working array */
+	   GlobalLU_t *Glu       /* modified */
+	   )
+{
+
     int     jcolp1, jcolm1, jsuper, nsuper, nextl;
     int     k, krep, krow, kmark, kperm;
     int     *marker2;           /* Used for small panel LU */
diff --git a/SRC/dcomplex.c b/SRC/dcomplex.c
index 396c15c..42496a6 100644
--- a/SRC/dcomplex.c
+++ b/SRC/dcomplex.c
@@ -1,21 +1,24 @@
 
-/*
+/*! @file dcomplex.c
+ * \brief Common arithmetic for complex type
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
- */
-/*
  * This file defines common arithmetic operations for complex type.
+ * </pre>
  */
+
 #include <math.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include "slu_dcomplex.h"
 
 
-/* Complex Division c = a/b */
+/*! \brief Complex Division c = a/b */
 void z_div(doublecomplex *c, doublecomplex *a, doublecomplex *b)
 {
     double ratio, den;
@@ -45,7 +48,7 @@ void z_div(doublecomplex *c, doublecomplex *a, doublecomplex *b)
 }
 
 
-/* Returns sqrt(z.r^2 + z.i^2) */
+/*! \brief Returns sqrt(z.r^2 + z.i^2) */
 double z_abs(doublecomplex *z)
 {
     double temp;
@@ -67,8 +70,7 @@ double z_abs(doublecomplex *z)
 }
 
 
-/* Approximates the abs */
-/* Returns abs(z.r) + abs(z.i) */
+/*! \brief Approximates the abs. Returns abs(z.r) + abs(z.i) */
 double z_abs1(doublecomplex *z)
 {
     double real = z->r;
@@ -80,7 +82,7 @@ double z_abs1(doublecomplex *z)
     return (real + imag);
 }
 
-/* Return the exponentiation */
+/*! \brief Return the exponentiation */
 void z_exp(doublecomplex *r, doublecomplex *z)
 {
     double expx;
@@ -90,17 +92,56 @@ void z_exp(doublecomplex *r, doublecomplex *z)
     r->i = expx * sin(z->i);
 }
 
-/* Return the complex conjugate */
+/*! \brief Return the complex conjugate */
 void d_cnjg(doublecomplex *r, doublecomplex *z)
 {
     r->r = z->r;
     r->i = -z->i;
 }
 
-/* Return the imaginary part */
+/*! \brief Return the imaginary part */
 double d_imag(doublecomplex *z)
 {
     return (z->i);
 }
 
 
+/*! \brief SIGN functions for complex number. Returns z/abs(z) */
+doublecomplex z_sgn(doublecomplex *z)
+{
+    register double t = z_abs(z);
+    register doublecomplex retval;
+
+    if (t == 0.0) {
+	retval.r = 1.0, retval.i = 0.0;
+    } else {
+	retval.r = z->r / t, retval.i = z->i / t;
+    }
+
+    return retval;
+}
+
+/*! \brief Square-root of a complex number. */
+doublecomplex z_sqrt(doublecomplex *z)
+{
+    doublecomplex retval;
+    register double cr, ci, real, imag;
+
+    real = z->r;
+    imag = z->i;
+
+    if ( imag == 0.0 ) {
+        retval.r = sqrt(real);
+        retval.i = 0.0;
+    } else {
+        ci = (sqrt(real*real + imag*imag) - real) / 2.0;
+        ci = sqrt(ci);
+        cr = imag / (2.0 * ci);
+        retval.r = cr;
+        retval.i = ci;
+    }
+
+    return retval;
+}
+
+
diff --git a/SRC/dcopy_to_ucol.c b/SRC/dcopy_to_ucol.c
index 453e33a..5a1d7b7 100644
--- a/SRC/dcopy_to_ucol.c
+++ b/SRC/dcopy_to_ucol.c
@@ -1,23 +1,24 @@
 
-/*
+/*! @file dcopy_to_ucol.c
+ * \brief Copy a computed column of U to the compressed data structure
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
  *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
 
 #include "slu_ddefs.h"
 
@@ -45,7 +46,6 @@ dcopy_to_ucol(
     double    *ucol;
     int       *usub, *xusub;
     int       nzumax;
-
     double zero = 0.0;
 
     xsup    = Glu->xsup;
diff --git a/SRC/ddiagonal.c b/SRC/ddiagonal.c
new file mode 100644
index 0000000..60c7aa1
--- /dev/null
+++ b/SRC/ddiagonal.c
@@ -0,0 +1,129 @@
+
+/*! @file ddiagonal.c
+ * \brief Auxiliary routines to work with diagonal elements
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_ddefs.h"
+
+int dfill_diag(int n, NCformat *Astore)
+/* fill explicit zeros on the diagonal entries, so that the matrix is not
+   structurally singular. */
+{
+    double *nzval = (double *)Astore->nzval;
+    int *rowind = Astore->rowind;
+    int *colptr = Astore->colptr;
+    int nnz = colptr[n];
+    int fill = 0;
+    double *nzval_new;
+    double zero = 0.0;
+    int *rowind_new;
+    int i, j, diag;
+
+    for (i = 0; i < n; i++)
+    {
+	diag = -1;
+	for (j = colptr[i]; j < colptr[i + 1]; j++)
+	    if (rowind[j] == i) diag = j;
+	if (diag < 0) fill++;
+    }
+    if (fill)
+    {
+	nzval_new = doubleMalloc(nnz + fill);
+	rowind_new = intMalloc(nnz + fill);
+	fill = 0;
+	for (i = 0; i < n; i++)
+	{
+	    diag = -1;
+	    for (j = colptr[i] - fill; j < colptr[i + 1]; j++)
+	    {
+		if ((rowind_new[j + fill] = rowind[j]) == i) diag = j;
+		nzval_new[j + fill] = nzval[j];
+	    }
+	    if (diag < 0)
+	    {
+		rowind_new[colptr[i + 1] + fill] = i;
+		nzval_new[colptr[i + 1] + fill] = zero;
+		fill++;
+	    }
+	    colptr[i + 1] += fill;
+	}
+	Astore->nzval = nzval_new;
+	Astore->rowind = rowind_new;
+	SUPERLU_FREE(nzval);
+	SUPERLU_FREE(rowind);
+    }
+    Astore->nnz += fill;
+    return fill;
+}
+
+int ddominate(int n, NCformat *Astore)
+/* make the matrix diagonally dominant */
+{
+    double *nzval = (double *)Astore->nzval;
+    int *rowind = Astore->rowind;
+    int *colptr = Astore->colptr;
+    int nnz = colptr[n];
+    int fill = 0;
+    double *nzval_new;
+    int *rowind_new;
+    int i, j, diag;
+    double s;
+
+    for (i = 0; i < n; i++)
+    {
+	diag = -1;
+	for (j = colptr[i]; j < colptr[i + 1]; j++)
+	    if (rowind[j] == i) diag = j;
+	if (diag < 0) fill++;
+    }
+    if (fill)
+    {
+	nzval_new = doubleMalloc(nnz + fill);
+	rowind_new = intMalloc(nnz+ fill);
+	fill = 0;
+	for (i = 0; i < n; i++)
+	{
+	    s = 1e-6;
+	    diag = -1;
+	    for (j = colptr[i] - fill; j < colptr[i + 1]; j++)
+	    {
+		if ((rowind_new[j + fill] = rowind[j]) == i) diag = j;
+		s += fabs(nzval_new[j + fill] = nzval[j]);
+	    }
+	    if (diag >= 0) {
+		nzval_new[diag+fill] = s * 3.0;
+	    } else {
+		rowind_new[colptr[i + 1] + fill] = i;
+		nzval_new[colptr[i + 1] + fill] = s * 3.0;
+		fill++;
+	    }
+	    colptr[i + 1] += fill;
+	}
+	Astore->nzval = nzval_new;
+	Astore->rowind = rowind_new;
+	SUPERLU_FREE(nzval);
+	SUPERLU_FREE(rowind);
+    }
+    else
+    {
+	for (i = 0; i < n; i++)
+	{
+	    s = 1e-6;
+	    diag = -1;
+	    for (j = colptr[i]; j < colptr[i + 1]; j++)
+	    {
+		if (rowind[j] == i) diag = j;
+		s += fabs(nzval[j]);
+	    }
+	    nzval[diag] = s * 3.0;
+	}
+    }
+    Astore->nnz += fill;
+    return fill;
+}
diff --git a/SRC/dgscon.c b/SRC/dgscon.c
index 059da61..d91474a 100644
--- a/SRC/dgscon.c
+++ b/SRC/dgscon.c
@@ -1,11 +1,17 @@
 
-/*
+/*! @file dgscon.c
+ * \brief Estimates reciprocal of the condition number of a general matrix
+ * 
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Modified from lapack routines DGECON.
+ * </pre> 
  */
+
 /*
  * File name:	dgscon.c
  * History:     Modified from lapack routines DGECON.
@@ -13,57 +19,62 @@
 #include <math.h>
 #include "slu_ddefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   DGSCON estimates the reciprocal of the condition number of a general 
+ *   real matrix A, in either the 1-norm or the infinity-norm, using   
+ *   the LU factorization computed by DGETRF.   *
+ *
+ *   An estimate is obtained for norm(inv(A)), and the reciprocal of the   
+ *   condition number is computed as   
+ *      RCOND = 1 / ( norm(A) * norm(inv(A)) ).   
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ * 
+ *   Arguments   
+ *   =========   
+ *
+ *    NORM    (input) char*
+ *            Specifies whether the 1-norm condition number or the   
+ *            infinity-norm condition number is required:   
+ *            = '1' or 'O':  1-norm;   
+ *            = 'I':         Infinity-norm.
+ *	    
+ *    L       (input) SuperMatrix*
+ *            The factor L from the factorization Pr*A*Pc=L*U as computed by
+ *            dgstrf(). Use compressed row subscripts storage for supernodes,
+ *            i.e., L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.
+ * 
+ *    U       (input) SuperMatrix*
+ *            The factor U from the factorization Pr*A*Pc=L*U as computed by
+ *            dgstrf(). Use column-wise storage scheme, i.e., U has types:
+ *            Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.
+ *	    
+ *    ANORM   (input) double
+ *            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
+ *            If NORM = 'I', the infinity-norm of the original matrix A.
+ *	    
+ *    RCOND   (output) double*
+ *           The reciprocal of the condition number of the matrix A,   
+ *           computed as RCOND = 1/(norm(A) * norm(inv(A))).
+ *	    
+ *    INFO    (output) int*
+ *           = 0:  successful exit   
+ *           < 0:  if INFO = -i, the i-th argument had an illegal value   
+ *
+ *    ===================================================================== 
+ * </pre>
+ */
+
 void
 dgscon(char *norm, SuperMatrix *L, SuperMatrix *U,
        double anorm, double *rcond, SuperLUStat_t *stat, int *info)
 {
-/*
-    Purpose   
-    =======   
-
-    DGSCON estimates the reciprocal of the condition number of a general 
-    real matrix A, in either the 1-norm or the infinity-norm, using   
-    the LU factorization computed by DGETRF.   
-
-    An estimate is obtained for norm(inv(A)), and the reciprocal of the   
-    condition number is computed as   
-       RCOND = 1 / ( norm(A) * norm(inv(A)) ).   
-
-    See supermatrix.h for the definition of 'SuperMatrix' structure.
- 
-    Arguments   
-    =========   
-
-    NORM    (input) char*
-            Specifies whether the 1-norm condition number or the   
-            infinity-norm condition number is required:   
-            = '1' or 'O':  1-norm;   
-            = 'I':         Infinity-norm.
-	    
-    L       (input) SuperMatrix*
-            The factor L from the factorization Pr*A*Pc=L*U as computed by
-            dgstrf(). Use compressed row subscripts storage for supernodes,
-            i.e., L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.
- 
-    U       (input) SuperMatrix*
-            The factor U from the factorization Pr*A*Pc=L*U as computed by
-            dgstrf(). Use column-wise storage scheme, i.e., U has types:
-            Stype = SLU_NC, Dtype = SLU_D, Mtype = TRU.
-	    
-    ANORM   (input) double
-            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
-            If NORM = 'I', the infinity-norm of the original matrix A.
-	    
-    RCOND   (output) double*
-            The reciprocal of the condition number of the matrix A,   
-            computed as RCOND = 1/(norm(A) * norm(inv(A))).
-	    
-    INFO    (output) int*
-            = 0:  successful exit   
-            < 0:  if INFO = -i, the i-th argument had an illegal value   
 
-    ===================================================================== 
-*/
 
     /* Local variables */
     int    kase, kase1, onenrm, i;
diff --git a/SRC/dgsequ.c b/SRC/dgsequ.c
index 0daee10..73870d4 100644
--- a/SRC/dgsequ.c
+++ b/SRC/dgsequ.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file dgsequ.c
+ * \brief Computes row and column scalings
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Modified from LAPACK routine DGEEQU
+ * </pre>
  */
 /*
  * File name:	dgsequ.c
@@ -13,67 +18,73 @@
 #include <math.h>
 #include "slu_ddefs.h"
 
+
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose   
+ *   =======   
+ *
+ *   DGSEQU computes row and column scalings intended to equilibrate an   
+ *   M-by-N sparse matrix A and reduce its condition number. R returns the row
+ *   scale factors and C the column scale factors, chosen to try to make   
+ *   the largest element in each row and column of the matrix B with   
+ *   elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.   
+ *
+ *   R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
+ *   number and BIGNUM = largest safe number.  Use of these scaling   
+ *   factors is not guaranteed to reduce the condition number of A but   
+ *   works well in practice.   
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   A       (input) SuperMatrix*
+ *           The matrix of dimension (A->nrow, A->ncol) whose equilibration
+ *           factors are to be computed. The type of A can be:
+ *           Stype = SLU_NC; Dtype = SLU_D; Mtype = SLU_GE.
+ *	    
+ *   R       (output) double*, size A->nrow
+ *           If INFO = 0 or INFO > M, R contains the row scale factors   
+ *           for A.
+ *	    
+ *   C       (output) double*, size A->ncol
+ *           If INFO = 0,  C contains the column scale factors for A.
+ *	    
+ *   ROWCND  (output) double*
+ *           If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
+ *           smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
+ *           AMAX is neither too large nor too small, it is not worth   
+ *           scaling by R.
+ *	    
+ *   COLCND  (output) double*
+ *           If INFO = 0, COLCND contains the ratio of the smallest   
+ *           C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
+ *           worth scaling by C.
+ *	    
+ *   AMAX    (output) double*
+ *           Absolute value of largest matrix element.  If AMAX is very   
+ *           close to overflow or very close to underflow, the matrix   
+ *           should be scaled.
+ *	    
+ *   INFO    (output) int*
+ *           = 0:  successful exit   
+ *           < 0:  if INFO = -i, the i-th argument had an illegal value   
+ *           > 0:  if INFO = i,  and i is   
+ *                 <= A->nrow:  the i-th row of A is exactly zero   
+ *                 >  A->ncol:  the (i-M)-th column of A is exactly zero   
+ *
+ *   ===================================================================== 
+ * </pre>
+ */
 void
 dgsequ(SuperMatrix *A, double *r, double *c, double *rowcnd,
 	double *colcnd, double *amax, int *info)
 {
-/*    
-    Purpose   
-    =======   
-
-    DGSEQU computes row and column scalings intended to equilibrate an   
-    M-by-N sparse matrix A and reduce its condition number. R returns the row
-    scale factors and C the column scale factors, chosen to try to make   
-    the largest element in each row and column of the matrix B with   
-    elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.   
-
-    R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
-    number and BIGNUM = largest safe number.  Use of these scaling   
-    factors is not guaranteed to reduce the condition number of A but   
-    works well in practice.   
-
-    See supermatrix.h for the definition of 'SuperMatrix' structure.
- 
-    Arguments   
-    =========   
-
-    A       (input) SuperMatrix*
-            The matrix of dimension (A->nrow, A->ncol) whose equilibration
-            factors are to be computed. The type of A can be:
-            Stype = SLU_NC; Dtype = SLU_D; Mtype = SLU_GE.
-	    
-    R       (output) double*, size A->nrow
-            If INFO = 0 or INFO > M, R contains the row scale factors   
-            for A.
-	    
-    C       (output) double*, size A->ncol
-            If INFO = 0,  C contains the column scale factors for A.
-	    
-    ROWCND  (output) double*
-            If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
-            smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
-            AMAX is neither too large nor too small, it is not worth   
-            scaling by R.
-	    
-    COLCND  (output) double*
-            If INFO = 0, COLCND contains the ratio of the smallest   
-            C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
-            worth scaling by C.
-	    
-    AMAX    (output) double*
-            Absolute value of largest matrix element.  If AMAX is very   
-            close to overflow or very close to underflow, the matrix   
-            should be scaled.
-	    
-    INFO    (output) int*
-            = 0:  successful exit   
-            < 0:  if INFO = -i, the i-th argument had an illegal value   
-            > 0:  if INFO = i,  and i is   
-                  <= A->nrow:  the i-th row of A is exactly zero   
-                  >  A->ncol:  the (i-M)-th column of A is exactly zero   
-
-    ===================================================================== 
-*/
+
 
     /* Local variables */
     NCformat *Astore;
diff --git a/SRC/dgsisx.c b/SRC/dgsisx.c
new file mode 100644
index 0000000..d3c942f
--- /dev/null
+++ b/SRC/dgsisx.c
@@ -0,0 +1,727 @@
+
+/*! @file dgsisx.c
+ * \brief Computes an approximate solutions of linear equations A*X=B or A'*X=B
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.2) --
+ * Lawrence Berkeley National Laboratory.
+ * November, 2010
+ * August, 2011
+ * </pre>
+ */
+#include "slu_ddefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * DGSISX computes an approximate solutions of linear equations
+ * A*X=B or A'*X=B, using the ILU factorization from dgsitrf().
+ * An estimation of the condition number is provided. 
+ * The routine performs the following steps:
+ *
+ *   1. If A is stored column-wise (A->Stype = SLU_NC):
+ *  
+ *	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A is
+ *	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+ *	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+ *	     = TRANS or CONJ).
+ *
+ *	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+ *	     matrix that usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the matrix A (after equilibration if options->Equil = YES)
+ *	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.
+ *
+ *	1.4. Compute the reciprocal pivot growth factor.
+ *
+ *	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+ *	     and info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	1.6. The system of equations is solved for X using the factored form
+ *	     of A.
+ *
+ *	1.7. options->IterRefine is not used
+ *
+ *	1.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *	1.9. options for ILU only
+ *	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+ *		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+ *		entries of modulus 1 on the diagonal and off-diagonal entries
+ *		of modulus at most 1. If MC64 fails, dgsequ() is used to
+ *		equilibrate the system.
+ *              ( Default: LargeDiag )
+ *	     2) options->ILU_DropTol = tau is the threshold for dropping.
+ *		For L, it is used directly (for the whole row in a supernode);
+ *		For U, ||A(:,i)||_oo * tau is used as the threshold
+ *	        for the	i-th column.
+ *		If a secondary dropping rule is required, tau will
+ *	        also be used to compute the second threshold.
+ *              ( Default: 1e-4 )
+ *	     3) options->ILU_FillFactor = gamma, used as the initial guess
+ *		of memory growth.
+ *		If a secondary dropping rule is required, it will also
+ *              be used as an upper bound of the memory.
+ *              ( Default: 10 )
+ *	     4) options->ILU_DropRule specifies the dropping rule.
+ *		Option	      Meaning
+ *		======	      ===========
+ *		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+ *		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+ *		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+ *			      p = gamma * nnz(A(:,j)).
+ *		DROP_AREA:    Variation of ILUTP, for j-th column, use
+ *			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+ *		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+ *			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+ *				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+ *			      Otherwise
+ *				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+ *			      tau_U(j) uses the similar rule.
+ *			      NOTE: the thresholds used by L and U are separate.
+ *		DROP_INTERP:  Compute the second dropping threshold by
+ *			      interpolation instead of sorting (default).
+ *			      In this case, the actual fill ratio is not
+ *			      guaranteed smaller than gamma.
+ *		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+ *		( Default: DROP_BASIC | DROP_AREA )
+ *	     5) options->ILU_Norm is the criterion of measuring the magnitude
+ *		of a row in a supernode of L. ( Default is INF_NORM )
+ *		options->ILU_Norm	RowSize(x[1:n])
+ *		=================	===============
+ *		ONE_NORM		||x||_1 / n
+ *		TWO_NORM		||x||_2 / sqrt(n)
+ *		INF_NORM		max{|x[i]|}
+ *	     6) options->ILU_MILU specifies the type of MILU's variation.
+ *		= SILU: do not perform Modified ILU;
+ *		= SMILU_1 (not recommended):
+ *		    U(i,i) := U(i,i) + sum(dropped entries);
+ *		= SMILU_2:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+ *		= SMILU_3:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+ *		NOTE: Even SMILU_1 does not preserve the column sum because of
+ *		late dropping.
+ *              ( Default: SILU )
+ *	     7) options->ILU_FillTol is used as the perturbation when
+ *		encountering zero pivots. If some U(i,i) = 0, so that U is
+ *		exactly singular, then
+ *		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+ *              ( Default: 1e-2 )
+ *
+ *   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ *	to the transpose of A:
+ *
+ *	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A' is
+ *	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+ *	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').
+ *
+ *	2.2. Permute columns of transpose(A) (rows of A),
+ *	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+ *	     usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the transpose(A) (after equilibration if
+ *	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+ *	     permutation Pr determined by partial pivoting.
+ *
+ *	2.4. Compute the reciprocal pivot growth factor.
+ *
+ *	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+ *	     And info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	2.6. The system of equations is solved for X using the factored form
+ *	     of transpose(A).
+ *
+ *	2.7. If options->IterRefine is not used.
+ *
+ *	2.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the LU decomposition will be performed and how the
+ *	   system will be solved.
+ *
+ * A	   (input/output) SuperMatrix*
+ *	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+ *	   of the linear equations is A->nrow. Currently, the type of A can be:
+ *	   Stype = SLU_NC or SLU_NR, Dtype = SLU_D, Mtype = SLU_GE.
+ *	   In the future, more general A may be handled.
+ *
+ *	   On entry, If options->Fact = FACTORED and equed is not 'N',
+ *	   then A must have been equilibrated by the scaling factors in
+ *	   R and/or C.
+ *	   On exit, A is not modified
+ *         if options->Equil = NO, or
+ *         if options->Equil = YES but equed = 'N' on exit, or
+ *         if options->RowPerm = NO.
+ *
+ *	   Otherwise, if options->Equil = YES and equed is not 'N',
+ *	   A is scaled as follows:
+ *	   If A->Stype = SLU_NC:
+ *	     equed = 'R':  A := diag(R) * A
+ *	     equed = 'C':  A := A * diag(C)
+ *	     equed = 'B':  A := diag(R) * A * diag(C).
+ *	   If A->Stype = SLU_NR:
+ *	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+ *	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+ *	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).
+ *
+ *         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+ *            the matrix to an I-matrix, that is A is modified as follows:
+ *            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+ *            off-diagonal entries of modulus at most 1. P is a permutation
+ *            obtained from MC64.
+ *            If MC64 fails, dgsequ() is used to equilibrate the system,
+ *            and A is scaled as above, but no permutation is involved.
+ *            On exit, A is restored to the orginal row numbering, so
+ *            Dr*A*Dc is returned.
+ *
+ * perm_c  (input/output) int*
+ *	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+ *	   which defines the permutation matrix Pc; perm_c[i] = j means
+ *	   column i of A is in position j in A*Pc.
+ *	   On exit, perm_c may be overwritten by the product of the input
+ *	   perm_c and a permutation that postorders the elimination tree
+ *	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+ *	   is already in postorder.
+ *
+ *	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+ *	   which describes permutation of columns of transpose(A) 
+ *	   (rows of A) as described above.
+ *
+ * perm_r  (input/output) int*
+ *	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+ *	   which defines the permutation matrix Pr, and is determined
+ *	   by MC64 first then followed by partial pivoting.
+ *         perm_r[i] = j means row i of A is in position j in Pr*A.
+ *
+ *	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+ *	   determines permutation of rows of transpose(A)
+ *	   (columns of A) as described above.
+ *
+ *	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	   will try to use the input perm_r, unless a certain threshold
+ *	   criterion is violated. In that case, perm_r is overwritten by a
+ *	   new permutation determined by partial pivoting or diagonal
+ *	   threshold pivoting.
+ *	   Otherwise, perm_r is output argument.
+ *
+ * etree   (input/output) int*,  dimension (A->ncol)
+ *	   Elimination tree of Pc'*A'*A*Pc.
+ *	   If options->Fact != FACTORED and options->Fact != DOFACT,
+ *	   etree is an input argument, otherwise it is an output argument.
+ *	   Note: etree is a vector of parent pointers for a forest whose
+ *	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *
+ * equed   (input/output) char*
+ *	   Specifies the form of equilibration that was done.
+ *	   = 'N': No equilibration.
+ *	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+ *	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+ *	   = 'B': Both row and column equilibration, i.e., A was replaced 
+ *		  by diag(R)*A*diag(C).
+ *	   If options->Fact = FACTORED, equed is an input argument,
+ *	   otherwise it is an output argument.
+ *
+ * R	   (input/output) double*, dimension (A->nrow)
+ *	   The row scale factors for A or transpose(A).
+ *	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+ *	   If equed = 'N' or 'C', R is not accessed.
+ *	   If options->Fact = FACTORED, R is an input argument,
+ *	       otherwise, R is output.
+ *	   If options->Fact = FACTORED and equed = 'R' or 'B', each element
+ *	       of R must be positive.
+ *
+ * C	   (input/output) double*, dimension (A->ncol)
+ *	   The column scale factors for A or transpose(A).
+ *	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+ *	   If equed = 'N' or 'R', C is not accessed.
+ *	   If options->Fact = FACTORED, C is an input argument,
+ *	       otherwise, C is output.
+ *	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+ *	       of C must be positive.
+ *
+ * L	   (output) SuperMatrix*
+ *	   The factor L from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses compressed row subscripts storage for supernodes, i.e.,
+ *	   L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.
+ *
+ * U	   (output) SuperMatrix*
+ *	   The factor U from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses column-wise storage scheme, i.e., U has types:
+ *	   Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.
+ *
+ * work    (workspace/output) void*, size (lwork) (in bytes)
+ *	   User supplied workspace, should be large enough
+ *	   to hold data structures for factors L and U.
+ *	   On exit, if fact is not 'F', L and U point to this array.
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 mem_usage->total_needed; no other side effects.
+ *
+ *	   See argument 'mem_usage' for memory usage statistics.
+ *
+ * B	   (input/output) SuperMatrix*
+ *	   B has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+ *	   On entry, the right hand side matrix.
+ *	   If B->ncol = 0, only LU decomposition is performed, the triangular
+ *			   solve is skipped.
+ *	   On exit,
+ *	      if equed = 'N', B is not modified; otherwise
+ *	      if A->Stype = SLU_NC:
+ *		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+ *		    B is overwritten by diag(R)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+ *		    B is overwritten by diag(C)*B;
+ *	      if A->Stype = SLU_NR:
+ *		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+ *		    B is overwritten by diag(C)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+ *		    B is overwritten by diag(R)*B.
+ *
+ * X	   (output) SuperMatrix*
+ *	   X has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+ *	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+ *	   to the original system of equations. Note that A and B are modified
+ *	   on exit if equed is not 'N', and the solution to the equilibrated
+ *	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+ *	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+ *	   and equed = 'R' or 'B'.
+ *
+ * recip_pivot_growth (output) double*
+ *	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+ *	   The infinity norm is used. If recip_pivot_growth is much less
+ *	   than 1, the stability of the LU factorization could be poor.
+ *
+ * rcond   (output) double*
+ *	   The estimate of the reciprocal condition number of the matrix A
+ *	   after equilibration (if done). If rcond is less than the machine
+ *	   precision (in particular, if rcond = 0), the matrix is singular
+ *	   to working precision. This condition is indicated by a return
+ *	   code of info > 0.
+ *
+ * mem_usage (output) mem_usage_t*
+ *	   Record the memory usage statistics, consisting of following fields:
+ *	   - for_lu (float)
+ *	     The amount of space used in bytes for L\U data structures.
+ *	   - total_needed (float)
+ *	     The amount of space needed in bytes to perform factorization.
+ *	   - expansions (int)
+ *	     The number of memory expansions during the LU factorization.
+ *
+ * stat   (output) SuperLUStat_t*
+ *	  Record the statistics on runtime and floating-point operation count.
+ *	  See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info    (output) int*
+ *	   = 0: successful exit
+ *	   < 0: if info = -i, the i-th argument had an illegal value
+ *	   > 0: if info = i, and i is
+ *		<= A->ncol: number of zero pivots. They are replaced by small
+ *		      entries due to options->ILU_FillTol.
+ *		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+ *		      precision, meaning that the matrix is singular to
+ *		      working precision. Nevertheless, the solution and
+ *		      error bounds are computed because there are a number
+ *		      of situations where the computed solution can be more
+ *		      accurate than the value of RCOND would suggest.
+ *		> A->ncol+1: number of bytes allocated when memory allocation
+ *		      failure occurred, plus A->ncol.
+ * </pre>
+ */
+
+void
+dgsisx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+       int *etree, char *equed, double *R, double *C,
+       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
+       SuperMatrix *B, SuperMatrix *X,
+       double *recip_pivot_growth, double *rcond,
+       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)
+{
+
+    DNformat  *Bstore, *Xstore;
+    double    *Bmat, *Xmat;
+    int       ldb, ldx, nrhs, n;
+    SuperMatrix *AA;/* A in SLU_NC format used by the factorization routine.*/
+    SuperMatrix AC; /* Matrix postmultiplied by Pc */
+    int       colequ, equil, nofact, notran, rowequ, permc_spec, mc64;
+    trans_t   trant;
+    char      norm[1];
+    int       i, j, info1;
+    double    amax, anorm, bignum, smlnum, colcnd, rowcnd, rcmax, rcmin;
+    int       relax, panel_size;
+    double    diag_pivot_thresh;
+    double    t0;      /* temporary time */
+    double    *utime;
+
+    int *perm = NULL; /* permutation returned from MC64 */
+
+    /* External functions */
+    extern double dlangs(char *, SuperMatrix *);
+
+    Bstore = B->Store;
+    Xstore = X->Store;
+    Bmat   = Bstore->nzval;
+    Xmat   = Xstore->nzval;
+    ldb    = Bstore->lda;
+    ldx    = Xstore->lda;
+    nrhs   = B->ncol;
+    n      = B->nrow;
+
+    *info = 0;
+    nofact = (options->Fact != FACTORED);
+    equil = (options->Equil == YES);
+    notran = (options->Trans == NOTRANS);
+    mc64 = (options->RowPerm == LargeDiag);
+    if ( nofact ) {
+	*(unsigned char *)equed = 'N';
+	rowequ = FALSE;
+	colequ = FALSE;
+    } else {
+	rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+	colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	smlnum = dlamch_("Safe minimum");
+	bignum = 1. / smlnum;
+    }
+
+    /* Test the input parameters */
+    if (options->Fact != DOFACT && options->Fact != SamePattern &&
+	options->Fact != SamePattern_SameRowPerm &&
+	options->Fact != FACTORED &&
+	options->Trans != NOTRANS && options->Trans != TRANS && 
+	options->Trans != CONJ &&
+	options->Equil != NO && options->Equil != YES)
+	*info = -1;
+    else if ( A->nrow != A->ncol || A->nrow < 0 ||
+	      (A->Stype != SLU_NC && A->Stype != SLU_NR) ||
+	      A->Dtype != SLU_D || A->Mtype != SLU_GE )
+	*info = -2;
+    else if (options->Fact == FACTORED &&
+	     !(rowequ || colequ || lsame_(equed, "N")))
+	*info = -6;
+    else {
+	if (rowequ) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, R[j]);
+		rcmax = SUPERLU_MAX(rcmax, R[j]);
+	    }
+	    if (rcmin <= 0.) *info = -7;
+	    else if ( A->nrow > 0)
+		rowcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else rowcnd = 1.;
+	}
+	if (colequ && *info == 0) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, C[j]);
+		rcmax = SUPERLU_MAX(rcmax, C[j]);
+	    }
+	    if (rcmin <= 0.) *info = -8;
+	    else if (A->nrow > 0)
+		colcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else colcnd = 1.;
+	}
+	if (*info == 0) {
+	    if ( lwork < -1 ) *info = -12;
+	    else if ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      B->Stype != SLU_DN || B->Dtype != SLU_D || 
+		      B->Mtype != SLU_GE )
+		*info = -13;
+	    else if ( X->ncol < 0 || Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      (B->ncol != 0 && B->ncol != X->ncol) ||
+		      X->Stype != SLU_DN ||
+		      X->Dtype != SLU_D || X->Mtype != SLU_GE )
+		*info = -14;
+	}
+    }
+    if (*info != 0) {
+	i = -(*info);
+	xerbla_("dgsisx", &i);
+	return;
+    }
+
+    /* Initialization for factor parameters */
+    panel_size = sp_ienv(1);
+    relax      = sp_ienv(2);
+    diag_pivot_thresh = options->DiagPivotThresh;
+
+    utime = stat->utime;
+
+    /* Convert A to SLU_NC format when necessary. */
+    if ( A->Stype == SLU_NR ) {
+	NRformat *Astore = A->Store;
+	AA = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+	dCreate_CompCol_Matrix(AA, A->ncol, A->nrow, Astore->nnz,
+			       Astore->nzval, Astore->colind, Astore->rowptr,
+			       SLU_NC, A->Dtype, A->Mtype);
+	if ( notran ) { /* Reverse the transpose argument. */
+	    trant = TRANS;
+	    notran = 0;
+	} else {
+	    trant = NOTRANS;
+	    notran = 1;
+	}
+    } else { /* A->Stype == SLU_NC */
+	trant = options->Trans;
+	AA = A;
+    }
+
+    if ( nofact ) {
+	register int i, j;
+	NCformat *Astore = AA->Store;
+	int nnz = Astore->nnz;
+	int *colptr = Astore->colptr;
+	int *rowind = Astore->rowind;
+	double *nzval = (double *)Astore->nzval;
+
+	if ( mc64 ) {
+	    t0 = SuperLU_timer_();
+	    if ((perm = intMalloc(n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for perm[]");
+
+	    info1 = dldperm(5, n, nnz, colptr, rowind, nzval, perm, R, C);
+
+	    if (info1 != 0) { /* MC64 fails, call dgsequ() later */
+		mc64 = 0;
+		SUPERLU_FREE(perm);
+		perm = NULL;
+	    } else {
+	        if ( equil ) {
+	            rowequ = colequ = 1;
+		    for (i = 0; i < n; i++) {
+		        R[i] = exp(R[i]);
+		        C[i] = exp(C[i]);
+		    }
+		    /* scale the matrix */
+		    for (j = 0; j < n; j++) {
+		        for (i = colptr[j]; i < colptr[j + 1]; i++) {
+			    nzval[i] *= R[rowind[i]] * C[j];
+		        }
+		    }
+	            *equed = 'B';
+                }
+
+                /* permute the matrix */
+		for (j = 0; j < n; j++) {
+		    for (i = colptr[j]; i < colptr[j + 1]; i++) {
+			/*nzval[i] *= R[rowind[i]] * C[j];*/
+			rowind[i] = perm[rowind[i]];
+		    }
+		}
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+
+	if ( !mc64 & equil ) { /* Only perform equilibration, no row perm */
+	    t0 = SuperLU_timer_();
+	    /* Compute row and column scalings to equilibrate the matrix A. */
+	    dgsequ(AA, R, C, &rowcnd, &colcnd, &amax, &info1);
+
+	    if ( info1 == 0 ) {
+		/* Equilibrate matrix A. */
+		dlaqgs(AA, R, C, rowcnd, colcnd, amax, equed);
+		rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+		colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+    }
+
+
+    if ( nofact ) {
+	
+	t0 = SuperLU_timer_();
+	/*
+	 * Gnet column permutation vector perm_c[], according to permc_spec:
+	 *   permc_spec = NATURAL:  natural ordering 
+	 *   permc_spec = MMD_AT_PLUS_A: minimum degree on structure of A'+A
+	 *   permc_spec = MMD_ATA:  minimum degree on structure of A'*A
+	 *   permc_spec = COLAMD:   approximate minimum degree column ordering
+	 *   permc_spec = MY_PERMC: the ordering already supplied in perm_c[]
+	 */
+	permc_spec = options->ColPerm;
+	if ( permc_spec != MY_PERMC && options->Fact == DOFACT )
+	    get_perm_c(permc_spec, AA, perm_c);
+	utime[COLPERM] = SuperLU_timer_() - t0;
+
+	t0 = SuperLU_timer_();
+	sp_preorder(options, AA, perm_c, etree, &AC);
+	utime[ETREE] = SuperLU_timer_() - t0;
+
+	/* Compute the LU factorization of A*Pc. */
+	t0 = SuperLU_timer_();
+	dgsitrf(options, &AC, relax, panel_size, etree, work, lwork,
+                perm_c, perm_r, L, U, stat, info);
+	utime[FACT] = SuperLU_timer_() - t0;
+
+	if ( lwork == -1 ) {
+	    mem_usage->total_needed = *info - A->ncol;
+	    return;
+	}
+
+	if ( mc64 ) { /* Fold MC64's perm[] into perm_r[]. */
+	    NCformat *Astore = AA->Store;
+	    int nnz = Astore->nnz, *rowind = Astore->rowind;
+	    int *perm_tmp, *iperm;
+	    if ((perm_tmp = intMalloc(2*n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for perm_tmp[]");
+	    iperm = perm_tmp + n;
+	    for (i = 0; i < n; ++i) perm_tmp[i] = perm_r[perm[i]];
+	    for (i = 0; i < n; ++i) {
+		perm_r[i] = perm_tmp[i];
+		iperm[perm[i]] = i;
+	    }
+
+	    /* Restore A's original row indices. */
+	    for (i = 0; i < nnz; ++i) rowind[i] = iperm[rowind[i]];
+
+	    SUPERLU_FREE(perm); /* MC64 permutation */
+	    SUPERLU_FREE(perm_tmp);
+	}
+    }
+
+    if ( options->PivotGrowth ) {
+	if ( *info > 0 ) return;
+
+	/* Compute the reciprocal pivot growth factor *recip_pivot_growth. */
+	*recip_pivot_growth = dPivotGrowth(A->ncol, AA, perm_c, L, U);
+    }
+
+    if ( options->ConditionNumber ) {
+	/* Estimate the reciprocal of the condition number of A. */
+	t0 = SuperLU_timer_();
+	if ( notran ) {
+	    *(unsigned char *)norm = '1';
+	} else {
+	    *(unsigned char *)norm = 'I';
+	}
+	anorm = dlangs(norm, AA);
+	dgscon(norm, L, U, anorm, rcond, stat, &info1);
+	utime[RCOND] = SuperLU_timer_() - t0;
+    }
+
+    if ( nrhs > 0 ) { /* Solve the system */
+        double *rhs_work;
+
+	/* Scale and permute the right-hand side if equilibration
+           and permutation from MC64 were performed. */
+	if ( notran ) {
+	    if ( rowequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i)
+		        Bmat[i + j*ldb] *= R[i];
+	    }
+	} else if ( colequ ) {
+	    for (j = 0; j < nrhs; ++j)
+		for (i = 0; i < n; ++i) {
+	            Bmat[i + j*ldb] *= C[i];
+		}
+	}
+
+	/* Compute the solution matrix X. */
+	for (j = 0; j < nrhs; j++)  /* Save a copy of the right hand sides */
+	    for (i = 0; i < B->nrow; i++)
+		Xmat[i + j*ldx] = Bmat[i + j*ldb];
+
+	t0 = SuperLU_timer_();
+	dgstrs (trant, L, U, perm_c, perm_r, X, stat, &info1);
+	utime[SOLVE] = SuperLU_timer_() - t0;
+
+	/* Transform the solution matrix X to a solution of the original
+	   system. */
+	if ( notran ) {
+	    if ( colequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i) {
+                        Xmat[i + j*ldx] *= C[i];
+                    }
+	    }
+	} else { /* transposed system */
+	    if ( rowequ ) {
+	        for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < A->nrow; ++i) {
+              	        Xmat[i + j*ldx] *= R[i];
+                    }
+	    }
+	}
+
+    } /* end if nrhs > 0 */
+
+    if ( options->ConditionNumber ) {
+	/* The matrix is singular to working precision. */
+	if ( *rcond < dlamch_("E") && *info == 0) *info = A->ncol + 1;
+    }
+
+    if ( nofact ) {
+	ilu_dQuerySpace(L, U, mem_usage);
+	Destroy_CompCol_Permuted(&AC);
+    }
+    if ( A->Stype == SLU_NR ) {
+	Destroy_SuperMatrix_Store(AA);
+	SUPERLU_FREE(AA);
+    }
+
+}
diff --git a/SRC/dgsisx.c.bak b/SRC/dgsisx.c.bak
new file mode 100644
index 0000000..22fa1e7
--- /dev/null
+++ b/SRC/dgsisx.c.bak
@@ -0,0 +1,727 @@
+/*! @file dgsisx.c
+ * \brief Computes an approximate solutions of linear equations A*X=B or A'*X=B
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.2) --
+ * Lawrence Berkeley National Laboratory.
+ * August, 2011
+ * </pre>
+ */
+#include "slu_ddefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * DGSISX computes an approximate solutions of linear equations
+ * A*X=B or A'*X=B, using the ILU factorization from dgsitrf().
+ * An estimation of the condition number is provided. 
+ * The routine performs the following steps:
+ *
+ *   1. If A is stored column-wise (A->Stype = SLU_NC):
+ *  
+ *	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A is
+ *	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+ *	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+ *	     = TRANS or CONJ).
+ *
+ *	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+ *	     matrix that usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the matrix A (after equilibration if options->Equil = YES)
+ *	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.
+ *
+ *	1.4. Compute the reciprocal pivot growth factor.
+ *
+ *	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+ *	     and info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	1.6. The system of equations is solved for X using the factored form
+ *	     of A.
+ *
+ *	1.7. options->IterRefine is not used
+ *
+ *	1.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *	1.9. options for ILU only
+ *	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+ *		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+ *		entries of modulus 1 on the diagonal and off-diagonal entries
+ *		of modulus at most 1. If MC64 fails, dgsequ() is used to
+ *		equilibrate the system.
+ *              ( Default: LargeDiag )
+ *	     2) options->ILU_DropTol = tau is the threshold for dropping.
+ *		For L, it is used directly (for the whole row in a supernode);
+ *		For U, ||A(:,i)||_oo * tau is used as the threshold
+ *	        for the	i-th column.
+ *		If a secondary dropping rule is required, tau will
+ *	        also be used to compute the second threshold.
+ *              ( Default: 1e-4 )
+ *	     3) options->ILU_FillFactor = gamma, used as the initial guess
+ *		of memory growth.
+ *		If a secondary dropping rule is required, it will also
+ *              be used as an upper bound of the memory.
+ *              ( Default: 10 )
+ *	     4) options->ILU_DropRule specifies the dropping rule.
+ *		Option	      Meaning
+ *		======	      ===========
+ *		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+ *		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+ *		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+ *			      p = gamma * nnz(A(:,j)).
+ *		DROP_AREA:    Variation of ILUTP, for j-th column, use
+ *			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+ *		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+ *			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+ *				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+ *			      Otherwise
+ *				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+ *			      tau_U(j) uses the similar rule.
+ *			      NOTE: the thresholds used by L and U are separate.
+ *		DROP_INTERP:  Compute the second dropping threshold by
+ *			      interpolation instead of sorting (default).
+ *			      In this case, the actual fill ratio is not
+ *			      guaranteed smaller than gamma.
+ *		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+ *		( Default: DROP_BASIC | DROP_AREA )
+ *	     5) options->ILU_Norm is the criterion of measuring the magnitude
+ *		of a row in a supernode of L. ( Default is INF_NORM )
+ *		options->ILU_Norm	RowSize(x[1:n])
+ *		=================	===============
+ *		ONE_NORM		||x||_1 / n
+ *		TWO_NORM		||x||_2 / sqrt(n)
+ *		INF_NORM		max{|x[i]|}
+ *	     6) options->ILU_MILU specifies the type of MILU's variation.
+ *		= SILU: do not perform Modified ILU;
+ *		= SMILU_1 (not recommended):
+ *		    U(i,i) := U(i,i) + sum(dropped entries);
+ *		= SMILU_2:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+ *		= SMILU_3:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+ *		NOTE: Even SMILU_1 does not preserve the column sum because of
+ *		late dropping.
+ *              ( Default: SILU )
+ *	     7) options->ILU_FillTol is used as the perturbation when
+ *		encountering zero pivots. If some U(i,i) = 0, so that U is
+ *		exactly singular, then
+ *		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+ *              ( Default: 1e-2 )
+ *
+ *   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ *	to the transpose of A:
+ *
+ *	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A' is
+ *	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+ *	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').
+ *
+ *	2.2. Permute columns of transpose(A) (rows of A),
+ *	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+ *	     usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the transpose(A) (after equilibration if
+ *	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+ *	     permutation Pr determined by partial pivoting.
+ *
+ *	2.4. Compute the reciprocal pivot growth factor.
+ *
+ *	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+ *	     And info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	2.6. The system of equations is solved for X using the factored form
+ *	     of transpose(A).
+ *
+ *	2.7. If options->IterRefine is not used.
+ *
+ *	2.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the LU decomposition will be performed and how the
+ *	   system will be solved.
+ *
+ * A	   (input/output) SuperMatrix*
+ *	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+ *	   of the linear equations is A->nrow. Currently, the type of A can be:
+ *	   Stype = SLU_NC or SLU_NR, Dtype = SLU_D, Mtype = SLU_GE.
+ *	   In the future, more general A may be handled.
+ *
+ *	   On entry, If options->Fact = FACTORED and equed is not 'N',
+ *	   then A must have been equilibrated by the scaling factors in
+ *	   R and/or C.
+ *	   On exit, A is not modified
+ *         if options->Equil = NO, or
+ *         if options->Equil = YES but equed = 'N' on exit, or
+ *         if options->RowPerm = NO.
+ *
+ *	   Otherwise, if options->Equil = YES and equed is not 'N',
+ *	   A is scaled as follows:
+ *	   If A->Stype = SLU_NC:
+ *	     equed = 'R':  A := diag(R) * A
+ *	     equed = 'C':  A := A * diag(C)
+ *	     equed = 'B':  A := diag(R) * A * diag(C).
+ *	   If A->Stype = SLU_NR:
+ *	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+ *	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+ *	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).
+ *
+ *         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+ *            the matrix to an I-matrix, that is A is modified as follows:
+ *            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+ *            off-diagonal entries of modulus at most 1. P is a permutation
+ *            obtained from MC64.
+ *            If MC64 fails, dgsequ() is used to equilibrate the system,
+ *            and A is scaled as above, but no permutation is
+ *            involved.
+ *            On exit, A is restored to the orginal row numbering, so
+ *            Dr*A*Dc is returned.
+ *
+ * perm_c  (input/output) int*
+ *	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+ *	   which defines the permutation matrix Pc; perm_c[i] = j means
+ *	   column i of A is in position j in A*Pc.
+ *	   On exit, perm_c may be overwritten by the product of the input
+ *	   perm_c and a permutation that postorders the elimination tree
+ *	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+ *	   is already in postorder.
+ *
+ *	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+ *	   which describes permutation of columns of transpose(A) 
+ *	   (rows of A) as described above.
+ *
+ * perm_r  (input/output) int*
+ *	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+ *	   which defines the permutation matrix Pr, and is determined
+ *	   by MC64 first then followed by partial pivoting.
+ *         perm_r[i] = j means row i of A is in position j in Pr*A.
+ *
+ *	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+ *	   determines permutation of rows of transpose(A)
+ *	   (columns of A) as described above.
+ *
+ *	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	   will try to use the input perm_r, unless a certain threshold
+ *	   criterion is violated. In that case, perm_r is overwritten by a
+ *	   new permutation determined by partial pivoting or diagonal
+ *	   threshold pivoting.
+ *	   Otherwise, perm_r is output argument.
+ *
+ * etree   (input/output) int*,  dimension (A->ncol)
+ *	   Elimination tree of Pc'*A'*A*Pc.
+ *	   If options->Fact != FACTORED and options->Fact != DOFACT,
+ *	   etree is an input argument, otherwise it is an output argument.
+ *	   Note: etree is a vector of parent pointers for a forest whose
+ *	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *
+ * equed   (input/output) char*
+ *	   Specifies the form of equilibration that was done.
+ *	   = 'N': No equilibration.
+ *	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+ *	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+ *	   = 'B': Both row and column equilibration, i.e., A was replaced 
+ *		  by diag(R)*A*diag(C).
+ *	   If options->Fact = FACTORED, equed is an input argument,
+ *	   otherwise it is an output argument.
+ *
+ * R	   (input/output) double*, dimension (A->nrow)
+ *	   The row scale factors for A or transpose(A).
+ *	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+ *	   If equed = 'N' or 'C', R is not accessed.
+ *	   If options->Fact = FACTORED, R is an input argument,
+ *	       otherwise, R is output.
+ *	   If options->Fact = FACTORED and equed = 'R' or 'B', each element
+ *	       of R must be positive.
+ *
+ * C	   (input/output) double*, dimension (A->ncol)
+ *	   The column scale factors for A or transpose(A).
+ *	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+ *	   If equed = 'N' or 'R', C is not accessed.
+ *	   If options->Fact = FACTORED, C is an input argument,
+ *	       otherwise, C is output.
+ *	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+ *	       of C must be positive.
+ *
+ * L	   (output) SuperMatrix*
+ *	   The factor L from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses compressed row subscripts storage for supernodes, i.e.,
+ *	   L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.
+ *
+ * U	   (output) SuperMatrix*
+ *	   The factor U from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses column-wise storage scheme, i.e., U has types:
+ *	   Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.
+ *
+ * work    (workspace/output) void*, size (lwork) (in bytes)
+ *	   User supplied workspace, should be large enough
+ *	   to hold data structures for factors L and U.
+ *	   On exit, if fact is not 'F', L and U point to this array.
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 mem_usage->total_needed; no other side effects.
+ *
+ *	   See argument 'mem_usage' for memory usage statistics.
+ *
+ * B	   (input/output) SuperMatrix*
+ *	   B has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+ *	   On entry, the right hand side matrix.
+ *	   If B->ncol = 0, only LU decomposition is performed, the triangular
+ *			   solve is skipped.
+ *	   On exit,
+ *	      if equed = 'N', B is not modified; otherwise
+ *	      if A->Stype = SLU_NC:
+ *		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+ *		    B is overwritten by diag(R)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+ *		    B is overwritten by diag(C)*B;
+ *	      if A->Stype = SLU_NR:
+ *		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+ *		    B is overwritten by diag(C)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+ *		    B is overwritten by diag(R)*B.
+ *
+ * X	   (output) SuperMatrix*
+ *	   X has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
+ *	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+ *	   to the original system of equations. Note that A and B are modified
+ *	   on exit if equed is not 'N', and the solution to the equilibrated
+ *	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+ *	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+ *	   and equed = 'R' or 'B'.
+ *
+ * recip_pivot_growth (output) double*
+ *	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+ *	   The infinity norm is used. If recip_pivot_growth is much less
+ *	   than 1, the stability of the LU factorization could be poor.
+ *
+ * rcond   (output) double*
+ *	   The estimate of the reciprocal condition number of the matrix A
+ *	   after equilibration (if done). If rcond is less than the machine
+ *	   precision (in particular, if rcond = 0), the matrix is singular
+ *	   to working precision. This condition is indicated by a return
+ *	   code of info > 0.
+ *
+ * mem_usage (output) mem_usage_t*
+ *	   Record the memory usage statistics, consisting of following fields:
+ *	   - for_lu (float)
+ *	     The amount of space used in bytes for L\U data structures.
+ *	   - total_needed (float)
+ *	     The amount of space needed in bytes to perform factorization.
+ *	   - expansions (int)
+ *	     The number of memory expansions during the LU factorization.
+ *
+ * stat   (output) SuperLUStat_t*
+ *	  Record the statistics on runtime and floating-point operation count.
+ *	  See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info    (output) int*
+ *	   = 0: successful exit
+ *	   < 0: if info = -i, the i-th argument had an illegal value
+ *	   > 0: if info = i, and i is
+ *		<= A->ncol: number of zero pivots. They are replaced by small
+ *		      entries due to options->ILU_FillTol.
+ *		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+ *		      precision, meaning that the matrix is singular to
+ *		      working precision. Nevertheless, the solution and
+ *		      error bounds are computed because there are a number
+ *		      of situations where the computed solution can be more
+ *		      accurate than the value of RCOND would suggest.
+ *		> A->ncol+1: number of bytes allocated when memory allocation
+ *		      failure occurred, plus A->ncol.
+ * </pre>
+ */
+
+void
+dgsisx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+       int *etree, char *equed, double *R, double *C,
+       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
+       SuperMatrix *B, SuperMatrix *X,
+       double *recip_pivot_growth, double *rcond,
+       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)
+{
+
+    DNformat  *Bstore, *Xstore;
+    double    *Bmat, *Xmat;
+    SuperMatrix *AA;/* A in SLU_NC format used by the factorization routine.*/
+    SuperMatrix AC; /* Matrix postmultiplied by Pc */
+    int       colequ, equil, nofact, notran, rowequ, permc_spec, mc64;
+    trans_t   trant;
+    char      norm[1];
+    int       ldb, ldx, nrhs, n;
+    int       i, j, info1;
+    double    amax, anorm, bignum, smlnum, colcnd, rowcnd, rcmax, rcmin;
+    int       relax, panel_size;
+    double    diag_pivot_thresh;
+    double    t0;      /* temporary time */
+    double    *utime;
+
+    int *perm = NULL; /* permutation returned from MC64 */
+
+    /* External functions */
+    extern double dlangs(char *, SuperMatrix *);
+
+    Bstore = B->Store;
+    Xstore = X->Store;
+    Bmat   = Bstore->nzval;
+    Xmat   = Xstore->nzval;
+    ldb    = Bstore->lda;
+    ldx    = Xstore->lda;
+    nrhs   = B->ncol;
+    n      = B->nrow;
+
+    *info = 0;
+    nofact = (options->Fact != FACTORED);
+    equil = (options->Equil == YES);
+    notran = (options->Trans == NOTRANS);
+    mc64 = (options->RowPerm == LargeDiag);
+    if ( nofact ) {
+	*(unsigned char *)equed = 'N';
+	rowequ = FALSE;
+	colequ = FALSE;
+    } else {
+	rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+	colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	smlnum = dlamch_("Safe minimum");
+	bignum = 1. / smlnum;
+    }
+
+    /* Test the input parameters */
+    if (!nofact && options->Fact != DOFACT && options->Fact != SamePattern &&
+	options->Fact != SamePattern_SameRowPerm &&
+	!notran && options->Trans != TRANS && options->Trans != CONJ &&
+	!equil && options->Equil != NO)
+	*info = -1;
+    else if ( A->nrow != A->ncol || A->nrow < 0 ||
+	      (A->Stype != SLU_NC && A->Stype != SLU_NR) ||
+	      A->Dtype != SLU_D || A->Mtype != SLU_GE )
+	*info = -2;
+    else if (options->Fact == FACTORED &&
+	     !(rowequ || colequ || lsame_(equed, "N")))
+	*info = -6;
+    else {
+	if (rowequ) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, R[j]);
+		rcmax = SUPERLU_MAX(rcmax, R[j]);
+	    }
+	    if (rcmin <= 0.) *info = -7;
+	    else if ( A->nrow > 0)
+		rowcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else rowcnd = 1.;
+	}
+	if (colequ && *info == 0) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, C[j]);
+		rcmax = SUPERLU_MAX(rcmax, C[j]);
+	    }
+	    if (rcmin <= 0.) *info = -8;
+	    else if (A->nrow > 0)
+		colcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else colcnd = 1.;
+	}
+	if (*info == 0) {
+	    if ( lwork < -1 ) *info = -12;
+	    else if ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      B->Stype != SLU_DN || B->Dtype != SLU_D || 
+		      B->Mtype != SLU_GE )
+		*info = -13;
+	    else if ( X->ncol < 0 || Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      (B->ncol != 0 && B->ncol != X->ncol) ||
+		      X->Stype != SLU_DN ||
+		      X->Dtype != SLU_D || X->Mtype != SLU_GE )
+		*info = -14;
+	}
+    }
+    if (*info != 0) {
+	i = -(*info);
+	xerbla_("dgsisx", &i);
+	return;
+    }
+
+    /* Initialization for factor parameters */
+    panel_size = sp_ienv(1);
+    relax      = sp_ienv(2);
+    diag_pivot_thresh = options->DiagPivotThresh;
+
+    utime = stat->utime;
+
+    /* Convert A to SLU_NC format when necessary. */
+    if ( A->Stype == SLU_NR ) {
+	NRformat *Astore = A->Store;
+	AA = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+	dCreate_CompCol_Matrix(AA, A->ncol, A->nrow, Astore->nnz,
+			       Astore->nzval, Astore->colind, Astore->rowptr,
+			       SLU_NC, A->Dtype, A->Mtype);
+	if ( notran ) { /* Reverse the transpose argument. */
+	    trant = TRANS;
+	    notran = 0;
+	} else {
+	    trant = NOTRANS;
+	    notran = 1;
+	}
+    } else { /* A->Stype == SLU_NC */
+	trant = options->Trans;
+	AA = A;
+    }
+
+    if ( nofact ) {
+	register int i, j;
+	NCformat *Astore = AA->Store;
+	int nnz = Astore->nnz;
+	int *colptr = Astore->colptr;
+	int *rowind = Astore->rowind;
+	double *nzval = (double *)Astore->nzval;
+
+	if ( mc64 ) {
+    	    /*rowequ = colequ = 1;*/
+	    t0 = SuperLU_timer_();
+	    if ((perm = intMalloc(n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for perm[]");
+
+	    info1 = dldperm(5, n, nnz, colptr, rowind, nzval, perm, R, C);
+
+	    if (info1 > 0) { /* MC64 fails, call dgsequ() later */
+		mc64 = 0;
+		SUPERLU_FREE(perm);
+		perm = NULL;
+	    } else {
+		if ( equil ) {
+		    rowequ = colequ = 1;
+		    for (i = 0; i < n; i++) {
+			R[i] = exp(R[i]);
+			C[i] = exp(C[i]);
+		    }
+		    /* Scale the matrix */
+		    for (j = 0; j < n; j++) {
+			for (i = colptr[j]; i < colptr[j + 1]; i++) {
+			    nzval[i] *= R[rowind[i]] * C[j];
+			}
+		    }
+		    *equed = 'B';
+		}
+		/* permute and scale the matrix */
+		for (j = 0; j < n; j++) {
+		    for (i = colptr[j]; i < colptr[j + 1]; i++) {
+			/*nzval[i] *= R[rowind[i]] * C[j];*/
+			rowind[i] = perm[rowind[i]];
+		    }
+		}
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+	if ( !mc64 & equil ) { /* Only perform equilibration, no row perm */
+	    t0 = SuperLU_timer_();
+	    /* Compute row and column scalings to equilibrate the matrix A. */
+	    dgsequ(AA, R, C, &rowcnd, &colcnd, &amax, &info1);
+
+	    if ( info1 == 0 ) {
+		/* Equilibrate matrix A. */
+		dlaqgs(AA, R, C, rowcnd, colcnd, amax, equed);
+		rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+		colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+    }
+
+
+    if ( nofact ) {
+	
+	t0 = SuperLU_timer_();
+	/*
+	 * Gnet column permutation vector perm_c[], according to permc_spec:
+	 *   permc_spec = NATURAL:  natural ordering 
+	 *   permc_spec = MMD_AT_PLUS_A: minimum degree on structure of A'+A
+	 *   permc_spec = MMD_ATA:  minimum degree on structure of A'*A
+	 *   permc_spec = COLAMD:   approximate minimum degree column ordering
+	 *   permc_spec = MY_PERMC: the ordering already supplied in perm_c[]
+	 */
+	permc_spec = options->ColPerm;
+	if ( permc_spec != MY_PERMC && options->Fact == DOFACT )
+	    get_perm_c(permc_spec, AA, perm_c);
+	utime[COLPERM] = SuperLU_timer_() - t0;
+
+	t0 = SuperLU_timer_();
+	sp_preorder(options, AA, perm_c, etree, &AC);
+	utime[ETREE] = SuperLU_timer_() - t0;
+
+	/* Compute the LU factorization of A*Pc. */
+	t0 = SuperLU_timer_();
+	dgsitrf(options, &AC, relax, panel_size, etree, work, lwork,
+                perm_c, perm_r, L, U, stat, info);
+	utime[FACT] = SuperLU_timer_() - t0;
+
+	if ( lwork == -1 ) {
+	    mem_usage->total_needed = *info - A->ncol;
+	    return;
+	}
+
+	if ( mc64 ) { /* Fold MC64's perm[] into perm_r[]. */
+	    NCformat *Astore = AA->Store;
+	    int nnz = Astore->nnz, *rowind = Astore->rowind;
+	    int *perm_tmp, *iperm;
+	    if ((perm_tmp = intMalloc(2*n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for perm_tmp[]");
+	    iperm = perm_tmp + n;
+	    for (i = 0; i < n; ++i) perm_tmp[i] = perm_r[perm[i]];
+	    for (i = 0; i < n; ++i) {
+		perm_r[i] = perm_tmp[i];
+		iperm[perm[i]] = i;
+	    }
+
+	    /* Restore A's original row indices. */
+	    for (i = 0; i < nnz; ++i) rowind[i] = iperm[rowind[i]];
+
+	    /*printf(" ... fold mc64 perm, nrhs=%d, n=%d, nnz=%d\n",nrhs,n,nnz);
+	      fflush(stdout);*/
+
+	    SUPERLU_FREE(perm); /* MC64 permutation */
+	    SUPERLU_FREE(perm_tmp);
+	}
+    }
+
+    if ( options->PivotGrowth ) {
+	if ( *info > 0 ) return;
+
+	/* Compute the reciprocal pivot growth factor *recip_pivot_growth. */
+	*recip_pivot_growth = dPivotGrowth(A->ncol, AA, perm_c, L, U);
+    }
+
+    if ( options->ConditionNumber ) {
+	/* Estimate the reciprocal of the condition number of A. */
+	t0 = SuperLU_timer_();
+	if ( notran ) {
+	    *(unsigned char *)norm = '1';
+	} else {
+	    *(unsigned char *)norm = 'I';
+	}
+	anorm = dlangs(norm, AA);
+	dgscon(norm, L, U, anorm, rcond, stat, &info1);
+	utime[RCOND] = SuperLU_timer_() - t0;
+    }
+
+    if ( nrhs > 0 ) { /* Solve the system */
+        double *rhs_work;
+
+	/* Scale and permute the right-hand side if equilibration
+           and permutation from MC64 were performed. */
+	if ( notran ) {
+	    if ( rowequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i)
+		        Bmat[i + j*ldb] *= R[i];
+	    }
+	} else if ( colequ ) {
+	    for (j = 0; j < nrhs; ++j)
+		for (i = 0; i < n; ++i) {
+	            Bmat[i + j*ldb] *= C[i];
+		}
+	}
+
+	/* Compute the solution matrix X. */
+	for (j = 0; j < nrhs; j++)  /* Save a copy of the right hand sides */
+	    for (i = 0; i < B->nrow; i++)
+		Xmat[i + j*ldx] = Bmat[i + j*ldb];
+
+	t0 = SuperLU_timer_();
+	dgstrs (trant, L, U, perm_c, perm_r, X, stat, &info1);
+	utime[SOLVE] = SuperLU_timer_() - t0;
+
+	/* Transform the solution matrix X to a solution of the original
+	   system. */
+	if ( notran ) {
+	    if ( colequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i) {
+                        Xmat[i + j*ldx] *= C[i];
+                    }
+	    }
+	} else { /* transposed system */
+	    if ( rowequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < A->nrow; ++i) {
+			Xmat[i + j*ldx] *= R[i];
+		    }
+	    }
+	}
+
+    } /* end if nrhs > 0 */
+
+    if ( options->ConditionNumber ) {
+	/* The matrix is singular to working precision. */
+	if ( *rcond < dlamch_("E") && *info == 0) *info = A->ncol + 1;
+    }
+
+    if ( nofact ) {
+	ilu_dQuerySpace(L, U, mem_usage);
+	Destroy_CompCol_Permuted(&AC);
+    }
+    if ( A->Stype == SLU_NR ) {
+	Destroy_SuperMatrix_Store(AA);
+	SUPERLU_FREE(AA);
+    }
+
+}
+
diff --git a/SRC/dgsitrf.c b/SRC/dgsitrf.c
new file mode 100644
index 0000000..62e70f1
--- /dev/null
+++ b/SRC/dgsitrf.c
@@ -0,0 +1,639 @@
+
+/*! @file dgsitrf.c
+ * \brief Computes an ILU factorization of a general sparse matrix
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ *
+ * </pre>
+ */
+
+#include "slu_ddefs.h"
+
+#ifdef DEBUG
+int num_drop_L;
+#endif
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * DGSITRF computes an ILU factorization of a general sparse m-by-n
+ * matrix A using partial pivoting with row interchanges.
+ * The factorization has the form
+ *     Pr * A = L * U
+ * where Pr is a row permutation matrix, L is lower triangular with unit
+ * diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ * triangular (upper trapezoidal if A->nrow < A->ncol).
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the ILU decomposition will be performed.
+ *
+ * A	    (input) SuperMatrix*
+ *	    Original matrix A, permuted by columns, of dimension
+ *	    (A->nrow, A->ncol). The type of A can be:
+ *	    Stype = SLU_NCP; Dtype = SLU_D; Mtype = SLU_GE.
+ *
+ * relax    (input) int
+ *	    To control degree of relaxing supernodes. If the number
+ *	    of nodes (columns) in a subtree of the elimination tree is less
+ *	    than relax, this subtree is considered as one supernode,
+ *	    regardless of the row structures of those columns.
+ *
+ * panel_size (input) int
+ *	    A panel consists of at most panel_size consecutive columns.
+ *
+ * etree    (input) int*, dimension (A->ncol)
+ *	    Elimination tree of A'*A.
+ *	    Note: etree is a vector of parent pointers for a forest whose
+ *	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *	    On input, the columns of A should be permuted so that the
+ *	    etree is in a certain postorder.
+ *
+ * work     (input/output) void*, size (lwork) (in bytes)
+ *	    User-supplied work space and space for the output data structures.
+ *	    Not referenced if lwork = 0;
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 *info; no other side effects.
+ *
+ * perm_c   (input) int*, dimension (A->ncol)
+ *	    Column permutation vector, which defines the
+ *	    permutation matrix Pc; perm_c[i] = j means column i of A is
+ *	    in position j in A*Pc.
+ *	    When searching for diagonal, perm_c[*] is applied to the
+ *	    row subscripts of A, so that diagonal threshold pivoting
+ *	    can find the diagonal of A, rather than that of A*Pc.
+ *
+ * perm_r   (input/output) int*, dimension (A->nrow)
+ *	    Row permutation vector which defines the permutation matrix Pr,
+ *	    perm_r[i] = j means row i of A is in position j in Pr*A.
+ *	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	       will try to use the input perm_r, unless a certain threshold
+ *	       criterion is violated. In that case, perm_r is overwritten by
+ *	       a new permutation determined by partial pivoting or diagonal
+ *	       threshold pivoting.
+ *	    Otherwise, perm_r is output argument;
+ *
+ * L	    (output) SuperMatrix*
+ *	    The factor L from the factorization Pr*A=L*U; use compressed row
+ *	    subscripts storage for supernodes, i.e., L has type:
+ *	    Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.
+ *
+ * U	    (output) SuperMatrix*
+ *	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+ *	    storage scheme, i.e., U has types: Stype = SLU_NC,
+ *	    Dtype = SLU_D, Mtype = SLU_TRU.
+ *
+ * stat     (output) SuperLUStat_t*
+ *	    Record the statistics on runtime and floating-point operation count.
+ *	    See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info     (output) int*
+ *	    = 0: successful exit
+ *	    < 0: if info = -i, the i-th argument had an illegal value
+ *	    > 0: if info = i, and i is
+ *	       <= A->ncol: number of zero pivots. They are replaced by small
+ *		  entries according to options->ILU_FillTol.
+ *	       > A->ncol: number of bytes allocated when memory allocation
+ *		  failure occurred, plus A->ncol. If lwork = -1, it is
+ *		  the estimated amount of space needed, plus A->ncol.
+ *
+ * ======================================================================
+ *
+ * Local Working Arrays:
+ * ======================
+ *   m = number of rows in the matrix
+ *   n = number of columns in the matrix
+ *
+ *   marker[0:3*m-1]: marker[i] = j means that node i has been
+ *	reached when working on column j.
+ *	Storage: relative to original row subscripts
+ *	NOTE: There are 4 of them:
+ *	      marker/marker1 are used for panel dfs, see (ilu_)dpanel_dfs.c;
+ *	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+ *	      marker_relax(has its own space) is used for relaxed supernodes.
+ *
+ *   parent[0:m-1]: parent vector used during dfs
+ *	Storage: relative to new row subscripts
+ *
+ *   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ *	unexplored neighbor of i in lsub[*]
+ *
+ *   segrep[0:nseg-1]: contains the list of supernodal representatives
+ *	in topological order of the dfs. A supernode representative is the
+ *	last column of a supernode.
+ *	The maximum size of segrep[] is n.
+ *
+ *   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+ *	supernodal representative r, repfnz[r] is the location of the first
+ *	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+ *	indicates the supernode r has been explored.
+ *	NOTE: There are W of them, each used for one column of a panel.
+ *
+ *   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+ *	the panel diagonal. These are filled in during dpanel_dfs(), and are
+ *	used later in the inner LU factorization within the panel.
+ *	panel_lsub[]/dense[] pair forms the SPA data structure.
+ *	NOTE: There are W of them.
+ *
+ *   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ *		   NOTE: there are W of them.
+ *
+ *   tempv[0:*]: real temporary used for dense numeric kernels;
+ *	The size of this array is defined by NUM_TEMPV() in slu_util.h.
+ *	It is also used by the dropping routine ilu_ddrop_row().
+ * </pre>
+ */
+
+void
+dgsitrf(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size,
+	int *etree, void *work, int lwork, int *perm_c, int *perm_r,
+	SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)
+{
+    /* Local working arrays */
+    NCPformat *Astore;
+    int       *iperm_r = NULL; /* inverse of perm_r; used when
+				  options->Fact == SamePattern_SameRowPerm */
+    int       *iperm_c; /* inverse of perm_c */
+    int       *swap, *iswap; /* swap is used to store the row permutation
+				during the factorization. Initially, it is set
+				to iperm_c (row indeces of Pc*A*Pc').
+				iswap is the inverse of swap. After the
+				factorization, it is equal to perm_r. */
+    int       *iwork;
+    double   *dwork;
+    int       *segrep, *repfnz, *parent, *xplore;
+    int       *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
+    int       *marker, *marker_relax;
+    double    *dense, *tempv;
+    int       *relax_end, *relax_fsupc;
+    double    *a;
+    int       *asub;
+    int       *xa_begin, *xa_end;
+    int       *xsup, *supno;
+    int       *xlsub, *xlusup, *xusub;
+    int       nzlumax;
+    double    *amax; 
+    double    drop_sum;
+    double alpha, omega;  /* used in MILU, mimicing DRIC */
+    static GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
+    double    *dwork2;	   /* used by the second dropping rule */
+
+    /* Local scalars */
+    fact_t    fact = options->Fact;
+    double    diag_pivot_thresh = options->DiagPivotThresh;
+    double    drop_tol = options->ILU_DropTol; /* tau */
+    double    fill_ini = options->ILU_FillTol; /* tau^hat */
+    double    gamma = options->ILU_FillFactor;
+    int       drop_rule = options->ILU_DropRule;
+    milu_t    milu = options->ILU_MILU;
+    double    fill_tol;
+    int       pivrow;	/* pivotal row number in the original matrix A */
+    int       nseg1;	/* no of segments in U-column above panel row jcol */
+    int       nseg;	/* no of segments in each U-column */
+    register int jcol;
+    register int kcol;	/* end column of a relaxed snode */
+    register int icol;
+    register int i, k, jj, new_next, iinfo;
+    int       m, n, min_mn, jsupno, fsupc, nextlu, nextu;
+    int       w_def;	/* upper bound on panel width */
+    int       usepr, iperm_r_allocated = 0;
+    int       nnzL, nnzU;
+    int       *panel_histo = stat->panel_histo;
+    flops_t   *ops = stat->ops;
+
+    int       last_drop;/* the last column which the dropping rules applied */
+    int       quota;
+    int       nnzAj;	/* number of nonzeros in A(:,1:j) */
+    int       nnzLj, nnzUj;
+    double    tol_L = drop_tol, tol_U = drop_tol;
+    double zero = 0.0;
+    double one = 1.0;
+
+    /* Executable */	   
+    iinfo    = 0;
+    m	     = A->nrow;
+    n	     = A->ncol;
+    min_mn   = SUPERLU_MIN(m, n);
+    Astore   = A->Store;
+    a	     = Astore->nzval;
+    asub     = Astore->rowind;
+    xa_begin = Astore->colbeg;
+    xa_end   = Astore->colend;
+
+    /* Allocate storage common to the factor routines */
+    *info = dLUMemInit(fact, work, lwork, m, n, Astore->nnz, panel_size,
+		       gamma, L, U, &Glu, &iwork, &dwork);
+    if ( *info ) return;
+
+    xsup    = Glu.xsup;
+    supno   = Glu.supno;
+    xlsub   = Glu.xlsub;
+    xlusup  = Glu.xlusup;
+    xusub   = Glu.xusub;
+
+    SetIWork(m, n, panel_size, iwork, &segrep, &parent, &xplore,
+	     &repfnz, &panel_lsub, &marker_relax, &marker);
+    dSetRWork(m, panel_size, dwork, &dense, &tempv);
+
+    usepr = (fact == SamePattern_SameRowPerm);
+    if ( usepr ) {
+	/* Compute the inverse of perm_r */
+	iperm_r = (int *) intMalloc(m);
+	for (k = 0; k < m; ++k) iperm_r[perm_r[k]] = k;
+	iperm_r_allocated = 1;
+    }
+
+    iperm_c = (int *) intMalloc(n);
+    for (k = 0; k < n; ++k) iperm_c[perm_c[k]] = k;
+    swap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) swap[k] = iperm_c[k];
+    iswap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) iswap[k] = perm_c[k];
+    amax = (double *) doubleMalloc(panel_size);
+    if (drop_rule & DROP_SECONDARY)
+	dwork2 = (double *)doubleMalloc(n);
+    else
+	dwork2 = NULL;
+
+    nnzAj = 0;
+    nnzLj = 0;
+    nnzUj = 0;
+    last_drop = SUPERLU_MAX(min_mn - 2 * sp_ienv(7), (int)(min_mn * 0.95));
+    alpha = pow((double)n, -1.0 / options->ILU_MILU_Dim);
+
+    /* Identify relaxed snodes */
+    relax_end = (int *) intMalloc(n);
+    relax_fsupc = (int *) intMalloc(n);
+    if ( options->SymmetricMode == YES )
+	ilu_heap_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+    else
+	ilu_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+
+    ifill (perm_r, m, EMPTY);
+    ifill (marker, m * NO_MARKER, EMPTY);
+    supno[0] = -1;
+    xsup[0]  = xlsub[0] = xusub[0] = xlusup[0] = 0;
+    w_def    = panel_size;
+
+    /* Mark the rows used by relaxed supernodes */
+    ifill (marker_relax, m, EMPTY);
+    i = mark_relax(m, relax_end, relax_fsupc, xa_begin, xa_end,
+	         asub, marker_relax);
+#if ( PRNTlevel >= 1)
+    printf("%d relaxed supernodes.\n", i);
+#endif
+
+    /*
+     * Work on one "panel" at a time. A panel is one of the following:
+     *	   (a) a relaxed supernode at the bottom of the etree, or
+     *	   (b) panel_size contiguous columns, defined by the user
+     */
+    for (jcol = 0; jcol < min_mn; ) {
+
+	if ( relax_end[jcol] != EMPTY ) { /* start of a relaxed snode */
+	    kcol = relax_end[jcol];	  /* end of the relaxed snode */
+	    panel_histo[kcol-jcol+1]++;
+
+	    /* Drop small rows in the previous supernode. */
+	    if (jcol > 0 && jcol < last_drop) {
+		int first = xsup[supno[jcol - 1]];
+		int last = jcol - 1;
+		int quota;
+
+		/* Compute the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * (m - first) / m
+			    * (last - first + 1);
+		else if (drop_rule & DROP_COLUMN) {
+		    int i;
+		    quota = 0;
+		    for (i = first; i <= last; i++)
+			quota += xa_end[i] - xa_begin[i];
+		    quota = gamma * quota * (m - first) / m;
+		} else if (drop_rule & DROP_AREA)
+		    quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			    - nnzLj;
+		else
+		    quota = m * n;
+		fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) / min_mn);
+
+		/* Drop small rows */
+		i = ilu_ddrop_row(options, first, last, tol_L, quota, &nnzLj,
+				  &fill_tol, &Glu, tempv, dwork2, 0);
+		/* Reset the parameters */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			     < nnzLj)
+			tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+		    else
+			tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		}
+		if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		num_drop_L += i * (last - first + 1);
+#endif
+	    }
+
+	    /* --------------------------------------
+	     * Factorize the relaxed supernode(jcol:kcol)
+	     * -------------------------------------- */
+	    /* Determine the union of the row structure of the snode */
+	    if ( (*info = ilu_dsnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
+					 marker, &Glu)) != 0 )
+		return;
+
+	    nextu    = xusub[jcol];
+	    nextlu   = xlusup[jcol];
+	    jsupno   = supno[jcol];
+	    fsupc    = xsup[jsupno];
+	    new_next = nextlu + (xlsub[fsupc+1]-xlsub[fsupc])*(kcol-jcol+1);
+	    nzlumax = Glu.nzlumax;
+	    while ( new_next > nzlumax ) {
+		if ((*info = dLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, &Glu)))
+		    return;
+	    }
+
+	    for (icol = jcol; icol <= kcol; icol++) {
+		xusub[icol+1] = nextu;
+
+		amax[0] = 0.0;
+		/* Scatter into SPA dense[*] */
+		for (k = xa_begin[icol]; k < xa_end[icol]; k++) {
+		    register double tmp = fabs(a[k]);
+		    if (tmp > amax[0]) amax[0] = tmp;
+		    dense[asub[k]] = a[k];
+		}
+		nnzAj += xa_end[icol] - xa_begin[icol];
+		if (amax[0] == 0.0) {
+		    amax[0] = fill_ini;
+#if ( PRNTlevel >= 1)
+		    printf("Column %d is entirely zero!\n", icol);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Numeric update within the snode */
+		dsnode_bmod(icol, jsupno, fsupc, dense, tempv, &Glu, stat);
+
+		if (usepr) pivrow = iperm_r[icol];
+		fill_tol = pow(fill_ini, 1.0 - (double)icol / (double)min_mn);
+		if ( (*info = ilu_dpivotL(icol, diag_pivot_thresh, &usepr,
+					  perm_r, iperm_c[icol], swap, iswap,
+					  marker_relax, &pivrow,
+                                          amax[0] * fill_tol, milu, zero,
+                                          &Glu, stat)) ) {
+		    iinfo++;
+		    marker[pivrow] = kcol;
+		}
+
+	    }
+
+	    jcol = kcol + 1;
+
+	} else { /* Work on one panel of panel_size columns */
+
+	    /* Adjust panel_size so that a panel won't overlap with the next
+	     * relaxed snode.
+	     */
+	    panel_size = w_def;
+	    for (k = jcol + 1; k < SUPERLU_MIN(jcol+panel_size, min_mn); k++)
+		if ( relax_end[k] != EMPTY ) {
+		    panel_size = k - jcol;
+		    break;
+		}
+	    if ( k == min_mn ) panel_size = min_mn - jcol;
+	    panel_histo[panel_size]++;
+
+	    /* symbolic factor on a panel of columns */
+	    ilu_dpanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
+                          dense, amax, panel_lsub, segrep, repfnz,
+                          marker, parent, xplore, &Glu);
+
+	    /* numeric sup-panel updates in topological order */
+	    dpanel_bmod(m, panel_size, jcol, nseg1, dense,
+			tempv, segrep, repfnz, &Glu, stat);
+
+	    /* Sparse LU within the panel, and below panel diagonal */
+	    for (jj = jcol; jj < jcol + panel_size; jj++) {
+
+		k = (jj - jcol) * m; /* column index for w-wide arrays */
+
+		nseg = nseg1;	/* Begin after all the panel segments */
+
+		nnzAj += xa_end[jj] - xa_begin[jj];
+
+		if ((*info = ilu_dcolumn_dfs(m, jj, perm_r, &nseg,
+					     &panel_lsub[k], segrep, &repfnz[k],
+					     marker, parent, xplore, &Glu)))
+		    return;
+
+		/* Numeric updates */
+		if ((*info = dcolumn_bmod(jj, (nseg - nseg1), &dense[k],
+					  tempv, &segrep[nseg1], &repfnz[k],
+					  jcol, &Glu, stat)) != 0) return;
+
+		/* Make a fill-in position if the column is entirely zero */
+		if (xlsub[jj + 1] == xlsub[jj]) {
+		    register int i, row;
+		    int nextl;
+		    int nzlmax = Glu.nzlmax;
+		    int *lsub = Glu.lsub;
+		    int *marker2 = marker + 2 * m;
+
+		    /* Allocate memory */
+		    nextl = xlsub[jj] + 1;
+		    if (nextl >= nzlmax) {
+			int error = dLUMemXpand(jj, nextl, LSUB, &nzlmax, &Glu);
+			if (error) { *info = error; return; }
+			lsub = Glu.lsub;
+		    }
+		    xlsub[jj + 1]++;
+		    assert(xlusup[jj]==xlusup[jj+1]);
+		    xlusup[jj + 1]++;
+		    Glu.lusup[xlusup[jj]] = zero;
+
+		    /* Choose a row index (pivrow) for fill-in */
+		    for (i = jj; i < n; i++)
+			if (marker_relax[swap[i]] <= jj) break;
+		    row = swap[i];
+		    marker2[row] = jj;
+		    lsub[xlsub[jj]] = row;
+#ifdef DEBUG
+		    printf("Fill col %d.\n", jj);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Computer the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * jj / m;
+		else if (drop_rule & DROP_COLUMN)
+		    quota = gamma * (xa_end[jj] - xa_begin[jj]) *
+			    (jj + 1) / m;
+		else if (drop_rule & DROP_AREA)
+		    quota = gamma * 0.9 * nnzAj * 0.5 - nnzUj;
+		else
+		    quota = m;
+
+		/* Copy the U-segments to ucol[*] and drop small entries */
+		if ((*info = ilu_dcopy_to_ucol(jj, nseg, segrep, &repfnz[k],
+					       perm_r, &dense[k], drop_rule,
+					       milu, amax[jj - jcol] * tol_U,
+					       quota, &drop_sum, &nnzUj, &Glu,
+					       dwork2)) != 0)
+		    return;
+
+		/* Reset the dropping threshold if required */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * 0.9 * nnzAj * 0.5 < nnzLj)
+			tol_U = SUPERLU_MIN(1.0, tol_U * 2.0);
+		    else
+			tol_U = SUPERLU_MAX(drop_tol, tol_U * 0.5);
+		}
+
+		if (drop_sum != zero)
+		{
+		    if (drop_sum > zero)
+			omega = SUPERLU_MIN(2.0 * (1.0 - alpha)
+				* amax[jj - jcol] / drop_sum, one);
+		    else
+			omega = SUPERLU_MAX(2.0 * (1.0 - alpha)
+				* amax[jj - jcol] / drop_sum, -one);
+		    drop_sum *= omega;
+                }
+		if (usepr) pivrow = iperm_r[jj];
+		fill_tol = pow(fill_ini, 1.0 - (double)jj / (double)min_mn);
+		if ( (*info = ilu_dpivotL(jj, diag_pivot_thresh, &usepr, perm_r,
+					  iperm_c[jj], swap, iswap,
+					  marker_relax, &pivrow,
+					  amax[jj - jcol] * fill_tol, milu,
+					  drop_sum, &Glu, stat)) ) {
+		    iinfo++;
+		    marker[m + pivrow] = jj;
+		    marker[2 * m + pivrow] = jj;
+		}
+
+		/* Reset repfnz[] for this column */
+		resetrep_col (nseg, segrep, &repfnz[k]);
+
+		/* Start a new supernode, drop the previous one */
+		if (jj > 0 && supno[jj] > supno[jj - 1] && jj < last_drop) {
+		    int first = xsup[supno[jj - 1]];
+		    int last = jj - 1;
+		    int quota;
+
+		    /* Compute the quota */
+		    if (drop_rule & DROP_PROWS)
+			quota = gamma * Astore->nnz / m * (m - first) / m
+				* (last - first + 1);
+		    else if (drop_rule & DROP_COLUMN) {
+			int i;
+			quota = 0;
+			for (i = first; i <= last; i++)
+			    quota += xa_end[i] - xa_begin[i];
+			quota = gamma * quota * (m - first) / m;
+		    } else if (drop_rule & DROP_AREA)
+			quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0)
+				/ m) - nnzLj;
+		    else
+			quota = m * n;
+		    fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) /
+			    (double)min_mn);
+
+		    /* Drop small rows */
+		    i = ilu_ddrop_row(options, first, last, tol_L, quota,
+				      &nnzLj, &fill_tol, &Glu, tempv, dwork2,
+				      1);
+
+		    /* Reset the parameters */
+		    if (drop_rule & DROP_DYNAMIC) {
+			if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+				< nnzLj)
+			    tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+			else
+			    tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		    }
+		    if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		    num_drop_L += i * (last - first + 1);
+#endif
+		} /* if start a new supernode */
+
+	    } /* for */
+
+	    jcol += panel_size; /* Move to the next panel */
+
+	} /* else */
+
+    } /* for */
+
+    *info = iinfo;
+
+    if ( m > n ) {
+	k = 0;
+	for (i = 0; i < m; ++i)
+	    if ( perm_r[i] == EMPTY ) {
+		perm_r[i] = n + k;
+		++k;
+	    }
+    }
+
+    ilu_countnz(min_mn, &nnzL, &nnzU, &Glu);
+    fixupL(min_mn, perm_r, &Glu);
+
+    dLUWorkFree(iwork, dwork, &Glu); /* Free work space and compress storage */
+
+    if ( fact == SamePattern_SameRowPerm ) {
+	/* L and U structures may have changed due to possibly different
+	   pivoting, even though the storage is available.
+	   There could also be memory expansions, so the array locations
+	   may have changed, */
+	((SCformat *)L->Store)->nnz = nnzL;
+	((SCformat *)L->Store)->nsuper = Glu.supno[n];
+	((SCformat *)L->Store)->nzval = Glu.lusup;
+	((SCformat *)L->Store)->nzval_colptr = Glu.xlusup;
+	((SCformat *)L->Store)->rowind = Glu.lsub;
+	((SCformat *)L->Store)->rowind_colptr = Glu.xlsub;
+	((NCformat *)U->Store)->nnz = nnzU;
+	((NCformat *)U->Store)->nzval = Glu.ucol;
+	((NCformat *)U->Store)->rowind = Glu.usub;
+	((NCformat *)U->Store)->colptr = Glu.xusub;
+    } else {
+	dCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL, Glu.lusup,
+				 Glu.xlusup, Glu.lsub, Glu.xlsub, Glu.supno,
+				 Glu.xsup, SLU_SC, SLU_D, SLU_TRLU);
+	dCreate_CompCol_Matrix(U, min_mn, min_mn, nnzU, Glu.ucol,
+			       Glu.usub, Glu.xusub, SLU_NC, SLU_D, SLU_TRU);
+    }
+
+    ops[FACT] += ops[TRSV] + ops[GEMV];
+    stat->expansions = --(Glu.num_expansions);
+
+    if ( iperm_r_allocated ) SUPERLU_FREE (iperm_r);
+    SUPERLU_FREE (iperm_c);
+    SUPERLU_FREE (relax_end);
+    SUPERLU_FREE (swap);
+    SUPERLU_FREE (iswap);
+    SUPERLU_FREE (relax_fsupc);
+    SUPERLU_FREE (amax);
+    if ( dwork2 ) SUPERLU_FREE (dwork2);
+
+}
diff --git a/SRC/dgsitrf.c.bak b/SRC/dgsitrf.c.bak
new file mode 100644
index 0000000..969b5c1
--- /dev/null
+++ b/SRC/dgsitrf.c.bak
@@ -0,0 +1,626 @@
+
+/*! @file dgsitf.c
+ * \brief Computes an ILU factorization of a general sparse matrix
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_ddefs.h"
+
+#ifdef DEBUG
+int num_drop_L;
+#endif
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * DGSITRF computes an ILU factorization of a general sparse m-by-n
+ * matrix A using partial pivoting with row interchanges.
+ * The factorization has the form
+ *     Pr * A = L * U
+ * where Pr is a row permutation matrix, L is lower triangular with unit
+ * diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ * triangular (upper trapezoidal if A->nrow < A->ncol).
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the ILU decomposition will be performed.
+ *
+ * A	    (input) SuperMatrix*
+ *	    Original matrix A, permuted by columns, of dimension
+ *	    (A->nrow, A->ncol). The type of A can be:
+ *	    Stype = SLU_NCP; Dtype = SLU_D; Mtype = SLU_GE.
+ *
+ * relax    (input) int
+ *	    To control degree of relaxing supernodes. If the number
+ *	    of nodes (columns) in a subtree of the elimination tree is less
+ *	    than relax, this subtree is considered as one supernode,
+ *	    regardless of the row structures of those columns.
+ *
+ * panel_size (input) int
+ *	    A panel consists of at most panel_size consecutive columns.
+ *
+ * etree    (input) int*, dimension (A->ncol)
+ *	    Elimination tree of A'*A.
+ *	    Note: etree is a vector of parent pointers for a forest whose
+ *	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *	    On input, the columns of A should be permuted so that the
+ *	    etree is in a certain postorder.
+ *
+ * work     (input/output) void*, size (lwork) (in bytes)
+ *	    User-supplied work space and space for the output data structures.
+ *	    Not referenced if lwork = 0;
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 *info; no other side effects.
+ *
+ * perm_c   (input) int*, dimension (A->ncol)
+ *	    Column permutation vector, which defines the
+ *	    permutation matrix Pc; perm_c[i] = j means column i of A is
+ *	    in position j in A*Pc.
+ *	    When searching for diagonal, perm_c[*] is applied to the
+ *	    row subscripts of A, so that diagonal threshold pivoting
+ *	    can find the diagonal of A, rather than that of A*Pc.
+ *
+ * perm_r   (input/output) int*, dimension (A->nrow)
+ *	    Row permutation vector which defines the permutation matrix Pr,
+ *	    perm_r[i] = j means row i of A is in position j in Pr*A.
+ *	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	       will try to use the input perm_r, unless a certain threshold
+ *	       criterion is violated. In that case, perm_r is overwritten by
+ *	       a new permutation determined by partial pivoting or diagonal
+ *	       threshold pivoting.
+ *	    Otherwise, perm_r is output argument;
+ *
+ * L	    (output) SuperMatrix*
+ *	    The factor L from the factorization Pr*A=L*U; use compressed row
+ *	    subscripts storage for supernodes, i.e., L has type:
+ *	    Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.
+ *
+ * U	    (output) SuperMatrix*
+ *	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+ *	    storage scheme, i.e., U has types: Stype = SLU_NC,
+ *	    Dtype = SLU_D, Mtype = SLU_TRU.
+ *
+ * stat     (output) SuperLUStat_t*
+ *	    Record the statistics on runtime and floating-point operation count.
+ *	    See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info     (output) int*
+ *	    = 0: successful exit
+ *	    < 0: if info = -i, the i-th argument had an illegal value
+ *	    > 0: if info = i, and i is
+ *	       <= A->ncol: number of zero pivots. They are replaced by small
+ *		  entries according to options->ILU_FillTol.
+ *	       > A->ncol: number of bytes allocated when memory allocation
+ *		  failure occurred, plus A->ncol. If lwork = -1, it is
+ *		  the estimated amount of space needed, plus A->ncol.
+ *
+ * ======================================================================
+ *
+ * Local Working Arrays:
+ * ======================
+ *   m = number of rows in the matrix
+ *   n = number of columns in the matrix
+ *
+ *   marker[0:3*m-1]: marker[i] = j means that node i has been
+ *	reached when working on column j.
+ *	Storage: relative to original row subscripts
+ *	NOTE: There are 4 of them:
+ *	      marker/marker1 are used for panel dfs, see (ilu_)dpanel_dfs.c;
+ *	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+ *	      marker_relax(has its own space) is used for relaxed supernodes.
+ *
+ *   parent[0:m-1]: parent vector used during dfs
+ *	Storage: relative to new row subscripts
+ *
+ *   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ *	unexplored neighbor of i in lsub[*]
+ *
+ *   segrep[0:nseg-1]: contains the list of supernodal representatives
+ *	in topological order of the dfs. A supernode representative is the
+ *	last column of a supernode.
+ *	The maximum size of segrep[] is n.
+ *
+ *   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+ *	supernodal representative r, repfnz[r] is the location of the first
+ *	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+ *	indicates the supernode r has been explored.
+ *	NOTE: There are W of them, each used for one column of a panel.
+ *
+ *   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+ *	the panel diagonal. These are filled in during dpanel_dfs(), and are
+ *	used later in the inner LU factorization within the panel.
+ *	panel_lsub[]/dense[] pair forms the SPA data structure.
+ *	NOTE: There are W of them.
+ *
+ *   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ *		   NOTE: there are W of them.
+ *
+ *   tempv[0:*]: real temporary used for dense numeric kernels;
+ *	The size of this array is defined by NUM_TEMPV() in slu_util.h.
+ *	It is also used by the dropping routine ilu_ddrop_row().
+ * </pre>
+ */
+
+void
+dgsitrf(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size,
+	int *etree, void *work, int lwork, int *perm_c, int *perm_r,
+	SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)
+{
+    /* Local working arrays */
+    NCPformat *Astore;
+    int       *iperm_r = NULL; /* inverse of perm_r; used when
+				  options->Fact == SamePattern_SameRowPerm */
+    int       *iperm_c; /* inverse of perm_c */
+    int       *swap, *iswap; /* swap is used to store the row permutation
+				during the factorization. Initially, it is set
+				to iperm_c (row indeces of Pc*A*Pc').
+				iswap is the inverse of swap. After the
+				factorization, it is equal to perm_r. */
+    int       *iwork;
+    double   *dwork;
+    int       *segrep, *repfnz, *parent, *xplore;
+    int       *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
+    int       *marker, *marker_relax;
+    double    *dense, *tempv;
+    int       *relax_end, *relax_fsupc;
+    double    *a;
+    int       *asub;
+    int       *xa_begin, *xa_end;
+    int       *xsup, *supno;
+    int       *xlsub, *xlusup, *xusub;
+    int       nzlumax;
+    double    *amax; 
+    double    drop_sum;
+    static GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
+    int       *iwork2;	   /* used by the second dropping rule */
+
+    /* Local scalars */
+    fact_t    fact = options->Fact;
+    double    diag_pivot_thresh = options->DiagPivotThresh;
+    double    drop_tol = options->ILU_DropTol; /* tau */
+    double    fill_ini = options->ILU_FillTol; /* tau^hat */
+    double    gamma = options->ILU_FillFactor;
+    int       drop_rule = options->ILU_DropRule;
+    milu_t    milu = options->ILU_MILU;
+    double    fill_tol;
+    int       pivrow;	/* pivotal row number in the original matrix A */
+    int       nseg1;	/* no of segments in U-column above panel row jcol */
+    int       nseg;	/* no of segments in each U-column */
+    register int jcol;
+    register int kcol;	/* end column of a relaxed snode */
+    register int icol;
+    register int i, k, jj, new_next, iinfo;
+    int       m, n, min_mn, jsupno, fsupc, nextlu, nextu;
+    int       w_def;	/* upper bound on panel width */
+    int       usepr, iperm_r_allocated = 0;
+    int       nnzL, nnzU;
+    int       *panel_histo = stat->panel_histo;
+    flops_t   *ops = stat->ops;
+
+    int       last_drop;/* the last column which the dropping rules applied */
+    int       quota;
+    int       nnzAj;	/* number of nonzeros in A(:,1:j) */
+    int       nnzLj, nnzUj;
+    double    tol_L = drop_tol, tol_U = drop_tol;
+    double zero = 0.0;
+
+    /* Executable */	   
+    iinfo    = 0;
+    m	     = A->nrow;
+    n	     = A->ncol;
+    min_mn   = SUPERLU_MIN(m, n);
+    Astore   = A->Store;
+    a	     = Astore->nzval;
+    asub     = Astore->rowind;
+    xa_begin = Astore->colbeg;
+    xa_end   = Astore->colend;
+
+    /* Allocate storage common to the factor routines */
+    *info = dLUMemInit(fact, work, lwork, m, n, Astore->nnz, panel_size,
+		       gamma, L, U, &Glu, &iwork, &dwork);
+    if ( *info ) return;
+
+    xsup    = Glu.xsup;
+    supno   = Glu.supno;
+    xlsub   = Glu.xlsub;
+    xlusup  = Glu.xlusup;
+    xusub   = Glu.xusub;
+
+    SetIWork(m, n, panel_size, iwork, &segrep, &parent, &xplore,
+	     &repfnz, &panel_lsub, &marker_relax, &marker);
+    dSetRWork(m, panel_size, dwork, &dense, &tempv);
+
+    usepr = (fact == SamePattern_SameRowPerm);
+    if ( usepr ) {
+	/* Compute the inverse of perm_r */
+	iperm_r = (int *) intMalloc(m);
+	for (k = 0; k < m; ++k) iperm_r[perm_r[k]] = k;
+	iperm_r_allocated = 1;
+    }
+
+    iperm_c = (int *) intMalloc(n);
+    for (k = 0; k < n; ++k) iperm_c[perm_c[k]] = k;
+    swap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) swap[k] = iperm_c[k];
+    iswap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) iswap[k] = perm_c[k];
+    amax = (double *) doubleMalloc(panel_size);
+    if (drop_rule & DROP_SECONDARY)
+	iwork2 = (int *)intMalloc(n);
+    else
+	iwork2 = NULL;
+
+    nnzAj = 0;
+    nnzLj = 0;
+    nnzUj = 0;
+    last_drop = SUPERLU_MAX(min_mn - 2 * sp_ienv(7), (int)(min_mn * 0.95));
+
+    /* Identify relaxed snodes */
+    relax_end = (int *) intMalloc(n);
+    relax_fsupc = (int *) intMalloc(n);
+    if ( options->SymmetricMode == YES )
+	ilu_heap_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+    else
+	ilu_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+
+    ifill (perm_r, m, EMPTY);
+    ifill (marker, m * NO_MARKER, EMPTY);
+    supno[0] = -1;
+    xsup[0]  = xlsub[0] = xusub[0] = xlusup[0] = 0;
+    w_def    = panel_size;
+
+    /* Mark the rows used by relaxed supernodes */
+    ifill (marker_relax, m, EMPTY);
+    i = mark_relax(m, relax_end, relax_fsupc, xa_begin, xa_end,
+	         asub, marker_relax);
+#if ( PRNTlevel >= 1)
+    printf("%d relaxed supernodes.\n", i);
+#endif
+
+    /*
+     * Work on one "panel" at a time. A panel is one of the following:
+     *	   (a) a relaxed supernode at the bottom of the etree, or
+     *	   (b) panel_size contiguous columns, defined by the user
+     */
+    for (jcol = 0; jcol < min_mn; ) {
+
+	if ( relax_end[jcol] != EMPTY ) { /* start of a relaxed snode */
+	    kcol = relax_end[jcol];	  /* end of the relaxed snode */
+	    panel_histo[kcol-jcol+1]++;
+
+	    /* Drop small rows in the previous supernode. */
+	    if (jcol > 0 && jcol < last_drop) {
+		int first = xsup[supno[jcol - 1]];
+		int last = jcol - 1;
+		int quota;
+
+		/* Compute the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * (m - first) / m
+			    * (last - first + 1);
+		else if (drop_rule & DROP_COLUMN) {
+		    int i;
+		    quota = 0;
+		    for (i = first; i <= last; i++)
+			quota += xa_end[i] - xa_begin[i];
+		    quota = gamma * quota * (m - first) / m;
+		} else if (drop_rule & DROP_AREA)
+		    quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			    - nnzLj;
+		else
+		    quota = m * n;
+		fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) / min_mn);
+
+		/* Drop small rows */
+		i = ilu_ddrop_row(options, first, last, tol_L, quota, &nnzLj,
+				  &fill_tol, &Glu, tempv, iwork2, 0);
+		/* Reset the parameters */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			     < nnzLj)
+			tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+		    else
+			tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		}
+		if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		num_drop_L += i * (last - first + 1);
+#endif
+	    }
+
+	    /* --------------------------------------
+	     * Factorize the relaxed supernode(jcol:kcol)
+	     * -------------------------------------- */
+	    /* Determine the union of the row structure of the snode */
+	    if ( (*info = ilu_dsnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
+					 marker, &Glu)) != 0 )
+		return;
+
+	    nextu    = xusub[jcol];
+	    nextlu   = xlusup[jcol];
+	    jsupno   = supno[jcol];
+	    fsupc    = xsup[jsupno];
+	    new_next = nextlu + (xlsub[fsupc+1]-xlsub[fsupc])*(kcol-jcol+1);
+	    nzlumax = Glu.nzlumax;
+	    while ( new_next > nzlumax ) {
+		if ((*info = dLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, &Glu)))
+		    return;
+	    }
+
+	    for (icol = jcol; icol <= kcol; icol++) {
+		xusub[icol+1] = nextu;
+
+		amax[0] = 0.0;
+		/* Scatter into SPA dense[*] */
+		for (k = xa_begin[icol]; k < xa_end[icol]; k++) {
+		    register double tmp = fabs(a[k]);
+		    if (tmp > amax[0]) amax[0] = tmp;
+		    dense[asub[k]] = a[k];
+		}
+		nnzAj += xa_end[icol] - xa_begin[icol];
+		if (amax[0] == 0.0) {
+		    amax[0] = fill_ini;
+#if ( PRNTlevel >= 1)
+		    printf("Column %d is entirely zero!\n", icol);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Numeric update within the snode */
+		dsnode_bmod(icol, jsupno, fsupc, dense, tempv, &Glu, stat);
+
+		if (usepr) pivrow = iperm_r[icol];
+		fill_tol = pow(fill_ini, 1.0 - (double)icol / (double)min_mn);
+		if ( (*info = ilu_dpivotL(icol, diag_pivot_thresh, &usepr,
+					  perm_r, iperm_c[icol], swap, iswap,
+					  marker_relax, &pivrow,
+                                          amax[0] * fill_tol, milu, zero,
+                                          &Glu, stat)) ) {
+		    iinfo++;
+		    marker[pivrow] = kcol;
+		}
+
+	    }
+
+	    jcol = kcol + 1;
+
+	} else { /* Work on one panel of panel_size columns */
+
+	    /* Adjust panel_size so that a panel won't overlap with the next
+	     * relaxed snode.
+	     */
+	    panel_size = w_def;
+	    for (k = jcol + 1; k < SUPERLU_MIN(jcol+panel_size, min_mn); k++)
+		if ( relax_end[k] != EMPTY ) {
+		    panel_size = k - jcol;
+		    break;
+		}
+	    if ( k == min_mn ) panel_size = min_mn - jcol;
+	    panel_histo[panel_size]++;
+
+	    /* symbolic factor on a panel of columns */
+	    ilu_dpanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
+                          dense, amax, panel_lsub, segrep, repfnz,
+                          marker, parent, xplore, &Glu);
+
+	    /* numeric sup-panel updates in topological order */
+	    dpanel_bmod(m, panel_size, jcol, nseg1, dense,
+			tempv, segrep, repfnz, &Glu, stat);
+
+	    /* Sparse LU within the panel, and below panel diagonal */
+	    for (jj = jcol; jj < jcol + panel_size; jj++) {
+
+		k = (jj - jcol) * m; /* column index for w-wide arrays */
+
+		nseg = nseg1;	/* Begin after all the panel segments */
+
+		nnzAj += xa_end[jj] - xa_begin[jj];
+
+		if ((*info = ilu_dcolumn_dfs(m, jj, perm_r, &nseg,
+					     &panel_lsub[k], segrep, &repfnz[k],
+					     marker, parent, xplore, &Glu)))
+		    return;
+
+		/* Numeric updates */
+		if ((*info = dcolumn_bmod(jj, (nseg - nseg1), &dense[k],
+					  tempv, &segrep[nseg1], &repfnz[k],
+					  jcol, &Glu, stat)) != 0) return;
+
+		/* Make a fill-in position if the column is entirely zero */
+		if (xlsub[jj + 1] == xlsub[jj]) {
+		    register int i, row;
+		    int nextl;
+		    int nzlmax = Glu.nzlmax;
+		    int *lsub = Glu.lsub;
+		    int *marker2 = marker + 2 * m;
+
+		    /* Allocate memory */
+		    nextl = xlsub[jj] + 1;
+		    if (nextl >= nzlmax) {
+			int error = dLUMemXpand(jj, nextl, LSUB, &nzlmax, &Glu);
+			if (error) { *info = error; return; }
+			lsub = Glu.lsub;
+		    }
+		    xlsub[jj + 1]++;
+		    assert(xlusup[jj]==xlusup[jj+1]);
+		    xlusup[jj + 1]++;
+		    Glu.lusup[xlusup[jj]] = zero;
+
+		    /* Choose a row index (pivrow) for fill-in */
+		    for (i = jj; i < n; i++)
+			if (marker_relax[swap[i]] <= jj) break;
+		    row = swap[i];
+		    marker2[row] = jj;
+		    lsub[xlsub[jj]] = row;
+#ifdef DEBUG
+		    printf("Fill col %d.\n", jj);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Computer the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * jj / m;
+		else if (drop_rule & DROP_COLUMN)
+		    quota = gamma * (xa_end[jj] - xa_begin[jj]) *
+			    (jj + 1) / m;
+		else if (drop_rule & DROP_AREA)
+		    quota = gamma * 0.9 * nnzAj * 0.5 - nnzUj;
+		else
+		    quota = m;
+
+		/* Copy the U-segments to ucol[*] and drop small entries */
+		if ((*info = ilu_dcopy_to_ucol(jj, nseg, segrep, &repfnz[k],
+					       perm_r, &dense[k], drop_rule,
+					       milu, amax[jj - jcol] * tol_U,
+					       quota, &drop_sum, &nnzUj, &Glu,
+					       iwork2)) != 0)
+		    return;
+
+		/* Reset the dropping threshold if required */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * 0.9 * nnzAj * 0.5 < nnzLj)
+			tol_U = SUPERLU_MIN(1.0, tol_U * 2.0);
+		    else
+			tol_U = SUPERLU_MAX(drop_tol, tol_U * 0.5);
+		}
+
+                drop_sum *= MILU_ALPHA;
+		if (usepr) pivrow = iperm_r[jj];
+		fill_tol = pow(fill_ini, 1.0 - (double)jj / (double)min_mn);
+		if ( (*info = ilu_dpivotL(jj, diag_pivot_thresh, &usepr, perm_r,
+					  iperm_c[jj], swap, iswap,
+					  marker_relax, &pivrow,
+					  amax[jj - jcol] * fill_tol, milu,
+					  drop_sum, &Glu, stat)) ) {
+		    iinfo++;
+		    marker[m + pivrow] = jj;
+		    marker[2 * m + pivrow] = jj;
+		}
+
+		/* Reset repfnz[] for this column */
+		resetrep_col (nseg, segrep, &repfnz[k]);
+
+		/* Start a new supernode, drop the previous one */
+		if (jj > 0 && supno[jj] > supno[jj - 1] && jj < last_drop) {
+		    int first = xsup[supno[jj - 1]];
+		    int last = jj - 1;
+		    int quota;
+
+		    /* Compute the quota */
+		    if (drop_rule & DROP_PROWS)
+			quota = gamma * Astore->nnz / m * (m - first) / m
+				* (last - first + 1);
+		    else if (drop_rule & DROP_COLUMN) {
+			int i;
+			quota = 0;
+			for (i = first; i <= last; i++)
+			    quota += xa_end[i] - xa_begin[i];
+			quota = gamma * quota * (m - first) / m;
+		    } else if (drop_rule & DROP_AREA)
+			quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0)
+				/ m) - nnzLj;
+		    else
+			quota = m * n;
+		    fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) /
+			    (double)min_mn);
+
+		    /* Drop small rows */
+		    i = ilu_ddrop_row(options, first, last, tol_L, quota,
+				      &nnzLj, &fill_tol, &Glu, tempv, iwork2,
+				      1);
+
+		    /* Reset the parameters */
+		    if (drop_rule & DROP_DYNAMIC) {
+			if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+				< nnzLj)
+			    tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+			else
+			    tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		    }
+		    if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		    num_drop_L += i * (last - first + 1);
+#endif
+		} /* if start a new supernode */
+
+	    } /* for */
+
+	    jcol += panel_size; /* Move to the next panel */
+
+	} /* else */
+
+    } /* for */
+
+    *info = iinfo;
+
+    if ( m > n ) {
+	k = 0;
+	for (i = 0; i < m; ++i)
+	    if ( perm_r[i] == EMPTY ) {
+		perm_r[i] = n + k;
+		++k;
+	    }
+    }
+
+    ilu_countnz(min_mn, &nnzL, &nnzU, &Glu);
+    fixupL(min_mn, perm_r, &Glu);
+
+    dLUWorkFree(iwork, dwork, &Glu); /* Free work space and compress storage */
+
+    if ( fact == SamePattern_SameRowPerm ) {
+	/* L and U structures may have changed due to possibly different
+	   pivoting, even though the storage is available.
+	   There could also be memory expansions, so the array locations
+	   may have changed, */
+	((SCformat *)L->Store)->nnz = nnzL;
+	((SCformat *)L->Store)->nsuper = Glu.supno[n];
+	((SCformat *)L->Store)->nzval = Glu.lusup;
+	((SCformat *)L->Store)->nzval_colptr = Glu.xlusup;
+	((SCformat *)L->Store)->rowind = Glu.lsub;
+	((SCformat *)L->Store)->rowind_colptr = Glu.xlsub;
+	((NCformat *)U->Store)->nnz = nnzU;
+	((NCformat *)U->Store)->nzval = Glu.ucol;
+	((NCformat *)U->Store)->rowind = Glu.usub;
+	((NCformat *)U->Store)->colptr = Glu.xusub;
+    } else {
+	dCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL, Glu.lusup,
+				 Glu.xlusup, Glu.lsub, Glu.xlsub, Glu.supno,
+				 Glu.xsup, SLU_SC, SLU_D, SLU_TRLU);
+	dCreate_CompCol_Matrix(U, min_mn, min_mn, nnzU, Glu.ucol,
+			       Glu.usub, Glu.xusub, SLU_NC, SLU_D, SLU_TRU);
+    }
+
+    ops[FACT] += ops[TRSV] + ops[GEMV];
+    stat->expansions = --(Glu.num_expansions);
+
+    if ( iperm_r_allocated ) SUPERLU_FREE (iperm_r);
+    SUPERLU_FREE (iperm_c);
+    SUPERLU_FREE (relax_end);
+    SUPERLU_FREE (swap);
+    SUPERLU_FREE (iswap);
+    SUPERLU_FREE (relax_fsupc);
+    SUPERLU_FREE (amax);
+    if ( iwork2 ) SUPERLU_FREE (iwork2);
+
+}
diff --git a/SRC/dgsrfs.c b/SRC/dgsrfs.c
index a71cc38..55531b0 100644
--- a/SRC/dgsrfs.c
+++ b/SRC/dgsrfs.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file dgsrfs.c
+ * \brief Improves computed solution to a system of inear equations
+ * 
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Modified from lapack routine DGERFS
+ * </pre>
  */
 /*
  * File name:	dgsrfs.c
@@ -13,13 +18,9 @@
 #include <math.h>
 #include "slu_ddefs.h"
 
-void
-dgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
-       int *perm_c, int *perm_r, char *equed, double *R, double *C,
-       SuperMatrix *B, SuperMatrix *X, double *ferr, double *berr,
-       SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  *   Purpose   
  *   =======   
  *
@@ -123,7 +124,15 @@ dgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
  *
  *    ITMAX is the maximum number of steps of iterative refinement.   
  *
- */  
+ * </pre>
+ */
+void
+dgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
+       int *perm_c, int *perm_r, char *equed, double *R, double *C,
+       SuperMatrix *B, SuperMatrix *X, double *ferr, double *berr,
+       SuperLUStat_t *stat, int *info)
+{
+
 
 #define ITMAX 5
     
@@ -148,7 +157,7 @@ dgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
     double   *work;
     double   *rwork;
     int      *iwork;
-    extern double dlamch_(char *);
+
     extern int dlacon_(int *, double *, double *, int *, double *, int *);
 #ifdef _CRAY
     extern int SCOPY(int *, double *, int *, double *, int *);
@@ -224,6 +233,8 @@ dgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
     nz     = A->ncol + 1;
     eps    = dlamch_("Epsilon");
     safmin = dlamch_("Safe minimum");
+    /* Set SAFE1 essentially to be the underflow threshold times the
+       number of additions in each row. */
     safe1  = nz * safmin;
     safe2  = safe1 / eps;
 
@@ -274,7 +285,7 @@ dgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
 	       where abs(Z) is the componentwise absolute value of the matrix
 	       or vector Z.  If the i-th component of the denominator is less
 	       than SAFE2, then SAFE1 is added to the i-th component of the   
-	       numerator and denominator before dividing. */
+	       numerator before dividing. */
 
 	    for (i = 0; i < A->nrow; ++i) rwork[i] = fabs( Bptr[i] );
 	    
@@ -297,11 +308,15 @@ dgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
 	    }
 	    s = 0.;
 	    for (i = 0; i < A->nrow; ++i) {
-		if (rwork[i] > safe2)
+		if (rwork[i] > safe2) {
 		    s = SUPERLU_MAX( s, fabs(work[i]) / rwork[i] );
-		else
-		    s = SUPERLU_MAX( s, (fabs(work[i]) + safe1) / 
-				(rwork[i] + safe1) );
+		} else if ( rwork[i] != 0.0 ) {
+                    /* Adding SAFE1 to the numerator guards against
+                       spuriously zero residuals (underflow). */
+		    s = SUPERLU_MAX( s, (safe1 + fabs(work[i])) / rwork[i] );
+                }
+                /* If rwork[i] is exactly 0.0, then we know the true 
+                   residual also must be exactly 0.0. */
 	    }
 	    berr[j] = s;
 
diff --git a/SRC/dgssv.c b/SRC/dgssv.c
index 99e84dd..5baeda0 100644
--- a/SRC/dgssv.c
+++ b/SRC/dgssv.c
@@ -1,19 +1,19 @@
 
-/*
+/*! @file dgssv.c
+ * \brief Solves the system of linear equations A*X=B 
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
- *
+ * </pre>  
  */
 #include "slu_ddefs.h"
 
-void
-dgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
-      SuperMatrix *L, SuperMatrix *U, SuperMatrix *B,
-      SuperLUStat_t *stat, int *info )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -126,15 +126,21 @@ dgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *                so the solution could not be computed.
  *             > A->ncol: number of bytes allocated when memory allocation
  *                failure occurred, plus A->ncol.
- *   
+ * </pre>
  */
+
+void
+dgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+      SuperMatrix *L, SuperMatrix *U, SuperMatrix *B,
+      SuperLUStat_t *stat, int *info )
+{
+
     DNformat *Bstore;
     SuperMatrix *AA;/* A in SLU_NC format used by the factorization routine.*/
     SuperMatrix AC; /* Matrix postmultiplied by Pc */
     int      lwork = 0, *etree, i;
     
     /* Set default values for some parameters */
-    double   drop_tol = 0.;
     int      panel_size;     /* panel size */
     int      relax;          /* no of columns in a relaxed snodes */
     int      permc_spec;
@@ -200,8 +206,8 @@ dgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
 	  relax, panel_size, sp_ienv(3), sp_ienv(4));*/
     t = SuperLU_timer_(); 
     /* Compute the LU factorization of A. */
-    dgstrf(options, &AC, drop_tol, relax, panel_size,
-	   etree, NULL, lwork, perm_c, perm_r, L, U, stat, info);
+    dgstrf(options, &AC, relax, panel_size, etree,
+            NULL, lwork, perm_c, perm_r, L, U, stat, info);
     utime[FACT] = SuperLU_timer_() - t;
 
     t = SuperLU_timer_();
diff --git a/SRC/dgssvx.c b/SRC/dgssvx.c
index b7e1a1c..c287d13 100644
--- a/SRC/dgssvx.c
+++ b/SRC/dgssvx.c
@@ -1,22 +1,19 @@
 
-/*
+/*! @file dgssvx.c
+ * \brief Solves the system of linear equations A*X=B or A'*X=B
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
- *
+ * </pre>
  */
 #include "slu_ddefs.h"
 
-void
-dgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
-       int *etree, char *equed, double *R, double *C,
-       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
-       SuperMatrix *B, SuperMatrix *X, double *recip_pivot_growth, 
-       double *rcond, double *ferr, double *berr, 
-       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -314,7 +311,7 @@ dgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *
  * stat   (output) SuperLUStat_t*
  *        Record the statistics on runtime and floating-point operation count.
- *        See util.h for the definition of 'SuperLUStat_t'.
+ *        See slu_util.h for the definition of 'SuperLUStat_t'.
  *
  * info    (output) int*
  *         = 0: successful exit   
@@ -332,9 +329,19 @@ dgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *                    accurate than the value of RCOND would suggest.   
  *              > A->ncol+1: number of bytes allocated when memory allocation
  *                    failure occurred, plus A->ncol.
- *
+ * </pre>
  */
 
+void
+dgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+       int *etree, char *equed, double *R, double *C,
+       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
+       SuperMatrix *B, SuperMatrix *X, double *recip_pivot_growth, 
+       double *rcond, double *ferr, double *berr, 
+       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info )
+{
+
+
     DNformat  *Bstore, *Xstore;
     double    *Bmat, *Xmat;
     int       ldb, ldx, nrhs;
@@ -346,13 +353,12 @@ dgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
     int       i, j, info1;
     double    amax, anorm, bignum, smlnum, colcnd, rowcnd, rcmax, rcmin;
     int       relax, panel_size;
-    double    diag_pivot_thresh, drop_tol;
+    double    diag_pivot_thresh;
     double    t0;      /* temporary time */
     double    *utime;
 
     /* External functions */
     extern double dlangs(char *, SuperMatrix *);
-    extern double dlamch_(char *);
 
     Bstore = B->Store;
     Xstore = X->Store;
@@ -383,10 +389,12 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 #endif
 
     /* Test the input parameters */
-    if (!nofact && options->Fact != DOFACT && options->Fact != SamePattern &&
+    if (options->Fact != DOFACT && options->Fact != SamePattern &&
 	options->Fact != SamePattern_SameRowPerm &&
-	!notran && options->Trans != TRANS && options->Trans != CONJ &&
-	!equil && options->Equil != NO)
+	options->Fact != FACTORED &&
+	options->Trans != NOTRANS && options->Trans != TRANS && 
+	options->Trans != CONJ &&
+	options->Equil != NO && options->Equil != YES)
 	*info = -1;
     else if ( A->nrow != A->ncol || A->nrow < 0 ||
 	      (A->Stype != SLU_NC && A->Stype != SLU_NR) ||
@@ -422,15 +430,21 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 	}
 	if (*info == 0) {
 	    if ( lwork < -1 ) *info = -12;
-	    else if ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+	    else if ( B->ncol < 0 ) *info = -13;
+	    else if ( B->ncol > 0 ) { /* no checking if B->ncol=0 */
+	         if ( Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
 		      B->Stype != SLU_DN || B->Dtype != SLU_D || 
 		      B->Mtype != SLU_GE )
 		*info = -13;
-	    else if ( X->ncol < 0 || Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
+            }
+	    if ( X->ncol < 0 ) *info = -14;
+            else if ( X->ncol > 0 ) { /* no checking if X->ncol=0 */
+                 if ( Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
 		      (B->ncol != 0 && B->ncol != X->ncol) ||
                       X->Stype != SLU_DN ||
 		      X->Dtype != SLU_D || X->Mtype != SLU_GE )
 		*info = -14;
+            }
 	}
     }
     if (*info != 0) {
@@ -443,7 +457,6 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
     panel_size = sp_ienv(1);
     relax      = sp_ienv(2);
     diag_pivot_thresh = options->DiagPivotThresh;
-    drop_tol   = 0.0;
 
     utime = stat->utime;
     
@@ -480,22 +493,6 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 	utime[EQUIL] = SuperLU_timer_() - t0;
     }
 
-    if ( nrhs > 0 ) {
-        /* Scale the right hand side if equilibration was performed. */
-        if ( notran ) {
-	    if ( rowequ ) {
-	        for (j = 0; j < nrhs; ++j)
-		    for (i = 0; i < A->nrow; ++i) {
-		        Bmat[i + j*ldb] *= R[i];
-	            }
-	    }
-        } else if ( colequ ) {
-	    for (j = 0; j < nrhs; ++j)
-	        for (i = 0; i < A->nrow; ++i) {
-	            Bmat[i + j*ldb] *= C[i];
-	        }
-        }
-    }
 
     if ( nofact ) {
 	
@@ -523,8 +520,8 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 	
 	/* Compute the LU factorization of A*Pc. */
 	t0 = SuperLU_timer_();
-	dgstrf(options, &AC, drop_tol, relax, panel_size,
-	       etree, work, lwork, perm_c, perm_r, L, U, stat, info);
+	dgstrf(options, &AC, relax, panel_size, etree,
+                work, lwork, perm_c, perm_r, L, U, stat, info);
 	utime[FACT] = SuperLU_timer_() - t0;
 	
 	if ( lwork == -1 ) {
@@ -561,6 +558,19 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
     }
     
     if ( nrhs > 0 ) {
+        /* Scale the right hand side if equilibration was performed. */
+        if ( notran ) {
+	    if ( rowequ ) {
+	        for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < A->nrow; ++i)
+		        Bmat[i + j*ldb] *= R[i];
+	    }
+        } else if ( colequ ) {
+	    for (j = 0; j < nrhs; ++j)
+	        for (i = 0; i < A->nrow; ++i)
+	            Bmat[i + j*ldb] *= C[i];
+        }
+
         /* Compute the solution matrix X. */
         for (j = 0; j < nrhs; j++)  /* Save a copy of the right hand sides */
             for (i = 0; i < B->nrow; i++)
@@ -585,15 +595,13 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
         if ( notran ) {
 	    if ( colequ ) {
 	        for (j = 0; j < nrhs; ++j)
-		    for (i = 0; i < A->nrow; ++i) {
+		    for (i = 0; i < A->nrow; ++i)
                         Xmat[i + j*ldx] *= C[i];
-	            }
 	    }
         } else if ( rowequ ) {
 	    for (j = 0; j < nrhs; ++j)
-	        for (i = 0; i < A->nrow; ++i) {
+	        for (i = 0; i < A->nrow; ++i)
 	            Xmat[i + j*ldx] *= R[i];
-                }
         }
     } /* end if nrhs > 0 */
 
diff --git a/SRC/dgssvx.c b/SRC/dgssvx.c.bak
similarity index 97%
copy from SRC/dgssvx.c
copy to SRC/dgssvx.c.bak
index b7e1a1c..7d97d0f 100644
--- a/SRC/dgssvx.c
+++ b/SRC/dgssvx.c.bak
@@ -1,22 +1,19 @@
 
-/*
+/*! @file dgssvx.c
+ * \brief Solves the system of linear equations A*X=B or A'*X=B
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
- *
+ * </pre>
  */
 #include "slu_ddefs.h"
 
-void
-dgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
-       int *etree, char *equed, double *R, double *C,
-       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
-       SuperMatrix *B, SuperMatrix *X, double *recip_pivot_growth, 
-       double *rcond, double *ferr, double *berr, 
-       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -314,7 +311,7 @@ dgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *
  * stat   (output) SuperLUStat_t*
  *        Record the statistics on runtime and floating-point operation count.
- *        See util.h for the definition of 'SuperLUStat_t'.
+ *        See slu_util.h for the definition of 'SuperLUStat_t'.
  *
  * info    (output) int*
  *         = 0: successful exit   
@@ -332,9 +329,19 @@ dgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *                    accurate than the value of RCOND would suggest.   
  *              > A->ncol+1: number of bytes allocated when memory allocation
  *                    failure occurred, plus A->ncol.
- *
+ * </pre>
  */
 
+void
+dgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+       int *etree, char *equed, double *R, double *C,
+       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
+       SuperMatrix *B, SuperMatrix *X, double *recip_pivot_growth, 
+       double *rcond, double *ferr, double *berr, 
+       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info )
+{
+
+
     DNformat  *Bstore, *Xstore;
     double    *Bmat, *Xmat;
     int       ldb, ldx, nrhs;
@@ -346,13 +353,12 @@ dgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
     int       i, j, info1;
     double    amax, anorm, bignum, smlnum, colcnd, rowcnd, rcmax, rcmin;
     int       relax, panel_size;
-    double    diag_pivot_thresh, drop_tol;
+    double    diag_pivot_thresh;
     double    t0;      /* temporary time */
     double    *utime;
 
     /* External functions */
     extern double dlangs(char *, SuperMatrix *);
-    extern double dlamch_(char *);
 
     Bstore = B->Store;
     Xstore = X->Store;
@@ -443,7 +449,6 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
     panel_size = sp_ienv(1);
     relax      = sp_ienv(2);
     diag_pivot_thresh = options->DiagPivotThresh;
-    drop_tol   = 0.0;
 
     utime = stat->utime;
     
@@ -480,22 +485,6 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 	utime[EQUIL] = SuperLU_timer_() - t0;
     }
 
-    if ( nrhs > 0 ) {
-        /* Scale the right hand side if equilibration was performed. */
-        if ( notran ) {
-	    if ( rowequ ) {
-	        for (j = 0; j < nrhs; ++j)
-		    for (i = 0; i < A->nrow; ++i) {
-		        Bmat[i + j*ldb] *= R[i];
-	            }
-	    }
-        } else if ( colequ ) {
-	    for (j = 0; j < nrhs; ++j)
-	        for (i = 0; i < A->nrow; ++i) {
-	            Bmat[i + j*ldb] *= C[i];
-	        }
-        }
-    }
 
     if ( nofact ) {
 	
@@ -523,8 +512,8 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 	
 	/* Compute the LU factorization of A*Pc. */
 	t0 = SuperLU_timer_();
-	dgstrf(options, &AC, drop_tol, relax, panel_size,
-	       etree, work, lwork, perm_c, perm_r, L, U, stat, info);
+	dgstrf(options, &AC, relax, panel_size, etree,
+                work, lwork, perm_c, perm_r, L, U, stat, info);
 	utime[FACT] = SuperLU_timer_() - t0;
 	
 	if ( lwork == -1 ) {
@@ -561,6 +550,19 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
     }
     
     if ( nrhs > 0 ) {
+        /* Scale the right hand side if equilibration was performed. */
+        if ( notran ) {
+	    if ( rowequ ) {
+	        for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < A->nrow; ++i)
+		        Bmat[i + j*ldb] *= R[i];
+	    }
+        } else if ( colequ ) {
+	    for (j = 0; j < nrhs; ++j)
+	        for (i = 0; i < A->nrow; ++i)
+	            Bmat[i + j*ldb] *= C[i];
+        }
+
         /* Compute the solution matrix X. */
         for (j = 0; j < nrhs; j++)  /* Save a copy of the right hand sides */
             for (i = 0; i < B->nrow; i++)
@@ -585,15 +587,13 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
         if ( notran ) {
 	    if ( colequ ) {
 	        for (j = 0; j < nrhs; ++j)
-		    for (i = 0; i < A->nrow; ++i) {
+		    for (i = 0; i < A->nrow; ++i)
                         Xmat[i + j*ldx] *= C[i];
-	            }
 	    }
         } else if ( rowequ ) {
 	    for (j = 0; j < nrhs; ++j)
-	        for (i = 0; i < A->nrow; ++i) {
+	        for (i = 0; i < A->nrow; ++i)
 	            Xmat[i + j*ldx] *= R[i];
-                }
         }
     } /* end if nrhs > 0 */
 
diff --git a/SRC/dgstrf.c b/SRC/dgstrf.c
index aba4c0b..47f1290 100644
--- a/SRC/dgstrf.c
+++ b/SRC/dgstrf.c
@@ -1,33 +1,32 @@
 
-/*
+/*! @file dgstrf.c
+ * \brief Computes an LU factorization of a general sparse matrix
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
+ * 
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
  *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_ddefs.h"
 
-void
-dgstrf (superlu_options_t *options, SuperMatrix *A, double drop_tol,
-        int relax, int panel_size, int *etree, void *work, int lwork,
-        int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U,
-        SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -53,11 +52,6 @@ dgstrf (superlu_options_t *options, SuperMatrix *A, double drop_tol,
  *          (A->nrow, A->ncol). The type of A can be:
  *          Stype = SLU_NCP; Dtype = SLU_D; Mtype = SLU_GE.
  *
- * drop_tol (input) double (NOT IMPLEMENTED)
- *	    Drop tolerance parameter. At step j of the Gaussian elimination,
- *          if abs(A_ij)/(max_i abs(A_ij)) < drop_tol, drop entry A_ij.
- *          0 <= drop_tol <= 1. The default value of drop_tol is 0.
- *
  * relax    (input) int
  *          To control degree of relaxing supernodes. If the number
  *          of nodes (columns) in a subtree of the elimination tree is less
@@ -117,7 +111,7 @@ dgstrf (superlu_options_t *options, SuperMatrix *A, double drop_tol,
  *
  * stat     (output) SuperLUStat_t*
  *          Record the statistics on runtime and floating-point operation count.
- *          See util.h for the definition of 'SuperLUStat_t'.
+ *          See slu_util.h for the definition of 'SuperLUStat_t'.
  *
  * info     (output) int*
  *          = 0: successful exit
@@ -177,9 +171,16 @@ dgstrf (superlu_options_t *options, SuperMatrix *A, double drop_tol,
  *	    	   NOTE: there are W of them.
  *
  *   tempv[0:*]: real temporary used for dense numeric kernels;
- *	The size of this array is defined by NUM_TEMPV() in dsp_defs.h.
- *
+ *	The size of this array is defined by NUM_TEMPV() in slu_ddefs.h.
+ * </pre>
  */
+
+void
+dgstrf (superlu_options_t *options, SuperMatrix *A,
+        int relax, int panel_size, int *etree, void *work, int lwork,
+        int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U,
+        SuperLUStat_t *stat, int *info)
+{
     /* Local working arrays */
     NCPformat *Astore;
     int       *iperm_r = NULL; /* inverse of perm_r; used when 
@@ -199,7 +200,8 @@ dgstrf (superlu_options_t *options, SuperMatrix *A, double drop_tol,
     int       *xsup, *supno;
     int       *xlsub, *xlusup, *xusub;
     int       nzlumax;
-    static GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
+    double fill_ratio = sp_ienv(6);  /* estimated fill ratio */
+    static    GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
 
     /* Local scalars */
     fact_t    fact = options->Fact;
@@ -230,7 +232,7 @@ dgstrf (superlu_options_t *options, SuperMatrix *A, double drop_tol,
 
     /* Allocate storage common to the factor routines */
     *info = dLUMemInit(fact, work, lwork, m, n, Astore->nnz,
-                       panel_size, L, U, &Glu, &iwork, &dwork);
+                       panel_size, fill_ratio, L, U, &Glu, &iwork, &dwork);
     if ( *info ) return;
     
     xsup    = Glu.xsup;
@@ -425,6 +427,7 @@ dgstrf (superlu_options_t *options, SuperMatrix *A, double drop_tol,
     }
     
     ops[FACT] += ops[TRSV] + ops[GEMV];	
+    stat->expansions = --(Glu.num_expansions);
     
     if ( iperm_r_allocated ) SUPERLU_FREE (iperm_r);
     SUPERLU_FREE (iperm_c);
diff --git a/SRC/dgstrs.c b/SRC/dgstrs.c
index 04cb38d..4e0247b 100644
--- a/SRC/dgstrs.c
+++ b/SRC/dgstrs.c
@@ -1,23 +1,25 @@
 
-/*
+/*! @file dgstrs.c
+ * \brief Solves a system using LU factorization
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
 
 #include "slu_ddefs.h"
 
@@ -29,13 +31,9 @@ void dusolve(int, int, double*, double*);
 void dlsolve(int, int, double*, double*);
 void dmatvec(int, int, int, double*, double*, double*);
 
-
-void
-dgstrs (trans_t trans, SuperMatrix *L, SuperMatrix *U,
-        int *perm_c, int *perm_r, SuperMatrix *B,
-        SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -85,8 +83,15 @@ dgstrs (trans_t trans, SuperMatrix *L, SuperMatrix *U,
  * info    (output) int*
  * 	   = 0: successful exit
  *	   < 0: if info = -i, the i-th argument had an illegal value
- *
+ * </pre>
  */
+
+void
+dgstrs (trans_t trans, SuperMatrix *L, SuperMatrix *U,
+        int *perm_c, int *perm_r, SuperMatrix *B,
+        SuperLUStat_t *stat, int *info)
+{
+
 #ifdef _CRAY
     _fcd ftcs1, ftcs2, ftcs3, ftcs4;
 #endif
diff --git a/SRC/dgstrsL.c b/SRC/dgstrsL.c
deleted file mode 100644
index c7f20e5..0000000
--- a/SRC/dgstrsL.c
+++ /dev/null
@@ -1,233 +0,0 @@
-
-
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * September 15, 2003
- *
- */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
-
-#include "slu_ddefs.h"
-#include "slu_util.h"
-
-
-/* 
- * Function prototypes 
- */
-void dusolve(int, int, double*, double*);
-void dlsolve(int, int, double*, double*);
-void dmatvec(int, int, int, double*, double*, double*);
-
-
-void
-dgstrsL(char *trans, SuperMatrix *L, int *perm_r, SuperMatrix *B, int *info)
-{
-/*
- * Purpose
- * =======
- *
- * DGSTRSL only performs the L-solve using the LU factorization computed
- * by DGSTRF.
- *
- * See supermatrix.h for the definition of 'SuperMatrix' structure.
- *
- * Arguments
- * =========
- *
- * trans   (input) char*
- *          Specifies the form of the system of equations:
- *          = 'N':  A * X = B  (No transpose)
- *          = 'T':  A'* X = B  (Transpose)
- *          = 'C':  A**H * X = B  (Conjugate transpose)
- *
- * L       (input) SuperMatrix*
- *         The factor L from the factorization Pr*A*Pc=L*U as computed by
- *         dgstrf(). Use compressed row subscripts storage for supernodes,
- *         i.e., L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.
- *
- * U       (input) SuperMatrix*
- *         The factor U from the factorization Pr*A*Pc=L*U as computed by
- *         dgstrf(). Use column-wise storage scheme, i.e., U has types:
- *         Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.
- *
- * perm_r  (input) int*, dimension (L->nrow)
- *         Row permutation vector, which defines the permutation matrix Pr; 
- *         perm_r[i] = j means row i of A is in position j in Pr*A.
- *
- * B       (input/output) SuperMatrix*
- *         B has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = SLU_GE.
- *         On entry, the right hand side matrix.
- *         On exit, the solution matrix if info = 0;
- *
- * info    (output) int*
- * 	   = 0: successful exit
- *	   < 0: if info = -i, the i-th argument had an illegal value
- *
- */
-#ifdef _CRAY
-    _fcd ftcs1, ftcs2, ftcs3, ftcs4;
-#endif
-    int      incx = 1, incy = 1;
-    double   alpha = 1.0, beta = 1.0;
-    DNformat *Bstore;
-    double   *Bmat;
-    SCformat *Lstore;
-    double   *Lval, *Uval;
-    int      nrow, notran;
-    int      fsupc, nsupr, nsupc, luptr, istart, irow;
-    int      i, j, k, iptr, jcol, n, ldb, nrhs;
-    double   *work, *work_col, *rhs_work, *soln;
-    flops_t  solve_ops;
-    extern SuperLUStat_t SuperLUStat;
-    void dprint_soln();
-
-    /* Test input parameters ... */
-    *info = 0;
-    Bstore = B->Store;
-    ldb = Bstore->lda;
-    nrhs = B->ncol;
-    notran = lsame_(trans, "N");
-    if ( !notran && !lsame_(trans, "T") && !lsame_(trans, "C") ) *info = -1;
-    else if ( L->nrow != L->ncol || L->nrow < 0 ||
-	      L->Stype != SLU_SC || L->Dtype != SLU_D || L->Mtype != SLU_TRLU )
-	*info = -2;
-    else if ( ldb < SUPERLU_MAX(0, L->nrow) ||
-	      B->Stype != SLU_DN || B->Dtype != SLU_D || B->Mtype != SLU_GE )
-	*info = -4;
-    if ( *info ) {
-	i = -(*info);
-	xerbla_("dgstrsL", &i);
-	return;
-    }
-
-    n = L->nrow;
-    work = doubleCalloc(n * nrhs);
-    if ( !work ) ABORT("Malloc fails for local work[].");
-    soln = doubleMalloc(n);
-    if ( !soln ) ABORT("Malloc fails for local soln[].");
-
-    Bmat = Bstore->nzval;
-    Lstore = L->Store;
-    Lval = Lstore->nzval;
-    solve_ops = 0;
-    
-    if ( notran ) {
-	/* Permute right hand sides to form Pr*B */
-	for (i = 0; i < nrhs; i++) {
-	    rhs_work = &Bmat[i*ldb];
-	    for (k = 0; k < n; k++) soln[perm_r[k]] = rhs_work[k];
-	    for (k = 0; k < n; k++) rhs_work[k] = soln[k];
-	}
-	
-	/* Forward solve PLy=Pb. */
-	for (k = 0; k <= Lstore->nsuper; k++) {
-	    fsupc = L_FST_SUPC(k);
-	    istart = L_SUB_START(fsupc);
-	    nsupr = L_SUB_START(fsupc+1) - istart;
-	    nsupc = L_FST_SUPC(k+1) - fsupc;
-	    nrow = nsupr - nsupc;
-
-	    solve_ops += nsupc * (nsupc - 1) * nrhs;
-	    solve_ops += 2 * nrow * nsupc * nrhs;
-	    
-	    if ( nsupc == 1 ) {
-		for (j = 0; j < nrhs; j++) {
-		    rhs_work = &Bmat[j*ldb];
-	    	    luptr = L_NZ_START(fsupc);
-		    for (iptr=istart+1; iptr < L_SUB_START(fsupc+1); iptr++){
-			irow = L_SUB(iptr);
-			++luptr;
-			rhs_work[irow] -= rhs_work[fsupc] * Lval[luptr];
-		    }
-		}
-	    } else {
-	    	luptr = L_NZ_START(fsupc);
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
-		ftcs1 = _cptofcd("L", strlen("L"));
-		ftcs2 = _cptofcd("N", strlen("N"));
-		ftcs3 = _cptofcd("U", strlen("U"));
-		STRSM( ftcs1, ftcs1, ftcs2, ftcs3, &nsupc, &nrhs, &alpha,
-		       &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
-		
-		SGEMM( ftcs2, ftcs2, &nrow, &nrhs, &nsupc, &alpha, 
-			&Lval[luptr+nsupc], &nsupr, &Bmat[fsupc], &ldb, 
-			&beta, &work[0], &n );
-#else
-		dtrsm_("L", "L", "N", "U", &nsupc, &nrhs, &alpha,
-		       &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
-		
-		dgemm_( "N", "N", &nrow, &nrhs, &nsupc, &alpha, 
-			&Lval[luptr+nsupc], &nsupr, &Bmat[fsupc], &ldb, 
-			&beta, &work[0], &n );
-#endif
-		for (j = 0; j < nrhs; j++) {
-		    rhs_work = &Bmat[j*ldb];
-		    work_col = &work[j*n];
-		    iptr = istart + nsupc;
-		    for (i = 0; i < nrow; i++) {
-			irow = L_SUB(iptr);
-			rhs_work[irow] -= work_col[i]; /* Scatter */
-			work_col[i] = 0.0;
-			iptr++;
-		    }
-		}
-#else		
-		for (j = 0; j < nrhs; j++) {
-		    rhs_work = &Bmat[j*ldb];
-		    dlsolve (nsupr, nsupc, &Lval[luptr], &rhs_work[fsupc]);
-		    dmatvec (nsupr, nrow, nsupc, &Lval[luptr+nsupc],
-			    &rhs_work[fsupc], &work[0] );
-
-		    iptr = istart + nsupc;
-		    for (i = 0; i < nrow; i++) {
-			irow = L_SUB(iptr);
-			rhs_work[irow] -= work[i];
-			work[i] = 0.0;
-			iptr++;
-		    }
-		}
-#endif		    
-	    } /* else ... */
-	} /* for L-solve */
-
-#ifdef DEBUG
-  	printf("After L-solve: y=\n");
-	dprint_soln(n, nrhs, Bmat);
-#endif
-	
-        SuperLUStat.ops[SOLVE] = solve_ops;
-
-    } else { 
-      printf("Transposed solve not implemented.\n");
-      exit(0);
-    }
-
-    SUPERLU_FREE(work);
-    SUPERLU_FREE(soln);
-}
-
-/*
- * Diagnostic print of the solution vector 
- */
-void
-dprint_soln(int n, int nrhs, double *soln)
-{
-    int i;
-
-    for (i = 0; i < n; i++) 
-  	printf("\t%d: %.4f\n", i, soln[i]);
-}
diff --git a/SRC/dlacon.c b/SRC/dlacon.c
index 932b891..951fe7a 100644
--- a/SRC/dlacon.c
+++ b/SRC/dlacon.c
@@ -1,65 +1,73 @@
 
-/*
+/*! @file dlacon.c
+ * \brief Estimates the 1-norm
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 #include <math.h>
 #include "slu_Cnames.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   DLACON estimates the 1-norm of a square matrix A.   
+ *   Reverse communication is used for evaluating matrix-vector products. 
+ * 
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   N      (input) INT
+ *          The order of the matrix.  N >= 1.   
+ *
+ *   V      (workspace) DOUBLE PRECISION array, dimension (N)   
+ *          On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
+ *          (W is not returned).   
+ *
+ *   X      (input/output) DOUBLE PRECISION array, dimension (N)   
+ *          On an intermediate return, X should be overwritten by   
+ *                A * X,   if KASE=1,   
+ *                A' * X,  if KASE=2,
+ *         and DLACON must be re-called with all the other parameters   
+ *          unchanged.   
+ *
+ *   ISGN   (workspace) INT array, dimension (N)
+ *
+ *   EST    (output) DOUBLE PRECISION   
+ *          An estimate (a lower bound) for norm(A).   
+ *
+ *   KASE   (input/output) INT
+ *          On the initial call to DLACON, KASE should be 0.   
+ *          On an intermediate return, KASE will be 1 or 2, indicating   
+ *          whether X should be overwritten by A * X  or A' * X.   
+ *          On the final return from DLACON, KASE will again be 0.   
+ *
+ *   Further Details   
+ *   ======= =======   
+ *
+ *   Contributed by Nick Higham, University of Manchester.   
+ *   Originally named CONEST, dated March 16, 1988.   
+ *
+ *   Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
+ *   a real or complex matrix, with applications to condition estimation", 
+ *   ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
+ *   ===================================================================== 
+ * </pre>
+ */
+
 int
 dlacon_(int *n, double *v, double *x, int *isgn, double *est, int *kase)
 
 {
-/*
-    Purpose   
-    =======   
-
-    DLACON estimates the 1-norm of a square matrix A.   
-    Reverse communication is used for evaluating matrix-vector products. 
-  
-
-    Arguments   
-    =========   
-
-    N      (input) INT
-           The order of the matrix.  N >= 1.   
-
-    V      (workspace) DOUBLE PRECISION array, dimension (N)   
-           On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
-           (W is not returned).   
-
-    X      (input/output) DOUBLE PRECISION array, dimension (N)   
-           On an intermediate return, X should be overwritten by   
-                 A * X,   if KASE=1,   
-                 A' * X,  if KASE=2,
-           and DLACON must be re-called with all the other parameters   
-           unchanged.   
-
-    ISGN   (workspace) INT array, dimension (N)
-
-    EST    (output) DOUBLE PRECISION   
-           An estimate (a lower bound) for norm(A).   
-
-    KASE   (input/output) INT
-           On the initial call to DLACON, KASE should be 0.   
-           On an intermediate return, KASE will be 1 or 2, indicating   
-           whether X should be overwritten by A * X  or A' * X.   
-           On the final return from DLACON, KASE will again be 0.   
-
-    Further Details   
-    ======= =======   
-
-    Contributed by Nick Higham, University of Manchester.   
-    Originally named CONEST, dated March 16, 1988.   
 
-    Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
-    a real or complex matrix, with applications to condition estimation", 
-    ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
-    ===================================================================== 
-*/
 
     /* Table of constant values */
     int c__1 = 1;
diff --git a/SRC/dlacon.c b/SRC/dlacon.c.bak
similarity index 67%
copy from SRC/dlacon.c
copy to SRC/dlacon.c.bak
index 932b891..951fe7a 100644
--- a/SRC/dlacon.c
+++ b/SRC/dlacon.c.bak
@@ -1,65 +1,73 @@
 
-/*
+/*! @file dlacon.c
+ * \brief Estimates the 1-norm
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 #include <math.h>
 #include "slu_Cnames.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   DLACON estimates the 1-norm of a square matrix A.   
+ *   Reverse communication is used for evaluating matrix-vector products. 
+ * 
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   N      (input) INT
+ *          The order of the matrix.  N >= 1.   
+ *
+ *   V      (workspace) DOUBLE PRECISION array, dimension (N)   
+ *          On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
+ *          (W is not returned).   
+ *
+ *   X      (input/output) DOUBLE PRECISION array, dimension (N)   
+ *          On an intermediate return, X should be overwritten by   
+ *                A * X,   if KASE=1,   
+ *                A' * X,  if KASE=2,
+ *         and DLACON must be re-called with all the other parameters   
+ *          unchanged.   
+ *
+ *   ISGN   (workspace) INT array, dimension (N)
+ *
+ *   EST    (output) DOUBLE PRECISION   
+ *          An estimate (a lower bound) for norm(A).   
+ *
+ *   KASE   (input/output) INT
+ *          On the initial call to DLACON, KASE should be 0.   
+ *          On an intermediate return, KASE will be 1 or 2, indicating   
+ *          whether X should be overwritten by A * X  or A' * X.   
+ *          On the final return from DLACON, KASE will again be 0.   
+ *
+ *   Further Details   
+ *   ======= =======   
+ *
+ *   Contributed by Nick Higham, University of Manchester.   
+ *   Originally named CONEST, dated March 16, 1988.   
+ *
+ *   Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
+ *   a real or complex matrix, with applications to condition estimation", 
+ *   ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
+ *   ===================================================================== 
+ * </pre>
+ */
+
 int
 dlacon_(int *n, double *v, double *x, int *isgn, double *est, int *kase)
 
 {
-/*
-    Purpose   
-    =======   
-
-    DLACON estimates the 1-norm of a square matrix A.   
-    Reverse communication is used for evaluating matrix-vector products. 
-  
-
-    Arguments   
-    =========   
-
-    N      (input) INT
-           The order of the matrix.  N >= 1.   
-
-    V      (workspace) DOUBLE PRECISION array, dimension (N)   
-           On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
-           (W is not returned).   
-
-    X      (input/output) DOUBLE PRECISION array, dimension (N)   
-           On an intermediate return, X should be overwritten by   
-                 A * X,   if KASE=1,   
-                 A' * X,  if KASE=2,
-           and DLACON must be re-called with all the other parameters   
-           unchanged.   
-
-    ISGN   (workspace) INT array, dimension (N)
-
-    EST    (output) DOUBLE PRECISION   
-           An estimate (a lower bound) for norm(A).   
-
-    KASE   (input/output) INT
-           On the initial call to DLACON, KASE should be 0.   
-           On an intermediate return, KASE will be 1 or 2, indicating   
-           whether X should be overwritten by A * X  or A' * X.   
-           On the final return from DLACON, KASE will again be 0.   
-
-    Further Details   
-    ======= =======   
-
-    Contributed by Nick Higham, University of Manchester.   
-    Originally named CONEST, dated March 16, 1988.   
 
-    Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
-    a real or complex matrix, with applications to condition estimation", 
-    ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
-    ===================================================================== 
-*/
 
     /* Table of constant values */
     int c__1 = 1;
diff --git a/SRC/dlamch.c b/SRC/dlamch.c
index 53c1f90..678ac35 100644
--- a/SRC/dlamch.c
+++ b/SRC/dlamch.c
@@ -1,3 +1,13 @@
+/*! @file dlamch.c
+ * \brief Determines double precision machine parameters
+ *
+ * <pre>
+ *       -- LAPACK auxiliary routine (version 2.0) --   
+ *       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
+ *       Courant Institute, Argonne National Lab, and Rice University   
+ *       October 31, 1992   
+ * </pre>
+ */
 #include <stdio.h>
 #include "slu_Cnames.h"
 
@@ -7,13 +17,10 @@
 #define min(a,b) ((a) <= (b) ? (a) : (b))
 #define max(a,b) ((a) >= (b) ? (a) : (b))
 
-double dlamch_(char *cmach)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       October 31, 1992   
 
+/*! \brief
+
+<pre>
     Purpose   
     =======   
 
@@ -49,7 +56,11 @@ double dlamch_(char *cmach)
             rmax  = overflow threshold  - (base**emax)*(1-eps)   
 
    ===================================================================== 
+</pre>
 */
+double dlamch_(char *cmach)
+{
+
 
     static int first = TRUE_;
 
@@ -127,18 +138,11 @@ double dlamch_(char *cmach)
 /*     End of DLAMCH */
 
 } /* dlamch_ */
-
-
-/* Subroutine */ int dlamc1_(int *beta, int *t, int *rnd, int 
-	*ieee1)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       October 31, 1992   
-
-
-    Purpose   
+/* Subroutine */ 
+/*! \brief 
+ 
+<pre>
+ Purpose   
     =======   
 
     DLAMC1 determines the machine parameters given by BETA, T, RND, and   
@@ -179,7 +183,11 @@ double dlamch_(char *cmach)
           Comms. of the ACM, 17, 276-277.   
 
    ===================================================================== 
+</pre>
 */
+int dlamc1_(int *beta, int *t, int *rnd, int 
+	*ieee1)
+{
     /* Initialized data */
     static int first = TRUE_;
     /* System generated locals */
@@ -339,16 +347,10 @@ L30:
 } /* dlamc1_ */
 
 
-/* Subroutine */ int dlamc2_(int *beta, int *t, int *rnd, 
-	double *eps, int *emin, double *rmin, int *emax, 
-	double *rmax)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       October 31, 1992   
-
-
+/* Subroutine */ 
+/*! \brief 
+ 
+<pre>
     Purpose   
     =======   
 
@@ -404,7 +406,13 @@ L30:
     W. Kahan of the University of California at Berkeley.   
 
    ===================================================================== 
+</pre>
 */
+int dlamc2_(int *beta, int *t, int *rnd, 
+	double *eps, int *emin, double *rmin, int *emax, 
+	double *rmax)
+{
+
     /* Table of constant values */
     static int c__1 = 1;
     
@@ -640,15 +648,9 @@ ing
 
 } /* dlamc2_ */
 
-
-double dlamc3_(double *a, double *b)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       October 31, 1992   
-
-
+/*! \brief 
+ 
+<pre>
     Purpose   
     =======   
 
@@ -665,7 +667,10 @@ double dlamc3_(double *a, double *b)
             The values A and B.   
 
    ===================================================================== 
+</pre>
 */
+double dlamc3_(double *a, double *b)
+{
 /* >>Start of File<<   
        System generated locals */
     double ret_val;
@@ -679,14 +684,10 @@ double dlamc3_(double *a, double *b)
 } /* dlamc3_ */
 
 
-/* Subroutine */ int dlamc4_(int *emin, double *start, int *base)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       October 31, 1992   
-
+/* Subroutine */ 
+/*! \brief
 
+<pre>
     Purpose   
     =======   
 
@@ -708,7 +709,11 @@ double dlamc3_(double *a, double *b)
             The base of the machine.   
 
    ===================================================================== 
+</pre>
 */
+
+int dlamc4_(int *emin, double *start, int *base)
+{
     /* System generated locals */
     int i__1;
     double d__1;
@@ -767,15 +772,10 @@ L10:
 } /* dlamc4_ */
 
 
-/* Subroutine */ int dlamc5_(int *beta, int *p, int *emin, 
-	int *ieee, int *emax, double *rmax)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       October 31, 1992   
-
-
+/* Subroutine */ 
+/*! \brief 
+ 
+<pre>
     Purpose   
     =======   
 
@@ -817,7 +817,13 @@ L10:
        First compute LEXP and UEXP, two powers of 2 that bound   
        abs(EMIN). We then assume that EMAX + abs(EMIN) will sum   
        approximately to the bound that is closest to abs(EMIN).   
-       (EMAX is the exponent of the required number RMAX). */
+       (EMAX is the exponent of the required number RMAX).
+</pre>
+*/
+int dlamc5_(int *beta, int *p, int *emin, 
+	int *ieee, int *emax, double *rmax)
+{
+
     /* Table of constant values */
     static double c_b5 = 0.;
     
diff --git a/SRC/dlangs.c b/SRC/dlangs.c
index 1dd5dfc..871cd33 100644
--- a/SRC/dlangs.c
+++ b/SRC/dlangs.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file dlangs.c
+ * \brief Returns the value of the one norm
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Modified from lapack routine DLANGE 
+ * </pre>
  */
 /*
  * File name:	dlangs.c
@@ -13,44 +18,48 @@
 #include <math.h>
 #include "slu_ddefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose   
+ *   =======   
+ *
+ *   DLANGS returns the value of the one norm, or the Frobenius norm, or 
+ *   the infinity norm, or the element of largest absolute value of a 
+ *   real matrix A.   
+ *
+ *   Description   
+ *   ===========   
+ *
+ *   DLANGE returns the value   
+ *
+ *      DLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm'   
+ *               (   
+ *               ( norm1(A),         NORM = '1', 'O' or 'o'   
+ *               (   
+ *               ( normI(A),         NORM = 'I' or 'i'   
+ *               (   
+ *               ( normF(A),         NORM = 'F', 'f', 'E' or 'e'   
+ *
+ *   where  norm1  denotes the  one norm of a matrix (maximum column sum), 
+ *   normI  denotes the  infinity norm  of a matrix  (maximum row sum) and 
+ *   normF  denotes the  Frobenius norm of a matrix (square root of sum of 
+ *   squares).  Note that  max(abs(A(i,j)))  is not a  matrix norm.   
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   NORM    (input) CHARACTER*1   
+ *           Specifies the value to be returned in DLANGE as described above.   
+ *   A       (input) SuperMatrix*
+ *           The M by N sparse matrix A. 
+ *
+ *  =====================================================================
+ * </pre>
+ */
+
 double dlangs(char *norm, SuperMatrix *A)
 {
-/* 
-    Purpose   
-    =======   
-
-    DLANGS returns the value of the one norm, or the Frobenius norm, or 
-    the infinity norm, or the element of largest absolute value of a 
-    real matrix A.   
-
-    Description   
-    ===========   
-
-    DLANGE returns the value   
-
-       DLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm'   
-                (   
-                ( norm1(A),         NORM = '1', 'O' or 'o'   
-                (   
-                ( normI(A),         NORM = 'I' or 'i'   
-                (   
-                ( normF(A),         NORM = 'F', 'f', 'E' or 'e'   
-
-    where  norm1  denotes the  one norm of a matrix (maximum column sum), 
-    normI  denotes the  infinity norm  of a matrix  (maximum row sum) and 
-    normF  denotes the  Frobenius norm of a matrix (square root of sum of 
-    squares).  Note that  max(abs(A(i,j)))  is not a  matrix norm.   
-
-    Arguments   
-    =========   
-
-    NORM    (input) CHARACTER*1   
-            Specifies the value to be returned in DLANGE as described above.   
-    A       (input) SuperMatrix*
-            The M by N sparse matrix A. 
-
-   ===================================================================== 
-*/
     
     /* Local variables */
     NCformat *Astore;
diff --git a/SRC/dlaqgs.c b/SRC/dlaqgs.c
index 6a7a7b8..c25d47a 100644
--- a/SRC/dlaqgs.c
+++ b/SRC/dlaqgs.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file dlaqgs.c
+ * \brief Equlibrates a general sprase matrix
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * 
+ * Modified from LAPACK routine DLAQGE
+ * </pre>
  */
 /*
  * File name:	dlaqgs.c
@@ -13,66 +18,71 @@
 #include <math.h>
 #include "slu_ddefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   DLAQGS equilibrates a general sparse M by N matrix A using the row and   
+ *   scaling factors in the vectors R and C.   
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   A       (input/output) SuperMatrix*
+ *           On exit, the equilibrated matrix.  See EQUED for the form of 
+ *           the equilibrated matrix. The type of A can be:
+ *	    Stype = NC; Dtype = SLU_D; Mtype = GE.
+ *	    
+ *   R       (input) double*, dimension (A->nrow)
+ *           The row scale factors for A.
+ *	    
+ *   C       (input) double*, dimension (A->ncol)
+ *           The column scale factors for A.
+ *	    
+ *   ROWCND  (input) double
+ *           Ratio of the smallest R(i) to the largest R(i).
+ *	    
+ *   COLCND  (input) double
+ *           Ratio of the smallest C(i) to the largest C(i).
+ *	    
+ *   AMAX    (input) double
+ *           Absolute value of largest matrix entry.
+ *	    
+ *   EQUED   (output) char*
+ *           Specifies the form of equilibration that was done.   
+ *           = 'N':  No equilibration   
+ *           = 'R':  Row equilibration, i.e., A has been premultiplied by  
+ *                   diag(R).   
+ *           = 'C':  Column equilibration, i.e., A has been postmultiplied  
+ *                   by diag(C).   
+ *           = 'B':  Both row and column equilibration, i.e., A has been
+ *                   replaced by diag(R) * A * diag(C).   
+ *
+ *   Internal Parameters   
+ *   ===================   
+ *
+ *   THRESH is a threshold value used to decide if row or column scaling   
+ *   should be done based on the ratio of the row or column scaling   
+ *   factors.  If ROWCND < THRESH, row scaling is done, and if   
+ *   COLCND < THRESH, column scaling is done.   
+ *
+ *   LARGE and SMALL are threshold values used to decide if row scaling   
+ *   should be done based on the absolute size of the largest matrix   
+ *   element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.   
+ *
+ *   ===================================================================== 
+ * </pre>
+ */
+
 void
 dlaqgs(SuperMatrix *A, double *r, double *c, 
 	double rowcnd, double colcnd, double amax, char *equed)
 {
-/*
-    Purpose   
-    =======   
-
-    DLAQGS equilibrates a general sparse M by N matrix A using the row and   
-    scaling factors in the vectors R and C.   
-
-    See supermatrix.h for the definition of 'SuperMatrix' structure.
-
-    Arguments   
-    =========   
-
-    A       (input/output) SuperMatrix*
-            On exit, the equilibrated matrix.  See EQUED for the form of 
-            the equilibrated matrix. The type of A can be:
-	    Stype = NC; Dtype = SLU_D; Mtype = GE.
-	    
-    R       (input) double*, dimension (A->nrow)
-            The row scale factors for A.
-	    
-    C       (input) double*, dimension (A->ncol)
-            The column scale factors for A.
-	    
-    ROWCND  (input) double
-            Ratio of the smallest R(i) to the largest R(i).
-	    
-    COLCND  (input) double
-            Ratio of the smallest C(i) to the largest C(i).
-	    
-    AMAX    (input) double
-            Absolute value of largest matrix entry.
-	    
-    EQUED   (output) char*
-            Specifies the form of equilibration that was done.   
-            = 'N':  No equilibration   
-            = 'R':  Row equilibration, i.e., A has been premultiplied by  
-                    diag(R).   
-            = 'C':  Column equilibration, i.e., A has been postmultiplied  
-                    by diag(C).   
-            = 'B':  Both row and column equilibration, i.e., A has been
-                    replaced by diag(R) * A * diag(C).   
-
-    Internal Parameters   
-    ===================   
-
-    THRESH is a threshold value used to decide if row or column scaling   
-    should be done based on the ratio of the row or column scaling   
-    factors.  If ROWCND < THRESH, row scaling is done, and if   
-    COLCND < THRESH, column scaling is done.   
-
-    LARGE and SMALL are threshold values used to decide if row scaling   
-    should be done based on the absolute size of the largest matrix   
-    element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.   
 
-    ===================================================================== 
-*/
 
 #define THRESH    (0.1)
     
@@ -81,7 +91,6 @@ dlaqgs(SuperMatrix *A, double *r, double *c,
     double   *Aval;
     int i, j, irow;
     double large, small, cj;
-    extern double dlamch_(char *);
 
 
     /* Quick return if possible */
diff --git a/SRC/dldperm.c b/SRC/dldperm.c
new file mode 100644
index 0000000..197769b
--- /dev/null
+++ b/SRC/dldperm.c
@@ -0,0 +1,165 @@
+
+/*! @file 
+ * \brief Finds a row permutation so that the matrix has large entries on the diagonal
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_ddefs.h"
+
+extern int_t mc64id_(int_t*);
+extern int_t mc64ad_(int_t*, int_t*, int_t*, int_t [], int_t [], double [],
+		    int_t*, int_t [], int_t*, int_t[], int_t*, double [],
+		    int_t [], int_t []);
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ *   DLDPERM finds a row permutation so that the matrix has large
+ *   entries on the diagonal.
+ *
+ * Arguments
+ * =========
+ *
+ * job    (input) int
+ *        Control the action. Possible values for JOB are:
+ *        = 1 : Compute a row permutation of the matrix so that the
+ *              permuted matrix has as many entries on its diagonal as
+ *              possible. The values on the diagonal are of arbitrary size.
+ *              HSL subroutine MC21A/AD is used for this.
+ *        = 2 : Compute a row permutation of the matrix so that the smallest 
+ *              value on the diagonal of the permuted matrix is maximized.
+ *        = 3 : Compute a row permutation of the matrix so that the smallest
+ *              value on the diagonal of the permuted matrix is maximized.
+ *              The algorithm differs from the one used for JOB = 2 and may
+ *              have quite a different performance.
+ *        = 4 : Compute a row permutation of the matrix so that the sum
+ *              of the diagonal entries of the permuted matrix is maximized.
+ *        = 5 : Compute a row permutation of the matrix so that the product
+ *              of the diagonal entries of the permuted matrix is maximized
+ *              and vectors to scale the matrix so that the nonzero diagonal 
+ *              entries of the permuted matrix are one in absolute value and 
+ *              all the off-diagonal entries are less than or equal to one in 
+ *              absolute value.
+ *        Restriction: 1 <= JOB <= 5.
+ *
+ * n      (input) int
+ *        The order of the matrix.
+ *
+ * nnz    (input) int
+ *        The number of nonzeros in the matrix.
+ *
+ * adjncy (input) int*, of size nnz
+ *        The adjacency structure of the matrix, which contains the row
+ *        indices of the nonzeros.
+ *
+ * colptr (input) int*, of size n+1
+ *        The pointers to the beginning of each column in ADJNCY.
+ *
+ * nzval  (input) double*, of size nnz
+ *        The nonzero values of the matrix. nzval[k] is the value of
+ *        the entry corresponding to adjncy[k].
+ *        It is not used if job = 1.
+ *
+ * perm   (output) int*, of size n
+ *        The permutation vector. perm[i] = j means row i in the
+ *        original matrix is in row j of the permuted matrix.
+ *
+ * u      (output) double*, of size n
+ *        If job = 5, the natural logarithms of the row scaling factors. 
+ *
+ * v      (output) double*, of size n
+ *        If job = 5, the natural logarithms of the column scaling factors. 
+ *        The scaled matrix B has entries b_ij = a_ij * exp(u_i + v_j).
+ * </pre>
+ */
+
+int
+dldperm(int_t job, int_t n, int_t nnz, int_t colptr[], int_t adjncy[],
+	double nzval[], int_t *perm, double u[], double v[])
+{ 
+    int_t i, liw, ldw, num;
+    int_t *iw, icntl[10], info[10];
+    double *dw;
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Enter dldperm()");
+#endif
+    liw = 5*n;
+    if ( job == 3 ) liw = 10*n + nnz;
+    if ( !(iw = intMalloc(liw)) ) ABORT("Malloc fails for iw[]");
+    ldw = 3*n + nnz;
+    if ( !(dw = (double*) SUPERLU_MALLOC(ldw * sizeof(double))) )
+          ABORT("Malloc fails for dw[]");
+	    
+    /* Increment one to get 1-based indexing. */
+    for (i = 0; i <= n; ++i) ++colptr[i];
+    for (i = 0; i < nnz; ++i) ++adjncy[i];
+#if ( DEBUGlevel>=2 )
+    printf("LDPERM(): n %d, nnz %d\n", n, nnz);
+    slu_PrintInt10("colptr", n+1, colptr);
+    slu_PrintInt10("adjncy", nnz, adjncy);
+#endif
+	
+    /* 
+     * NOTE:
+     * =====
+     *
+     * MC64AD assumes that column permutation vector is defined as:
+     * perm(i) = j means column i of permuted A is in column j of original A.
+     *
+     * Since a symmetric permutation preserves the diagonal entries. Then
+     * by the following relation:
+     *     P'(A*P')P = P'A
+     * we can apply inverse(perm) to rows of A to get large diagonal entries.
+     * But, since 'perm' defined in MC64AD happens to be the reverse of
+     * SuperLU's definition of permutation vector, therefore, it is already
+     * an inverse for our purpose. We will thus use it directly.
+     *
+     */
+    mc64id_(icntl);
+#if 0
+    /* Suppress error and warning messages. */
+    icntl[0] = -1;
+    icntl[1] = -1;
+#endif
+
+    mc64ad_(&job, &n, &nnz, colptr, adjncy, nzval, &num, perm,
+	    &liw, iw, &ldw, dw, icntl, info);
+
+#if ( DEBUGlevel>=2 )
+    slu_PrintInt10("perm", n, perm);
+    printf(".. After MC64AD info %d\tsize of matching %d\n", info[0], num);
+#endif
+    if ( info[0] == 1 ) { /* Structurally singular */
+        printf(".. The last %d permutations:\n", n-num);
+	slu_PrintInt10("perm", n-num, &perm[num]);
+    }
+
+    /* Restore to 0-based indexing. */
+    for (i = 0; i <= n; ++i) --colptr[i];
+    for (i = 0; i < nnz; ++i) --adjncy[i];
+    for (i = 0; i < n; ++i) --perm[i];
+
+    if ( job == 5 )
+        for (i = 0; i < n; ++i) {
+	    u[i] = dw[i];
+	    v[i] = dw[n+i];
+	}
+
+    SUPERLU_FREE(iw);
+    SUPERLU_FREE(dw);
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Exit dldperm()");
+#endif
+
+    return info[0];
+}
diff --git a/SRC/dmemory.c b/SRC/dmemory.c
index c56cb10..0c03e0e 100644
--- a/SRC/dmemory.c
+++ b/SRC/dmemory.c
@@ -1,54 +1,32 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * October 15, 2003
+/*! @file dmemory.c
+ * \brief Memory details
  *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
  */
 #include "slu_ddefs.h"
 
-/* Constants */
-#define NO_MEMTYPE  4      /* 0: lusup;
-			      1: ucol;
-			      2: lsub;
-			      3: usub */
-#define GluIntArray(n)   (5 * (n) + 5)
 
 /* Internal prototypes */
 void  *dexpand (int *, MemType,int, int, GlobalLU_t *);
-int   dLUWorkInit (int, int, int, int **, double **, LU_space_t);
+int   dLUWorkInit (int, int, int, int **, double **, GlobalLU_t *);
 void  copy_mem_double (int, void *, void *);
 void  dStackCompress (GlobalLU_t *);
-void  dSetupSpace (void *, int, LU_space_t *);
-void  *duser_malloc (int, int);
-void  duser_free (int, int);
+void  dSetupSpace (void *, int, GlobalLU_t *);
+void  *duser_malloc (int, int, GlobalLU_t *);
+void  duser_free (int, int, GlobalLU_t *);
 
-/* External prototypes (in memory.c - prec-indep) */
+/* External prototypes (in memory.c - prec-independent) */
 extern void    copy_mem_int    (int, void *, void *);
 extern void    user_bcopy      (char *, char *, int);
 
-/* Headers for 4 types of dynamatically managed memory */
-typedef struct e_node {
-    int size;      /* length of the memory that has been used */
-    void *mem;     /* pointer to the new malloc'd store */
-} ExpHeader;
-
-typedef struct {
-    int  size;
-    int  used;
-    int  top1;  /* grow upward, relative to &array[0] */
-    int  top2;  /* grow downward */
-    void *array;
-} LU_stack_t;
-
-/* Variables local to this file */
-static ExpHeader *expanders = 0; /* Array of pointers to 4 types of memory */
-static LU_stack_t stack;
-static int no_expand;
 
 /* Macros to manipulate stack */
-#define StackFull(x)         ( x + stack.used >= stack.size )
+#define StackFull(x)         ( x + Glu->stack.used >= Glu->stack.size )
 #define NotDoubleAlign(addr) ( (long int)addr & 7 )
 #define DoubleAlign(addr)    ( ((long int)addr + 7) & ~7L )
 #define TempSpace(m, w)      ( (2*w + 4 + NO_MARKER) * m * sizeof(int) + \
@@ -58,66 +36,67 @@ static int no_expand;
 
 
 
-/*
- * Setup the memory model to be used for factorization.
+/*! \brief Setup the memory model to be used for factorization.
+ *  
  *    lwork = 0: use system malloc;
  *    lwork > 0: use user-supplied work[] space.
  */
-void dSetupSpace(void *work, int lwork, LU_space_t *MemModel)
+void dSetupSpace(void *work, int lwork, GlobalLU_t *Glu)
 {
     if ( lwork == 0 ) {
-	*MemModel = SYSTEM; /* malloc/free */
+	Glu->MemModel = SYSTEM; /* malloc/free */
     } else if ( lwork > 0 ) {
-	*MemModel = USER;   /* user provided space */
-	stack.used = 0;
-	stack.top1 = 0;
-	stack.top2 = (lwork/4)*4; /* must be word addressable */
-	stack.size = stack.top2;
-	stack.array = (void *) work;
+	Glu->MemModel = USER;   /* user provided space */
+	Glu->stack.used = 0;
+	Glu->stack.top1 = 0;
+	Glu->stack.top2 = (lwork/4)*4; /* must be word addressable */
+	Glu->stack.size = Glu->stack.top2;
+	Glu->stack.array = (void *) work;
     }
 }
 
 
 
-void *duser_malloc(int bytes, int which_end)
+void *duser_malloc(int bytes, int which_end, GlobalLU_t *Glu)
 {
     void *buf;
     
     if ( StackFull(bytes) ) return (NULL);
 
     if ( which_end == HEAD ) {
-	buf = (char*) stack.array + stack.top1;
-	stack.top1 += bytes;
+	buf = (char*) Glu->stack.array + Glu->stack.top1;
+	Glu->stack.top1 += bytes;
     } else {
-	stack.top2 -= bytes;
-	buf = (char*) stack.array + stack.top2;
+	Glu->stack.top2 -= bytes;
+	buf = (char*) Glu->stack.array + Glu->stack.top2;
     }
     
-    stack.used += bytes;
+    Glu->stack.used += bytes;
     return buf;
 }
 
 
-void duser_free(int bytes, int which_end)
+void duser_free(int bytes, int which_end, GlobalLU_t *Glu)
 {
     if ( which_end == HEAD ) {
-	stack.top1 -= bytes;
+	Glu->stack.top1 -= bytes;
     } else {
-	stack.top2 += bytes;
+	Glu->stack.top2 += bytes;
     }
-    stack.used -= bytes;
+    Glu->stack.used -= bytes;
 }
 
 
 
-/*
+/*! \brief 
+ *
+ * <pre>
  * mem_usage consists of the following fields:
  *    - for_lu (float)
  *      The amount of space used in bytes for the L\U data structures.
  *    - total_needed (float)
  *      The amount of space needed in bytes to perform factorization.
- *    - expansions (int)
- *      Number of memory expansions during the LU factorization.
+ * </pre>
  */
 int dQuerySpace(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)
 {
@@ -132,33 +111,75 @@ int dQuerySpace(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)
     dword = sizeof(double);
 
     /* For LU factors */
-    mem_usage->for_lu = (float)( (4*n + 3) * iword + Lstore->nzval_colptr[n] *
-				 dword + Lstore->rowind_colptr[n] * iword );
-    mem_usage->for_lu += (float)( (n + 1) * iword +
+    mem_usage->for_lu = (float)( (4.0*n + 3.0) * iword +
+                                 Lstore->nzval_colptr[n] * dword +
+                                 Lstore->rowind_colptr[n] * iword );
+    mem_usage->for_lu += (float)( (n + 1.0) * iword +
 				 Ustore->colptr[n] * (dword + iword) );
 
     /* Working storage to support factorization */
     mem_usage->total_needed = mem_usage->for_lu +
-	(float)( (2 * panel_size + 4 + NO_MARKER) * n * iword +
-		(panel_size + 1) * n * dword );
-
-    mem_usage->expansions = --no_expand;
+	(float)( (2.0 * panel_size + 4.0 + NO_MARKER) * n * iword +
+		(panel_size + 1.0) * n * dword );
 
     return 0;
 } /* dQuerySpace */
 
-/*
- * Allocate storage for the data structures common to all factor routines.
- * For those unpredictable size, make a guess as FILL * nnz(A).
+
+/*! \brief
+ *
+ * <pre>
+ * mem_usage consists of the following fields:
+ *    - for_lu (float)
+ *      The amount of space used in bytes for the L\U data structures.
+ *    - total_needed (float)
+ *      The amount of space needed in bytes to perform factorization.
+ * </pre>
+ */
+int ilu_dQuerySpace(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)
+{
+    SCformat *Lstore;
+    NCformat *Ustore;
+    register int n, panel_size = sp_ienv(1);
+    register float iword, dword;
+
+    Lstore = L->Store;
+    Ustore = U->Store;
+    n = L->ncol;
+    iword = sizeof(int);
+    dword = sizeof(double);
+
+    /* For LU factors */
+    mem_usage->for_lu = (float)( (4.0f * n + 3.0f) * iword +
+				 Lstore->nzval_colptr[n] * dword +
+				 Lstore->rowind_colptr[n] * iword );
+    mem_usage->for_lu += (float)( (n + 1.0f) * iword +
+				 Ustore->colptr[n] * (dword + iword) );
+
+    /* Working storage to support factorization.
+       ILU needs 5*n more integers than LU */
+    mem_usage->total_needed = mem_usage->for_lu +
+	(float)( (2.0f * panel_size + 9.0f + NO_MARKER) * n * iword +
+		(panel_size + 1.0f) * n * dword );
+
+    return 0;
+} /* ilu_dQuerySpace */
+
+
+/*! \brief Allocate storage for the data structures common to all factor routines.
+ *
+ * <pre>
+ * For those unpredictable size, estimate as fill_ratio * nnz(A).
  * Return value:
  *     If lwork = -1, return the estimated amount of space required, plus n;
  *     otherwise, return the amount of space actually allocated when
  *     memory allocation failure occurred.
+ * </pre> 
  */
 int
 dLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
-	  int panel_size, SuperMatrix *L, SuperMatrix *U, GlobalLU_t *Glu,
-	  int **iwork, double **dwork)
+	  int panel_size, double fill_ratio, SuperMatrix *L, SuperMatrix *U,
+          GlobalLU_t *Glu, int **iwork, double **dwork)
 {
     int      info, iword, dword;
     SCformat *Lstore;
@@ -170,32 +191,32 @@ dLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
     double   *ucol;
     int      *usub, *xusub;
     int      nzlmax, nzumax, nzlumax;
-    int      FILL = sp_ienv(6);
     
-    Glu->n    = n;
-    no_expand = 0;
     iword     = sizeof(int);
     dword     = sizeof(double);
+    Glu->n    = n;
+    Glu->num_expansions = 0;
 
-    if ( !expanders )	
-        expanders = (ExpHeader*)SUPERLU_MALLOC(NO_MEMTYPE * sizeof(ExpHeader));
-    if ( !expanders ) ABORT("SUPERLU_MALLOC fails for expanders");
+    if ( !Glu->expanders )	
+        Glu->expanders = (ExpHeader*)SUPERLU_MALLOC( NO_MEMTYPE *
+                                                     sizeof(ExpHeader) );
+    if ( !Glu->expanders ) ABORT("SUPERLU_MALLOC fails for expanders");
     
     if ( fact != SamePattern_SameRowPerm ) {
 	/* Guess for L\U factors */
-	nzumax = nzlumax = FILL * annz;
-	nzlmax = SUPERLU_MAX(1, FILL/4.) * annz;
+	nzumax = nzlumax = fill_ratio * annz;
+	nzlmax = SUPERLU_MAX(1, fill_ratio/4.) * annz;
 
 	if ( lwork == -1 ) {
 	    return ( GluIntArray(n) * iword + TempSpace(m, panel_size)
 		    + (nzlmax+nzumax)*iword + (nzlumax+nzumax)*dword + n );
         } else {
-	    dSetupSpace(work, lwork, &Glu->MemModel);
+	    dSetupSpace(work, lwork, Glu);
 	}
 	
 #if ( PRNTlevel >= 1 )
-	printf("dLUMemInit() called: FILL %ld, nzlmax %ld, nzumax %ld\n", 
-	       FILL, nzlmax, nzumax);
+	printf("dLUMemInit() called: fill_ratio %.0f, nzlmax %ld, nzumax %ld\n", 
+	       fill_ratio, nzlmax, nzumax);
 	fflush(stdout);
 #endif	
 	
@@ -207,11 +228,11 @@ dLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
 	    xlusup = intMalloc(n+1);
 	    xusub  = intMalloc(n+1);
 	} else {
-	    xsup   = (int *)duser_malloc((n+1) * iword, HEAD);
-	    supno  = (int *)duser_malloc((n+1) * iword, HEAD);
-	    xlsub  = (int *)duser_malloc((n+1) * iword, HEAD);
-	    xlusup = (int *)duser_malloc((n+1) * iword, HEAD);
-	    xusub  = (int *)duser_malloc((n+1) * iword, HEAD);
+	    xsup   = (int *)duser_malloc((n+1) * iword, HEAD, Glu);
+	    supno  = (int *)duser_malloc((n+1) * iword, HEAD, Glu);
+	    xlsub  = (int *)duser_malloc((n+1) * iword, HEAD, Glu);
+	    xlusup = (int *)duser_malloc((n+1) * iword, HEAD, Glu);
+	    xusub  = (int *)duser_malloc((n+1) * iword, HEAD, Glu);
 	}
 
 	lusup = (double *) dexpand( &nzlumax, LUSUP, 0, 0, Glu );
@@ -226,7 +247,8 @@ dLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
 		SUPERLU_FREE(lsub); 
 		SUPERLU_FREE(usub);
 	    } else {
-		duser_free((nzlumax+nzumax)*dword+(nzlmax+nzumax)*iword, HEAD);
+		duser_free((nzlumax+nzumax)*dword+(nzlmax+nzumax)*iword,
+                            HEAD, Glu);
 	    }
 	    nzlumax /= 2;
 	    nzumax /= 2;
@@ -266,18 +288,18 @@ dLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
 	    Glu->MemModel = SYSTEM;
 	} else {
 	    Glu->MemModel = USER;
-	    stack.top2 = (lwork/4)*4; /* must be word-addressable */
-	    stack.size = stack.top2;
+	    Glu->stack.top2 = (lwork/4)*4; /* must be word-addressable */
+	    Glu->stack.size = Glu->stack.top2;
 	}
 	
-	lsub  = expanders[LSUB].mem  = Lstore->rowind;
-	lusup = expanders[LUSUP].mem = Lstore->nzval;
-	usub  = expanders[USUB].mem  = Ustore->rowind;
-	ucol  = expanders[UCOL].mem  = Ustore->nzval;;
-	expanders[LSUB].size         = nzlmax;
-	expanders[LUSUP].size        = nzlumax;
-	expanders[USUB].size         = nzumax;
-	expanders[UCOL].size         = nzumax;	
+	lsub  = Glu->expanders[LSUB].mem  = Lstore->rowind;
+	lusup = Glu->expanders[LUSUP].mem = Lstore->nzval;
+	usub  = Glu->expanders[USUB].mem  = Ustore->rowind;
+	ucol  = Glu->expanders[UCOL].mem  = Ustore->nzval;;
+	Glu->expanders[LSUB].size         = nzlmax;
+	Glu->expanders[LUSUP].size        = nzlumax;
+	Glu->expanders[USUB].size         = nzumax;
+	Glu->expanders[UCOL].size         = nzumax;	
     }
 
     Glu->xsup    = xsup;
@@ -293,43 +315,43 @@ dLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
     Glu->nzumax  = nzumax;
     Glu->nzlumax = nzlumax;
     
-    info = dLUWorkInit(m, n, panel_size, iwork, dwork, Glu->MemModel);
+    info = dLUWorkInit(m, n, panel_size, iwork, dwork, Glu);
     if ( info )
 	return ( info + dmemory_usage(nzlmax, nzumax, nzlumax, n) + n);
     
-    ++no_expand;
+    ++Glu->num_expansions;
     return 0;
     
 } /* dLUMemInit */
 
-/* Allocate known working storage. Returns 0 if success, otherwise
+/*! \brief Allocate known working storage. Returns 0 if success, otherwise
    returns the number of bytes allocated so far when failure occurred. */
 int
 dLUWorkInit(int m, int n, int panel_size, int **iworkptr, 
-            double **dworkptr, LU_space_t MemModel)
+            double **dworkptr, GlobalLU_t *Glu)
 {
     int    isize, dsize, extra;
     double *old_ptr;
-    int    maxsuper = sp_ienv(3),
+    int    maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
            rowblk   = sp_ienv(4);
 
     isize = ( (2 * panel_size + 3 + NO_MARKER ) * m + n ) * sizeof(int);
     dsize = (m * panel_size +
 	     NUM_TEMPV(m,panel_size,maxsuper,rowblk)) * sizeof(double);
     
-    if ( MemModel == SYSTEM ) 
+    if ( Glu->MemModel == SYSTEM ) 
 	*iworkptr = (int *) intCalloc(isize/sizeof(int));
     else
-	*iworkptr = (int *) duser_malloc(isize, TAIL);
+	*iworkptr = (int *) duser_malloc(isize, TAIL, Glu);
     if ( ! *iworkptr ) {
 	fprintf(stderr, "dLUWorkInit: malloc fails for local iworkptr[]\n");
 	return (isize + n);
     }
 
-    if ( MemModel == SYSTEM )
+    if ( Glu->MemModel == SYSTEM )
 	*dworkptr = (double *) SUPERLU_MALLOC(dsize);
     else {
-	*dworkptr = (double *) duser_malloc(dsize, TAIL);
+	*dworkptr = (double *) duser_malloc(dsize, TAIL, Glu);
 	if ( NotDoubleAlign(*dworkptr) ) {
 	    old_ptr = *dworkptr;
 	    *dworkptr = (double*) DoubleAlign(*dworkptr);
@@ -338,8 +360,8 @@ dLUWorkInit(int m, int n, int panel_size, int **iworkptr,
 #ifdef DEBUG	    
 	    printf("dLUWorkInit: not aligned, extra %d\n", extra);
 #endif	    
-	    stack.top2 -= extra;
-	    stack.used += extra;
+	    Glu->stack.top2 -= extra;
+	    Glu->stack.used += extra;
 	}
     }
     if ( ! *dworkptr ) {
@@ -351,8 +373,7 @@ dLUWorkInit(int m, int n, int panel_size, int **iworkptr,
 }
 
 
-/*
- * Set up pointers for real working arrays.
+/*! \brief Set up pointers for real working arrays.
  */
 void
 dSetRWork(int m, int panel_size, double *dworkptr,
@@ -360,7 +381,7 @@ dSetRWork(int m, int panel_size, double *dworkptr,
 {
     double zero = 0.0;
 
-    int maxsuper = sp_ienv(3),
+    int maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
         rowblk   = sp_ienv(4);
     *dense = dworkptr;
     *tempv = *dense + panel_size*m;
@@ -368,8 +389,7 @@ dSetRWork(int m, int panel_size, double *dworkptr,
     dfill (*tempv, NUM_TEMPV(m,panel_size,maxsuper,rowblk), zero);     
 }
 	
-/*
- * Free the working storage used by factor routines.
+/*! \brief Free the working storage used by factor routines.
  */
 void dLUWorkFree(int *iwork, double *dwork, GlobalLU_t *Glu)
 {
@@ -377,18 +397,21 @@ void dLUWorkFree(int *iwork, double *dwork, GlobalLU_t *Glu)
 	SUPERLU_FREE (iwork);
 	SUPERLU_FREE (dwork);
     } else {
-	stack.used -= (stack.size - stack.top2);
-	stack.top2 = stack.size;
+	Glu->stack.used -= (Glu->stack.size - Glu->stack.top2);
+	Glu->stack.top2 = Glu->stack.size;
 /*	dStackCompress(Glu);  */
     }
     
-    SUPERLU_FREE (expanders);	
-    expanders = 0;
+    SUPERLU_FREE (Glu->expanders);	
+    Glu->expanders = NULL;
 }
 
-/* Expand the data structures for L and U during the factorization.
+/*! \brief Expand the data structures for L and U during the factorization.
+ * 
+ * <pre>
  * Return value:   0 - successful return
  *               > 0 - number of bytes allocated when run out of space
+ * </pre>
  */
 int
 dLUMemXpand(int jcol,
@@ -452,8 +475,7 @@ copy_mem_double(int howmany, void *old, void *new)
     for (i = 0; i < howmany; i++) dnew[i] = dold[i];
 }
 
-/*
- * Expand the existing storage to accommodate more fill-ins.
+/*! \brief Expand the existing storage to accommodate more fill-ins.
  */
 void
 *dexpand (
@@ -469,12 +491,14 @@ void
     float    alpha;
     void     *new_mem, *old_mem;
     int      new_len, tries, lword, extra, bytes_to_copy;
+    ExpHeader *expanders = Glu->expanders; /* Array of 4 types of memory */
 
     alpha = EXPAND;
 
-    if ( no_expand == 0 || keep_prev ) /* First time allocate requested */
+    if ( Glu->num_expansions == 0 || keep_prev ) {
+        /* First time allocate requested */
         new_len = *prev_len;
-    else {
+    } else {
 	new_len = alpha * *prev_len;
     }
     
@@ -483,7 +507,7 @@ void
 
     if ( Glu->MemModel == SYSTEM ) {
 	new_mem = (void *) SUPERLU_MALLOC((size_t)new_len * lword);
-	if ( no_expand != 0 ) {
+	if ( Glu->num_expansions != 0 ) {
 	    tries = 0;
 	    if ( keep_prev ) {
 		if ( !new_mem ) return (NULL);
@@ -505,8 +529,8 @@ void
 	expanders[type].mem = (void *) new_mem;
 	
     } else { /* MemModel == USER */
-	if ( no_expand == 0 ) {
-	    new_mem = duser_malloc(new_len * lword, HEAD);
+	if ( Glu->num_expansions == 0 ) {
+	    new_mem = duser_malloc(new_len * lword, HEAD, Glu);
 	    if ( NotDoubleAlign(new_mem) &&
 		(type == LUSUP || type == UCOL) ) {
 		old_mem = new_mem;
@@ -515,12 +539,11 @@ void
 #ifdef DEBUG		
 		printf("expand(): not aligned, extra %d\n", extra);
 #endif		
-		stack.top1 += extra;
-		stack.used += extra;
+		Glu->stack.top1 += extra;
+		Glu->stack.used += extra;
 	    }
 	    expanders[type].mem = (void *) new_mem;
-	}
-	else {
+	} else {
 	    tries = 0;
 	    extra = (new_len - *prev_len) * lword;
 	    if ( keep_prev ) {
@@ -536,7 +559,7 @@ void
 
 	    if ( type != USUB ) {
 		new_mem = (void*)((char*)expanders[type + 1].mem + extra);
-		bytes_to_copy = (char*)stack.array + stack.top1
+		bytes_to_copy = (char*)Glu->stack.array + Glu->stack.top1
 		    - (char*)expanders[type + 1].mem;
 		user_bcopy(expanders[type+1].mem, new_mem, bytes_to_copy);
 
@@ -552,11 +575,11 @@ void
 		    Glu->ucol = expanders[UCOL].mem =
 			(void*)((char*)expanders[UCOL].mem + extra);
 		}
-		stack.top1 += extra;
-		stack.used += extra;
+		Glu->stack.top1 += extra;
+		Glu->stack.used += extra;
 		if ( type == UCOL ) {
-		    stack.top1 += extra;   /* Add same amount for USUB */
-		    stack.used += extra;
+		    Glu->stack.top1 += extra;   /* Add same amount for USUB */
+		    Glu->stack.used += extra;
 		}
 		
 	    } /* if ... */
@@ -566,15 +589,14 @@ void
 
     expanders[type].size = new_len;
     *prev_len = new_len;
-    if ( no_expand ) ++no_expand;
+    if ( Glu->num_expansions ) ++Glu->num_expansions;
     
     return (void *) expanders[type].mem;
     
 } /* dexpand */
 
 
-/*
- * Compress the work[] array to remove fragmentation.
+/*! \brief Compress the work[] array to remove fragmentation.
  */
 void
 dStackCompress(GlobalLU_t *Glu)
@@ -614,9 +636,9 @@ dStackCompress(GlobalLU_t *Glu)
     usub = ito;
     
     last = (char*)usub + xusub[ndim] * iword;
-    fragment = (char*) (((char*)stack.array + stack.top1) - last);
-    stack.used -= (long int) fragment;
-    stack.top1 -= (long int) fragment;
+    fragment = (char*) (((char*)Glu->stack.array + Glu->stack.top1) - last);
+    Glu->stack.used -= (long int) fragment;
+    Glu->stack.top1 -= (long int) fragment;
 
     Glu->ucol = ucol;
     Glu->lsub = lsub;
@@ -630,8 +652,7 @@ dStackCompress(GlobalLU_t *Glu)
     
 }
 
-/*
- * Allocate storage for original matrix A
+/*! \brief Allocate storage for original matrix A
  */
 void
 dallocateA(int n, int nnz, double **a, int **asub, int **xa)
diff --git a/SRC/dmyblas2.c b/SRC/dmyblas2.c
index e02660a..2a58f5b 100644
--- a/SRC/dmyblas2.c
+++ b/SRC/dmyblas2.c
@@ -1,21 +1,26 @@
 
-/*
+/*! @file dmyblas2.c
+ * \brief Level 2 Blas operations
+ * 
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
- */
-/*
- * File name:		dmyblas2.c
+ * </pre>
  * Purpose:
  *     Level 2 BLAS operations: solves and matvec, written in C.
  * Note:
  *     This is only used when the system lacks an efficient BLAS library.
+ * </pre>
  */
-
 /*
- * Solves a dense UNIT lower triangular system. The unit lower 
+ * File name:		dmyblas2.c
+ */
+
+/*! \brief Solves a dense UNIT lower triangular system
+ *
+ *  The unit lower 
  * triangular matrix is stored in a 2D array M(1:nrow,1:ncol). 
  * The solution will be returned in the rhs vector.
  */
@@ -111,8 +116,9 @@ void dlsolve ( int ldm, int ncol, double *M, double *rhs )
     
 }
 
-/*
- * Solves a dense upper triangular system. The upper triangular matrix is
+/*! \brief Solves a dense upper triangular system
+ * 
+ * The upper triangular matrix is
  * stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned
  * in the rhs vector.
  */
@@ -142,8 +148,8 @@ double *rhs;	/* modified */
 }
 
 
-/*
- * Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.
+/*! \brief Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.
+ * 
  * The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[].
  */
 void dmatvec ( ldm, nrow, ncol, M, vec, Mxvec )
diff --git a/SRC/dpanel_bmod.c b/SRC/dpanel_bmod.c
index 0019fe8..f2ae3a8 100644
--- a/SRC/dpanel_bmod.c
+++ b/SRC/dpanel_bmod.c
@@ -1,22 +1,27 @@
 
-/*
+/*! @file dpanel_bmod.c
+ * \brief Performs numeric block updates
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
 /*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+
 */
 
 #include <stdio.h>
@@ -30,6 +35,25 @@ void dlsolve(int, int, double *, double *);
 void dmatvec(int, int, int, double *, double *, double *);
 extern void dcheck_tempv();
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ *    Performs numeric block updates (sup-panel) in topological order.
+ *    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ *    Special processing on the supernodal portion of L\U[*,j]
+ *
+ *    Before entering this routine, the original nonzeros in the panel 
+ *    were already copied into the spa[m,w].
+ *
+ *    Updated/Output parameters-
+ *    dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
+ *    collectively in the m-by-w vector dense[*]. 
+ * </pre>
+ */
+
 void
 dpanel_bmod (
 	    const int  m,          /* in - number of rows in the matrix */
@@ -44,22 +68,7 @@ dpanel_bmod (
 	    SuperLUStat_t *stat    /* output */
 	    )
 {
-/* 
- * Purpose
- * =======
- *
- *    Performs numeric block updates (sup-panel) in topological order.
- *    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
- *    Special processing on the supernodal portion of L\U[*,j]
- *
- *    Before entering this routine, the original nonzeros in the panel 
- *    were already copied into the spa[m,w].
- *
- *    Updated/Output parameters-
- *	dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
- *      collectively in the m-by-w vector dense[*]. 
- *
- */
+
 
 #ifdef USE_VENDOR_BLAS
 #ifdef _CRAY
@@ -105,7 +114,7 @@ dpanel_bmod (
     xlusup  = Glu->xlusup;
     
     if ( first ) {
-	maxsuper = sp_ienv(3);
+	maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) );
 	rowblk   = sp_ienv(4);
 	colblk   = sp_ienv(5);
 	first = 0;
diff --git a/SRC/dpanel_dfs.c b/SRC/dpanel_dfs.c
index 6a4c742..73343e5 100644
--- a/SRC/dpanel_dfs.c
+++ b/SRC/dpanel_dfs.c
@@ -1,46 +1,32 @@
 
-/*
+/*! @file dpanel_dfs.c
+ * \brief Peforms a symbolic factorization on a panel of symbols
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_ddefs.h"
 
-void
-dpanel_dfs (
-	   const int  m,           /* in - number of rows in the matrix */
-	   const int  w,           /* in */
-	   const int  jcol,        /* in */
-	   SuperMatrix *A,       /* in - original matrix */
-	   int        *perm_r,     /* in */
-	   int        *nseg,	   /* out */
-	   double     *dense,      /* out */
-	   int        *panel_lsub, /* out */
-	   int        *segrep,     /* out */
-	   int        *repfnz,     /* out */
-	   int        *xprune,     /* out */
-	   int        *marker,     /* out */     
-	   int        *parent,     /* working array */
-	   int        *xplore,     /* working array */
-	   GlobalLU_t *Glu         /* modified */
-	   )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -66,8 +52,29 @@ dpanel_dfs (
  *   repfnz: SuperA-col --> PA-row
  *   parent: SuperA-col --> SuperA-col
  *   xplore: SuperA-col --> index to L-structure
- *
+ * </pre>
  */
+
+void
+dpanel_dfs (
+	   const int  m,           /* in - number of rows in the matrix */
+	   const int  w,           /* in */
+	   const int  jcol,        /* in */
+	   SuperMatrix *A,       /* in - original matrix */
+	   int        *perm_r,     /* in */
+	   int        *nseg,	   /* out */
+	   double     *dense,      /* out */
+	   int        *panel_lsub, /* out */
+	   int        *segrep,     /* out */
+	   int        *repfnz,     /* out */
+	   int        *xprune,     /* out */
+	   int        *marker,     /* out */     
+	   int        *parent,     /* working array */
+	   int        *xplore,     /* working array */
+	   GlobalLU_t *Glu         /* modified */
+	   )
+{
+
     NCPformat *Astore;
     double    *a;
     int       *asub;
diff --git a/SRC/dpivotL.c b/SRC/dpivotL.c
index bf43e6a..bcfa96d 100644
--- a/SRC/dpivotL.c
+++ b/SRC/dpivotL.c
@@ -1,23 +1,26 @@
 
-/*
+/*! @file dpivotL.c
+ * \brief Performs numerical pivoting
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include <math.h>
 #include <stdlib.h>
@@ -25,20 +28,9 @@
 
 #undef DEBUG
 
-int
-dpivotL(
-        const int  jcol,     /* in */
-        const double u,      /* in - diagonal pivoting threshold */
-        int        *usepr,   /* re-use the pivot sequence given by perm_r/iperm_r */
-        int        *perm_r,  /* may be modified */
-        int        *iperm_r, /* in - inverse of perm_r */
-        int        *iperm_c, /* in - used to find diagonal of Pc*A*Pc' */
-        int        *pivrow,  /* out */
-        GlobalLU_t *Glu,     /* modified - global LU data structures */
-	SuperLUStat_t *stat  /* output */
-       )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *   Performs the numerical pivoting on the current column of L,
@@ -57,8 +49,23 @@ dpivotL(
  *
  *   Return value: 0      success;
  *                 i > 0  U(i,i) is exactly zero.
- *
+ * </pre>
  */
+
+int
+dpivotL(
+        const int  jcol,     /* in */
+        const double u,      /* in - diagonal pivoting threshold */
+        int        *usepr,   /* re-use the pivot sequence given by perm_r/iperm_r */
+        int        *perm_r,  /* may be modified */
+        int        *iperm_r, /* in - inverse of perm_r */
+        int        *iperm_c, /* in - used to find diagonal of Pc*A*Pc' */
+        int        *pivrow,  /* out */
+        GlobalLU_t *Glu,     /* modified - global LU data structures */
+	SuperLUStat_t *stat  /* output */
+       )
+{
+
     int          fsupc;	    /* first column in the supernode */
     int          nsupc;	    /* no of columns in the supernode */
     int          nsupr;     /* no of rows in the supernode */
@@ -116,8 +123,12 @@ if ( jcol == MIN_COL ) {
 
     /* Test for singularity */
     if ( pivmax == 0.0 ) {
+#if 1
 	*pivrow = lsub_ptr[pivptr];
 	perm_r[*pivrow] = jcol;
+#else
+	perm_r[diagind] = jcol;
+#endif
 	*usepr = 0;
 	return (jcol+1);
     }
diff --git a/SRC/dpivotgrowth.c b/SRC/dpivotgrowth.c
index 41924f7..14fec65 100644
--- a/SRC/dpivotgrowth.c
+++ b/SRC/dpivotgrowth.c
@@ -1,19 +1,20 @@
 
-/*
+/*! @file dpivotgrowth.c
+ * \brief Computes the reciprocal pivot growth factor
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 #include <math.h>
 #include "slu_ddefs.h"
 
-double
-dPivotGrowth(int ncols, SuperMatrix *A, int *perm_c, 
-             SuperMatrix *L, SuperMatrix *U)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -41,8 +42,14 @@ dPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
  *	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
  *          storage scheme, i.e., U has types: Stype = NC;
  *          Dtype = SLU_D; Mtype = TRU.
- *
+ * </pre>
  */
+
+double
+dPivotGrowth(int ncols, SuperMatrix *A, int *perm_c, 
+             SuperMatrix *L, SuperMatrix *U)
+{
+
     NCformat *Astore;
     SCformat *Lstore;
     NCformat *Ustore;
@@ -51,7 +58,6 @@ dPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
     int      i, j, k, oldcol;
     int      *inv_perm_c;
     double   rpg, maxaj, maxuj;
-    extern   double dlamch_(char *);
     double   smlnum;
     double   *luval;
    
diff --git a/SRC/dpruneL.c b/SRC/dpruneL.c
index c782ca1..62b8099 100644
--- a/SRC/dpruneL.c
+++ b/SRC/dpruneL.c
@@ -1,26 +1,39 @@
 
-/*
+/*! @file dpruneL.c
+ * \brief Prunes the L-structure
+ *
+ *<pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ *</pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_ddefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *   Prunes the L-structure of supernodes whose L-structure
+ *   contains the current pivot row "pivrow"
+ * </pre>
+ */
+
 void
 dpruneL(
        const int  jcol,	     /* in */
@@ -33,13 +46,7 @@ dpruneL(
        GlobalLU_t *Glu       /* modified - global LU data structures */
        )
 {
-/*
- * Purpose
- * =======
- *   Prunes the L-structure of supernodes whose L-structure
- *   contains the current pivot row "pivrow"
- *
- */
+
     double     utemp;
     int        jsupno, irep, irep1, kmin, kmax, krow, movnum;
     int        i, ktemp, minloc, maxloc;
@@ -106,8 +113,8 @@ dpruneL(
 			kmax--;
 		    else if ( perm_r[lsub[kmin]] != EMPTY )
 			kmin++;
-		    else { /* kmin below pivrow, and kmax above pivrow: 
-		            * 	interchange the two subscripts
+		    else { /* kmin below pivrow (not yet pivoted), and kmax
+                            * above pivrow: interchange the two subscripts
 			    */
 		        ktemp = lsub[kmin];
 		        lsub[kmin] = lsub[kmax];
diff --git a/SRC/dreadhb.c b/SRC/dreadhb.c
index b32a225..e2aa3d6 100644
--- a/SRC/dreadhb.c
+++ b/SRC/dreadhb.c
@@ -1,17 +1,85 @@
 
-/*
+/*! @file dreadhb.c
+ * \brief Read a matrix stored in Harwell-Boeing format
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Purpose
+ * =======
+ * 
+ * Read a DOUBLE PRECISION matrix stored in Harwell-Boeing format 
+ * as described below.
+ * 
+ * Line 1 (A72,A8) 
+ *  	Col. 1 - 72   Title (TITLE) 
+ *	Col. 73 - 80  Key (KEY) 
+ * 
+ * Line 2 (5I14) 
+ * 	Col. 1 - 14   Total number of lines excluding header (TOTCRD) 
+ * 	Col. 15 - 28  Number of lines for pointers (PTRCRD) 
+ * 	Col. 29 - 42  Number of lines for row (or variable) indices (INDCRD) 
+ * 	Col. 43 - 56  Number of lines for numerical values (VALCRD) 
+ *	Col. 57 - 70  Number of lines for right-hand sides (RHSCRD) 
+ *                    (including starting guesses and solution vectors 
+ *		       if present) 
+ *           	      (zero indicates no right-hand side data is present) 
+ *
+ * Line 3 (A3, 11X, 4I14) 
+ *   	Col. 1 - 3    Matrix type (see below) (MXTYPE) 
+ * 	Col. 15 - 28  Number of rows (or variables) (NROW) 
+ * 	Col. 29 - 42  Number of columns (or elements) (NCOL) 
+ *	Col. 43 - 56  Number of row (or variable) indices (NNZERO) 
+ *	              (equal to number of entries for assembled matrices) 
+ * 	Col. 57 - 70  Number of elemental matrix entries (NELTVL) 
+ *	              (zero in the case of assembled matrices) 
+ * Line 4 (2A16, 2A20) 
+ * 	Col. 1 - 16   Format for pointers (PTRFMT) 
+ *	Col. 17 - 32  Format for row (or variable) indices (INDFMT) 
+ *	Col. 33 - 52  Format for numerical values of coefficient matrix (VALFMT) 
+ * 	Col. 53 - 72 Format for numerical values of right-hand sides (RHSFMT) 
+ *
+ * Line 5 (A3, 11X, 2I14) Only present if there are right-hand sides present 
+ *    	Col. 1 	      Right-hand side type: 
+ *	         	  F for full storage or M for same format as matrix 
+ *    	Col. 2        G if a starting vector(s) (Guess) is supplied. (RHSTYP) 
+ *    	Col. 3        X if an exact solution vector(s) is supplied. 
+ *	Col. 15 - 28  Number of right-hand sides (NRHS) 
+ *	Col. 29 - 42  Number of row indices (NRHSIX) 
+ *          	      (ignored in case of unassembled matrices) 
+ *
+ * The three character type field on line 3 describes the matrix type. 
+ * The following table lists the permitted values for each of the three 
+ * characters. As an example of the type field, RSA denotes that the matrix 
+ * is real, symmetric, and assembled. 
+ *
+ * First Character: 
+ *	R Real matrix 
+ *	C Complex matrix 
+ *	P Pattern only (no numerical values supplied) 
+ *
+ * Second Character: 
+ *	S Symmetric 
+ *	U Unsymmetric 
+ *	H Hermitian 
+ *	Z Skew symmetric 
+ *	R Rectangular 
+ *
+ * Third Character: 
+ *	A Assembled 
+ *	E Elemental matrices (unassembled) 
+ *
+ * </pre>
  */
 #include <stdio.h>
 #include <stdlib.h>
 #include "slu_ddefs.h"
 
 
-/* Eat up the rest of the current line */
+/*! \brief Eat up the rest of the current line */
 int dDumpLine(FILE *fp)
 {
     register int c;
@@ -59,7 +127,7 @@ int dParseFloatFormat(char *buf, int *num, int *size)
     return 0;
 }
 
-int dReadVector(FILE *fp, int n, int *where, int perline, int persize)
+static int ReadVector(FILE *fp, int n, int *where, int perline, int persize)
 {
     register int i, j, item;
     char tmp, buf[100];
@@ -107,72 +175,6 @@ void
 dreadhb(int *nrow, int *ncol, int *nonz,
 	double **nzval, int **rowind, int **colptr)
 {
-/* 
- * Purpose
- * =======
- * 
- * Read a DOUBLE PRECISION matrix stored in Harwell-Boeing format 
- * as described below.
- * 
- * Line 1 (A72,A8) 
- *  	Col. 1 - 72   Title (TITLE) 
- *	Col. 73 - 80  Key (KEY) 
- * 
- * Line 2 (5I14) 
- * 	Col. 1 - 14   Total number of lines excluding header (TOTCRD) 
- * 	Col. 15 - 28  Number of lines for pointers (PTRCRD) 
- * 	Col. 29 - 42  Number of lines for row (or variable) indices (INDCRD) 
- * 	Col. 43 - 56  Number of lines for numerical values (VALCRD) 
- *	Col. 57 - 70  Number of lines for right-hand sides (RHSCRD) 
- *                    (including starting guesses and solution vectors 
- *		       if present) 
- *           	      (zero indicates no right-hand side data is present) 
- *
- * Line 3 (A3, 11X, 4I14) 
- *   	Col. 1 - 3    Matrix type (see below) (MXTYPE) 
- * 	Col. 15 - 28  Number of rows (or variables) (NROW) 
- * 	Col. 29 - 42  Number of columns (or elements) (NCOL) 
- *	Col. 43 - 56  Number of row (or variable) indices (NNZERO) 
- *	              (equal to number of entries for assembled matrices) 
- * 	Col. 57 - 70  Number of elemental matrix entries (NELTVL) 
- *	              (zero in the case of assembled matrices) 
- * Line 4 (2A16, 2A20) 
- * 	Col. 1 - 16   Format for pointers (PTRFMT) 
- *	Col. 17 - 32  Format for row (or variable) indices (INDFMT) 
- *	Col. 33 - 52  Format for numerical values of coefficient matrix (VALFMT) 
- * 	Col. 53 - 72 Format for numerical values of right-hand sides (RHSFMT) 
- *
- * Line 5 (A3, 11X, 2I14) Only present if there are right-hand sides present 
- *    	Col. 1 	      Right-hand side type: 
- *	         	  F for full storage or M for same format as matrix 
- *    	Col. 2        G if a starting vector(s) (Guess) is supplied. (RHSTYP) 
- *    	Col. 3        X if an exact solution vector(s) is supplied. 
- *	Col. 15 - 28  Number of right-hand sides (NRHS) 
- *	Col. 29 - 42  Number of row indices (NRHSIX) 
- *          	      (ignored in case of unassembled matrices) 
- *
- * The three character type field on line 3 describes the matrix type. 
- * The following table lists the permitted values for each of the three 
- * characters. As an example of the type field, RSA denotes that the matrix 
- * is real, symmetric, and assembled. 
- *
- * First Character: 
- *	R Real matrix 
- *	C Complex matrix 
- *	P Pattern only (no numerical values supplied) 
- *
- * Second Character: 
- *	S Symmetric 
- *	U Unsymmetric 
- *	H Hermitian 
- *	Z Skew symmetric 
- *	R Rectangular 
- *
- * Third Character: 
- *	A Assembled 
- *	E Elemental matrices (unassembled) 
- *
- */
 
     register int i, numer_lines = 0, rhscrd = 0;
     int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
@@ -243,8 +245,8 @@ dreadhb(int *nrow, int *ncol, int *nonz,
     printf("valnum %d, valsize %d\n", valnum, valsize);
 #endif
     
-    dReadVector(fp, *ncol+1, *colptr, colnum, colsize);
-    dReadVector(fp, *nonz, *rowind, rownum, rowsize);
+    ReadVector(fp, *ncol+1, *colptr, colnum, colsize);
+    ReadVector(fp, *nonz, *rowind, rownum, rowsize);
     if ( numer_lines ) {
         dReadValues(fp, *nonz, *nzval, valnum, valsize);
     }
diff --git a/SRC/dreadrb.c b/SRC/dreadrb.c
new file mode 100644
index 0000000..6d525af
--- /dev/null
+++ b/SRC/dreadrb.c
@@ -0,0 +1,237 @@
+
+/*! @file dreadrb.c
+ * \brief Read a matrix stored in Rutherford-Boeing format
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ *
+ * Purpose
+ * =======
+ *
+ * Read a DOUBLE PRECISION matrix stored in Rutherford-Boeing format 
+ * as described below.
+ *
+ * Line 1 (A72, A8)
+ *      Col. 1 - 72   Title (TITLE)
+ *      Col. 73 - 80  Matrix name / identifier (MTRXID)
+ *
+ * Line 2 (I14, 3(1X, I13))
+ *      Col. 1 - 14   Total number of lines excluding header (TOTCRD)
+ *      Col. 16 - 28  Number of lines for pointers (PTRCRD)
+ *      Col. 30 - 42  Number of lines for row (or variable) indices (INDCRD)
+ *      Col. 44 - 56  Number of lines for numerical values (VALCRD)
+ *
+ * Line 3 (A3, 11X, 4(1X, I13))
+ *      Col. 1 - 3    Matrix type (see below) (MXTYPE)
+ *      Col. 15 - 28  Compressed Column: Number of rows (NROW)
+ *                    Elemental: Largest integer used to index variable (MVAR)
+ *      Col. 30 - 42  Compressed Column: Number of columns (NCOL)
+ *                    Elemental: Number of element matrices (NELT)
+ *      Col. 44 - 56  Compressed Column: Number of entries (NNZERO)
+ *                    Elemental: Number of variable indeces (NVARIX)
+ *      Col. 58 - 70  Compressed Column: Unused, explicitly zero
+ *                    Elemental: Number of elemental matrix entries (NELTVL)
+ *
+ * Line 4 (2A16, A20)
+ *      Col. 1 - 16   Fortran format for pointers (PTRFMT)
+ *      Col. 17 - 32  Fortran format for row (or variable) indices (INDFMT)
+ *      Col. 33 - 52  Fortran format for numerical values of coefficient matrix
+ *                    (VALFMT)
+ *                    (blank in the case of matrix patterns)
+ *
+ * The three character type field on line 3 describes the matrix type.
+ * The following table lists the permitted values for each of the three
+ * characters. As an example of the type field, RSA denotes that the matrix
+ * is real, symmetric, and assembled.
+ *
+ * First Character:
+ *      R Real matrix
+ *      C Complex matrix
+ *      I integer matrix
+ *      P Pattern only (no numerical values supplied)
+ *      Q Pattern only (numerical values supplied in associated auxiliary value
+ *        file)
+ *
+ * Second Character:
+ *      S Symmetric
+ *      U Unsymmetric
+ *      H Hermitian
+ *      Z Skew symmetric
+ *      R Rectangular
+ *
+ * Third Character:
+ *      A Compressed column form
+ *      E Elemental form
+ *
+ * </pre>
+ */
+
+#include "slu_ddefs.h"
+
+
+/*! \brief Eat up the rest of the current line */
+static int dDumpLine(FILE *fp)
+{
+    register int c;
+    while ((c = fgetc(fp)) != '\n') ;
+    return 0;
+}
+
+static int dParseIntFormat(char *buf, int *num, int *size)
+{
+    char *tmp;
+
+    tmp = buf;
+    while (*tmp++ != '(') ;
+    sscanf(tmp, "%d", num);
+    while (*tmp != 'I' && *tmp != 'i') ++tmp;
+    ++tmp;
+    sscanf(tmp, "%d", size);
+    return 0;
+}
+
+static int dParseFloatFormat(char *buf, int *num, int *size)
+{
+    char *tmp, *period;
+
+    tmp = buf;
+    while (*tmp++ != '(') ;
+    *num = atoi(tmp); /*sscanf(tmp, "%d", num);*/
+    while (*tmp != 'E' && *tmp != 'e' && *tmp != 'D' && *tmp != 'd'
+           && *tmp != 'F' && *tmp != 'f') {
+        /* May find kP before nE/nD/nF, like (1P6F13.6). In this case the
+           num picked up refers to P, which should be skipped. */
+        if (*tmp=='p' || *tmp=='P') {
+           ++tmp;
+           *num = atoi(tmp); /*sscanf(tmp, "%d", num);*/
+        } else {
+           ++tmp;
+        }
+    }
+    ++tmp;
+    period = tmp;
+    while (*period != '.' && *period != ')') ++period ;
+    *period = '\0';
+    *size = atoi(tmp); /*sscanf(tmp, "%2d", size);*/
+
+    return 0;
+}
+
+static int ReadVector(FILE *fp, int n, int *where, int perline, int persize)
+{
+    register int i, j, item;
+    char tmp, buf[100];
+
+    i = 0;
+    while (i < n) {
+        fgets(buf, 100, fp);    /* read a line at a time */
+        for (j=0; j<perline && i<n; j++) {
+            tmp = buf[(j+1)*persize];     /* save the char at that place */
+            buf[(j+1)*persize] = 0;       /* null terminate */
+            item = atoi(&buf[j*persize]); 
+            buf[(j+1)*persize] = tmp;     /* recover the char at that place */
+            where[i++] = item - 1;
+        }
+    }
+
+    return 0;
+}
+
+static int dReadValues(FILE *fp, int n, double *destination, int perline,
+        int persize)
+{
+    register int i, j, k, s;
+    char tmp, buf[100];
+
+    i = 0;
+    while (i < n) {
+        fgets(buf, 100, fp);    /* read a line at a time */
+        for (j=0; j<perline && i<n; j++) {
+            tmp = buf[(j+1)*persize];     /* save the char at that place */
+            buf[(j+1)*persize] = 0;       /* null terminate */
+            s = j*persize;
+            for (k = 0; k < persize; ++k) /* No D_ format in C */
+                if ( buf[s+k] == 'D' || buf[s+k] == 'd' ) buf[s+k] = 'E';
+            destination[i++] = atof(&buf[s]);
+            buf[(j+1)*persize] = tmp;     /* recover the char at that place */
+        }
+    }
+
+    return 0;
+}
+
+
+
+void
+dreadrb(int *nrow, int *ncol, int *nonz,
+        double **nzval, int **rowind, int **colptr)
+{
+
+    register int i, numer_lines = 0;
+    int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
+    char buf[100], type[4];
+    FILE *fp;
+
+    fp = stdin;
+
+    /* Line 1 */
+    fgets(buf, 100, fp);
+    fputs(buf, stdout);
+
+    /* Line 2 */
+    for (i=0; i<4; i++) {
+        fscanf(fp, "%14c", buf); buf[14] = 0;
+        sscanf(buf, "%d", &tmp);
+        if (i == 3) numer_lines = tmp;
+    }
+    dDumpLine(fp);
+
+    /* Line 3 */
+    fscanf(fp, "%3c", type);
+    fscanf(fp, "%11c", buf); /* pad */
+    type[3] = 0;
+#ifdef DEBUG
+    printf("Matrix type %s\n", type);
+#endif
+
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", nrow);
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", ncol);
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", nonz);
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", &tmp);
+
+    if (tmp != 0)
+        printf("This is not an assembled matrix!\n");
+    if (*nrow != *ncol)
+        printf("Matrix is not square.\n");
+    dDumpLine(fp);
+
+    /* Allocate storage for the three arrays ( nzval, rowind, colptr ) */
+    dallocateA(*ncol, *nonz, nzval, rowind, colptr);
+
+    /* Line 4: format statement */
+    fscanf(fp, "%16c", buf);
+    dParseIntFormat(buf, &colnum, &colsize);
+    fscanf(fp, "%16c", buf);
+    dParseIntFormat(buf, &rownum, &rowsize);
+    fscanf(fp, "%20c", buf);
+    dParseFloatFormat(buf, &valnum, &valsize);
+    dDumpLine(fp);
+
+#ifdef DEBUG
+    printf("%d rows, %d nonzeros\n", *nrow, *nonz);
+    printf("colnum %d, colsize %d\n", colnum, colsize);
+    printf("rownum %d, rowsize %d\n", rownum, rowsize);
+    printf("valnum %d, valsize %d\n", valnum, valsize);
+#endif
+
+    ReadVector(fp, *ncol+1, *colptr, colnum, colsize);
+    ReadVector(fp, *nonz, *rowind, rownum, rowsize);
+    if ( numer_lines ) {
+        dReadValues(fp, *nonz, *nzval, valnum, valsize);
+    }
+
+    fclose(fp);
+}
diff --git a/EXAMPLE/dreadtriple.c b/SRC/dreadtriple.c
similarity index 72%
copy from EXAMPLE/dreadtriple.c
copy to SRC/dreadtriple.c
index b8768fa..259fc57 100644
--- a/EXAMPLE/dreadtriple.c
+++ b/SRC/dreadtriple.c
@@ -1,6 +1,15 @@
-#include <stdio.h>
-#include "dsp_defs.h"
-#include "util.h"
+
+/*! @file dreadtriple.c
+ * \brief Read a matrix stored in triplet (coordinate) format
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_ddefs.h"
 
 
 void
@@ -15,11 +24,12 @@ dreadtriple(int *m, int *n, int *nonz,
  *	row i of A is given by a[k],k=xa[i],...,xa[i+1]-1.
  *
  */
-    int    i, j, k, jsize, lasta, nnz, nz;
+    int    j, k, jsize, nnz, nz;
     double *a, *val;
     int    *asub, *xa, *row, *col;
-    
-    /* 	Matrix format:
+    int    zero_base = 0;
+
+    /*  Matrix format:
      *    First line:  #rows, #cols, #non-zero
      *    Triplet in the rest of lines:
      *                 row, col, value
@@ -42,14 +52,24 @@ dreadtriple(int *m, int *n, int *nonz,
     /* Read into the triplet array from a file */
     for (nnz = 0, nz = 0; nnz < *nonz; ++nnz) {
 	scanf("%d%d%lf\n", &row[nz], &col[nz], &val[nz]);
-	/* Change to 0-based indexing. */
-#if 0
-	--row[nz];
-	--col[nz];
-#endif
+
+        if ( nnz == 0 ) { /* first nonzero */
+	    if ( row[0] == 0 || col[0] == 0 ) {
+		zero_base = 1;
+		printf("triplet file: row/col indices are zero-based.\n");
+	    } else
+		printf("triplet file: row/col indices are one-based.\n");
+        }
+
+        if ( !zero_base ) { 
+ 	  /* Change to 0-based indexing. */
+	  --row[nz];
+	  --col[nz];
+        }
+
 	if (row[nz] < 0 || row[nz] >= *m || col[nz] < 0 || col[nz] >= *n
 	    /*|| val[nz] == 0.*/) {
-	    fprintf(stderr, "nz %d, (%d, %d) = %e out of bound, removed\n", 
+	    fprintf(stderr, "nz %d, (%d, %d) = %e out of bound, removed\n",
 		    nz, row[nz], col[nz], val[nz]);
 	    exit(-1);
 	} else {
@@ -89,10 +109,13 @@ dreadtriple(int *m, int *n, int *nonz,
     SUPERLU_FREE(col);
 
 #ifdef CHK_INPUT
-    for (i = 0; i < *n; i++) {
-	printf("Col %d, xa %d\n", i, xa[i]);
-	for (k = xa[i]; k < xa[i+1]; k++)
-	    printf("%d\t%16.10f\n", asub[k], a[k]);
+    {
+	int i;
+	for (i = 0; i < *n; i++) {
+	    printf("Col %d, xa %d\n", i, xa[i]);
+	    for (k = xa[i]; k < xa[i+1]; k++)
+		printf("%d\t%16.10f\n", asub[k], a[k]);
+	}
     }
 #endif
 
@@ -102,7 +125,8 @@ dreadtriple(int *m, int *n, int *nonz,
 void dreadrhs(int m, double *b)
 {
     FILE *fp, *fopen();
-    int i, j;
+    int i;
+    /*int j;*/
 
     if ( !(fp = fopen("b.dat", "r")) ) {
         fprintf(stderr, "dreadrhs: file does not exist\n");
@@ -110,9 +134,7 @@ void dreadrhs(int m, double *b)
     }
     for (i = 0; i < m; ++i)
       fscanf(fp, "%lf\n", &b[i]);
-      /*fscanf(fp, "%d%lf\n", &j, &b[i]);*/
+
     /*        readpair_(j, &b[i]);*/
     fclose(fp);
 }
-
-
diff --git a/SRC/dsnode_bmod.c b/SRC/dsnode_bmod.c
index ec06144..8d70a99 100644
--- a/SRC/dsnode_bmod.c
+++ b/SRC/dsnode_bmod.c
@@ -1,29 +1,31 @@
 
-/*
+/*! @file dsnode_bmod.c
+ * \brief Performs numeric block updates within the relaxed snode.
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_ddefs.h"
 
 
-/*
- * Performs numeric block updates within the relaxed snode. 
+/*! \brief Performs numeric block updates within the relaxed snode. 
  */
 int
 dsnode_bmod (
diff --git a/SRC/dsnode_dfs.c b/SRC/dsnode_dfs.c
index 3823e85..9672fe6 100644
--- a/SRC/dsnode_dfs.c
+++ b/SRC/dsnode_dfs.c
@@ -1,26 +1,46 @@
 
-/*
+/*! @file dsnode_dfs.c
+ * \brief Determines the union of row structures of columns within the relaxed node
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_ddefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *    dsnode_dfs() - Determine the union of the row structures of those 
+ *    columns within the relaxed snode.
+ *    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
+ *    the portion outside the rectangular supernode must be zero.
+ *
+ * Return value
+ * ============
+ *     0   success;
+ *    >0   number of bytes allocated when run out of memory.
+ * </pre>
+ */
+
 int
 dsnode_dfs (
 	   const int  jcol,	    /* in - start of the supernode */
@@ -33,19 +53,7 @@ dsnode_dfs (
 	   GlobalLU_t *Glu          /* modified */
 	   )
 {
-/* Purpose
- * =======
- *    dsnode_dfs() - Determine the union of the row structures of those 
- *    columns within the relaxed snode.
- *    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
- *    the portion outside the rectangular supernode must be zero.
- *
- * Return value
- * ============
- *     0   success;
- *    >0   number of bytes allocated when run out of memory.
- *
- */
+
     register int i, k, ifrom, ito, nextl, new_next;
     int          nsuper, krow, kmark, mem_error;
     int          *xsup, *supno;
diff --git a/SRC/dsp_blas2.c b/SRC/dsp_blas2.c
index 420c349..59d6d40 100644
--- a/SRC/dsp_blas2.c
+++ b/SRC/dsp_blas2.c
@@ -1,10 +1,13 @@
 
-/*
+/*! @file dsp_blas2.c
+ * \brief Sparse BLAS 2, using some dense BLAS 2 operations
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
- *
+ * </pre>
  */
 /*
  * File name:		dsp_blas2.c
@@ -20,12 +23,9 @@ void dusolve(int, int, double*, double*);
 void dlsolve(int, int, double*, double*);
 void dmatvec(int, int, int, double*, double*, double*);
 
-
-int
-sp_dtrsv(char *uplo, char *trans, char *diag, SuperMatrix *L, 
-         SuperMatrix *U, double *x, SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief Solves one of the systems of equations A*x = b,   or   A'*x = b
+ * 
+ * <pre>
  *   Purpose
  *   =======
  *
@@ -75,8 +75,12 @@ sp_dtrsv(char *uplo, char *trans, char *diag, SuperMatrix *L,
  *
  *   info    - (output) int*
  *             If *info = -i, the i-th argument had an illegal value.
- *
+ * </pre>
  */
+int
+sp_dtrsv(char *uplo, char *trans, char *diag, SuperMatrix *L, 
+         SuperMatrix *U, double *x, SuperLUStat_t *stat, int *info)
+{
 #ifdef _CRAY
     _fcd ftcs1 = _cptofcd("L", strlen("L")),
 	 ftcs2 = _cptofcd("N", strlen("N")),
@@ -299,68 +303,71 @@ sp_dtrsv(char *uplo, char *trans, char *diag, SuperMatrix *L,
 
 
 
+/*! \brief Performs one of the matrix-vector operations y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   sp_dgemv()  performs one of the matrix-vector operations   
+ *      y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
+ *   where alpha and beta are scalars, x and y are vectors and A is a
+ *   sparse A->nrow by A->ncol matrix.   
+ *
+ *   Parameters   
+ *   ==========   
+ *
+ *   TRANS  - (input) char*
+ *            On entry, TRANS specifies the operation to be performed as   
+ *            follows:   
+ *               TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
+ *               TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
+ *               TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.   
+ *
+ *   ALPHA  - (input) double
+ *            On entry, ALPHA specifies the scalar alpha.   
+ *
+ *   A      - (input) SuperMatrix*
+ *            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+ *            Currently, the type of A can be:
+ *                Stype = NC or NCP; Dtype = SLU_D; Mtype = GE. 
+ *            In the future, more general A can be handled.
+ *
+ *   X      - (input) double*, array of DIMENSION at least   
+ *            ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
+ *            and at least   
+ *            ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
+ *            Before entry, the incremented array X must contain the   
+ *            vector x.   
+ *
+ *   INCX   - (input) int
+ *            On entry, INCX specifies the increment for the elements of   
+ *            X. INCX must not be zero.   
+ *
+ *   BETA   - (input) double
+ *            On entry, BETA specifies the scalar beta. When BETA is   
+ *            supplied as zero then Y need not be set on input.   
+ *
+ *   Y      - (output) double*,  array of DIMENSION at least   
+ *            ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
+ *            and at least   
+ *            ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
+ *            Before entry with BETA non-zero, the incremented array Y   
+ *            must contain the vector y. On exit, Y is overwritten by the 
+ *            updated vector y.
+ *	     
+ *   INCY   - (input) int
+ *            On entry, INCY specifies the increment for the elements of   
+ *            Y. INCY must not be zero.   
+ *
+ *   ==== Sparse Level 2 Blas routine.   
+ * </pre>
+ */
 
 int
 sp_dgemv(char *trans, double alpha, SuperMatrix *A, double *x, 
 	 int incx, double beta, double *y, int incy)
 {
-/*  Purpose   
-    =======   
-
-    sp_dgemv()  performs one of the matrix-vector operations   
-       y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
-    where alpha and beta are scalars, x and y are vectors and A is a
-    sparse A->nrow by A->ncol matrix.   
-
-    Parameters   
-    ==========   
-
-    TRANS  - (input) char*
-             On entry, TRANS specifies the operation to be performed as   
-             follows:   
-                TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
-                TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
-                TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.   
-
-    ALPHA  - (input) double
-             On entry, ALPHA specifies the scalar alpha.   
-
-    A      - (input) SuperMatrix*
-             Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
-             Currently, the type of A can be:
-                 Stype = NC or NCP; Dtype = SLU_D; Mtype = GE. 
-             In the future, more general A can be handled.
-
-    X      - (input) double*, array of DIMENSION at least   
-             ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
-             and at least   
-             ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
-             Before entry, the incremented array X must contain the   
-             vector x.   
-
-    INCX   - (input) int
-             On entry, INCX specifies the increment for the elements of   
-             X. INCX must not be zero.   
-
-    BETA   - (input) double
-             On entry, BETA specifies the scalar beta. When BETA is   
-             supplied as zero then Y need not be set on input.   
-
-    Y      - (output) double*,  array of DIMENSION at least   
-             ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
-             and at least   
-             ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
-             Before entry with BETA non-zero, the incremented array Y   
-             must contain the vector y. On exit, Y is overwritten by the 
-             updated vector y.
-	     
-    INCY   - (input) int
-             On entry, INCY specifies the increment for the elements of   
-             Y. INCY must not be zero.   
-
-    ==== Sparse Level 2 Blas routine.   
-*/
-
     /* Local variables */
     NCformat *Astore;
     double   *Aval;
diff --git a/SRC/dsp_blas3.c b/SRC/dsp_blas3.c
index 3aaf3c7..f0c7233 100644
--- a/SRC/dsp_blas3.c
+++ b/SRC/dsp_blas3.c
@@ -1,10 +1,13 @@
 
-/*
+/*! @file dsp_blas3.c
+ * \brief Sparse BLAS3, using some dense BLAS3 operations
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 /*
  * File name:		sp_blas3.c
@@ -13,102 +16,107 @@
 
 #include "slu_ddefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose   
+ *   =======   
+ * 
+ *   sp_d performs one of the matrix-matrix operations   
+ * 
+ *      C := alpha*op( A )*op( B ) + beta*C,   
+ * 
+ *   where  op( X ) is one of 
+ * 
+ *      op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),
+ * 
+ *   alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
+ *   an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix. 
+ *   
+ * 
+ *   Parameters   
+ *   ==========   
+ * 
+ *   TRANSA - (input) char*
+ *            On entry, TRANSA specifies the form of op( A ) to be used in 
+ *            the matrix multiplication as follows:   
+ *               TRANSA = 'N' or 'n',  op( A ) = A.   
+ *               TRANSA = 'T' or 't',  op( A ) = A'.   
+ *               TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
+ *            Unchanged on exit.   
+ * 
+ *   TRANSB - (input) char*
+ *            On entry, TRANSB specifies the form of op( B ) to be used in 
+ *            the matrix multiplication as follows:   
+ *               TRANSB = 'N' or 'n',  op( B ) = B.   
+ *               TRANSB = 'T' or 't',  op( B ) = B'.   
+ *               TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
+ *            Unchanged on exit.   
+ * 
+ *   M      - (input) int   
+ *            On entry,  M  specifies  the number of rows of the matrix 
+ *	     op( A ) and of the matrix C.  M must be at least zero. 
+ *	     Unchanged on exit.   
+ * 
+ *   N      - (input) int
+ *            On entry,  N specifies the number of columns of the matrix 
+ *	     op( B ) and the number of columns of the matrix C. N must be 
+ *	     at least zero.
+ *	     Unchanged on exit.   
+ * 
+ *   K      - (input) int
+ *            On entry, K specifies the number of columns of the matrix 
+ *	     op( A ) and the number of rows of the matrix op( B ). K must 
+ *	     be at least  zero.   
+ *           Unchanged on exit.
+ *      
+ *   ALPHA  - (input) double
+ *            On entry, ALPHA specifies the scalar alpha.   
+ * 
+ *   A      - (input) SuperMatrix*
+ *            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+ *            Currently, the type of A can be:
+ *                Stype = NC or NCP; Dtype = SLU_D; Mtype = GE. 
+ *            In the future, more general A can be handled.
+ * 
+ *   B      - DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb is 
+ *            n when TRANSB = 'N' or 'n',  and is  k otherwise.   
+ *            Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
+ *            part of the array B must contain the matrix B, otherwise 
+ *            the leading n by k part of the array B must contain the 
+ *            matrix B.   
+ *            Unchanged on exit.   
+ * 
+ *   LDB    - (input) int
+ *            On entry, LDB specifies the first dimension of B as declared 
+ *            in the calling (sub) program. LDB must be at least max( 1, n ).  
+ *            Unchanged on exit.   
+ * 
+ *   BETA   - (input) double
+ *            On entry, BETA specifies the scalar beta. When BETA is   
+ *            supplied as zero then C need not be set on input.   
+ *  
+ *   C      - DOUBLE PRECISION array of DIMENSION ( LDC, n ).   
+ *            Before entry, the leading m by n part of the array C must 
+ *            contain the matrix C,  except when beta is zero, in which 
+ *            case C need not be set on entry.   
+ *            On exit, the array C is overwritten by the m by n matrix 
+ *	     ( alpha*op( A )*B + beta*C ).   
+ *  
+ *   LDC    - (input) int
+ *            On entry, LDC specifies the first dimension of C as declared 
+ *            in the calling (sub)program. LDC must be at least max(1,m).   
+ *            Unchanged on exit.   
+ *  
+ *   ==== Sparse Level 3 Blas routine.   
+ * </pre>
+ */
+
 int
 sp_dgemm(char *transa, char *transb, int m, int n, int k, 
          double alpha, SuperMatrix *A, double *b, int ldb, 
          double beta, double *c, int ldc)
 {
-/*  Purpose   
-    =======   
-
-    sp_d performs one of the matrix-matrix operations   
-
-       C := alpha*op( A )*op( B ) + beta*C,   
-
-    where  op( X ) is one of 
-
-       op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),
-
-    alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
-    an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix. 
-  
-
-    Parameters   
-    ==========   
-
-    TRANSA - (input) char*
-             On entry, TRANSA specifies the form of op( A ) to be used in 
-             the matrix multiplication as follows:   
-                TRANSA = 'N' or 'n',  op( A ) = A.   
-                TRANSA = 'T' or 't',  op( A ) = A'.   
-                TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
-             Unchanged on exit.   
-
-    TRANSB - (input) char*
-             On entry, TRANSB specifies the form of op( B ) to be used in 
-             the matrix multiplication as follows:   
-                TRANSB = 'N' or 'n',  op( B ) = B.   
-                TRANSB = 'T' or 't',  op( B ) = B'.   
-                TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
-             Unchanged on exit.   
-
-    M      - (input) int   
-             On entry,  M  specifies  the number of rows of the matrix 
-	     op( A ) and of the matrix C.  M must be at least zero. 
-	     Unchanged on exit.   
-
-    N      - (input) int
-             On entry,  N specifies the number of columns of the matrix 
-	     op( B ) and the number of columns of the matrix C. N must be 
-	     at least zero.
-	     Unchanged on exit.   
-
-    K      - (input) int
-             On entry, K specifies the number of columns of the matrix 
-	     op( A ) and the number of rows of the matrix op( B ). K must 
-	     be at least  zero.   
-             Unchanged on exit.
-	     
-    ALPHA  - (input) double
-             On entry, ALPHA specifies the scalar alpha.   
-
-    A      - (input) SuperMatrix*
-             Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
-             Currently, the type of A can be:
-                 Stype = NC or NCP; Dtype = SLU_D; Mtype = GE. 
-             In the future, more general A can be handled.
-
-    B      - DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb is 
-             n when TRANSB = 'N' or 'n',  and is  k otherwise.   
-             Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
-             part of the array B must contain the matrix B, otherwise 
-             the leading n by k part of the array B must contain the 
-             matrix B.   
-             Unchanged on exit.   
-
-    LDB    - (input) int
-             On entry, LDB specifies the first dimension of B as declared 
-             in the calling (sub) program. LDB must be at least max( 1, n ).  
-             Unchanged on exit.   
-
-    BETA   - (input) double
-             On entry, BETA specifies the scalar beta. When BETA is   
-             supplied as zero then C need not be set on input.   
-
-    C      - DOUBLE PRECISION array of DIMENSION ( LDC, n ).   
-             Before entry, the leading m by n part of the array C must 
-             contain the matrix C,  except when beta is zero, in which 
-             case C need not be set on entry.   
-             On exit, the array C is overwritten by the m by n matrix 
-	     ( alpha*op( A )*B + beta*C ).   
-
-    LDC    - (input) int
-             On entry, LDC specifies the first dimension of C as declared 
-             in the calling (sub)program. LDC must be at least max(1,m).   
-             Unchanged on exit.   
-
-    ==== Sparse Level 3 Blas routine.   
-*/
     int    incx = 1, incy = 1;
     int    j;
 
diff --git a/SRC/dutil.c b/SRC/dutil.c
index 6956c29..807ff2f 100644
--- a/SRC/dutil.c
+++ b/SRC/dutil.c
@@ -1,23 +1,26 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
+/*! @file dutil.c
+ * \brief Matrix utility functions
+ *
+ * <pre>
+ * -- SuperLU routine (version 3.1) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * October 15, 2003
+ * August 1, 2008
+ *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
  *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include <math.h>
 #include "slu_ddefs.h"
@@ -64,7 +67,7 @@ dCreate_CompRow_Matrix(SuperMatrix *A, int m, int n, int nnz,
     Astore->rowptr = rowptr;
 }
 
-/* Copy matrix A into matrix B. */
+/*! \brief Copy matrix A into matrix B. */
 void
 dCopy_CompCol_Matrix(SuperMatrix *A, SuperMatrix *B)
 {
@@ -108,12 +111,7 @@ void
 dCopy_Dense_Matrix(int M, int N, double *X, int ldx,
 			double *Y, int ldy)
 {
-/*
- *
- *  Purpose
- *  =======
- *
- *  Copies a two-dimensional matrix X to another matrix Y.
+/*! \brief Copies a two-dimensional matrix X to another matrix Y.
  */
     int    i, j;
     
@@ -150,8 +148,7 @@ dCreate_SuperNode_Matrix(SuperMatrix *L, int m, int n, int nnz,
 }
 
 
-/*
- * Convert a row compressed storage into a column compressed storage.
+/*! \brief Convert a row compressed storage into a column compressed storage.
  */
 void
 dCompRow_to_CompCol(int m, int n, int nnz, 
@@ -266,13 +263,12 @@ dPrint_SuperNode_Matrix(char *what, SuperMatrix *A)
 void
 dPrint_Dense_Matrix(char *what, SuperMatrix *A)
 {
-    DNformat     *Astore;
+    DNformat     *Astore = (DNformat *) A->Store;
     register int i, j, lda = Astore->lda;
     double       *dp;
     
     printf("\nDense matrix %s:\n", what);
     printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
-    Astore = (DNformat *) A->Store;
     dp = (double *) Astore->nzval;
     printf("nrow %d, ncol %d, lda %d\n", A->nrow,A->ncol,lda);
     printf("\nnzval: ");
@@ -284,8 +280,7 @@ dPrint_Dense_Matrix(char *what, SuperMatrix *A)
     fflush(stdout);
 }
 
-/*
- * Diagnostic print of column "jcol" in the U/L factor.
+/*! \brief Diagnostic print of column "jcol" in the U/L factor.
  */
 void
 dprint_lu_col(char *msg, int jcol, int pivrow, int *xprune, GlobalLU_t *Glu)
@@ -327,9 +322,7 @@ dprint_lu_col(char *msg, int jcol, int pivrow, int *xprune, GlobalLU_t *Glu)
 }
 
 
-/*
- * Check whether tempv[] == 0. This should be true before and after 
- * calling any numeric routines, i.e., "panel_bmod" and "column_bmod". 
+/*! \brief Check whether tempv[] == 0. This should be true before and after calling any numeric routines, i.e., "panel_bmod" and "column_bmod". 
  */
 void dcheck_tempv(int n, double *tempv)
 {
@@ -355,8 +348,7 @@ dGenXtrue(int n, int nrhs, double *x, int ldx)
 	}
 }
 
-/*
- * Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's
+/*! \brief Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's
  */
 void
 dFillRHS(trans_t trans, int nrhs, double *x, int ldx,
@@ -385,8 +377,7 @@ dFillRHS(trans_t trans, int nrhs, double *x, int ldx,
 
 }
 
-/* 
- * Fills a double precision array with a given value.
+/*! \brief Fills a double precision array with a given value.
  */
 void 
 dfill(double *a, int alen, double dval)
@@ -397,8 +388,7 @@ dfill(double *a, int alen, double dval)
 
 
 
-/* 
- * Check the inf-norm of the error vector 
+/*! \brief Check the inf-norm of the error vector 
  */
 void dinf_norm_error(int nrhs, SuperMatrix *X, double *xtrue)
 {
@@ -424,7 +414,7 @@ void dinf_norm_error(int nrhs, SuperMatrix *X, double *xtrue)
 
 
 
-/* Print performance of the code. */
+/*! \brief Print performance of the code. */
 void
 dPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
            double rpg, double rcond, double *ferr,
@@ -452,9 +442,9 @@ dPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
     printf("\tNo of nonzeros in factor U = %d\n", Ustore->nnz);
     printf("\tNo of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz);
 	
-    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	   mem_usage->for_lu/1e6, mem_usage->total_needed/1e6,
-	   mem_usage->expansions);
+    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	   mem_usage->for_lu/1e6, mem_usage->total_needed/1e6);
+    printf("Number of memory expansions: %d\n", stat->expansions);
 	
     printf("\tFactor\tMflops\tSolve\tMflops\tEtree\tEquil\tRcond\tRefine\n");
     printf("PERF:%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f\n",
diff --git a/SRC/dzsum1.c b/SRC/dzsum1.c
index 1f0c8a8..ffaac7a 100644
--- a/SRC/dzsum1.c
+++ b/SRC/dzsum1.c
@@ -1,13 +1,20 @@
-#include "slu_Cnames.h"
+/*! @file dzsum1.c
+ * \brief Takes sum of the absolute values of a complex vector and returns a double precision result
+ *
+ * <pre>
+ *     -- LAPACK auxiliary routine (version 2.0) --   
+ *     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
+ *     Courant Institute, Argonne National Lab, and Rice University   
+ *     October 31, 1992   
+ * </pre>
+ */
+
 #include "slu_dcomplex.h"
+#include "slu_Cnames.h"
 
-double dzsum1_(int *n, doublecomplex *cx, int *incx)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       October 31, 1992   
+/*! \brief
 
+ <pre>
     Purpose   
     =======   
 
@@ -32,7 +39,10 @@ double dzsum1_(int *n, doublecomplex *cx, int *incx)
             The spacing between successive values of CX.  INCX > 0.   
 
     ===================================================================== 
+</pre>
 */  
+double dzsum1_(int *n, doublecomplex *cx, int *incx)
+{
 
     /* Builtin functions */
     double z_abs(doublecomplex *);
diff --git a/SRC/get_perm_c.c b/SRC/get_perm_c.c
index fa8fe6b..f99908e 100644
--- a/SRC/get_perm_c.c
+++ b/SRC/get_perm_c.c
@@ -1,9 +1,12 @@
-/*
- * -- SuperLU routine (version 2.0) --
+/*! @file get_perm_c.c
+ * \brief Matrix permutation operations
+ *
+ * <pre>
+ * -- SuperLU routine (version 3.1) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * November 15, 1997
- *
+ * August 1, 2008
+ * </pre>
  */
 #include "slu_ddefs.h"
 #include "colamd.h"
@@ -43,20 +46,9 @@ get_colamd(
     SUPERLU_FREE(A);
     SUPERLU_FREE(p);
 }
-
-void
-getata(
-       const int m,      /* number of rows in matrix A. */
-       const int n,      /* number of columns in matrix A. */
-       const int nz,     /* number of nonzeros in matrix A */
-       int *colptr,      /* column pointer of size n+1 for matrix A. */
-       int *rowind,      /* row indices of size nz for matrix A. */
-       int *atanz,       /* out - on exit, returns the actual number of
-                            nonzeros in matrix A'*A. */
-       int **ata_colptr, /* out - size n+1 */
-       int **ata_rowind  /* out - size *atanz */
-       )
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -73,8 +65,20 @@ getata(
  * =========
  *     o  Do I need to withhold the *dense* rows?
  *     o  How do I know the number of nonzeros in A'*A?
- * 
+ * </pre>
  */
+void
+getata(
+       const int m,      /* number of rows in matrix A. */
+       const int n,      /* number of columns in matrix A. */
+       const int nz,     /* number of nonzeros in matrix A */
+       int *colptr,      /* column pointer of size n+1 for matrix A. */
+       int *rowind,      /* row indices of size nz for matrix A. */
+       int *atanz,       /* out - on exit, returns the actual number of
+                            nonzeros in matrix A'*A. */
+       int **ata_colptr, /* out - size n+1 */
+       int **ata_rowind  /* out - size *atanz */
+       )
 {
     register int i, j, k, col, num_nz, ti, trow;
     int *marker, *b_colptr, *b_rowind;
@@ -186,6 +190,18 @@ getata(
 }
 
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * Form the structure of A'+A. A is an n-by-n matrix in column oriented
+ * format represented by (colptr, rowind). The output A'+A is in column
+ * oriented format (symmetrically, also row oriented), represented by
+ * (b_colptr, b_rowind).
+ * </pre>
+ */
 void
 at_plus_a(
 	  const int n,      /* number of columns in matrix A. */
@@ -198,16 +214,6 @@ at_plus_a(
 	  int **b_rowind    /* out - size *bnz */
 	  )
 {
-/*
- * Purpose
- * =======
- *
- * Form the structure of A'+A. A is an n-by-n matrix in column oriented
- * format represented by (colptr, rowind). The output A'+A is in column
- * oriented format (symmetrically, also row oriented), represented by
- * (b_colptr, b_rowind).
- *
- */
     register int i, j, k, col, num_nz;
     int *t_colptr, *t_rowind; /* a column oriented form of T = A' */
     int *marker;
@@ -322,9 +328,9 @@ at_plus_a(
     SUPERLU_FREE(t_rowind);
 }
 
-void
-get_perm_c(int ispec, SuperMatrix *A, int *perm_c)
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -354,8 +360,10 @@ get_perm_c(int ispec, SuperMatrix *A, int *perm_c)
  *	   Column permutation vector of size A->ncol, which defines the 
  *         permutation matrix Pc; perm_c[i] = j means column i of A is 
  *         in position j in A*Pc.
- *
+ * </pre>
  */
+void
+get_perm_c(int ispec, SuperMatrix *A, int *perm_c)
 {
     NCformat *Astore = A->Store;
     int m, n, bnz = 0, *b_colptr, i;
@@ -368,47 +376,46 @@ get_perm_c(int ispec, SuperMatrix *A, int *perm_c)
 
     t = SuperLU_timer_();
     switch ( ispec ) {
-        case 0: /* Natural ordering */
-	      for (i = 0; i < n; ++i) perm_c[i] = i;
+    case (NATURAL): /* Natural ordering */
+	for (i = 0; i < n; ++i) perm_c[i] = i;
 #if ( PRNTlevel>=1 )
-	      printf("Use natural column ordering.\n");
+	printf("Use natural column ordering.\n");
 #endif
-	      return;
-        case 1: /* Minimum degree ordering on A'*A */
-	      getata(m, n, Astore->nnz, Astore->colptr, Astore->rowind,
+	return;
+    case (MMD_ATA): /* Minimum degree ordering on A'*A */
+	getata(m, n, Astore->nnz, Astore->colptr, Astore->rowind,
 		     &bnz, &b_colptr, &b_rowind);
 #if ( PRNTlevel>=1 )
-	      printf("Use minimum degree ordering on A'*A.\n");
+	printf("Use minimum degree ordering on A'*A.\n");
 #endif
-	      t = SuperLU_timer_() - t;
-	      /*printf("Form A'*A time = %8.3f\n", t);*/
-	      break;
-        case 2: /* Minimum degree ordering on A'+A */
-	      if ( m != n ) ABORT("Matrix is not square");
-	      at_plus_a(n, Astore->nnz, Astore->colptr, Astore->rowind,
-			&bnz, &b_colptr, &b_rowind);
+	t = SuperLU_timer_() - t;
+	/*printf("Form A'*A time = %8.3f\n", t);*/
+	break;
+    case (MMD_AT_PLUS_A): /* Minimum degree ordering on A'+A */
+	if ( m != n ) ABORT("Matrix is not square");
+	at_plus_a(n, Astore->nnz, Astore->colptr, Astore->rowind,
+		  &bnz, &b_colptr, &b_rowind);
 #if ( PRNTlevel>=1 )
-	      printf("Use minimum degree ordering on A'+A.\n");
+	printf("Use minimum degree ordering on A'+A.\n");
 #endif
-	      t = SuperLU_timer_() - t;
-	      /*printf("Form A'+A time = %8.3f\n", t);*/
-	      break;
-        case 3: /* Approximate minimum degree column ordering. */
-	      get_colamd(m, n, Astore->nnz, Astore->colptr, Astore->rowind,
-			 perm_c);
+	t = SuperLU_timer_() - t;
+	/*printf("Form A'+A time = %8.3f\n", t);*/
+	break;
+    case (COLAMD): /* Approximate minimum degree column ordering. */
+	get_colamd(m, n, Astore->nnz, Astore->colptr, Astore->rowind, perm_c);
 #if ( PRNTlevel>=1 )
-	      printf(".. Use approximate minimum degree column ordering.\n");
+	printf(".. Use approximate minimum degree column ordering.\n");
 #endif
-	      return; 
-        default:
-	      ABORT("Invalid ISPEC");
+	return; 
+    default:
+	ABORT("Invalid ISPEC");
     }
 
     if ( bnz != 0 ) {
 	t = SuperLU_timer_();
 
 	/* Initialize and allocate storage for GENMMD. */
-	delta = 1; /* DELTA is a parameter to allow the choice of nodes
+	delta = 0; /* DELTA is a parameter to allow the choice of nodes
 		      whose degree <= min-degree + DELTA. */
 	maxint = 2147483647; /* 2**31 - 1 */
 	invp = (int *) SUPERLU_MALLOC((n+delta)*sizeof(int));
diff --git a/SRC/heap_relax_snode.c b/SRC/heap_relax_snode.c
index 1a40e26..1dafd82 100644
--- a/SRC/heap_relax_snode.c
+++ b/SRC/heap_relax_snode.c
@@ -1,25 +1,37 @@
-/*
+/*! @file heap_relax_snode.c
+ * \brief Identify the initial relaxed supernodes
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
 
 #include "slu_ddefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *    relax_snode() - Identify the initial relaxed supernodes, assuming that 
+ *    the matrix has been reordered according to the postorder of the etree.
+ * </pre>
+ */ 
+
 void
 heap_relax_snode (
 	     const     int n,
@@ -31,13 +43,6 @@ heap_relax_snode (
 	     int       *relax_end     /* last column in a supernode */
 	     )
 {
-/*
- * Purpose
- * =======
- *    relax_snode() - Identify the initial relaxed supernodes, assuming that 
- *    the matrix has been reordered according to the postorder of the etree.
- *
- */ 
     register int i, j, k, l, parent;
     register int snode_start;	/* beginning of a snode */
     int *et_save, *post, *inv_post, *iwork;
@@ -91,7 +96,10 @@ heap_relax_snode (
 	} else {
 	    for (i = snode_start; i <= j; ++i) {
 	        l = inv_post[i];
-	        if ( descendants[i] == 0 ) relax_end[l] = l;
+	        if ( descendants[i] == 0 ) {
+		    relax_end[l] = l;
+		    ++nsuper_et;
+		}
 	    }
 	}
 	j++;
diff --git a/SRC/html_mainpage.h b/SRC/html_mainpage.h
new file mode 100644
index 0000000..0b789fb
--- /dev/null
+++ b/SRC/html_mainpage.h
@@ -0,0 +1,21 @@
+/*! \mainpage SuperLU Documentation
+ 
+SuperLU is a general purpose library for the direct solution of large,
+sparse, nonsymmetric systems of linear equations on high performance
+machines. The library is written in C and is callable from either C or
+Fortran. The library routines perform an LU decomposition with
+partial pivoting and triangular system solves through forward and back
+substitution.  The library also provides threshold-based ILU factorization
+preconditioners.
+
+The factorization routines can handle non-square
+matrices but the triangular solves are performed only for square
+matrices. The matrix columns may be preordered (before factorization)
+either through library or user supplied routines. This preordering for
+sparsity is completely separate from the factorization. Working
+precision iterative refinement subroutines are provided for improved
+backward stability. Routines are also provided to equilibrate the
+system, estimate the condition number, calculate the relative backward
+error, and estimate error bounds for the refined solutions. 
+ 
+ */
diff --git a/SRC/icmax1.c b/SRC/icmax1.c
index 1e254b0..419c728 100644
--- a/SRC/icmax1.c
+++ b/SRC/icmax1.c
@@ -1,15 +1,20 @@
+/*! @file icmax1.c
+ * \brief Finds the index of the element whose real part has maximum absolute value
+ *
+ * <pre>
+ *     -- LAPACK auxiliary routine (version 2.0) --   
+ *     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
+ *     Courant Institute, Argonne National Lab, and Rice University   
+ *     October 31, 1992   
+ * </pre>
+ */
 #include <math.h>
 #include "slu_scomplex.h"
 #include "slu_Cnames.h"
 
-int icmax1_(int *n, complex *cx, int *incx)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       September 30, 1994   
-
+/*! \brief
 
+ <pre>
     Purpose   
     =======   
 
@@ -34,9 +39,11 @@ int icmax1_(int *n, complex *cx, int *incx)
             The spacing between successive values of CX.  INCX >= 1.   
 
    ===================================================================== 
-  
-
-
+  </pre>
+*/
+int icmax1_(int *n, complex *cx, int *incx)
+{
+/*
        NEXT LINE IS THE ONLY MODIFICATION.   
 
     
diff --git a/SRC/ccolumn_dfs.c b/SRC/ilu_ccolumn_dfs.c
similarity index 50%
copy from SRC/ccolumn_dfs.c
copy to SRC/ilu_ccolumn_dfs.c
index 10f0fb6..fc9f403 100644
--- a/SRC/ccolumn_dfs.c
+++ b/SRC/ilu_ccolumn_dfs.c
@@ -1,57 +1,31 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * October 15, 2003
+/*! @file ilu_ccolumn_dfs.c
+ * \brief Performs a symbolic factorization
  *
- */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
 */
 
 #include "slu_cdefs.h"
 
-/* What type of supernodes we want */
-#define T2_SUPER
 
-int
-ccolumn_dfs(
-	   const int  m,         /* in - number of rows in the matrix */
-	   const int  jcol,      /* in */
-	   int        *perm_r,   /* in */
-	   int        *nseg,     /* modified - with new segments appended */
-	   int        *lsub_col, /* in - defines the RHS vector to start the dfs */
-	   int        *segrep,   /* modified - with new segments appended */
-	   int        *repfnz,   /* modified */
-	   int        *xprune,   /* modified */
-	   int        *marker,   /* modified */
-	   int        *parent,	 /* working array */
-	   int        *xplore,   /* working array */
-	   GlobalLU_t *Glu       /* modified */
-	   )
-{
-/* 
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
- *   "column_dfs" performs a symbolic factorization on column jcol, and
+ *   ILU_CCOLUMN_DFS performs a symbolic factorization on column jcol, and
  *   decide the supernode boundary.
  *
- *   This routine does not use numeric values, but only use the RHS 
+ *   This routine does not use numeric values, but only use the RHS
  *   row indices to start the dfs.
  *
  *   A supernode representative is the last column of a supernode.
  *   The nonzeros in U[*,j] are segments that end at supernodal
- *   representatives. The routine returns a list of such supernodal 
+ *   representatives. The routine returns a list of such supernodal
  *   representatives in topological order of the dfs that generates them.
  *   The location of the first nonzero in each such supernodal segment
  *   (supernodal entry location) is also returned.
@@ -71,22 +45,39 @@ ccolumn_dfs(
  * ============
  *     0  success;
  *   > 0  number of bytes allocated when run out of space.
- *
+ * </pre>
  */
+int
+ilu_ccolumn_dfs(
+	   const int  m,	 /* in - number of rows in the matrix */
+	   const int  jcol,	 /* in */
+	   int	      *perm_r,	 /* in */
+	   int	      *nseg,	 /* modified - with new segments appended */
+	   int	      *lsub_col, /* in - defines the RHS vector to start the
+				    dfs */
+	   int	      *segrep,	 /* modified - with new segments appended */
+	   int	      *repfnz,	 /* modified */
+	   int	      *marker,	 /* modified */
+	   int	      *parent,	 /* working array */
+	   int	      *xplore,	 /* working array */
+	   GlobalLU_t *Glu	 /* modified */
+	   )
+{
+
     int     jcolp1, jcolm1, jsuper, nsuper, nextl;
     int     k, krep, krow, kmark, kperm;
-    int     *marker2;           /* Used for small panel LU */
-    int	    fsupc;		/* First column of a snode */
+    int     *marker2;		/* Used for small panel LU */
+    int     fsupc;		/* First column of a snode */
     int     myfnz;		/* First nonz column of a U-segment */
-    int	    chperm, chmark, chrep, kchild;
+    int     chperm, chmark, chrep, kchild;
     int     xdfs, maxdfs, kpar, oldrep;
     int     jptr, jm1ptr;
-    int     ito, ifrom, istop;	/* Used to compress row subscripts */
+    int     ito, ifrom; 	/* Used to compress row subscripts */
     int     mem_error;
     int     *xsup, *supno, *lsub, *xlsub;
     int     nzlmax;
     static  int  first = 1, maxsuper;
-    
+
     xsup    = Glu->xsup;
     supno   = Glu->supno;
     lsub    = Glu->lsub;
@@ -94,7 +85,7 @@ ccolumn_dfs(
     nzlmax  = Glu->nzlmax;
 
     if ( first ) {
-	maxsuper = sp_ienv(3);
+	maxsuper = sp_ienv(7);
 	first = 0;
     }
     jcolp1  = jcol + 1;
@@ -109,11 +100,11 @@ ccolumn_dfs(
     for (k = 0; lsub_col[k] != EMPTY; k++) {
 
 	krow = lsub_col[k];
-    	lsub_col[k] = EMPTY;
-	kmark = marker2[krow];    	
+	lsub_col[k] = EMPTY;
+	kmark = marker2[krow];
 
-	/* krow was visited before, go to the next nonz */
-        if ( kmark == jcol ) continue; 
+	/* krow was visited before, go to the next nonzero */
+	if ( kmark == jcol ) continue;
 
 	/* For each unmarked nbr krow of jcol
 	 *	krow is in L: place it in structure of L[*,jcol]
@@ -121,15 +112,15 @@ ccolumn_dfs(
 	marker2[krow] = jcol;
 	kperm = perm_r[krow];
 
-   	if ( kperm == EMPTY ) {
-	    lsub[nextl++] = krow; 	/* krow is indexed into A */
+	if ( kperm == EMPTY ) {
+	    lsub[nextl++] = krow;	/* krow is indexed into A */
 	    if ( nextl >= nzlmax ) {
-		if ( mem_error = cLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu) )
+		if ((mem_error = cLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu)))
 		    return (mem_error);
 		lsub = Glu->lsub;
 	    }
-            if ( kmark != jcolm1 ) jsuper = EMPTY;/* Row index subset testing */
-  	} else {
+	    if ( kmark != jcolm1 ) jsuper = EMPTY;/* Row index subset testing */
+	} else {
 	    /*	krow is in U: if its supernode-rep krep
 	     *	has been explored, update repfnz[*]
 	     */
@@ -137,60 +128,60 @@ ccolumn_dfs(
 	    myfnz = repfnz[krep];
 
 	    if ( myfnz != EMPTY ) {	/* Visited before */
-	    	if ( myfnz > kperm ) repfnz[krep] = kperm;
+		if ( myfnz > kperm ) repfnz[krep] = kperm;
 		/* continue; */
 	    }
 	    else {
 		/* Otherwise, perform dfs starting at krep */
 		oldrep = EMPTY;
-	 	parent[krep] = oldrep;
-	  	repfnz[krep] = kperm;
-		xdfs = xlsub[krep];
-	  	maxdfs = xprune[krep];
+		parent[krep] = oldrep;
+		repfnz[krep] = kperm;
+		xdfs = xlsub[xsup[supno[krep]]];
+		maxdfs = xlsub[krep + 1];
 
 		do {
-		    /* 
-		     * For each unmarked kchild of krep 
+		    /*
+		     * For each unmarked kchild of krep
 		     */
 		    while ( xdfs < maxdfs ) {
 
-		   	kchild = lsub[xdfs];
+			kchild = lsub[xdfs];
 			xdfs++;
-		  	chmark = marker2[kchild];
+			chmark = marker2[kchild];
 
-		   	if ( chmark != jcol ) { /* Not reached yet */
-		   	    marker2[kchild] = jcol;
-		   	    chperm = perm_r[kchild];
+			if ( chmark != jcol ) { /* Not reached yet */
+			    marker2[kchild] = jcol;
+			    chperm = perm_r[kchild];
 
-		   	    /* Case kchild is in L: place it in L[*,k] */
-		   	    if ( chperm == EMPTY ) {
-			    	lsub[nextl++] = kchild;
+			    /* Case kchild is in L: place it in L[*,k] */
+			    if ( chperm == EMPTY ) {
+				lsub[nextl++] = kchild;
 				if ( nextl >= nzlmax ) {
-				    if ( mem_error =
-					 cLUMemXpand(jcol,nextl,LSUB,&nzlmax,Glu) )
+				    if ( (mem_error = cLUMemXpand(jcol,nextl,
+					    LSUB,&nzlmax,Glu)) )
 					return (mem_error);
 				    lsub = Glu->lsub;
 				}
 				if ( chmark != jcolm1 ) jsuper = EMPTY;
 			    } else {
-		    	    	/* Case kchild is in U: 
-				 *   chrep = its supernode-rep. If its rep has 
-			         *   been explored, update its repfnz[*]
-			         */
-		   	    	chrep = xsup[supno[chperm]+1] - 1;
-		   		myfnz = repfnz[chrep];
-		   		if ( myfnz != EMPTY ) { /* Visited before */
+				/* Case kchild is in U:
+				 *   chrep = its supernode-rep. If its rep has
+				 *   been explored, update its repfnz[*]
+				 */
+				chrep = xsup[supno[chperm]+1] - 1;
+				myfnz = repfnz[chrep];
+				if ( myfnz != EMPTY ) { /* Visited before */
 				    if ( myfnz > chperm )
-     				  	repfnz[chrep] = chperm;
+					repfnz[chrep] = chperm;
 				} else {
-		        	    /* Continue dfs at super-rep of kchild */
-		   		    xplore[krep] = xdfs;	
-		   		    oldrep = krep;
-		   		    krep = chrep; /* Go deeper down G(L^t) */
+				    /* Continue dfs at super-rep of kchild */
+				    xplore[krep] = xdfs;
+				    oldrep = krep;
+				    krep = chrep; /* Go deeper down G(L^t) */
 				    parent[krep] = oldrep;
-		    		    repfnz[krep] = chperm;
-		   		    xdfs = xlsub[krep];     
-				    maxdfs = xprune[krep];
+				    repfnz[krep] = chperm;
+				    xdfs = xlsub[xsup[supno[krep]]];
+				    maxdfs = xlsub[krep + 1];
 				} /* else */
 
 			   } /* else */
@@ -200,8 +191,8 @@ ccolumn_dfs(
 		    } /* while */
 
 		    /* krow has no more unexplored nbrs;
-	   	     *    place supernode-rep krep in postorder DFS.
-	   	     *    backtrack dfs to its parent
+		     *	  place supernode-rep krep in postorder DFS.
+		     *	  backtrack dfs to its parent
 		     */
 		    segrep[*nseg] = krep;
 		    ++(*nseg);
@@ -209,9 +200,9 @@ ccolumn_dfs(
 		    if ( kpar == EMPTY ) break; /* dfs done */
 		    krep = kpar;
 		    xdfs = xplore[krep];
-		    maxdfs = xprune[krep];
+		    maxdfs = xlsub[krep + 1];
 
-		} while ( kpar != EMPTY ); 	/* Until empty stack */
+		} while ( kpar != EMPTY );	/* Until empty stack */
 
 	    } /* else */
 
@@ -223,46 +214,44 @@ ccolumn_dfs(
     if ( jcol == 0 ) { /* Do nothing for column 0 */
 	nsuper = supno[0] = 0;
     } else {
-   	fsupc = xsup[nsuper];
+	fsupc = xsup[nsuper];
 	jptr = xlsub[jcol];	/* Not compressed yet */
 	jm1ptr = xlsub[jcolm1];
 
-#ifdef T2_SUPER
 	if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
-#endif
+
+	/* Always start a new supernode for a singular column */
+	if ( nextl == jptr ) jsuper = EMPTY;
+
 	/* Make sure the number of columns in a supernode doesn't
 	   exceed threshold. */
 	if ( jcol - fsupc >= maxsuper ) jsuper = EMPTY;
 
 	/* If jcol starts a new supernode, reclaim storage space in
 	 * lsub from the previous supernode. Note we only store
-	 * the subscript set of the first and last columns of
-   	 * a supernode. (first for num values, last for pruning)
+	 * the subscript set of the first columns of the supernode.
 	 */
 	if ( jsuper == EMPTY ) {	/* starts a new supernode */
-	    if ( (fsupc < jcolm1-1) ) {	/* >= 3 columns in nsuper */
+	    if ( (fsupc < jcolm1) ) { /* >= 2 columns in nsuper */
 #ifdef CHK_COMPRESS
 		printf("  Compress lsub[] at super %d-%d\n", fsupc, jcolm1);
 #endif
-	        ito = xlsub[fsupc+1];
+		ito = xlsub[fsupc+1];
 		xlsub[jcolm1] = ito;
-		istop = ito + jptr - jm1ptr;
-		xprune[jcolm1] = istop; /* Initialize xprune[jcol-1] */
-		xlsub[jcol] = istop;
-		for (ifrom = jm1ptr; ifrom < nextl; ++ifrom, ++ito)
+		xlsub[jcol] = ito;
+		for (ifrom = jptr; ifrom < nextl; ++ifrom, ++ito)
 		    lsub[ito] = lsub[ifrom];
-		nextl = ito;            /* = istop + length(jcol) */
+		nextl = ito;
 	    }
 	    nsuper++;
 	    supno[jcol] = nsuper;
 	} /* if a new supernode */
 
-    }	/* else: jcol > 0 */ 
-    
+    }	/* else: jcol > 0 */
+
     /* Tidy up the pointers before exit */
     xsup[nsuper+1] = jcolp1;
     supno[jcolp1]  = nsuper;
-    xprune[jcol]   = nextl;	/* Initialize upper bound for pruning */
     xlsub[jcolp1]  = nextl;
 
     return 0;
diff --git a/SRC/ilu_ccopy_to_ucol.c b/SRC/ilu_ccopy_to_ucol.c
new file mode 100644
index 0000000..b6b0328
--- /dev/null
+++ b/SRC/ilu_ccopy_to_ucol.c
@@ -0,0 +1,211 @@
+
+/*! @file ilu_ccopy_to_ucol.c
+ * \brief Copy a computed column of U to the compressed data structure
+ * and drop some small entries
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory
+ * November, 2010
+ * </pre>
+ */
+
+#include "slu_cdefs.h"
+
+#ifdef DEBUG
+int num_drop_U;
+#endif
+
+extern void ccopy_(int *, complex [], int *, complex [], int *);
+
+#if 0
+static complex *A;  /* used in _compare_ only */
+static int _compare_(const void *a, const void *b)
+{
+    register int *x = (int *)a, *y = (int *)b;
+    register float xx = c_abs1(&A[*x]), yy = c_abs1(&A[*y]);
+    if (xx > yy) return -1;
+    else if (xx < yy) return 1;
+    else return 0;
+}
+#endif
+
+int
+ilu_ccopy_to_ucol(
+	      int	 jcol,	   /* in */
+	      int	 nseg,	   /* in */
+	      int	 *segrep,  /* in */
+	      int	 *repfnz,  /* in */
+	      int	 *perm_r,  /* in */
+	      complex	 *dense,   /* modified - reset to zero on return */
+	      int  	 drop_rule,/* in */
+	      milu_t	 milu,	   /* in */
+	      double	 drop_tol, /* in */
+	      int	 quota,    /* maximum nonzero entries allowed */
+	      complex	 *sum,	   /* out - the sum of dropped entries */
+	      int	 *nnzUj,   /* in - out */
+	      GlobalLU_t *Glu,	   /* modified */
+	      float	 *work	   /* working space with minimum size n,
+				    * used by the second dropping rule */
+	      )
+{
+/*
+ * Gather from SPA dense[*] to global ucol[*].
+ */
+    int       ksub, krep, ksupno;
+    int       i, k, kfnz, segsze;
+    int       fsupc, isub, irow;
+    int       jsupno, nextu;
+    int       new_next, mem_error;
+    int       *xsup, *supno;
+    int       *lsub, *xlsub;
+    complex    *ucol;
+    int       *usub, *xusub;
+    int       nzumax;
+    int       m; /* number of entries in the nonzero U-segments */
+    register float d_max = 0.0, d_min = 1.0 / dlamch_("Safe minimum");
+    register double tmp;
+    complex zero = {0.0, 0.0};
+    int i_1 = 1;
+
+    xsup    = Glu->xsup;
+    supno   = Glu->supno;
+    lsub    = Glu->lsub;
+    xlsub   = Glu->xlsub;
+    ucol    = Glu->ucol;
+    usub    = Glu->usub;
+    xusub   = Glu->xusub;
+    nzumax  = Glu->nzumax;
+
+    *sum = zero;
+    if (drop_rule == NODROP) {
+	drop_tol = -1.0, quota = Glu->n;
+    }
+
+    jsupno = supno[jcol];
+    nextu  = xusub[jcol];
+    k = nseg - 1;
+    for (ksub = 0; ksub < nseg; ksub++) {
+	krep = segrep[k--];
+	ksupno = supno[krep];
+
+	if ( ksupno != jsupno ) { /* Should go into ucol[] */
+	    kfnz = repfnz[krep];
+	    if ( kfnz != EMPTY ) {	/* Nonzero U-segment */
+
+		fsupc = xsup[ksupno];
+		isub = xlsub[fsupc] + kfnz - fsupc;
+		segsze = krep - kfnz + 1;
+
+		new_next = nextu + segsze;
+		while ( new_next > nzumax ) {
+		    if ((mem_error = cLUMemXpand(jcol, nextu, UCOL, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    ucol = Glu->ucol;
+		    if ((mem_error = cLUMemXpand(jcol, nextu, USUB, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    usub = Glu->usub;
+		    lsub = Glu->lsub;
+		}
+
+		for (i = 0; i < segsze; i++) {
+		    irow = lsub[isub++];
+         	    tmp = c_abs1(&dense[irow]);
+
+		    /* first dropping rule */
+		    if (quota > 0 && tmp >= drop_tol) {
+			if (tmp > d_max) d_max = tmp;
+			if (tmp < d_min) d_min = tmp;
+			usub[nextu] = perm_r[irow];
+			ucol[nextu] = dense[irow];
+			nextu++;
+		    } else {
+			switch (milu) {
+			    case SMILU_1:
+			    case SMILU_2:
+                                c_add(sum, sum, &dense[irow]);
+				break;
+			    case SMILU_3:
+				/* *sum += fabs(dense[irow]);*/
+				sum->r += tmp;
+				break;
+			    case SILU:
+			    default:
+				break;
+			}
+#ifdef DEBUG
+			num_drop_U++;
+#endif
+		    }
+		    dense[irow] = zero;
+		}
+
+	    }
+
+	}
+
+    } /* for each segment... */
+
+    xusub[jcol + 1] = nextu;	  /* Close U[*,jcol] */
+    m = xusub[jcol + 1] - xusub[jcol];
+
+    /* second dropping rule */
+    if (drop_rule & DROP_SECONDARY && m > quota) {
+	register double tol = d_max;
+	register int m0 = xusub[jcol] + m - 1;
+
+	if (quota > 0) {
+	    if (drop_rule & DROP_INTERP) {
+		d_max = 1.0 / d_max; d_min = 1.0 / d_min;
+		tol = 1.0 / (d_max + (d_min - d_max) * quota / m);
+	    } else {
+                i_1 = xusub[jcol];
+                for (i = 0; i < m; ++i, ++i_1) work[i] = c_abs1(&ucol[i_1]);
+		tol = sqselect(m, work, quota);
+#if 0
+		A = &ucol[xusub[jcol]];
+		for (i = 0; i < m; i++) work[i] = i;
+		qsort(work, m, sizeof(int), _compare_);
+		tol = fabs(usub[xusub[jcol] + work[quota]]);
+#endif
+	    }
+	}
+	for (i = xusub[jcol]; i <= m0; ) {
+	    if (c_abs1(&ucol[i]) <= tol) {
+		switch (milu) {
+		    case SMILU_1:
+		    case SMILU_2:
+			c_add(sum, sum, &ucol[i]);
+			break;
+		    case SMILU_3:
+			sum->r += tmp;
+			break;
+		    case SILU:
+		    default:
+			break;
+		}
+		ucol[i] = ucol[m0];
+		usub[i] = usub[m0];
+		m0--;
+		m--;
+#ifdef DEBUG
+		num_drop_U++;
+#endif
+		xusub[jcol + 1]--;
+		continue;
+	    }
+	    i++;
+	}
+    }
+
+    if (milu == SMILU_2) {
+        sum->r = c_abs1(sum); sum->i = 0.0;
+    }
+    if (milu == SMILU_3) sum->i = 0.0;
+
+    *nnzUj += m;
+
+    return 0;
+}
diff --git a/SRC/ilu_ccopy_to_ucol.c.bak b/SRC/ilu_ccopy_to_ucol.c.bak
new file mode 100644
index 0000000..ba32096
--- /dev/null
+++ b/SRC/ilu_ccopy_to_ucol.c.bak
@@ -0,0 +1,202 @@
+
+/*! @file ilu_ccopy_to_ucol.c
+ * \brief Copy a computed column of U to the compressed data structure
+ * and drop some small entries
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_cdefs.h"
+
+#ifdef DEBUG
+int num_drop_U;
+#endif
+
+static complex *A;  /* used in _compare_ only */
+static int _compare_(const void *a, const void *b)
+{
+    register int *x = (int *)a, *y = (int *)b;
+    register float xx = c_abs1(&A[*x]), yy = c_abs1(&A[*y]);
+    if (xx > yy) return -1;
+    else if (xx < yy) return 1;
+    else return 0;
+}
+
+
+int
+ilu_ccopy_to_ucol(
+	      int	 jcol,	   /* in */
+	      int	 nseg,	   /* in */
+	      int	 *segrep,  /* in */
+	      int	 *repfnz,  /* in */
+	      int	 *perm_r,  /* in */
+	      complex	 *dense,   /* modified - reset to zero on return */
+	      int  	 drop_rule,/* in */
+	      milu_t	 milu,	   /* in */
+	      double	 drop_tol, /* in */
+	      int	 quota,    /* maximum nonzero entries allowed */
+	      complex	 *sum,	   /* out - the sum of dropped entries */
+	      int	 *nnzUj,   /* in - out */
+	      GlobalLU_t *Glu,	   /* modified */
+	      int	 *work	   /* working space with minimum size n,
+				    * used by the second dropping rule */
+	      )
+{
+/*
+ * Gather from SPA dense[*] to global ucol[*].
+ */
+    int       ksub, krep, ksupno;
+    int       i, k, kfnz, segsze;
+    int       fsupc, isub, irow;
+    int       jsupno, nextu;
+    int       new_next, mem_error;
+    int       *xsup, *supno;
+    int       *lsub, *xlsub;
+    complex    *ucol;
+    int       *usub, *xusub;
+    int       nzumax;
+    int       m; /* number of entries in the nonzero U-segments */
+    register float d_max = 0.0, d_min = 1.0 / dlamch_("Safe minimum");
+    register double tmp;
+    complex zero = {0.0, 0.0};
+
+    xsup    = Glu->xsup;
+    supno   = Glu->supno;
+    lsub    = Glu->lsub;
+    xlsub   = Glu->xlsub;
+    ucol    = Glu->ucol;
+    usub    = Glu->usub;
+    xusub   = Glu->xusub;
+    nzumax  = Glu->nzumax;
+
+    *sum = zero;
+    if (drop_rule == NODROP) {
+	drop_tol = -1.0, quota = Glu->n;
+    }
+
+    jsupno = supno[jcol];
+    nextu  = xusub[jcol];
+    k = nseg - 1;
+    for (ksub = 0; ksub < nseg; ksub++) {
+	krep = segrep[k--];
+	ksupno = supno[krep];
+
+	if ( ksupno != jsupno ) { /* Should go into ucol[] */
+	    kfnz = repfnz[krep];
+	    if ( kfnz != EMPTY ) {	/* Nonzero U-segment */
+
+		fsupc = xsup[ksupno];
+		isub = xlsub[fsupc] + kfnz - fsupc;
+		segsze = krep - kfnz + 1;
+
+		new_next = nextu + segsze;
+		while ( new_next > nzumax ) {
+		    if ((mem_error = cLUMemXpand(jcol, nextu, UCOL, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    ucol = Glu->ucol;
+		    if ((mem_error = cLUMemXpand(jcol, nextu, USUB, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    usub = Glu->usub;
+		    lsub = Glu->lsub;
+		}
+
+		for (i = 0; i < segsze; i++) {
+		    irow = lsub[isub++];
+         	    tmp = c_abs1(&dense[irow]);
+
+		    /* first dropping rule */
+		    if (quota > 0 && tmp >= drop_tol) {
+			if (tmp > d_max) d_max = tmp;
+			if (tmp < d_min) d_min = tmp;
+			usub[nextu] = perm_r[irow];
+			ucol[nextu] = dense[irow];
+			nextu++;
+		    } else {
+			switch (milu) {
+			    case SMILU_1:
+			    case SMILU_2:
+                                c_add(sum, sum, &dense[irow]);
+				break;
+			    case SMILU_3:
+				/* *sum += fabs(dense[irow]);*/
+				sum->r += tmp;
+				break;
+			    case SILU:
+			    default:
+				break;
+			}
+#ifdef DEBUG
+			num_drop_U++;
+#endif
+		    }
+		    dense[irow] = zero;
+		}
+
+	    }
+
+	}
+
+    } /* for each segment... */
+
+    xusub[jcol + 1] = nextu;	  /* Close U[*,jcol] */
+    m = xusub[jcol + 1] - xusub[jcol];
+
+    /* second dropping rule */
+    if (drop_rule & DROP_SECONDARY && m > quota) {
+	register double tol = d_max;
+	register int m0 = xusub[jcol] + m - 1;
+
+	if (quota > 0) {
+	    if (drop_rule & DROP_INTERP) {
+		d_max = 1.0 / d_max; d_min = 1.0 / d_min;
+		tol = 1.0 / (d_max + (d_min - d_max) * quota / m);
+	    } else {
+		A = &ucol[xusub[jcol]];
+		for (i = 0; i < m; i++) work[i] = i;
+		qsort(work, m, sizeof(int), _compare_);
+		tol = fabs(usub[xusub[jcol] + work[quota]]);
+	    }
+	}
+	for (i = xusub[jcol]; i <= m0; ) {
+	    if (c_abs1(&ucol[i]) <= tol) {
+		switch (milu) {
+		    case SMILU_1:
+		    case SMILU_2:
+			c_add(sum, sum, &ucol[i]);
+			break;
+		    case SMILU_3:
+			sum->r += tmp;
+			break;
+		    case SILU:
+		    default:
+			break;
+		}
+		ucol[i] = ucol[m0];
+		usub[i] = usub[m0];
+		m0--;
+		m--;
+#ifdef DEBUG
+		num_drop_U++;
+#endif
+		xusub[jcol + 1]--;
+		continue;
+	    }
+	    i++;
+	}
+    }
+
+    if (milu == SMILU_2) {
+        sum->r = c_abs1(sum); sum->i = 0.0;
+    }
+    if (milu == SMILU_3) sum->i = 0.0;
+
+    *nnzUj += m;
+
+    return 0;
+}
diff --git a/SRC/ilu_cdrop_row.c b/SRC/ilu_cdrop_row.c
new file mode 100644
index 0000000..44173c8
--- /dev/null
+++ b/SRC/ilu_cdrop_row.c
@@ -0,0 +1,339 @@
+
+/*! @file ilu_cdrop_row.c
+ * \brief Drop small rows from L
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include <math.h>
+#include <stdlib.h>
+#include "slu_cdefs.h"
+
+extern void cswap_(int *, complex [], int *, complex [], int *);
+extern void caxpy_(int *, complex *, complex [], int *, complex [], int *);
+extern void ccopy_(int *, complex [], int *, complex [], int *);
+extern float scasum_(int *, complex *, int *);
+extern float scnrm2_(int *, complex *, int *);
+extern double dnrm2_(int *, double [], int *);
+extern int icamax_(int *, complex [], int *);
+
+static float *A;  /* used in _compare_ only */
+static int _compare_(const void *a, const void *b)
+{
+    register int *x = (int *)a, *y = (int *)b;
+    if (A[*x] - A[*y] > 0.0) return -1;
+    else if (A[*x] - A[*y] < 0.0) return 1;
+    else return 0;
+}
+
+/*! \brief
+ * <pre>
+ * Purpose
+ * =======
+ *    ilu_cdrop_row() - Drop some small rows from the previous 
+ *    supernode (L-part only).
+ * </pre>
+ */
+int ilu_cdrop_row(
+	superlu_options_t *options, /* options */
+	int    first,	    /* index of the first column in the supernode */
+	int    last,	    /* index of the last column in the supernode */
+	double drop_tol,    /* dropping parameter */
+	int    quota,	    /* maximum nonzero entries allowed */
+	int    *nnzLj,	    /* in/out number of nonzeros in L(:, 1:last) */
+	double *fill_tol,   /* in/out - on exit, fill_tol=-num_zero_pivots,
+			     * does not change if options->ILU_MILU != SMILU1 */
+	GlobalLU_t *Glu,    /* modified */
+	float swork[],   /* working space
+	                     * the length of swork[] should be no less than
+			     * the number of rows in the supernode */
+	float swork2[], /* working space with the same size as swork[],
+			     * used only by the second dropping rule */
+	int    lastc	    /* if lastc == 0, there is nothing after the
+			     * working supernode [first:last];
+			     * if lastc == 1, there is one more column after
+			     * the working supernode. */ )
+{
+    register int i, j, k, m1;
+    register int nzlc; /* number of nonzeros in column last+1 */
+    register int xlusup_first, xlsub_first;
+    int m, n; /* m x n is the size of the supernode */
+    int r = 0; /* number of dropped rows */
+    register float *temp;
+    register complex *lusup = Glu->lusup;
+    register int *lsub = Glu->lsub;
+    register int *xlsub = Glu->xlsub;
+    register int *xlusup = Glu->xlusup;
+    register float d_max = 0.0, d_min = 1.0;
+    int    drop_rule = options->ILU_DropRule;
+    milu_t milu = options->ILU_MILU;
+    norm_t nrm = options->ILU_Norm;
+    complex zero = {0.0, 0.0};
+    complex one = {1.0, 0.0};
+    complex none = {-1.0, 0.0};
+    int i_1 = 1;
+    int inc_diag; /* inc_diag = m + 1 */
+    int nzp = 0;  /* number of zero pivots */
+    float alpha = pow((double)(Glu->n), -1.0 / options->ILU_MILU_Dim);
+
+    xlusup_first = xlusup[first];
+    xlsub_first = xlsub[first];
+    m = xlusup[first + 1] - xlusup_first;
+    n = last - first + 1;
+    m1 = m - 1;
+    inc_diag = m + 1;
+    nzlc = lastc ? (xlusup[last + 2] - xlusup[last + 1]) : 0;
+    temp = swork - n;
+
+    /* Quick return if nothing to do. */
+    if (m == 0 || m == n || drop_rule == NODROP)
+    {
+	*nnzLj += m * n;
+	return 0;
+    }
+
+    /* basic dropping: ILU(tau) */
+    for (i = n; i <= m1; )
+    {
+	/* the average abs value of ith row */
+	switch (nrm)
+	{
+	    case ONE_NORM:
+		temp[i] = scasum_(&n, &lusup[xlusup_first + i], &m) / (double)n;
+		break;
+	    case TWO_NORM:
+		temp[i] = scnrm2_(&n, &lusup[xlusup_first + i], &m)
+		    / sqrt((double)n);
+		break;
+	    case INF_NORM:
+	    default:
+		k = icamax_(&n, &lusup[xlusup_first + i], &m) - 1;
+		temp[i] = c_abs1(&lusup[xlusup_first + i + m * k]);
+		break;
+	}
+
+	/* drop small entries due to drop_tol */
+	if (drop_rule & DROP_BASIC && temp[i] < drop_tol)
+	{
+	    r++;
+	    /* drop the current row and move the last undropped row here */
+	    if (r > 1) /* add to last row */
+	    {
+		/* accumulate the sum (for MILU) */
+		switch (milu)
+		{
+		    case SMILU_1:
+		    case SMILU_2:
+			caxpy_(&n, &one, &lusup[xlusup_first + i], &m,
+				&lusup[xlusup_first + m - 1], &m);
+			break;
+		    case SMILU_3:
+			for (j = 0; j < n; j++)
+			    lusup[xlusup_first + (m - 1) + j * m].r +=
+				    c_abs1(&lusup[xlusup_first + i + j * m]);
+			break;
+		    case SILU:
+		    default:
+			break;
+		}
+		ccopy_(&n, &lusup[xlusup_first + m1], &m,
+                       &lusup[xlusup_first + i], &m);
+	    } /* if (r > 1) */
+	    else /* move to last row */
+	    {
+		cswap_(&n, &lusup[xlusup_first + m1], &m,
+			&lusup[xlusup_first + i], &m);
+		if (milu == SMILU_3)
+		    for (j = 0; j < n; j++) {
+			lusup[xlusup_first + m1 + j * m].r =
+				c_abs1(&lusup[xlusup_first + m1 + j * m]);
+			lusup[xlusup_first + m1 + j * m].i = 0.0;
+                    }
+	    }
+	    lsub[xlsub_first + i] = lsub[xlsub_first + m1];
+	    m1--;
+	    continue;
+	} /* if dropping */
+	else
+	{
+	    if (temp[i] > d_max) d_max = temp[i];
+	    if (temp[i] < d_min) d_min = temp[i];
+	}
+	i++;
+    } /* for */
+
+    /* Secondary dropping: drop more rows according to the quota. */
+    quota = ceil((double)quota / (double)n);
+    if (drop_rule & DROP_SECONDARY && m - r > quota)
+    {
+	register double tol = d_max;
+
+	/* Calculate the second dropping tolerance */
+	if (quota > n)
+	{
+	    if (drop_rule & DROP_INTERP) /* by interpolation */
+	    {
+		d_max = 1.0 / d_max; d_min = 1.0 / d_min;
+		tol = 1.0 / (d_max + (d_min - d_max) * quota / (m - n - r));
+	    }
+	    else /* by quick select */
+	    {
+		int len = m1 - n + 1;
+		scopy_(&len, swork, &i_1, swork2, &i_1);
+		tol = sqselect(len, swork2, quota - n);
+#if 0
+		register int *itemp = iwork - n;
+		A = temp;
+		for (i = n; i <= m1; i++) itemp[i] = i;
+		qsort(iwork, m1 - n + 1, sizeof(int), _compare_);
+		tol = temp[itemp[quota]];
+#endif
+	    }
+	}
+
+	for (i = n; i <= m1; )
+	{
+	    if (temp[i] <= tol)
+	    {
+		register int j;
+		r++;
+		/* drop the current row and move the last undropped row here */
+		if (r > 1) /* add to last row */
+		{
+		    /* accumulate the sum (for MILU) */
+		    switch (milu)
+		    {
+			case SMILU_1:
+			case SMILU_2:
+			    caxpy_(&n, &one, &lusup[xlusup_first + i], &m,
+				    &lusup[xlusup_first + m - 1], &m);
+			    break;
+			case SMILU_3:
+			    for (j = 0; j < n; j++)
+				lusup[xlusup_first + (m - 1) + j * m].r +=
+   				  c_abs1(&lusup[xlusup_first + i + j * m]);
+			    break;
+			case SILU:
+			default:
+			    break;
+		    }
+		    ccopy_(&n, &lusup[xlusup_first + m1], &m,
+			    &lusup[xlusup_first + i], &m);
+		} /* if (r > 1) */
+		else /* move to last row */
+		{
+		    cswap_(&n, &lusup[xlusup_first + m1], &m,
+			    &lusup[xlusup_first + i], &m);
+		    if (milu == SMILU_3)
+			for (j = 0; j < n; j++) {
+			    lusup[xlusup_first + m1 + j * m].r =
+				    c_abs1(&lusup[xlusup_first + m1 + j * m]);
+			    lusup[xlusup_first + m1 + j * m].i = 0.0;
+                        }
+		}
+		lsub[xlsub_first + i] = lsub[xlsub_first + m1];
+		m1--;
+		temp[i] = temp[m1];
+
+		continue;
+	    }
+	    i++;
+
+	} /* for */
+
+    } /* if secondary dropping */
+
+    for (i = n; i < m; i++) temp[i] = 0.0;
+
+    if (r == 0)
+    {
+	*nnzLj += m * n;
+	return 0;
+    }
+
+    /* add dropped entries to the diagnal */
+    if (milu != SILU)
+    {
+	register int j;
+	complex t;
+	float omega;
+	for (j = 0; j < n; j++)
+	{
+	    t = lusup[xlusup_first + (m - 1) + j * m];
+            if (t.r == 0.0 && t.i == 0.0) continue;
+            omega = SUPERLU_MIN(2.0 * (1.0 - alpha) / c_abs1(&t), 1.0);
+	    cs_mult(&t, &t, omega);
+
+ 	    switch (milu)
+	    {
+		case SMILU_1:
+		    if ( !(c_eq(&t, &none)) ) {
+                        c_add(&t, &t, &one);
+                        cc_mult(&lusup[xlusup_first + j * inc_diag],
+			                  &lusup[xlusup_first + j * inc_diag],
+                                          &t);
+                    }
+		    else
+		    {
+                        cs_mult(
+                                &lusup[xlusup_first + j * inc_diag],
+			        &lusup[xlusup_first + j * inc_diag],
+                                *fill_tol);
+#ifdef DEBUG
+			printf("[1] ZERO PIVOT: FILL col %d.\n", first + j);
+			fflush(stdout);
+#endif
+			nzp++;
+		    }
+		    break;
+		case SMILU_2:
+                    cs_mult(&lusup[xlusup_first + j * inc_diag],
+                                          &lusup[xlusup_first + j * inc_diag],
+                                          1.0 + c_abs1(&t));
+		    break;
+		case SMILU_3:
+                    c_add(&t, &t, &one);
+                    cc_mult(&lusup[xlusup_first + j * inc_diag],
+	                              &lusup[xlusup_first + j * inc_diag],
+                                      &t);
+		    break;
+		case SILU:
+		default:
+		    break;
+	    }
+	}
+	if (nzp > 0) *fill_tol = -nzp;
+    }
+
+    /* Remove dropped entries from the memory and fix the pointers. */
+    m1 = m - r;
+    for (j = 1; j < n; j++)
+    {
+	register int tmp1, tmp2;
+	tmp1 = xlusup_first + j * m1;
+	tmp2 = xlusup_first + j * m;
+	for (i = 0; i < m1; i++)
+	    lusup[i + tmp1] = lusup[i + tmp2];
+    }
+    for (i = 0; i < nzlc; i++)
+	lusup[xlusup_first + i + n * m1] = lusup[xlusup_first + i + n * m];
+    for (i = 0; i < nzlc; i++)
+	lsub[xlsub[last + 1] - r + i] = lsub[xlsub[last + 1] + i];
+    for (i = first + 1; i <= last + 1; i++)
+    {
+	xlusup[i] -= r * (i - first);
+	xlsub[i] -= r;
+    }
+    if (lastc)
+    {
+	xlusup[last + 2] -= r * n;
+	xlsub[last + 2] -= r;
+    }
+
+    *nnzLj += (m - r) * n;
+    return r;
+}
diff --git a/SRC/cpanel_dfs.c b/SRC/ilu_cpanel_dfs.c
similarity index 68%
copy from SRC/cpanel_dfs.c
copy to SRC/ilu_cpanel_dfs.c
index f20a8d2..05a5bf5 100644
--- a/SRC/cpanel_dfs.c
+++ b/SRC/ilu_cpanel_dfs.c
@@ -1,46 +1,20 @@
 
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
+/*! @file ilu_cpanel_dfs.c
+ * \brief Peforms a symbolic factorization on a panel of symbols and
+ * record the entries with maximum absolute value in each column
  *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
 
 #include "slu_cdefs.h"
 
-void
-cpanel_dfs (
-	   const int  m,           /* in - number of rows in the matrix */
-	   const int  w,           /* in */
-	   const int  jcol,        /* in */
-	   SuperMatrix *A,       /* in - original matrix */
-	   int        *perm_r,     /* in */
-	   int        *nseg,	   /* out */
-	   complex     *dense,      /* out */
-	   int        *panel_lsub, /* out */
-	   int        *segrep,     /* out */
-	   int        *repfnz,     /* out */
-	   int        *xprune,     /* out */
-	   int        *marker,     /* out */     
-	   int        *parent,     /* working array */
-	   int        *xplore,     /* working array */
-	   GlobalLU_t *Glu         /* modified */
-	   )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -53,9 +27,9 @@ cpanel_dfs (
  *   The routine returns one list of the supernodal representatives
  *   in topological order of the dfs that generates them. This list is
  *   a superset of the topological order of each individual column within
- *   the panel. 
+ *   the panel.
  *   The location of the first nonzero in each supernodal segment
- *   (supernodal entry location) is also returned. Each column has a 
+ *   (supernodal entry location) is also returned. Each column has a
  *   separate list for this purpose.
  *
  *   Two marker arrays are used for dfs:
@@ -66,33 +40,56 @@ cpanel_dfs (
  *   repfnz: SuperA-col --> PA-row
  *   parent: SuperA-col --> SuperA-col
  *   xplore: SuperA-col --> index to L-structure
- *
+ * </pre>
  */
+void
+ilu_cpanel_dfs(
+   const int  m,	   /* in - number of rows in the matrix */
+   const int  w,	   /* in */
+   const int  jcol,	   /* in */
+   SuperMatrix *A,	   /* in - original matrix */
+   int	      *perm_r,	   /* in */
+   int	      *nseg,	   /* out */
+   complex     *dense,	   /* out */
+   float     *amax,	   /* out - max. abs. value of each column in panel */
+   int	      *panel_lsub, /* out */
+   int	      *segrep,	   /* out */
+   int	      *repfnz,	   /* out */
+   int	      *marker,	   /* out */
+   int	      *parent,	   /* working array */
+   int	      *xplore,	   /* working array */
+   GlobalLU_t *Glu	   /* modified */
+)
+{
+
     NCPformat *Astore;
     complex    *a;
     int       *asub;
     int       *xa_begin, *xa_end;
-    int	      krep, chperm, chmark, chrep, oldrep, kchild, myfnz;
+    int       krep, chperm, chmark, chrep, oldrep, kchild, myfnz;
     int       k, krow, kmark, kperm;
     int       xdfs, maxdfs, kpar;
     int       jj;	   /* index through each column in the panel */
-    int       *marker1;	   /* marker1[jj] >= jcol if vertex jj was visited 
-			      by a previous column within this panel.   */
+    int       *marker1;    /* marker1[jj] >= jcol if vertex jj was visited
+			      by a previous column within this panel. */
     int       *repfnz_col; /* start of each column in the panel */
     complex    *dense_col;  /* start of each column in the panel */
     int       nextl_col;   /* next available position in panel_lsub[*,jj] */
     int       *xsup, *supno;
     int       *lsub, *xlsub;
+    float    *amax_col;
+    register double tmp;
 
     /* Initialize pointers */
     Astore     = A->Store;
-    a          = Astore->nzval;
+    a	       = Astore->nzval;
     asub       = Astore->rowind;
     xa_begin   = Astore->colbeg;
     xa_end     = Astore->colend;
     marker1    = marker + m;
     repfnz_col = repfnz;
     dense_col  = dense;
+    amax_col   = amax;
     *nseg      = 0;
     xsup       = Glu->xsup;
     supno      = Glu->supno;
@@ -107,12 +104,15 @@ cpanel_dfs (
 	printf("\npanel col %d: ", jj);
 #endif
 
+	*amax_col = 0.0;
 	/* For each nonz in A[*,jj] do dfs */
 	for (k = xa_begin[jj]; k < xa_end[jj]; k++) {
 	    krow = asub[k];
-            dense_col[krow] = a[k];
-	    kmark = marker[krow];    	
-	    if ( kmark == jj ) 
+	    tmp = c_abs1(&a[k]);
+	    if (tmp > *amax_col) *amax_col = tmp;
+	    dense_col[krow] = a[k];
+	    kmark = marker[krow];
+	    if ( kmark == jj )
 		continue;     /* krow visited before, go to the next nonzero */
 
 	    /* For each unmarked nbr krow of jj
@@ -120,11 +120,11 @@ cpanel_dfs (
 	     */
 	    marker[krow] = jj;
 	    kperm = perm_r[krow];
-	    
+
 	    if ( kperm == EMPTY ) {
 		panel_lsub[nextl_col++] = krow; /* krow is indexed into A */
 	    }
-	    /* 
+	    /*
 	     * krow is in U: if its supernode-rep krep
 	     * has been explored, update repfnz[*]
 	     */
@@ -136,7 +136,7 @@ cpanel_dfs (
 #ifdef CHK_DFS
 		printf("krep %d, myfnz %d, perm_r[%d] %d\n", krep, myfnz, krow, kperm);
 #endif
-		if ( myfnz != EMPTY ) {	/* Representative visited before */
+		if ( myfnz != EMPTY ) { /* Representative visited before */
 		    if ( myfnz > kperm ) repfnz_col[krep] = kperm;
 		    /* continue; */
 		}
@@ -145,34 +145,34 @@ cpanel_dfs (
 		    oldrep = EMPTY;
 		    parent[krep] = oldrep;
 		    repfnz_col[krep] = kperm;
-		    xdfs = xlsub[krep];
-		    maxdfs = xprune[krep];
-		    
-#ifdef CHK_DFS 
+		    xdfs = xlsub[xsup[supno[krep]]];
+		    maxdfs = xlsub[krep + 1];
+
+#ifdef CHK_DFS
 		    printf("  xdfs %d, maxdfs %d: ", xdfs, maxdfs);
 		    for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);
 		    printf("\n");
 #endif
 		    do {
-			/* 
-			 * For each unmarked kchild of krep 
+			/*
+			 * For each unmarked kchild of krep
 			 */
 			while ( xdfs < maxdfs ) {
-			    
+
 			    kchild = lsub[xdfs];
 			    xdfs++;
 			    chmark = marker[kchild];
-			    
+
 			    if ( chmark != jj ) { /* Not reached yet */
 				marker[kchild] = jj;
 				chperm = perm_r[kchild];
-			      
+
 				/* Case kchild is in L: place it in L[*,j] */
 				if ( chperm == EMPTY ) {
 				    panel_lsub[nextl_col++] = kchild;
-				} 
-				/* Case kchild is in U: 
-				 *   chrep = its supernode-rep. If its rep has 
+				}
+				/* Case kchild is in U:
+				 *   chrep = its supernode-rep. If its rep has
 				 *   been explored, update its repfnz[*]
 				 */
 				else {
@@ -188,28 +188,28 @@ cpanel_dfs (
 				    }
 				    else {
 					/* Cont. dfs at snode-rep of kchild */
-					xplore[krep] = xdfs;	
+					xplore[krep] = xdfs;
 					oldrep = krep;
 					krep = chrep; /* Go deeper down G(L) */
 					parent[krep] = oldrep;
 					repfnz_col[krep] = chperm;
-					xdfs = xlsub[krep];     
-					maxdfs = xprune[krep];
-#ifdef CHK_DFS 
+					xdfs = xlsub[xsup[supno[krep]]];
+					maxdfs = xlsub[krep + 1];
+#ifdef CHK_DFS
 					printf("  xdfs %d, maxdfs %d: ", xdfs, maxdfs);
-					for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);	
+					for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);
 					printf("\n");
 #endif
 				    } /* else */
-				  
+
 				} /* else */
-			      
+
 			    } /* if... */
-			    
+
 			} /* while xdfs < maxdfs */
-			
+
 			/* krow has no more unexplored nbrs:
-			 *    Place snode-rep krep in postorder DFS, if this 
+			 *    Place snode-rep krep in postorder DFS, if this
 			 *    segment is seen for the first time. (Note that
 			 *    "repfnz[krep]" may change later.)
 			 *    Backtrack dfs to its parent.
@@ -219,29 +219,30 @@ cpanel_dfs (
 			    ++(*nseg);
 			    marker1[krep] = jj;
 			}
-			
+
 			kpar = parent[krep]; /* Pop stack, mimic recursion */
 			if ( kpar == EMPTY ) break; /* dfs done */
 			krep = kpar;
 			xdfs = xplore[krep];
-			maxdfs = xprune[krep];
-			
-#ifdef CHK_DFS 
+			maxdfs = xlsub[krep + 1];
+
+#ifdef CHK_DFS
 			printf("  pop stack: krep %d,xdfs %d,maxdfs %d: ", krep,xdfs,maxdfs);
 			for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);
 			printf("\n");
 #endif
 		    } while ( kpar != EMPTY ); /* do-while - until empty stack */
-		    
+
 		} /* else */
 		
 	    } /* else */
-	    
+
 	} /* for each nonz in A[*,jj] */
-	
+
 	repfnz_col += m;    /* Move to next column */
-        dense_col += m;
-	
+	dense_col += m;
+	amax_col++;
+
     } /* for jj ... */
-    
+
 }
diff --git a/SRC/ilu_cpivotL.c b/SRC/ilu_cpivotL.c
new file mode 100644
index 0000000..d806485
--- /dev/null
+++ b/SRC/ilu_cpivotL.c
@@ -0,0 +1,274 @@
+
+/*! @file ilu_cpivotL.c
+ * \brief Performs numerical pivoting
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+
+#include <math.h>
+#include <stdlib.h>
+#include "slu_cdefs.h"
+
+#ifndef SGN
+#define SGN(x) ((x)>=0?1:-1)
+#endif
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *   Performs the numerical pivoting on the current column of L,
+ *   and the CDIV operation.
+ *
+ *   Pivot policy:
+ *   (1) Compute thresh = u * max_(i>=j) abs(A_ij);
+ *   (2) IF user specifies pivot row k and abs(A_kj) >= thresh THEN
+ *	     pivot row = k;
+ *	 ELSE IF abs(A_jj) >= thresh THEN
+ *	     pivot row = j;
+ *	 ELSE
+ *	     pivot row = m;
+ *
+ *   Note: If you absolutely want to use a given pivot order, then set u=0.0.
+ *
+ *   Return value: 0	  success;
+ *		   i > 0  U(i,i) is exactly zero.
+ * </pre>
+ */
+
+int
+ilu_cpivotL(
+	const int  jcol,     /* in */
+	const double u,      /* in - diagonal pivoting threshold */
+	int	   *usepr,   /* re-use the pivot sequence given by
+			      * perm_r/iperm_r */
+	int	   *perm_r,  /* may be modified */
+	int	   diagind,  /* diagonal of Pc*A*Pc' */
+	int	   *swap,    /* in/out record the row permutation */
+	int	   *iswap,   /* in/out inverse of swap, it is the same as
+				perm_r after the factorization */
+	int	   *marker,  /* in */
+	int	   *pivrow,  /* in/out, as an input if *usepr!=0 */
+	double	   fill_tol, /* in - fill tolerance of current column
+			      * used for a singular column */
+	milu_t	   milu,     /* in */
+	complex	   drop_sum, /* in - computed in ilu_ccopy_to_ucol()
+                                (MILU only) */
+	GlobalLU_t *Glu,     /* modified - global LU data structures */
+	SuperLUStat_t *stat  /* output */
+       )
+{
+
+    int		 n;	 /* number of columns */
+    int		 fsupc;  /* first column in the supernode */
+    int		 nsupc;  /* no of columns in the supernode */
+    int		 nsupr;  /* no of rows in the supernode */
+    int		 lptr;	 /* points to the starting subscript of the supernode */
+    register int	 pivptr;
+    int		 old_pivptr, diag, ptr0;
+    register float  pivmax, rtemp;
+    float	 thresh;
+    complex	 temp;
+    complex	 *lu_sup_ptr;
+    complex	 *lu_col_ptr;
+    int		 *lsub_ptr;
+    register int	 isub, icol, k, itemp;
+    int		 *lsub, *xlsub;
+    complex	 *lusup;
+    int		 *xlusup;
+    flops_t	 *ops = stat->ops;
+    int		 info;
+    complex one = {1.0, 0.0};
+
+    /* Initialize pointers */
+    n	       = Glu->n;
+    lsub       = Glu->lsub;
+    xlsub      = Glu->xlsub;
+    lusup      = Glu->lusup;
+    xlusup     = Glu->xlusup;
+    fsupc      = (Glu->xsup)[(Glu->supno)[jcol]];
+    nsupc      = jcol - fsupc;		/* excluding jcol; nsupc >= 0 */
+    lptr       = xlsub[fsupc];
+    nsupr      = xlsub[fsupc+1] - lptr;
+    lu_sup_ptr = &lusup[xlusup[fsupc]]; /* start of the current supernode */
+    lu_col_ptr = &lusup[xlusup[jcol]];	/* start of jcol in the supernode */
+    lsub_ptr   = &lsub[lptr];	/* start of row indices of the supernode */
+
+    /* Determine the largest abs numerical value for partial pivoting;
+       Also search for user-specified pivot, and diagonal element. */
+    pivmax = -1.0;
+    pivptr = nsupc;
+    diag = EMPTY;
+    old_pivptr = nsupc;
+    ptr0 = EMPTY;
+    for (isub = nsupc; isub < nsupr; ++isub) {
+        if (marker[lsub_ptr[isub]] > jcol)
+            continue; /* do not overlap with a later relaxed supernode */
+
+	switch (milu) {
+	    case SMILU_1:
+                c_add(&temp, &lu_col_ptr[isub], &drop_sum);
+		rtemp = c_abs1(&temp);
+		break;
+	    case SMILU_2:
+	    case SMILU_3:
+                /* In this case, drop_sum contains the sum of the abs. value */
+		rtemp = c_abs1(&lu_col_ptr[isub]);
+		break;
+	    case SILU:
+	    default:
+		rtemp = c_abs1(&lu_col_ptr[isub]);
+		break;
+	}
+	if (rtemp > pivmax) { pivmax = rtemp; pivptr = isub; }
+	if (*usepr && lsub_ptr[isub] == *pivrow) old_pivptr = isub;
+	if (lsub_ptr[isub] == diagind) diag = isub;
+	if (ptr0 == EMPTY) ptr0 = isub;
+    }
+
+    if (milu == SMILU_2 || milu == SMILU_3) pivmax += drop_sum.r;
+
+    /* Test for singularity */
+    if (pivmax < 0.0) {
+	fprintf(stderr, "[0]: jcol=%d, SINGULAR!!!\n", jcol);
+	fflush(stderr);
+	exit(1);
+    }
+    if ( pivmax == 0.0 ) {
+	if (diag != EMPTY)
+	    *pivrow = lsub_ptr[pivptr = diag];
+	else if (ptr0 != EMPTY)
+	    *pivrow = lsub_ptr[pivptr = ptr0];
+	else {
+	    /* look for the first row which does not
+	       belong to any later supernodes */
+	    for (icol = jcol; icol < n; icol++)
+		if (marker[swap[icol]] <= jcol) break;
+	    if (icol >= n) {
+		fprintf(stderr, "[1]: jcol=%d, SINGULAR!!!\n", jcol);
+		fflush(stderr);
+		exit(1);
+	    }
+
+	    *pivrow = swap[icol];
+
+	    /* pick up the pivot row */
+	    for (isub = nsupc; isub < nsupr; ++isub)
+		if ( lsub_ptr[isub] == *pivrow ) { pivptr = isub; break; }
+	}
+	pivmax = fill_tol;
+	lu_col_ptr[pivptr].r = pivmax;
+	lu_col_ptr[pivptr].i = 0.0;
+	*usepr = 0;
+#ifdef DEBUG
+	printf("[0] ZERO PIVOT: FILL (%d, %d).\n", *pivrow, jcol);
+	fflush(stdout);
+#endif
+	info =jcol + 1;
+    } /* if (*pivrow == 0.0) */
+    else {
+	thresh = u * pivmax;
+
+	/* Choose appropriate pivotal element by our policy. */
+	if ( *usepr ) {
+	    switch (milu) {
+		case SMILU_1:
+                    c_add(&temp, &lu_col_ptr[old_pivptr], &drop_sum);
+		    rtemp = c_abs1(&temp);
+		    break;
+		case SMILU_2:
+		case SMILU_3:
+		    rtemp = c_abs1(&lu_col_ptr[old_pivptr]) + drop_sum.r;
+		    break;
+		case SILU:
+		default:
+		    rtemp = c_abs1(&lu_col_ptr[old_pivptr]);
+		    break;
+	    }
+	    if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = old_pivptr;
+	    else *usepr = 0;
+	}
+	if ( *usepr == 0 ) {
+	    /* Use diagonal pivot? */
+	    if ( diag >= 0 ) { /* diagonal exists */
+		switch (milu) {
+		    case SMILU_1:
+                        c_add(&temp, &lu_col_ptr[diag], &drop_sum);
+         	        rtemp = c_abs1(&temp);
+			break;
+		    case SMILU_2:
+		    case SMILU_3:
+			rtemp = c_abs1(&lu_col_ptr[diag]) + drop_sum.r;
+			break;
+		    case SILU:
+		    default:
+			rtemp = c_abs1(&lu_col_ptr[diag]);
+			break;
+		}
+		if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = diag;
+	    }
+	    *pivrow = lsub_ptr[pivptr];
+	}
+	info = 0;
+
+	/* Reset the diagonal */
+	switch (milu) {
+	    case SMILU_1:
+		c_add(&lu_col_ptr[pivptr], &lu_col_ptr[pivptr], &drop_sum);
+		break;
+	    case SMILU_2:
+	    case SMILU_3:
+                temp = c_sgn(&lu_col_ptr[pivptr]);
+                cc_mult(&temp, &temp, &drop_sum);
+                c_add(&lu_col_ptr[pivptr], &lu_col_ptr[pivptr], &drop_sum);
+		break;
+	    case SILU:
+	    default:
+		break;
+	}
+
+    } /* else */
+
+    /* Record pivot row */
+    perm_r[*pivrow] = jcol;
+    if (jcol < n - 1) {
+	register int t1, t2, t;
+	t1 = iswap[*pivrow]; t2 = jcol;
+	if (t1 != t2) {
+	    t = swap[t1]; swap[t1] = swap[t2]; swap[t2] = t;
+	    t1 = swap[t1]; t2 = t;
+	    t = iswap[t1]; iswap[t1] = iswap[t2]; iswap[t2] = t;
+	}
+    } /* if (jcol < n - 1) */
+
+    /* Interchange row subscripts */
+    if ( pivptr != nsupc ) {
+	itemp = lsub_ptr[pivptr];
+	lsub_ptr[pivptr] = lsub_ptr[nsupc];
+	lsub_ptr[nsupc] = itemp;
+
+	/* Interchange numerical values as well, for the whole snode, such 
+	 * that L is indexed the same way as A.
+	 */
+	for (icol = 0; icol <= nsupc; icol++) {
+	    itemp = pivptr + icol * nsupr;
+	    temp = lu_sup_ptr[itemp];
+	    lu_sup_ptr[itemp] = lu_sup_ptr[nsupc + icol*nsupr];
+	    lu_sup_ptr[nsupc + icol*nsupr] = temp;
+	}
+    } /* if */
+
+    /* cdiv operation */
+    ops[FACT] += 10 * (nsupr - nsupc);
+    c_div(&temp, &one, &lu_col_ptr[nsupc]);
+    for (k = nsupc+1; k < nsupr; k++) 
+	cc_mult(&lu_col_ptr[k], &lu_col_ptr[k], &temp);
+
+    return info;
+}
diff --git a/SRC/ilu_csnode_dfs.c b/SRC/ilu_csnode_dfs.c
new file mode 100644
index 0000000..161d154
--- /dev/null
+++ b/SRC/ilu_csnode_dfs.c
@@ -0,0 +1,90 @@
+
+/*! @file ilu_csnode_dfs.c
+ * \brief Determines the union of row structures of columns within the relaxed node
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_cdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *    ilu_csnode_dfs() - Determine the union of the row structures of those
+ *    columns within the relaxed snode.
+ *    Note: The relaxed snodes are leaves of the supernodal etree, therefore,
+ *    the portion outside the rectangular supernode must be zero.
+ *
+ * Return value
+ * ============
+ *     0   success;
+ *    >0   number of bytes allocated when run out of memory.
+ * </pre>
+ */
+
+int
+ilu_csnode_dfs(
+	   const int  jcol,	    /* in - start of the supernode */
+	   const int  kcol,	    /* in - end of the supernode */
+	   const int  *asub,	    /* in */
+	   const int  *xa_begin,    /* in */
+	   const int  *xa_end,	    /* in */
+	   int	      *marker,	    /* modified */
+	   GlobalLU_t *Glu	    /* modified */
+	   )
+{
+
+    register int i, k, nextl;
+    int 	 nsuper, krow, kmark, mem_error;
+    int 	 *xsup, *supno;
+    int 	 *lsub, *xlsub;
+    int 	 nzlmax;
+
+    xsup    = Glu->xsup;
+    supno   = Glu->supno;
+    lsub    = Glu->lsub;
+    xlsub   = Glu->xlsub;
+    nzlmax  = Glu->nzlmax;
+
+    nsuper = ++supno[jcol];	/* Next available supernode number */
+    nextl = xlsub[jcol];
+
+    for (i = jcol; i <= kcol; i++)
+    {
+	/* For each nonzero in A[*,i] */
+	for (k = xa_begin[i]; k < xa_end[i]; k++)
+	{
+	    krow = asub[k];
+	    kmark = marker[krow];
+	    if ( kmark != kcol )
+	    { /* First time visit krow */
+		marker[krow] = kcol;
+		lsub[nextl++] = krow;
+		if ( nextl >= nzlmax )
+		{
+		    if ( (mem_error = cLUMemXpand(jcol, nextl, LSUB, &nzlmax,
+			    Glu)) != 0)
+			return (mem_error);
+		    lsub = Glu->lsub;
+		}
+	    }
+	}
+	supno[i] = nsuper;
+    }
+
+    /* Supernode > 1 */
+    if ( jcol < kcol )
+	for (i = jcol+1; i <= kcol; i++) xlsub[i] = nextl;
+
+    xsup[nsuper+1] = kcol + 1;
+    supno[kcol+1]  = nsuper;
+    xlsub[kcol+1]  = nextl;
+
+    return 0;
+}
diff --git a/SRC/dcolumn_dfs.c b/SRC/ilu_dcolumn_dfs.c
similarity index 50%
copy from SRC/dcolumn_dfs.c
copy to SRC/ilu_dcolumn_dfs.c
index c644ef7..a2e14db 100644
--- a/SRC/dcolumn_dfs.c
+++ b/SRC/ilu_dcolumn_dfs.c
@@ -1,57 +1,31 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * October 15, 2003
+/*! @file ilu_dcolumn_dfs.c
+ * \brief Performs a symbolic factorization
  *
- */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
 */
 
 #include "slu_ddefs.h"
 
-/* What type of supernodes we want */
-#define T2_SUPER
 
-int
-dcolumn_dfs(
-	   const int  m,         /* in - number of rows in the matrix */
-	   const int  jcol,      /* in */
-	   int        *perm_r,   /* in */
-	   int        *nseg,     /* modified - with new segments appended */
-	   int        *lsub_col, /* in - defines the RHS vector to start the dfs */
-	   int        *segrep,   /* modified - with new segments appended */
-	   int        *repfnz,   /* modified */
-	   int        *xprune,   /* modified */
-	   int        *marker,   /* modified */
-	   int        *parent,	 /* working array */
-	   int        *xplore,   /* working array */
-	   GlobalLU_t *Glu       /* modified */
-	   )
-{
-/* 
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
- *   "column_dfs" performs a symbolic factorization on column jcol, and
+ *   ILU_DCOLUMN_DFS performs a symbolic factorization on column jcol, and
  *   decide the supernode boundary.
  *
- *   This routine does not use numeric values, but only use the RHS 
+ *   This routine does not use numeric values, but only use the RHS
  *   row indices to start the dfs.
  *
  *   A supernode representative is the last column of a supernode.
  *   The nonzeros in U[*,j] are segments that end at supernodal
- *   representatives. The routine returns a list of such supernodal 
+ *   representatives. The routine returns a list of such supernodal
  *   representatives in topological order of the dfs that generates them.
  *   The location of the first nonzero in each such supernodal segment
  *   (supernodal entry location) is also returned.
@@ -71,22 +45,39 @@ dcolumn_dfs(
  * ============
  *     0  success;
  *   > 0  number of bytes allocated when run out of space.
- *
+ * </pre>
  */
+int
+ilu_dcolumn_dfs(
+	   const int  m,	 /* in - number of rows in the matrix */
+	   const int  jcol,	 /* in */
+	   int	      *perm_r,	 /* in */
+	   int	      *nseg,	 /* modified - with new segments appended */
+	   int	      *lsub_col, /* in - defines the RHS vector to start the
+				    dfs */
+	   int	      *segrep,	 /* modified - with new segments appended */
+	   int	      *repfnz,	 /* modified */
+	   int	      *marker,	 /* modified */
+	   int	      *parent,	 /* working array */
+	   int	      *xplore,	 /* working array */
+	   GlobalLU_t *Glu	 /* modified */
+	   )
+{
+
     int     jcolp1, jcolm1, jsuper, nsuper, nextl;
     int     k, krep, krow, kmark, kperm;
-    int     *marker2;           /* Used for small panel LU */
-    int	    fsupc;		/* First column of a snode */
+    int     *marker2;		/* Used for small panel LU */
+    int     fsupc;		/* First column of a snode */
     int     myfnz;		/* First nonz column of a U-segment */
-    int	    chperm, chmark, chrep, kchild;
+    int     chperm, chmark, chrep, kchild;
     int     xdfs, maxdfs, kpar, oldrep;
     int     jptr, jm1ptr;
-    int     ito, ifrom, istop;	/* Used to compress row subscripts */
+    int     ito, ifrom; 	/* Used to compress row subscripts */
     int     mem_error;
     int     *xsup, *supno, *lsub, *xlsub;
     int     nzlmax;
     static  int  first = 1, maxsuper;
-    
+
     xsup    = Glu->xsup;
     supno   = Glu->supno;
     lsub    = Glu->lsub;
@@ -94,7 +85,7 @@ dcolumn_dfs(
     nzlmax  = Glu->nzlmax;
 
     if ( first ) {
-	maxsuper = sp_ienv(3);
+	maxsuper = sp_ienv(7);
 	first = 0;
     }
     jcolp1  = jcol + 1;
@@ -109,11 +100,11 @@ dcolumn_dfs(
     for (k = 0; lsub_col[k] != EMPTY; k++) {
 
 	krow = lsub_col[k];
-    	lsub_col[k] = EMPTY;
-	kmark = marker2[krow];    	
+	lsub_col[k] = EMPTY;
+	kmark = marker2[krow];
 
-	/* krow was visited before, go to the next nonz */
-        if ( kmark == jcol ) continue; 
+	/* krow was visited before, go to the next nonzero */
+	if ( kmark == jcol ) continue;
 
 	/* For each unmarked nbr krow of jcol
 	 *	krow is in L: place it in structure of L[*,jcol]
@@ -121,15 +112,15 @@ dcolumn_dfs(
 	marker2[krow] = jcol;
 	kperm = perm_r[krow];
 
-   	if ( kperm == EMPTY ) {
-	    lsub[nextl++] = krow; 	/* krow is indexed into A */
+	if ( kperm == EMPTY ) {
+	    lsub[nextl++] = krow;	/* krow is indexed into A */
 	    if ( nextl >= nzlmax ) {
-		if ( mem_error = dLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu) )
+		if ((mem_error = dLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu)))
 		    return (mem_error);
 		lsub = Glu->lsub;
 	    }
-            if ( kmark != jcolm1 ) jsuper = EMPTY;/* Row index subset testing */
-  	} else {
+	    if ( kmark != jcolm1 ) jsuper = EMPTY;/* Row index subset testing */
+	} else {
 	    /*	krow is in U: if its supernode-rep krep
 	     *	has been explored, update repfnz[*]
 	     */
@@ -137,60 +128,60 @@ dcolumn_dfs(
 	    myfnz = repfnz[krep];
 
 	    if ( myfnz != EMPTY ) {	/* Visited before */
-	    	if ( myfnz > kperm ) repfnz[krep] = kperm;
+		if ( myfnz > kperm ) repfnz[krep] = kperm;
 		/* continue; */
 	    }
 	    else {
 		/* Otherwise, perform dfs starting at krep */
 		oldrep = EMPTY;
-	 	parent[krep] = oldrep;
-	  	repfnz[krep] = kperm;
-		xdfs = xlsub[krep];
-	  	maxdfs = xprune[krep];
+		parent[krep] = oldrep;
+		repfnz[krep] = kperm;
+		xdfs = xlsub[xsup[supno[krep]]];
+		maxdfs = xlsub[krep + 1];
 
 		do {
-		    /* 
-		     * For each unmarked kchild of krep 
+		    /*
+		     * For each unmarked kchild of krep
 		     */
 		    while ( xdfs < maxdfs ) {
 
-		   	kchild = lsub[xdfs];
+			kchild = lsub[xdfs];
 			xdfs++;
-		  	chmark = marker2[kchild];
+			chmark = marker2[kchild];
 
-		   	if ( chmark != jcol ) { /* Not reached yet */
-		   	    marker2[kchild] = jcol;
-		   	    chperm = perm_r[kchild];
+			if ( chmark != jcol ) { /* Not reached yet */
+			    marker2[kchild] = jcol;
+			    chperm = perm_r[kchild];
 
-		   	    /* Case kchild is in L: place it in L[*,k] */
-		   	    if ( chperm == EMPTY ) {
-			    	lsub[nextl++] = kchild;
+			    /* Case kchild is in L: place it in L[*,k] */
+			    if ( chperm == EMPTY ) {
+				lsub[nextl++] = kchild;
 				if ( nextl >= nzlmax ) {
-				    if ( mem_error =
-					 dLUMemXpand(jcol,nextl,LSUB,&nzlmax,Glu) )
+				    if ( (mem_error = dLUMemXpand(jcol,nextl,
+					    LSUB,&nzlmax,Glu)) )
 					return (mem_error);
 				    lsub = Glu->lsub;
 				}
 				if ( chmark != jcolm1 ) jsuper = EMPTY;
 			    } else {
-		    	    	/* Case kchild is in U: 
-				 *   chrep = its supernode-rep. If its rep has 
-			         *   been explored, update its repfnz[*]
-			         */
-		   	    	chrep = xsup[supno[chperm]+1] - 1;
-		   		myfnz = repfnz[chrep];
-		   		if ( myfnz != EMPTY ) { /* Visited before */
+				/* Case kchild is in U:
+				 *   chrep = its supernode-rep. If its rep has
+				 *   been explored, update its repfnz[*]
+				 */
+				chrep = xsup[supno[chperm]+1] - 1;
+				myfnz = repfnz[chrep];
+				if ( myfnz != EMPTY ) { /* Visited before */
 				    if ( myfnz > chperm )
-     				  	repfnz[chrep] = chperm;
+					repfnz[chrep] = chperm;
 				} else {
-		        	    /* Continue dfs at super-rep of kchild */
-		   		    xplore[krep] = xdfs;	
-		   		    oldrep = krep;
-		   		    krep = chrep; /* Go deeper down G(L^t) */
+				    /* Continue dfs at super-rep of kchild */
+				    xplore[krep] = xdfs;
+				    oldrep = krep;
+				    krep = chrep; /* Go deeper down G(L^t) */
 				    parent[krep] = oldrep;
-		    		    repfnz[krep] = chperm;
-		   		    xdfs = xlsub[krep];     
-				    maxdfs = xprune[krep];
+				    repfnz[krep] = chperm;
+				    xdfs = xlsub[xsup[supno[krep]]];
+				    maxdfs = xlsub[krep + 1];
 				} /* else */
 
 			   } /* else */
@@ -200,8 +191,8 @@ dcolumn_dfs(
 		    } /* while */
 
 		    /* krow has no more unexplored nbrs;
-	   	     *    place supernode-rep krep in postorder DFS.
-	   	     *    backtrack dfs to its parent
+		     *	  place supernode-rep krep in postorder DFS.
+		     *	  backtrack dfs to its parent
 		     */
 		    segrep[*nseg] = krep;
 		    ++(*nseg);
@@ -209,9 +200,9 @@ dcolumn_dfs(
 		    if ( kpar == EMPTY ) break; /* dfs done */
 		    krep = kpar;
 		    xdfs = xplore[krep];
-		    maxdfs = xprune[krep];
+		    maxdfs = xlsub[krep + 1];
 
-		} while ( kpar != EMPTY ); 	/* Until empty stack */
+		} while ( kpar != EMPTY );	/* Until empty stack */
 
 	    } /* else */
 
@@ -223,46 +214,44 @@ dcolumn_dfs(
     if ( jcol == 0 ) { /* Do nothing for column 0 */
 	nsuper = supno[0] = 0;
     } else {
-   	fsupc = xsup[nsuper];
+	fsupc = xsup[nsuper];
 	jptr = xlsub[jcol];	/* Not compressed yet */
 	jm1ptr = xlsub[jcolm1];
 
-#ifdef T2_SUPER
 	if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
-#endif
+
+	/* Always start a new supernode for a singular column */
+	if ( nextl == jptr ) jsuper = EMPTY;
+
 	/* Make sure the number of columns in a supernode doesn't
 	   exceed threshold. */
 	if ( jcol - fsupc >= maxsuper ) jsuper = EMPTY;
 
 	/* If jcol starts a new supernode, reclaim storage space in
 	 * lsub from the previous supernode. Note we only store
-	 * the subscript set of the first and last columns of
-   	 * a supernode. (first for num values, last for pruning)
+	 * the subscript set of the first columns of the supernode.
 	 */
 	if ( jsuper == EMPTY ) {	/* starts a new supernode */
-	    if ( (fsupc < jcolm1-1) ) {	/* >= 3 columns in nsuper */
+	    if ( (fsupc < jcolm1) ) { /* >= 2 columns in nsuper */
 #ifdef CHK_COMPRESS
 		printf("  Compress lsub[] at super %d-%d\n", fsupc, jcolm1);
 #endif
-	        ito = xlsub[fsupc+1];
+		ito = xlsub[fsupc+1];
 		xlsub[jcolm1] = ito;
-		istop = ito + jptr - jm1ptr;
-		xprune[jcolm1] = istop; /* Initialize xprune[jcol-1] */
-		xlsub[jcol] = istop;
-		for (ifrom = jm1ptr; ifrom < nextl; ++ifrom, ++ito)
+		xlsub[jcol] = ito;
+		for (ifrom = jptr; ifrom < nextl; ++ifrom, ++ito)
 		    lsub[ito] = lsub[ifrom];
-		nextl = ito;            /* = istop + length(jcol) */
+		nextl = ito;
 	    }
 	    nsuper++;
 	    supno[jcol] = nsuper;
 	} /* if a new supernode */
 
-    }	/* else: jcol > 0 */ 
-    
+    }	/* else: jcol > 0 */
+
     /* Tidy up the pointers before exit */
     xsup[nsuper+1] = jcolp1;
     supno[jcolp1]  = nsuper;
-    xprune[jcol]   = nextl;	/* Initialize upper bound for pruning */
     xlsub[jcolp1]  = nextl;
 
     return 0;
diff --git a/SRC/ilu_dcopy_to_ucol.c b/SRC/ilu_dcopy_to_ucol.c
new file mode 100644
index 0000000..e9162a7
--- /dev/null
+++ b/SRC/ilu_dcopy_to_ucol.c
@@ -0,0 +1,207 @@
+
+/*! @file ilu_dcopy_to_ucol.c
+ * \brief Copy a computed column of U to the compressed data structure
+ * and drop some small entries
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory
+ * November, 2010
+ * </pre>
+ */
+
+#include "slu_ddefs.h"
+
+#ifdef DEBUG
+int num_drop_U;
+#endif
+
+extern void dcopy_(int *, double [], int *, double [], int *);
+
+#if 0
+static double *A;  /* used in _compare_ only */
+static int _compare_(const void *a, const void *b)
+{
+    register int *x = (int *)a, *y = (int *)b;
+    register double xx = fabs(A[*x]), yy = fabs(A[*y]);
+    if (xx > yy) return -1;
+    else if (xx < yy) return 1;
+    else return 0;
+}
+#endif
+
+int
+ilu_dcopy_to_ucol(
+	      int	 jcol,	   /* in */
+	      int	 nseg,	   /* in */
+	      int	 *segrep,  /* in */
+	      int	 *repfnz,  /* in */
+	      int	 *perm_r,  /* in */
+	      double	 *dense,   /* modified - reset to zero on return */
+	      int  	 drop_rule,/* in */
+	      milu_t	 milu,	   /* in */
+	      double	 drop_tol, /* in */
+	      int	 quota,    /* maximum nonzero entries allowed */
+	      double	 *sum,	   /* out - the sum of dropped entries */
+	      int	 *nnzUj,   /* in - out */
+	      GlobalLU_t *Glu,	   /* modified */
+	      double	 *work	   /* working space with minimum size n,
+				    * used by the second dropping rule */
+	      )
+{
+/*
+ * Gather from SPA dense[*] to global ucol[*].
+ */
+    int       ksub, krep, ksupno;
+    int       i, k, kfnz, segsze;
+    int       fsupc, isub, irow;
+    int       jsupno, nextu;
+    int       new_next, mem_error;
+    int       *xsup, *supno;
+    int       *lsub, *xlsub;
+    double    *ucol;
+    int       *usub, *xusub;
+    int       nzumax;
+    int       m; /* number of entries in the nonzero U-segments */
+    register double d_max = 0.0, d_min = 1.0 / dlamch_("Safe minimum");
+    register double tmp;
+    double zero = 0.0;
+    int i_1 = 1;
+
+    xsup    = Glu->xsup;
+    supno   = Glu->supno;
+    lsub    = Glu->lsub;
+    xlsub   = Glu->xlsub;
+    ucol    = Glu->ucol;
+    usub    = Glu->usub;
+    xusub   = Glu->xusub;
+    nzumax  = Glu->nzumax;
+
+    *sum = zero;
+    if (drop_rule == NODROP) {
+	drop_tol = -1.0, quota = Glu->n;
+    }
+
+    jsupno = supno[jcol];
+    nextu  = xusub[jcol];
+    k = nseg - 1;
+    for (ksub = 0; ksub < nseg; ksub++) {
+	krep = segrep[k--];
+	ksupno = supno[krep];
+
+	if ( ksupno != jsupno ) { /* Should go into ucol[] */
+	    kfnz = repfnz[krep];
+	    if ( kfnz != EMPTY ) {	/* Nonzero U-segment */
+
+		fsupc = xsup[ksupno];
+		isub = xlsub[fsupc] + kfnz - fsupc;
+		segsze = krep - kfnz + 1;
+
+		new_next = nextu + segsze;
+		while ( new_next > nzumax ) {
+		    if ((mem_error = dLUMemXpand(jcol, nextu, UCOL, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    ucol = Glu->ucol;
+		    if ((mem_error = dLUMemXpand(jcol, nextu, USUB, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    usub = Glu->usub;
+		    lsub = Glu->lsub;
+		}
+
+		for (i = 0; i < segsze; i++) {
+		    irow = lsub[isub++];
+		    tmp = fabs(dense[irow]);
+
+		    /* first dropping rule */
+		    if (quota > 0 && tmp >= drop_tol) {
+			if (tmp > d_max) d_max = tmp;
+			if (tmp < d_min) d_min = tmp;
+			usub[nextu] = perm_r[irow];
+			ucol[nextu] = dense[irow];
+			nextu++;
+		    } else {
+			switch (milu) {
+			    case SMILU_1:
+			    case SMILU_2:
+				*sum += dense[irow];
+				break;
+			    case SMILU_3:
+				/* *sum += fabs(dense[irow]);*/
+				*sum += tmp;
+				break;
+			    case SILU:
+			    default:
+				break;
+			}
+#ifdef DEBUG
+			num_drop_U++;
+#endif
+		    }
+		    dense[irow] = zero;
+		}
+
+	    }
+
+	}
+
+    } /* for each segment... */
+
+    xusub[jcol + 1] = nextu;	  /* Close U[*,jcol] */
+    m = xusub[jcol + 1] - xusub[jcol];
+
+    /* second dropping rule */
+    if (drop_rule & DROP_SECONDARY && m > quota) {
+	register double tol = d_max;
+	register int m0 = xusub[jcol] + m - 1;
+
+	if (quota > 0) {
+	    if (drop_rule & DROP_INTERP) {
+		d_max = 1.0 / d_max; d_min = 1.0 / d_min;
+		tol = 1.0 / (d_max + (d_min - d_max) * quota / m);
+	    } else {
+		dcopy_(&m, &ucol[xusub[jcol]], &i_1, work, &i_1);
+		tol = dqselect(m, work, quota);
+#if 0
+		A = &ucol[xusub[jcol]];
+		for (i = 0; i < m; i++) work[i] = i;
+		qsort(work, m, sizeof(int), _compare_);
+		tol = fabs(usub[xusub[jcol] + work[quota]]);
+#endif
+	    }
+	}
+	for (i = xusub[jcol]; i <= m0; ) {
+	    if (fabs(ucol[i]) <= tol) {
+		switch (milu) {
+		    case SMILU_1:
+		    case SMILU_2:
+			*sum += ucol[i];
+			break;
+		    case SMILU_3:
+			*sum += fabs(ucol[i]);
+			break;
+		    case SILU:
+		    default:
+			break;
+		}
+		ucol[i] = ucol[m0];
+		usub[i] = usub[m0];
+		m0--;
+		m--;
+#ifdef DEBUG
+		num_drop_U++;
+#endif
+		xusub[jcol + 1]--;
+		continue;
+	    }
+	    i++;
+	}
+    }
+
+    if (milu == SMILU_2) *sum = fabs(*sum);
+
+    *nnzUj += m;
+
+    return 0;
+}
diff --git a/SRC/ilu_dcopy_to_ucol.c.bak b/SRC/ilu_dcopy_to_ucol.c.bak
new file mode 100644
index 0000000..a27a148
--- /dev/null
+++ b/SRC/ilu_dcopy_to_ucol.c.bak
@@ -0,0 +1,199 @@
+
+/*! @file ilu_dcopy_to_ucol.c
+ * \brief Copy a computed column of U to the compressed data structure
+ * and drop some small entries
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_ddefs.h"
+
+#ifdef DEBUG
+int num_drop_U;
+#endif
+
+static double *A;  /* used in _compare_ only */
+static int _compare_(const void *a, const void *b)
+{
+    register int *x = (int *)a, *y = (int *)b;
+    register double xx = fabs(A[*x]), yy = fabs(A[*y]);
+    if (xx > yy) return -1;
+    else if (xx < yy) return 1;
+    else return 0;
+}
+
+
+int
+ilu_dcopy_to_ucol(
+	      int	 jcol,	   /* in */
+	      int	 nseg,	   /* in */
+	      int	 *segrep,  /* in */
+	      int	 *repfnz,  /* in */
+	      int	 *perm_r,  /* in */
+	      double	 *dense,   /* modified - reset to zero on return */
+	      int  	 drop_rule,/* in */
+	      milu_t	 milu,	   /* in */
+	      double	 drop_tol, /* in */
+	      int	 quota,    /* maximum nonzero entries allowed */
+	      double	 *sum,	   /* out - the sum of dropped entries */
+	      int	 *nnzUj,   /* in - out */
+	      GlobalLU_t *Glu,	   /* modified */
+	      int	 *work	   /* working space with minimum size n,
+				    * used by the second dropping rule */
+	      )
+{
+/*
+ * Gather from SPA dense[*] to global ucol[*].
+ */
+    int       ksub, krep, ksupno;
+    int       i, k, kfnz, segsze;
+    int       fsupc, isub, irow;
+    int       jsupno, nextu;
+    int       new_next, mem_error;
+    int       *xsup, *supno;
+    int       *lsub, *xlsub;
+    double    *ucol;
+    int       *usub, *xusub;
+    int       nzumax;
+    int       m; /* number of entries in the nonzero U-segments */
+    register double d_max = 0.0, d_min = 1.0 / dlamch_("Safe minimum");
+    register double tmp;
+    double zero = 0.0;
+
+    xsup    = Glu->xsup;
+    supno   = Glu->supno;
+    lsub    = Glu->lsub;
+    xlsub   = Glu->xlsub;
+    ucol    = Glu->ucol;
+    usub    = Glu->usub;
+    xusub   = Glu->xusub;
+    nzumax  = Glu->nzumax;
+
+    *sum = zero;
+    if (drop_rule == NODROP) {
+	drop_tol = -1.0, quota = Glu->n;
+    }
+
+    jsupno = supno[jcol];
+    nextu  = xusub[jcol];
+    k = nseg - 1;
+    for (ksub = 0; ksub < nseg; ksub++) {
+	krep = segrep[k--];
+	ksupno = supno[krep];
+
+	if ( ksupno != jsupno ) { /* Should go into ucol[] */
+	    kfnz = repfnz[krep];
+	    if ( kfnz != EMPTY ) {	/* Nonzero U-segment */
+
+		fsupc = xsup[ksupno];
+		isub = xlsub[fsupc] + kfnz - fsupc;
+		segsze = krep - kfnz + 1;
+
+		new_next = nextu + segsze;
+		while ( new_next > nzumax ) {
+		    if ((mem_error = dLUMemXpand(jcol, nextu, UCOL, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    ucol = Glu->ucol;
+		    if ((mem_error = dLUMemXpand(jcol, nextu, USUB, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    usub = Glu->usub;
+		    lsub = Glu->lsub;
+		}
+
+		for (i = 0; i < segsze; i++) {
+		    irow = lsub[isub++];
+		    tmp = fabs(dense[irow]);
+
+		    /* first dropping rule */
+		    if (quota > 0 && tmp >= drop_tol) {
+			if (tmp > d_max) d_max = tmp;
+			if (tmp < d_min) d_min = tmp;
+			usub[nextu] = perm_r[irow];
+			ucol[nextu] = dense[irow];
+			nextu++;
+		    } else {
+			switch (milu) {
+			    case SMILU_1:
+			    case SMILU_2:
+				*sum += dense[irow];
+				break;
+			    case SMILU_3:
+				/* *sum += fabs(dense[irow]);*/
+				*sum += tmp;
+				break;
+			    case SILU:
+			    default:
+				break;
+			}
+#ifdef DEBUG
+			num_drop_U++;
+#endif
+		    }
+		    dense[irow] = zero;
+		}
+
+	    }
+
+	}
+
+    } /* for each segment... */
+
+    xusub[jcol + 1] = nextu;	  /* Close U[*,jcol] */
+    m = xusub[jcol + 1] - xusub[jcol];
+
+    /* second dropping rule */
+    if (drop_rule & DROP_SECONDARY && m > quota) {
+	register double tol = d_max;
+	register int m0 = xusub[jcol] + m - 1;
+
+	if (quota > 0) {
+	    if (drop_rule & DROP_INTERP) {
+		d_max = 1.0 / d_max; d_min = 1.0 / d_min;
+		tol = 1.0 / (d_max + (d_min - d_max) * quota / m);
+	    } else {
+		A = &ucol[xusub[jcol]];
+		for (i = 0; i < m; i++) work[i] = i;
+		qsort(work, m, sizeof(int), _compare_);
+		tol = fabs(usub[xusub[jcol] + work[quota]]);
+	    }
+	}
+	for (i = xusub[jcol]; i <= m0; ) {
+	    if (fabs(ucol[i]) <= tol) {
+		switch (milu) {
+		    case SMILU_1:
+		    case SMILU_2:
+			*sum += ucol[i];
+			break;
+		    case SMILU_3:
+			*sum += fabs(ucol[i]);
+			break;
+		    case SILU:
+		    default:
+			break;
+		}
+		ucol[i] = ucol[m0];
+		usub[i] = usub[m0];
+		m0--;
+		m--;
+#ifdef DEBUG
+		num_drop_U++;
+#endif
+		xusub[jcol + 1]--;
+		continue;
+	    }
+	    i++;
+	}
+    }
+
+    if (milu == SMILU_2) *sum = fabs(*sum);
+
+    *nnzUj += m;
+
+    return 0;
+}
diff --git a/SRC/ilu_ddrop_row.c b/SRC/ilu_ddrop_row.c
new file mode 100644
index 0000000..a08c85c
--- /dev/null
+++ b/SRC/ilu_ddrop_row.c
@@ -0,0 +1,329 @@
+
+/*! @file ilu_ddrop_row.c
+ * \brief Drop small rows from L
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include <math.h>
+#include <stdlib.h>
+#include "slu_ddefs.h"
+
+extern void dswap_(int *, double [], int *, double [], int *);
+extern void daxpy_(int *, double *, double [], int *, double [], int *);
+extern void dcopy_(int *, double [], int *, double [], int *);
+extern double dasum_(int *, double *, int *);
+extern double dnrm2_(int *, double *, int *);
+extern double dnrm2_(int *, double [], int *);
+extern int idamax_(int *, double [], int *);
+
+static double *A;  /* used in _compare_ only */
+static int _compare_(const void *a, const void *b)
+{
+    register int *x = (int *)a, *y = (int *)b;
+    if (A[*x] - A[*y] > 0.0) return -1;
+    else if (A[*x] - A[*y] < 0.0) return 1;
+    else return 0;
+}
+
+/*! \brief
+ * <pre>
+ * Purpose
+ * =======
+ *    ilu_ddrop_row() - Drop some small rows from the previous 
+ *    supernode (L-part only).
+ * </pre>
+ */
+int ilu_ddrop_row(
+	superlu_options_t *options, /* options */
+	int    first,	    /* index of the first column in the supernode */
+	int    last,	    /* index of the last column in the supernode */
+	double drop_tol,    /* dropping parameter */
+	int    quota,	    /* maximum nonzero entries allowed */
+	int    *nnzLj,	    /* in/out number of nonzeros in L(:, 1:last) */
+	double *fill_tol,   /* in/out - on exit, fill_tol=-num_zero_pivots,
+			     * does not change if options->ILU_MILU != SMILU1 */
+	GlobalLU_t *Glu,    /* modified */
+	double dwork[],   /* working space
+	                     * the length of dwork[] should be no less than
+			     * the number of rows in the supernode */
+	double dwork2[], /* working space with the same size as dwork[],
+			     * used only by the second dropping rule */
+	int    lastc	    /* if lastc == 0, there is nothing after the
+			     * working supernode [first:last];
+			     * if lastc == 1, there is one more column after
+			     * the working supernode. */ )
+{
+    register int i, j, k, m1;
+    register int nzlc; /* number of nonzeros in column last+1 */
+    register int xlusup_first, xlsub_first;
+    int m, n; /* m x n is the size of the supernode */
+    int r = 0; /* number of dropped rows */
+    register double *temp;
+    register double *lusup = Glu->lusup;
+    register int *lsub = Glu->lsub;
+    register int *xlsub = Glu->xlsub;
+    register int *xlusup = Glu->xlusup;
+    register double d_max = 0.0, d_min = 1.0;
+    int    drop_rule = options->ILU_DropRule;
+    milu_t milu = options->ILU_MILU;
+    norm_t nrm = options->ILU_Norm;
+    double zero = 0.0;
+    double one = 1.0;
+    double none = -1.0;
+    int i_1 = 1;
+    int inc_diag; /* inc_diag = m + 1 */
+    int nzp = 0;  /* number of zero pivots */
+    double alpha = pow((double)(Glu->n), -1.0 / options->ILU_MILU_Dim);
+
+    xlusup_first = xlusup[first];
+    xlsub_first = xlsub[first];
+    m = xlusup[first + 1] - xlusup_first;
+    n = last - first + 1;
+    m1 = m - 1;
+    inc_diag = m + 1;
+    nzlc = lastc ? (xlusup[last + 2] - xlusup[last + 1]) : 0;
+    temp = dwork - n;
+
+    /* Quick return if nothing to do. */
+    if (m == 0 || m == n || drop_rule == NODROP)
+    {
+	*nnzLj += m * n;
+	return 0;
+    }
+
+    /* basic dropping: ILU(tau) */
+    for (i = n; i <= m1; )
+    {
+	/* the average abs value of ith row */
+	switch (nrm)
+	{
+	    case ONE_NORM:
+		temp[i] = dasum_(&n, &lusup[xlusup_first + i], &m) / (double)n;
+		break;
+	    case TWO_NORM:
+		temp[i] = dnrm2_(&n, &lusup[xlusup_first + i], &m)
+		    / sqrt((double)n);
+		break;
+	    case INF_NORM:
+	    default:
+		k = idamax_(&n, &lusup[xlusup_first + i], &m) - 1;
+		temp[i] = fabs(lusup[xlusup_first + i + m * k]);
+		break;
+	}
+
+	/* drop small entries due to drop_tol */
+	if (drop_rule & DROP_BASIC && temp[i] < drop_tol)
+	{
+	    r++;
+	    /* drop the current row and move the last undropped row here */
+	    if (r > 1) /* add to last row */
+	    {
+		/* accumulate the sum (for MILU) */
+		switch (milu)
+		{
+		    case SMILU_1:
+		    case SMILU_2:
+			daxpy_(&n, &one, &lusup[xlusup_first + i], &m,
+				&lusup[xlusup_first + m - 1], &m);
+			break;
+		    case SMILU_3:
+			for (j = 0; j < n; j++)
+			    lusup[xlusup_first + (m - 1) + j * m] +=
+				    fabs(lusup[xlusup_first + i + j * m]);
+			break;
+		    case SILU:
+		    default:
+			break;
+		}
+		dcopy_(&n, &lusup[xlusup_first + m1], &m,
+                       &lusup[xlusup_first + i], &m);
+	    } /* if (r > 1) */
+	    else /* move to last row */
+	    {
+		dswap_(&n, &lusup[xlusup_first + m1], &m,
+			&lusup[xlusup_first + i], &m);
+		if (milu == SMILU_3)
+		    for (j = 0; j < n; j++) {
+			lusup[xlusup_first + m1 + j * m] =
+				fabs(lusup[xlusup_first + m1 + j * m]);
+                    }
+	    }
+	    lsub[xlsub_first + i] = lsub[xlsub_first + m1];
+	    m1--;
+	    continue;
+	} /* if dropping */
+	else
+	{
+	    if (temp[i] > d_max) d_max = temp[i];
+	    if (temp[i] < d_min) d_min = temp[i];
+	}
+	i++;
+    } /* for */
+
+    /* Secondary dropping: drop more rows according to the quota. */
+    quota = ceil((double)quota / (double)n);
+    if (drop_rule & DROP_SECONDARY && m - r > quota)
+    {
+	register double tol = d_max;
+
+	/* Calculate the second dropping tolerance */
+	if (quota > n)
+	{
+	    if (drop_rule & DROP_INTERP) /* by interpolation */
+	    {
+		d_max = 1.0 / d_max; d_min = 1.0 / d_min;
+		tol = 1.0 / (d_max + (d_min - d_max) * quota / (m - n - r));
+	    }
+	    else /* by quick select */
+	    {
+		int len = m1 - n + 1;
+		dcopy_(&len, dwork, &i_1, dwork2, &i_1);
+		tol = dqselect(len, dwork2, quota - n);
+#if 0
+		register int *itemp = iwork - n;
+		A = temp;
+		for (i = n; i <= m1; i++) itemp[i] = i;
+		qsort(iwork, m1 - n + 1, sizeof(int), _compare_);
+		tol = temp[itemp[quota]];
+#endif
+	    }
+	}
+
+	for (i = n; i <= m1; )
+	{
+	    if (temp[i] <= tol)
+	    {
+		register int j;
+		r++;
+		/* drop the current row and move the last undropped row here */
+		if (r > 1) /* add to last row */
+		{
+		    /* accumulate the sum (for MILU) */
+		    switch (milu)
+		    {
+			case SMILU_1:
+			case SMILU_2:
+			    daxpy_(&n, &one, &lusup[xlusup_first + i], &m,
+				    &lusup[xlusup_first + m - 1], &m);
+			    break;
+			case SMILU_3:
+			    for (j = 0; j < n; j++)
+				lusup[xlusup_first + (m - 1) + j * m] +=
+					fabs(lusup[xlusup_first + i + j * m]);
+			    break;
+			case SILU:
+			default:
+			    break;
+		    }
+		    dcopy_(&n, &lusup[xlusup_first + m1], &m,
+			    &lusup[xlusup_first + i], &m);
+		} /* if (r > 1) */
+		else /* move to last row */
+		{
+		    dswap_(&n, &lusup[xlusup_first + m1], &m,
+			    &lusup[xlusup_first + i], &m);
+		    if (milu == SMILU_3)
+			for (j = 0; j < n; j++) {
+			    lusup[xlusup_first + m1 + j * m] =
+				    fabs(lusup[xlusup_first + m1 + j * m]);
+                        }
+		}
+		lsub[xlsub_first + i] = lsub[xlsub_first + m1];
+		m1--;
+		temp[i] = temp[m1];
+
+		continue;
+	    }
+	    i++;
+
+	} /* for */
+
+    } /* if secondary dropping */
+
+    for (i = n; i < m; i++) temp[i] = 0.0;
+
+    if (r == 0)
+    {
+	*nnzLj += m * n;
+	return 0;
+    }
+
+    /* add dropped entries to the diagnal */
+    if (milu != SILU)
+    {
+	register int j;
+	double t;
+	double omega;
+	for (j = 0; j < n; j++)
+	{
+	    t = lusup[xlusup_first + (m - 1) + j * m];
+            if (t == zero) continue;
+	    if (t > zero)
+		omega = SUPERLU_MIN(2.0 * (1.0 - alpha) / t, 1.0);
+	    else
+		omega = SUPERLU_MAX(2.0 * (1.0 - alpha) / t, -1.0);
+	    t *= omega;
+
+ 	    switch (milu)
+	    {
+		case SMILU_1:
+		    if (t != none) {
+			lusup[xlusup_first + j * inc_diag] *= (one + t);
+                    }
+		    else
+		    {
+			lusup[xlusup_first + j * inc_diag] *= *fill_tol;
+#ifdef DEBUG
+			printf("[1] ZERO PIVOT: FILL col %d.\n", first + j);
+			fflush(stdout);
+#endif
+			nzp++;
+		    }
+		    break;
+		case SMILU_2:
+		    lusup[xlusup_first + j * inc_diag] *= (1.0 + fabs(t));
+		    break;
+		case SMILU_3:
+		    lusup[xlusup_first + j * inc_diag] *= (one + t);
+		    break;
+		case SILU:
+		default:
+		    break;
+	    }
+	}
+	if (nzp > 0) *fill_tol = -nzp;
+    }
+
+    /* Remove dropped entries from the memory and fix the pointers. */
+    m1 = m - r;
+    for (j = 1; j < n; j++)
+    {
+	register int tmp1, tmp2;
+	tmp1 = xlusup_first + j * m1;
+	tmp2 = xlusup_first + j * m;
+	for (i = 0; i < m1; i++)
+	    lusup[i + tmp1] = lusup[i + tmp2];
+    }
+    for (i = 0; i < nzlc; i++)
+	lusup[xlusup_first + i + n * m1] = lusup[xlusup_first + i + n * m];
+    for (i = 0; i < nzlc; i++)
+	lsub[xlsub[last + 1] - r + i] = lsub[xlsub[last + 1] + i];
+    for (i = first + 1; i <= last + 1; i++)
+    {
+	xlusup[i] -= r * (i - first);
+	xlsub[i] -= r;
+    }
+    if (lastc)
+    {
+	xlusup[last + 2] -= r * n;
+	xlsub[last + 2] -= r;
+    }
+
+    *nnzLj += (m - r) * n;
+    return r;
+}
diff --git a/SRC/ilu_ddrop_row.c.bak b/SRC/ilu_ddrop_row.c.bak
new file mode 100644
index 0000000..caffa13
--- /dev/null
+++ b/SRC/ilu_ddrop_row.c.bak
@@ -0,0 +1,311 @@
+
+/*! @file ilu_ddrop_row.c
+ * \brief Drop small rows from L
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * <\pre>
+ */
+
+#include <math.h>
+#include <stdlib.h>
+#include "slu_ddefs.h"
+
+extern void dswap_(int *, double [], int *, double [], int *);
+extern void daxpy_(int *, double *, double [], int *, double [], int *);
+
+static double *A;  /* used in _compare_ only */
+static int _compare_(const void *a, const void *b)
+{
+    register int *x = (int *)a, *y = (int *)b;
+    if (A[*x] - A[*y] > 0.0) return -1;
+    else if (A[*x] - A[*y] < 0.0) return 1;
+    else return 0;
+}
+
+/*! \brief
+ * <pre>
+ * Purpose
+ * =======
+ *    ilu_ddrop_row() - Drop some small rows from the previous 
+ *    supernode (L-part only).
+ * </pre>
+ */
+int ilu_ddrop_row(
+	superlu_options_t *options, /* options */
+	int    first,	    /* index of the first column in the supernode */
+	int    last,	    /* index of the last column in the supernode */
+	double drop_tol,    /* dropping parameter */
+	int    quota,	    /* maximum nonzero entries allowed */
+	int    *nnzLj,	    /* in/out number of nonzeros in L(:, 1:last) */
+	double *fill_tol,   /* in/out - on exit, fill_tol=-num_zero_pivots,
+			     * does not change if options->ILU_MILU != SMILU1 */
+	GlobalLU_t *Glu,    /* modified */
+	double dwork[],     /* working space with minimum size last-first+1 */
+	int    iwork[],     /* working space with minimum size m - n,
+			     * used by the second dropping rule */
+	int    lastc	    /* if lastc == 0, there is nothing after the
+			     * working supernode [first:last];
+			     * if lastc == 1, there is one more column after
+			     * the working supernode. */ )
+{
+    register int i, j, k, m1;
+    register int nzlc; /* number of nonzeros in column last+1 */
+    register int xlusup_first, xlsub_first;
+    int m, n; /* m x n is the size of the supernode */
+    int r = 0; /* number of dropped rows */
+    register double *temp;
+    register double *lusup = Glu->lusup;
+    register int *lsub = Glu->lsub;
+    register int *xlsub = Glu->xlsub;
+    register int *xlusup = Glu->xlusup;
+    register double d_max = 0.0, d_min = 1.0;
+    int    drop_rule = options->ILU_DropRule;
+    milu_t milu = options->ILU_MILU;
+    norm_t nrm = options->ILU_Norm;
+    double zero = 0.0;
+    double one = 1.0;
+    double none = -1.0;
+    int inc_diag; /* inc_diag = m + 1 */
+    int nzp = 0;  /* number of zero pivots */
+
+    xlusup_first = xlusup[first];
+    xlsub_first = xlsub[first];
+    m = xlusup[first + 1] - xlusup_first;
+    n = last - first + 1;
+    m1 = m - 1;
+    inc_diag = m + 1;
+    nzlc = lastc ? (xlusup[last + 2] - xlusup[last + 1]) : 0;
+    temp = dwork - n;
+
+    /* Quick return if nothing to do. */
+    if (m == 0 || m == n || drop_rule == NODROP)
+    {
+	*nnzLj += m * n;
+	return 0;
+    }
+
+    /* basic dropping: ILU(tau) */
+    for (i = n; i <= m1; )
+    {
+	/* the average abs value of ith row */
+	switch (nrm)
+	{
+	    case ONE_NORM:
+		temp[i] = dasum_(&n, &lusup[xlusup_first + i], &m) / (double)n;
+		break;
+	    case TWO_NORM:
+		temp[i] = dnrm2_(&n, &lusup[xlusup_first + i], &m)
+		    / sqrt((double)n);
+		break;
+	    case INF_NORM:
+	    default:
+		k = idamax_(&n, &lusup[xlusup_first + i], &m) - 1;
+		temp[i] = fabs(lusup[xlusup_first + i + m * k]);
+		break;
+	}
+
+	/* drop small entries due to drop_tol */
+	if (drop_rule & DROP_BASIC && temp[i] < drop_tol)
+	{
+	    r++;
+	    /* drop the current row and move the last undropped row here */
+	    if (r > 1) /* add to last row */
+	    {
+		/* accumulate the sum (for MILU) */
+		switch (milu)
+		{
+		    case SMILU_1:
+		    case SMILU_2:
+			daxpy_(&n, &one, &lusup[xlusup_first + i], &m,
+				&lusup[xlusup_first + m - 1], &m);
+			break;
+		    case SMILU_3:
+			for (j = 0; j < n; j++)
+			    lusup[xlusup_first + (m - 1) + j * m] +=
+				    fabs(lusup[xlusup_first + i + j * m]);
+			break;
+		    case SILU:
+		    default:
+			break;
+		}
+		dcopy_(&n, &lusup[xlusup_first + m1], &m,
+                       &lusup[xlusup_first + i], &m);
+	    } /* if (r > 1) */
+	    else /* move to last row */
+	    {
+		dswap_(&n, &lusup[xlusup_first + m1], &m,
+			&lusup[xlusup_first + i], &m);
+		if (milu == SMILU_3)
+		    for (j = 0; j < n; j++) {
+			lusup[xlusup_first + m1 + j * m] =
+				fabs(lusup[xlusup_first + m1 + j * m]);
+                    }
+	    }
+	    lsub[xlsub_first + i] = lsub[xlsub_first + m1];
+	    m1--;
+	    continue;
+	} /* if dropping */
+	else
+	{
+	    if (temp[i] > d_max) d_max = temp[i];
+	    if (temp[i] < d_min) d_min = temp[i];
+	}
+	i++;
+    } /* for */
+
+    /* Secondary dropping: drop more rows according to the quota. */
+    quota = ceil((double)quota / (double)n);
+    if (drop_rule & DROP_SECONDARY && m - r > quota)
+    {
+	register double tol = d_max;
+
+	/* Calculate the second dropping tolerance */
+	if (quota > n)
+	{
+	    if (drop_rule & DROP_INTERP) /* by interpolation */
+	    {
+		d_max = 1.0 / d_max; d_min = 1.0 / d_min;
+		tol = 1.0 / (d_max + (d_min - d_max) * quota / (m - n - r));
+	    }
+	    else /* by quick sort */
+	    {
+		register int *itemp = iwork - n;
+		A = temp;
+		for (i = n; i <= m1; i++) itemp[i] = i;
+		qsort(iwork, m1 - n + 1, sizeof(int), _compare_);
+		printf("new quota = %d, iwork size for initilization = %d\n",
+		       quota, m1-n+1);
+		/* tol = temp[iwork[quota]];  bug! */
+		assert( n <= quota <= m1 );
+		tol = temp[itemp[quota]];
+	    }
+	}
+
+	for (i = n; i <= m1; )
+	{
+	    if (temp[i] <= tol)
+	    {
+		register int j;
+		r++;
+		/* drop the current row and move the last undropped row here */
+		if (r > 1) /* add to last row */
+		{
+		    /* accumulate the sum (for MILU) */
+		    switch (milu)
+		    {
+			case SMILU_1:
+			case SMILU_2:
+			    daxpy_(&n, &one, &lusup[xlusup_first + i], &m,
+				    &lusup[xlusup_first + m - 1], &m);
+			    break;
+			case SMILU_3:
+			    for (j = 0; j < n; j++)
+				lusup[xlusup_first + (m - 1) + j * m] +=
+					fabs(lusup[xlusup_first + i + j * m]);
+			    break;
+			case SILU:
+			default:
+			    break;
+		    }
+		    dcopy_(&n, &lusup[xlusup_first + m1], &m,
+			    &lusup[xlusup_first + i], &m);
+		} /* if (r > 1) */
+		else /* move to last row */
+		{
+		    dswap_(&n, &lusup[xlusup_first + m1], &m,
+			    &lusup[xlusup_first + i], &m);
+		    if (milu == SMILU_3)
+			for (j = 0; j < n; j++) {
+			    lusup[xlusup_first + m1 + j * m] =
+				    fabs(lusup[xlusup_first + m1 + j * m]);
+                        }
+		}
+		lsub[xlsub_first + i] = lsub[xlsub_first + m1];
+		m1--;
+		temp[i] = temp[m1];
+
+		continue;
+	    }
+	    i++;
+
+	} /* for */
+
+    } /* if secondary dropping */
+
+    for (i = n; i < m; i++) temp[i] = 0.0;
+
+    if (r == 0)
+    {
+	*nnzLj += m * n;
+	return 0;
+    }
+
+    /* add dropped entries to the diagnal */
+    if (milu != SILU)
+    {
+	register int j;
+	double t;
+	for (j = 0; j < n; j++)
+	{
+	    t = lusup[xlusup_first + (m - 1) + j * m] * MILU_ALPHA;
+ 	    switch (milu)
+	    {
+		case SMILU_1:
+		    if (t != none) {
+			lusup[xlusup_first + j * inc_diag] *= (one + t);
+                    }
+		    else
+		    {
+			lusup[xlusup_first + j * inc_diag] *= *fill_tol;
+#ifdef DEBUG
+			printf("[1] ZERO PIVOT: FILL col %d.\n", first + j);
+			fflush(stdout);
+#endif
+			nzp++;
+		    }
+		    break;
+		case SMILU_2:
+		    lusup[xlusup_first + j * inc_diag] *= (1.0 + fabs(t));
+		    break;
+		case SMILU_3:
+		    lusup[xlusup_first + j * inc_diag] *= (one + t);
+		    break;
+		case SILU:
+		default:
+		    break;
+	    }
+	}
+	if (nzp > 0) *fill_tol = -nzp;
+    }
+
+    /* Remove dropped entries from the memory and fix the pointers. */
+    m1 = m - r;
+    for (j = 1; j < n; j++)
+    {
+	register int tmp1, tmp2;
+	tmp1 = xlusup_first + j * m1;
+	tmp2 = xlusup_first + j * m;
+	for (i = 0; i < m1; i++)
+	    lusup[i + tmp1] = lusup[i + tmp2];
+    }
+    for (i = 0; i < nzlc; i++)
+	lusup[xlusup_first + i + n * m1] = lusup[xlusup_first + i + n * m];
+    for (i = 0; i < nzlc; i++)
+	lsub[xlsub[last + 1] - r + i] = lsub[xlsub[last + 1] + i];
+    for (i = first + 1; i <= last + 1; i++)
+    {
+	xlusup[i] -= r * (i - first);
+	xlsub[i] -= r;
+    }
+    if (lastc)
+    {
+	xlusup[last + 2] -= r * n;
+	xlsub[last + 2] -= r;
+    }
+
+    *nnzLj += (m - r) * n;
+    return r;
+}
diff --git a/SRC/dpanel_dfs.c b/SRC/ilu_dpanel_dfs.c
similarity index 68%
copy from SRC/dpanel_dfs.c
copy to SRC/ilu_dpanel_dfs.c
index 6a4c742..5aae050 100644
--- a/SRC/dpanel_dfs.c
+++ b/SRC/ilu_dpanel_dfs.c
@@ -1,46 +1,20 @@
 
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
+/*! @file ilu_dpanel_dfs.c
+ * \brief Peforms a symbolic factorization on a panel of symbols and
+ * record the entries with maximum absolute value in each column
  *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
 
 #include "slu_ddefs.h"
 
-void
-dpanel_dfs (
-	   const int  m,           /* in - number of rows in the matrix */
-	   const int  w,           /* in */
-	   const int  jcol,        /* in */
-	   SuperMatrix *A,       /* in - original matrix */
-	   int        *perm_r,     /* in */
-	   int        *nseg,	   /* out */
-	   double     *dense,      /* out */
-	   int        *panel_lsub, /* out */
-	   int        *segrep,     /* out */
-	   int        *repfnz,     /* out */
-	   int        *xprune,     /* out */
-	   int        *marker,     /* out */     
-	   int        *parent,     /* working array */
-	   int        *xplore,     /* working array */
-	   GlobalLU_t *Glu         /* modified */
-	   )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -53,9 +27,9 @@ dpanel_dfs (
  *   The routine returns one list of the supernodal representatives
  *   in topological order of the dfs that generates them. This list is
  *   a superset of the topological order of each individual column within
- *   the panel. 
+ *   the panel.
  *   The location of the first nonzero in each supernodal segment
- *   (supernodal entry location) is also returned. Each column has a 
+ *   (supernodal entry location) is also returned. Each column has a
  *   separate list for this purpose.
  *
  *   Two marker arrays are used for dfs:
@@ -66,33 +40,56 @@ dpanel_dfs (
  *   repfnz: SuperA-col --> PA-row
  *   parent: SuperA-col --> SuperA-col
  *   xplore: SuperA-col --> index to L-structure
- *
+ * </pre>
  */
+void
+ilu_dpanel_dfs(
+   const int  m,	   /* in - number of rows in the matrix */
+   const int  w,	   /* in */
+   const int  jcol,	   /* in */
+   SuperMatrix *A,	   /* in - original matrix */
+   int	      *perm_r,	   /* in */
+   int	      *nseg,	   /* out */
+   double     *dense,	   /* out */
+   double     *amax,	   /* out - max. abs. value of each column in panel */
+   int	      *panel_lsub, /* out */
+   int	      *segrep,	   /* out */
+   int	      *repfnz,	   /* out */
+   int	      *marker,	   /* out */
+   int	      *parent,	   /* working array */
+   int	      *xplore,	   /* working array */
+   GlobalLU_t *Glu	   /* modified */
+)
+{
+
     NCPformat *Astore;
     double    *a;
     int       *asub;
     int       *xa_begin, *xa_end;
-    int	      krep, chperm, chmark, chrep, oldrep, kchild, myfnz;
+    int       krep, chperm, chmark, chrep, oldrep, kchild, myfnz;
     int       k, krow, kmark, kperm;
     int       xdfs, maxdfs, kpar;
     int       jj;	   /* index through each column in the panel */
-    int       *marker1;	   /* marker1[jj] >= jcol if vertex jj was visited 
-			      by a previous column within this panel.   */
+    int       *marker1;    /* marker1[jj] >= jcol if vertex jj was visited
+			      by a previous column within this panel. */
     int       *repfnz_col; /* start of each column in the panel */
     double    *dense_col;  /* start of each column in the panel */
     int       nextl_col;   /* next available position in panel_lsub[*,jj] */
     int       *xsup, *supno;
     int       *lsub, *xlsub;
+    double    *amax_col;
+    register double tmp;
 
     /* Initialize pointers */
     Astore     = A->Store;
-    a          = Astore->nzval;
+    a	       = Astore->nzval;
     asub       = Astore->rowind;
     xa_begin   = Astore->colbeg;
     xa_end     = Astore->colend;
     marker1    = marker + m;
     repfnz_col = repfnz;
     dense_col  = dense;
+    amax_col   = amax;
     *nseg      = 0;
     xsup       = Glu->xsup;
     supno      = Glu->supno;
@@ -107,12 +104,15 @@ dpanel_dfs (
 	printf("\npanel col %d: ", jj);
 #endif
 
+	*amax_col = 0.0;
 	/* For each nonz in A[*,jj] do dfs */
 	for (k = xa_begin[jj]; k < xa_end[jj]; k++) {
 	    krow = asub[k];
-            dense_col[krow] = a[k];
-	    kmark = marker[krow];    	
-	    if ( kmark == jj ) 
+	    tmp = fabs(a[k]);
+	    if (tmp > *amax_col) *amax_col = tmp;
+	    dense_col[krow] = a[k];
+	    kmark = marker[krow];
+	    if ( kmark == jj )
 		continue;     /* krow visited before, go to the next nonzero */
 
 	    /* For each unmarked nbr krow of jj
@@ -120,11 +120,11 @@ dpanel_dfs (
 	     */
 	    marker[krow] = jj;
 	    kperm = perm_r[krow];
-	    
+
 	    if ( kperm == EMPTY ) {
 		panel_lsub[nextl_col++] = krow; /* krow is indexed into A */
 	    }
-	    /* 
+	    /*
 	     * krow is in U: if its supernode-rep krep
 	     * has been explored, update repfnz[*]
 	     */
@@ -136,7 +136,7 @@ dpanel_dfs (
 #ifdef CHK_DFS
 		printf("krep %d, myfnz %d, perm_r[%d] %d\n", krep, myfnz, krow, kperm);
 #endif
-		if ( myfnz != EMPTY ) {	/* Representative visited before */
+		if ( myfnz != EMPTY ) { /* Representative visited before */
 		    if ( myfnz > kperm ) repfnz_col[krep] = kperm;
 		    /* continue; */
 		}
@@ -145,34 +145,34 @@ dpanel_dfs (
 		    oldrep = EMPTY;
 		    parent[krep] = oldrep;
 		    repfnz_col[krep] = kperm;
-		    xdfs = xlsub[krep];
-		    maxdfs = xprune[krep];
-		    
-#ifdef CHK_DFS 
+		    xdfs = xlsub[xsup[supno[krep]]];
+		    maxdfs = xlsub[krep + 1];
+
+#ifdef CHK_DFS
 		    printf("  xdfs %d, maxdfs %d: ", xdfs, maxdfs);
 		    for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);
 		    printf("\n");
 #endif
 		    do {
-			/* 
-			 * For each unmarked kchild of krep 
+			/*
+			 * For each unmarked kchild of krep
 			 */
 			while ( xdfs < maxdfs ) {
-			    
+
 			    kchild = lsub[xdfs];
 			    xdfs++;
 			    chmark = marker[kchild];
-			    
+
 			    if ( chmark != jj ) { /* Not reached yet */
 				marker[kchild] = jj;
 				chperm = perm_r[kchild];
-			      
+
 				/* Case kchild is in L: place it in L[*,j] */
 				if ( chperm == EMPTY ) {
 				    panel_lsub[nextl_col++] = kchild;
-				} 
-				/* Case kchild is in U: 
-				 *   chrep = its supernode-rep. If its rep has 
+				}
+				/* Case kchild is in U:
+				 *   chrep = its supernode-rep. If its rep has
 				 *   been explored, update its repfnz[*]
 				 */
 				else {
@@ -188,28 +188,28 @@ dpanel_dfs (
 				    }
 				    else {
 					/* Cont. dfs at snode-rep of kchild */
-					xplore[krep] = xdfs;	
+					xplore[krep] = xdfs;
 					oldrep = krep;
 					krep = chrep; /* Go deeper down G(L) */
 					parent[krep] = oldrep;
 					repfnz_col[krep] = chperm;
-					xdfs = xlsub[krep];     
-					maxdfs = xprune[krep];
-#ifdef CHK_DFS 
+					xdfs = xlsub[xsup[supno[krep]]];
+					maxdfs = xlsub[krep + 1];
+#ifdef CHK_DFS
 					printf("  xdfs %d, maxdfs %d: ", xdfs, maxdfs);
-					for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);	
+					for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);
 					printf("\n");
 #endif
 				    } /* else */
-				  
+
 				} /* else */
-			      
+
 			    } /* if... */
-			    
+
 			} /* while xdfs < maxdfs */
-			
+
 			/* krow has no more unexplored nbrs:
-			 *    Place snode-rep krep in postorder DFS, if this 
+			 *    Place snode-rep krep in postorder DFS, if this
 			 *    segment is seen for the first time. (Note that
 			 *    "repfnz[krep]" may change later.)
 			 *    Backtrack dfs to its parent.
@@ -219,29 +219,30 @@ dpanel_dfs (
 			    ++(*nseg);
 			    marker1[krep] = jj;
 			}
-			
+
 			kpar = parent[krep]; /* Pop stack, mimic recursion */
 			if ( kpar == EMPTY ) break; /* dfs done */
 			krep = kpar;
 			xdfs = xplore[krep];
-			maxdfs = xprune[krep];
-			
-#ifdef CHK_DFS 
+			maxdfs = xlsub[krep + 1];
+
+#ifdef CHK_DFS
 			printf("  pop stack: krep %d,xdfs %d,maxdfs %d: ", krep,xdfs,maxdfs);
 			for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);
 			printf("\n");
 #endif
 		    } while ( kpar != EMPTY ); /* do-while - until empty stack */
-		    
+
 		} /* else */
 		
 	    } /* else */
-	    
+
 	} /* for each nonz in A[*,jj] */
-	
+
 	repfnz_col += m;    /* Move to next column */
-        dense_col += m;
-	
+	dense_col += m;
+	amax_col++;
+
     } /* for jj ... */
-    
+
 }
diff --git a/SRC/ilu_dpivotL.c b/SRC/ilu_dpivotL.c
new file mode 100644
index 0000000..33c316d
--- /dev/null
+++ b/SRC/ilu_dpivotL.c
@@ -0,0 +1,266 @@
+
+/*! @file ilu_dpivotL.c
+ * \brief Performs numerical pivoting
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+
+#include <math.h>
+#include <stdlib.h>
+#include "slu_ddefs.h"
+
+#ifndef SGN
+#define SGN(x) ((x)>=0?1:-1)
+#endif
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *   Performs the numerical pivoting on the current column of L,
+ *   and the CDIV operation.
+ *
+ *   Pivot policy:
+ *   (1) Compute thresh = u * max_(i>=j) abs(A_ij);
+ *   (2) IF user specifies pivot row k and abs(A_kj) >= thresh THEN
+ *	     pivot row = k;
+ *	 ELSE IF abs(A_jj) >= thresh THEN
+ *	     pivot row = j;
+ *	 ELSE
+ *	     pivot row = m;
+ *
+ *   Note: If you absolutely want to use a given pivot order, then set u=0.0.
+ *
+ *   Return value: 0	  success;
+ *		   i > 0  U(i,i) is exactly zero.
+ * </pre>
+ */
+
+int
+ilu_dpivotL(
+	const int  jcol,     /* in */
+	const double u,      /* in - diagonal pivoting threshold */
+	int	   *usepr,   /* re-use the pivot sequence given by
+			      * perm_r/iperm_r */
+	int	   *perm_r,  /* may be modified */
+	int	   diagind,  /* diagonal of Pc*A*Pc' */
+	int	   *swap,    /* in/out record the row permutation */
+	int	   *iswap,   /* in/out inverse of swap, it is the same as
+				perm_r after the factorization */
+	int	   *marker,  /* in */
+	int	   *pivrow,  /* in/out, as an input if *usepr!=0 */
+	double	   fill_tol, /* in - fill tolerance of current column
+			      * used for a singular column */
+	milu_t	   milu,     /* in */
+	double	   drop_sum, /* in - computed in ilu_dcopy_to_ucol()
+                                (MILU only) */
+	GlobalLU_t *Glu,     /* modified - global LU data structures */
+	SuperLUStat_t *stat  /* output */
+       )
+{
+
+    int		 n;	 /* number of columns */
+    int		 fsupc;  /* first column in the supernode */
+    int		 nsupc;  /* no of columns in the supernode */
+    int		 nsupr;  /* no of rows in the supernode */
+    int		 lptr;	 /* points to the starting subscript of the supernode */
+    register int	 pivptr;
+    int		 old_pivptr, diag, ptr0;
+    register double  pivmax, rtemp;
+    double	 thresh;
+    double	 temp;
+    double	 *lu_sup_ptr;
+    double	 *lu_col_ptr;
+    int		 *lsub_ptr;
+    register int	 isub, icol, k, itemp;
+    int		 *lsub, *xlsub;
+    double	 *lusup;
+    int		 *xlusup;
+    flops_t	 *ops = stat->ops;
+    int		 info;
+
+    /* Initialize pointers */
+    n	       = Glu->n;
+    lsub       = Glu->lsub;
+    xlsub      = Glu->xlsub;
+    lusup      = Glu->lusup;
+    xlusup     = Glu->xlusup;
+    fsupc      = (Glu->xsup)[(Glu->supno)[jcol]];
+    nsupc      = jcol - fsupc;		/* excluding jcol; nsupc >= 0 */
+    lptr       = xlsub[fsupc];
+    nsupr      = xlsub[fsupc+1] - lptr;
+    lu_sup_ptr = &lusup[xlusup[fsupc]]; /* start of the current supernode */
+    lu_col_ptr = &lusup[xlusup[jcol]];	/* start of jcol in the supernode */
+    lsub_ptr   = &lsub[lptr];	/* start of row indices of the supernode */
+
+    /* Determine the largest abs numerical value for partial pivoting;
+       Also search for user-specified pivot, and diagonal element. */
+    pivmax = -1.0;
+    pivptr = nsupc;
+    diag = EMPTY;
+    old_pivptr = nsupc;
+    ptr0 = EMPTY;
+    for (isub = nsupc; isub < nsupr; ++isub) {
+        if (marker[lsub_ptr[isub]] > jcol)
+            continue; /* do not overlap with a later relaxed supernode */
+
+	switch (milu) {
+	    case SMILU_1:
+		rtemp = fabs(lu_col_ptr[isub] + drop_sum);
+		break;
+	    case SMILU_2:
+	    case SMILU_3:
+                /* In this case, drop_sum contains the sum of the abs. value */
+		rtemp = fabs(lu_col_ptr[isub]);
+		break;
+	    case SILU:
+	    default:
+		rtemp = fabs(lu_col_ptr[isub]);
+		break;
+	}
+	if (rtemp > pivmax) { pivmax = rtemp; pivptr = isub; }
+	if (*usepr && lsub_ptr[isub] == *pivrow) old_pivptr = isub;
+	if (lsub_ptr[isub] == diagind) diag = isub;
+	if (ptr0 == EMPTY) ptr0 = isub;
+    }
+
+    if (milu == SMILU_2 || milu == SMILU_3) pivmax += drop_sum;
+
+    /* Test for singularity */
+    if (pivmax < 0.0) {
+	fprintf(stderr, "[0]: jcol=%d, SINGULAR!!!\n", jcol);
+	fflush(stderr);
+	exit(1);
+    }
+    if ( pivmax == 0.0 ) {
+	if (diag != EMPTY)
+	    *pivrow = lsub_ptr[pivptr = diag];
+	else if (ptr0 != EMPTY)
+	    *pivrow = lsub_ptr[pivptr = ptr0];
+	else {
+	    /* look for the first row which does not
+	       belong to any later supernodes */
+	    for (icol = jcol; icol < n; icol++)
+		if (marker[swap[icol]] <= jcol) break;
+	    if (icol >= n) {
+		fprintf(stderr, "[1]: jcol=%d, SINGULAR!!!\n", jcol);
+		fflush(stderr);
+		exit(1);
+	    }
+
+	    *pivrow = swap[icol];
+
+	    /* pick up the pivot row */
+	    for (isub = nsupc; isub < nsupr; ++isub)
+		if ( lsub_ptr[isub] == *pivrow ) { pivptr = isub; break; }
+	}
+	pivmax = fill_tol;
+	lu_col_ptr[pivptr] = pivmax;
+	*usepr = 0;
+#ifdef DEBUG
+	printf("[0] ZERO PIVOT: FILL (%d, %d).\n", *pivrow, jcol);
+	fflush(stdout);
+#endif
+	info =jcol + 1;
+    } /* if (*pivrow == 0.0) */
+    else {
+	thresh = u * pivmax;
+
+	/* Choose appropriate pivotal element by our policy. */
+	if ( *usepr ) {
+	    switch (milu) {
+		case SMILU_1:
+		    rtemp = fabs(lu_col_ptr[old_pivptr] + drop_sum);
+		    break;
+		case SMILU_2:
+		case SMILU_3:
+		    rtemp = fabs(lu_col_ptr[old_pivptr]) + drop_sum;
+		    break;
+		case SILU:
+		default:
+		    rtemp = fabs(lu_col_ptr[old_pivptr]);
+		    break;
+	    }
+	    if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = old_pivptr;
+	    else *usepr = 0;
+	}
+	if ( *usepr == 0 ) {
+	    /* Use diagonal pivot? */
+	    if ( diag >= 0 ) { /* diagonal exists */
+		switch (milu) {
+		    case SMILU_1:
+			rtemp = fabs(lu_col_ptr[diag] + drop_sum);
+			break;
+		    case SMILU_2:
+		    case SMILU_3:
+			rtemp = fabs(lu_col_ptr[diag]) + drop_sum;
+			break;
+		    case SILU:
+		    default:
+			rtemp = fabs(lu_col_ptr[diag]);
+			break;
+		}
+		if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = diag;
+	    }
+	    *pivrow = lsub_ptr[pivptr];
+	}
+	info = 0;
+
+	/* Reset the diagonal */
+	switch (milu) {
+	    case SMILU_1:
+		lu_col_ptr[pivptr] += drop_sum;
+		break;
+	    case SMILU_2:
+	    case SMILU_3:
+		lu_col_ptr[pivptr] += SGN(lu_col_ptr[pivptr]) * drop_sum;
+		break;
+	    case SILU:
+	    default:
+		break;
+	}
+
+    } /* else */
+
+    /* Record pivot row */
+    perm_r[*pivrow] = jcol;
+    if (jcol < n - 1) {
+	register int t1, t2, t;
+	t1 = iswap[*pivrow]; t2 = jcol;
+	if (t1 != t2) {
+	    t = swap[t1]; swap[t1] = swap[t2]; swap[t2] = t;
+	    t1 = swap[t1]; t2 = t;
+	    t = iswap[t1]; iswap[t1] = iswap[t2]; iswap[t2] = t;
+	}
+    } /* if (jcol < n - 1) */
+
+    /* Interchange row subscripts */
+    if ( pivptr != nsupc ) {
+	itemp = lsub_ptr[pivptr];
+	lsub_ptr[pivptr] = lsub_ptr[nsupc];
+	lsub_ptr[nsupc] = itemp;
+
+	/* Interchange numerical values as well, for the whole snode, such 
+	 * that L is indexed the same way as A.
+	 */
+	for (icol = 0; icol <= nsupc; icol++) {
+	    itemp = pivptr + icol * nsupr;
+	    temp = lu_sup_ptr[itemp];
+	    lu_sup_ptr[itemp] = lu_sup_ptr[nsupc + icol*nsupr];
+	    lu_sup_ptr[nsupc + icol*nsupr] = temp;
+	}
+    } /* if */
+
+    /* cdiv operation */
+    ops[FACT] += nsupr - nsupc;
+    temp = 1.0 / lu_col_ptr[nsupc];
+    for (k = nsupc+1; k < nsupr; k++) lu_col_ptr[k] *= temp;
+
+    return info;
+}
diff --git a/SRC/ilu_dsnode_dfs.c b/SRC/ilu_dsnode_dfs.c
new file mode 100644
index 0000000..5251134
--- /dev/null
+++ b/SRC/ilu_dsnode_dfs.c
@@ -0,0 +1,90 @@
+
+/*! @file ilu_dsnode_dfs.c
+ * \brief Determines the union of row structures of columns within the relaxed node
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_ddefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *    ilu_dsnode_dfs() - Determine the union of the row structures of those
+ *    columns within the relaxed snode.
+ *    Note: The relaxed snodes are leaves of the supernodal etree, therefore,
+ *    the portion outside the rectangular supernode must be zero.
+ *
+ * Return value
+ * ============
+ *     0   success;
+ *    >0   number of bytes allocated when run out of memory.
+ * </pre>
+ */
+
+int
+ilu_dsnode_dfs(
+	   const int  jcol,	    /* in - start of the supernode */
+	   const int  kcol,	    /* in - end of the supernode */
+	   const int  *asub,	    /* in */
+	   const int  *xa_begin,    /* in */
+	   const int  *xa_end,	    /* in */
+	   int	      *marker,	    /* modified */
+	   GlobalLU_t *Glu	    /* modified */
+	   )
+{
+
+    register int i, k, nextl;
+    int 	 nsuper, krow, kmark, mem_error;
+    int 	 *xsup, *supno;
+    int 	 *lsub, *xlsub;
+    int 	 nzlmax;
+
+    xsup    = Glu->xsup;
+    supno   = Glu->supno;
+    lsub    = Glu->lsub;
+    xlsub   = Glu->xlsub;
+    nzlmax  = Glu->nzlmax;
+
+    nsuper = ++supno[jcol];	/* Next available supernode number */
+    nextl = xlsub[jcol];
+
+    for (i = jcol; i <= kcol; i++)
+    {
+	/* For each nonzero in A[*,i] */
+	for (k = xa_begin[i]; k < xa_end[i]; k++)
+	{
+	    krow = asub[k];
+	    kmark = marker[krow];
+	    if ( kmark != kcol )
+	    { /* First time visit krow */
+		marker[krow] = kcol;
+		lsub[nextl++] = krow;
+		if ( nextl >= nzlmax )
+		{
+		    if ( (mem_error = dLUMemXpand(jcol, nextl, LSUB, &nzlmax,
+			    Glu)) != 0)
+			return (mem_error);
+		    lsub = Glu->lsub;
+		}
+	    }
+	}
+	supno[i] = nsuper;
+    }
+
+    /* Supernode > 1 */
+    if ( jcol < kcol )
+	for (i = jcol+1; i <= kcol; i++) xlsub[i] = nextl;
+
+    xsup[nsuper+1] = kcol + 1;
+    supno[kcol+1]  = nsuper;
+    xlsub[kcol+1]  = nextl;
+
+    return 0;
+}
diff --git a/SRC/heap_relax_snode.c b/SRC/ilu_heap_relax_snode.c
similarity index 61%
copy from SRC/heap_relax_snode.c
copy to SRC/ilu_heap_relax_snode.c
index 1a40e26..d7a98bc 100644
--- a/SRC/heap_relax_snode.c
+++ b/SRC/ilu_heap_relax_snode.c
@@ -1,51 +1,51 @@
-/*
- * -- SuperLU routine (version 3.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * October 15, 2003
+/*! @file ilu_heap_relax_snode.c
+ * \brief Identify the initial relaxed supernodes
  *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 1, 2009
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
 
 #include "slu_ddefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *    ilu_heap_relax_snode() - Identify the initial relaxed supernodes,
+ *    assuming that the matrix has been reordered according to the postorder
+ *    of the etree.
+ * </pre>
+ */
+
 void
-heap_relax_snode (
+ilu_heap_relax_snode (
 	     const     int n,
-	     int       *et,           /* column elimination tree */
+	     int       *et,	      /* column elimination tree */
 	     const int relax_columns, /* max no of columns allowed in a
 					 relaxed snode */
 	     int       *descendants,  /* no of descendants of each node
 					 in the etree */
-	     int       *relax_end     /* last column in a supernode */
+	     int       *relax_end,    /* last column in a supernode
+				       * if j-th column starts a relaxed
+				       * supernode, relax_end[j] represents
+				       * the last column of this supernode */
+	     int       *relax_fsupc   /* first column in a supernode
+				       * relax_fsupc[j] represents the first
+				       * column of j-th supernode */
 	     )
 {
-/*
- * Purpose
- * =======
- *    relax_snode() - Identify the initial relaxed supernodes, assuming that 
- *    the matrix has been reordered according to the postorder of the etree.
- *
- */ 
-    register int i, j, k, l, parent;
+    register int i, j, k, l, f, parent;
     register int snode_start;	/* beginning of a snode */
     int *et_save, *post, *inv_post, *iwork;
     int nsuper_et = 0, nsuper_et_post = 0;
 
     /* The etree may not be postordered, but is heap ordered. */
 
-    iwork = (int*) intMalloc(3*n+2); 
+    iwork = (int*) intMalloc(3*n+2);
     if ( !iwork ) ABORT("SUPERLU_MALLOC fails for iwork[]");
     inv_post = iwork + n+1;
     et_save = inv_post + n+1;
@@ -56,13 +56,14 @@ heap_relax_snode (
 
     /* Renumber etree in postorder */
     for (i = 0; i < n; ++i) {
-        iwork[post[i]] = post[et[i]];
+	iwork[post[i]] = post[et[i]];
 	et_save[i] = et[i]; /* Save the original etree */
     }
     for (i = 0; i < n; ++i) et[i] = iwork[i];
 
     /* Compute the number of descendants of each node in the etree */
     ifill (relax_end, n, EMPTY);
+    ifill (relax_fsupc, n, EMPTY);
     for (j = 0; j < n; j++) descendants[j] = 0;
     for (j = 0; j < n; j++) {
 	parent = et[j];
@@ -71,10 +72,10 @@ heap_relax_snode (
     }
 
     /* Identify the relaxed supernodes by postorder traversal of the etree. */
-    for (j = 0; j < n; ) { 
-     	parent = et[j];
-        snode_start = j;
- 	while ( parent != n && descendants[parent] < relax_columns ) {
+    for ( f = j = 0; j < n; ) {
+	parent = et[j];
+	snode_start = j;
+	while ( parent != n && descendants[parent] < relax_columns ) {
 	    j = parent;
 	    parent = et[j];
 	}
@@ -87,11 +88,16 @@ heap_relax_snode (
 	if ( (l - k) == (j - snode_start) ) {
 	    /* It's also a supernode in the original etree */
 	    relax_end[k] = l;		/* Last column is recorded */
+	    relax_fsupc[f++] = k;
 	    ++nsuper_et;
 	} else {
 	    for (i = snode_start; i <= j; ++i) {
-	        l = inv_post[i];
-	        if ( descendants[i] == 0 ) relax_end[l] = l;
+		l = inv_post[i];
+		if ( descendants[i] == 0 ) {
+		    relax_end[l] = l;
+		    relax_fsupc[f++] = l;
+		    ++nsuper_et;
+		}
 	    }
 	}
 	j++;
@@ -112,5 +118,3 @@ heap_relax_snode (
     SUPERLU_FREE(post);
     SUPERLU_FREE(iwork);
 }
-
-
diff --git a/SRC/ilu_relax_snode.c b/SRC/ilu_relax_snode.c
new file mode 100644
index 0000000..124101a
--- /dev/null
+++ b/SRC/ilu_relax_snode.c
@@ -0,0 +1,69 @@
+/*! @file ilu_relax_snode.c
+ * \brief Identify initial relaxed supernodes
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 1, 2009
+ * </pre>
+ */
+
+#include "slu_ddefs.h"
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *    ilu_relax_snode() - Identify the initial relaxed supernodes, assuming
+ *    that the matrix has been reordered according to the postorder of the
+ *    etree.
+ * </pre>
+ */
+void
+ilu_relax_snode (
+	      const	int n,
+	      int	*et,	       /* column elimination tree */
+	      const int relax_columns, /* max no of columns allowed in a
+					  relaxed snode */
+	      int	*descendants,  /* no of descendants of each node
+					 in the etree */
+	      int	*relax_end,    /* last column in a supernode
+					* if j-th column starts a relaxed
+					* supernode, relax_end[j] represents
+					* the last column of this supernode */
+	      int	*relax_fsupc   /* first column in a supernode
+					* relax_fsupc[j] represents the first
+					* column of j-th supernode */
+	     )
+{
+
+    register int j, f, parent;
+    register int snode_start;	/* beginning of a snode */
+
+    ifill (relax_end, n, EMPTY);
+    ifill (relax_fsupc, n, EMPTY);
+    for (j = 0; j < n; j++) descendants[j] = 0;
+
+    /* Compute the number of descendants of each node in the etree */
+    for (j = 0; j < n; j++) {
+	parent = et[j];
+	if ( parent != n )  /* not the dummy root */
+	    descendants[parent] += descendants[j] + 1;
+    }
+
+    /* Identify the relaxed supernodes by postorder traversal of the etree. */
+    for (j = f = 0; j < n; ) {
+	parent = et[j];
+	snode_start = j;
+	while ( parent != n && descendants[parent] < relax_columns ) {
+	    j = parent;
+	    parent = et[j];
+	}
+	/* Found a supernode with j being the last column. */
+	relax_end[snode_start] = j;		/* Last column is recorded */
+	j++;
+	relax_fsupc[f++] = snode_start;
+	/* Search for a new leaf */
+	while ( descendants[j] != 0 && j < n ) j++;
+    }
+}
diff --git a/SRC/scolumn_dfs.c b/SRC/ilu_scolumn_dfs.c
similarity index 50%
copy from SRC/scolumn_dfs.c
copy to SRC/ilu_scolumn_dfs.c
index 923b25d..0e7631c 100644
--- a/SRC/scolumn_dfs.c
+++ b/SRC/ilu_scolumn_dfs.c
@@ -1,57 +1,31 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * October 15, 2003
+/*! @file ilu_scolumn_dfs.c
+ * \brief Performs a symbolic factorization
  *
- */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
 */
 
 #include "slu_sdefs.h"
 
-/* What type of supernodes we want */
-#define T2_SUPER
 
-int
-scolumn_dfs(
-	   const int  m,         /* in - number of rows in the matrix */
-	   const int  jcol,      /* in */
-	   int        *perm_r,   /* in */
-	   int        *nseg,     /* modified - with new segments appended */
-	   int        *lsub_col, /* in - defines the RHS vector to start the dfs */
-	   int        *segrep,   /* modified - with new segments appended */
-	   int        *repfnz,   /* modified */
-	   int        *xprune,   /* modified */
-	   int        *marker,   /* modified */
-	   int        *parent,	 /* working array */
-	   int        *xplore,   /* working array */
-	   GlobalLU_t *Glu       /* modified */
-	   )
-{
-/* 
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
- *   "column_dfs" performs a symbolic factorization on column jcol, and
+ *   ILU_SCOLUMN_DFS performs a symbolic factorization on column jcol, and
  *   decide the supernode boundary.
  *
- *   This routine does not use numeric values, but only use the RHS 
+ *   This routine does not use numeric values, but only use the RHS
  *   row indices to start the dfs.
  *
  *   A supernode representative is the last column of a supernode.
  *   The nonzeros in U[*,j] are segments that end at supernodal
- *   representatives. The routine returns a list of such supernodal 
+ *   representatives. The routine returns a list of such supernodal
  *   representatives in topological order of the dfs that generates them.
  *   The location of the first nonzero in each such supernodal segment
  *   (supernodal entry location) is also returned.
@@ -71,22 +45,39 @@ scolumn_dfs(
  * ============
  *     0  success;
  *   > 0  number of bytes allocated when run out of space.
- *
+ * </pre>
  */
+int
+ilu_scolumn_dfs(
+	   const int  m,	 /* in - number of rows in the matrix */
+	   const int  jcol,	 /* in */
+	   int	      *perm_r,	 /* in */
+	   int	      *nseg,	 /* modified - with new segments appended */
+	   int	      *lsub_col, /* in - defines the RHS vector to start the
+				    dfs */
+	   int	      *segrep,	 /* modified - with new segments appended */
+	   int	      *repfnz,	 /* modified */
+	   int	      *marker,	 /* modified */
+	   int	      *parent,	 /* working array */
+	   int	      *xplore,	 /* working array */
+	   GlobalLU_t *Glu	 /* modified */
+	   )
+{
+
     int     jcolp1, jcolm1, jsuper, nsuper, nextl;
     int     k, krep, krow, kmark, kperm;
-    int     *marker2;           /* Used for small panel LU */
-    int	    fsupc;		/* First column of a snode */
+    int     *marker2;		/* Used for small panel LU */
+    int     fsupc;		/* First column of a snode */
     int     myfnz;		/* First nonz column of a U-segment */
-    int	    chperm, chmark, chrep, kchild;
+    int     chperm, chmark, chrep, kchild;
     int     xdfs, maxdfs, kpar, oldrep;
     int     jptr, jm1ptr;
-    int     ito, ifrom, istop;	/* Used to compress row subscripts */
+    int     ito, ifrom; 	/* Used to compress row subscripts */
     int     mem_error;
     int     *xsup, *supno, *lsub, *xlsub;
     int     nzlmax;
     static  int  first = 1, maxsuper;
-    
+
     xsup    = Glu->xsup;
     supno   = Glu->supno;
     lsub    = Glu->lsub;
@@ -94,7 +85,7 @@ scolumn_dfs(
     nzlmax  = Glu->nzlmax;
 
     if ( first ) {
-	maxsuper = sp_ienv(3);
+	maxsuper = sp_ienv(7);
 	first = 0;
     }
     jcolp1  = jcol + 1;
@@ -109,11 +100,11 @@ scolumn_dfs(
     for (k = 0; lsub_col[k] != EMPTY; k++) {
 
 	krow = lsub_col[k];
-    	lsub_col[k] = EMPTY;
-	kmark = marker2[krow];    	
+	lsub_col[k] = EMPTY;
+	kmark = marker2[krow];
 
-	/* krow was visited before, go to the next nonz */
-        if ( kmark == jcol ) continue; 
+	/* krow was visited before, go to the next nonzero */
+	if ( kmark == jcol ) continue;
 
 	/* For each unmarked nbr krow of jcol
 	 *	krow is in L: place it in structure of L[*,jcol]
@@ -121,15 +112,15 @@ scolumn_dfs(
 	marker2[krow] = jcol;
 	kperm = perm_r[krow];
 
-   	if ( kperm == EMPTY ) {
-	    lsub[nextl++] = krow; 	/* krow is indexed into A */
+	if ( kperm == EMPTY ) {
+	    lsub[nextl++] = krow;	/* krow is indexed into A */
 	    if ( nextl >= nzlmax ) {
-		if ( mem_error = sLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu) )
+		if ((mem_error = sLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu)))
 		    return (mem_error);
 		lsub = Glu->lsub;
 	    }
-            if ( kmark != jcolm1 ) jsuper = EMPTY;/* Row index subset testing */
-  	} else {
+	    if ( kmark != jcolm1 ) jsuper = EMPTY;/* Row index subset testing */
+	} else {
 	    /*	krow is in U: if its supernode-rep krep
 	     *	has been explored, update repfnz[*]
 	     */
@@ -137,60 +128,60 @@ scolumn_dfs(
 	    myfnz = repfnz[krep];
 
 	    if ( myfnz != EMPTY ) {	/* Visited before */
-	    	if ( myfnz > kperm ) repfnz[krep] = kperm;
+		if ( myfnz > kperm ) repfnz[krep] = kperm;
 		/* continue; */
 	    }
 	    else {
 		/* Otherwise, perform dfs starting at krep */
 		oldrep = EMPTY;
-	 	parent[krep] = oldrep;
-	  	repfnz[krep] = kperm;
-		xdfs = xlsub[krep];
-	  	maxdfs = xprune[krep];
+		parent[krep] = oldrep;
+		repfnz[krep] = kperm;
+		xdfs = xlsub[xsup[supno[krep]]];
+		maxdfs = xlsub[krep + 1];
 
 		do {
-		    /* 
-		     * For each unmarked kchild of krep 
+		    /*
+		     * For each unmarked kchild of krep
 		     */
 		    while ( xdfs < maxdfs ) {
 
-		   	kchild = lsub[xdfs];
+			kchild = lsub[xdfs];
 			xdfs++;
-		  	chmark = marker2[kchild];
+			chmark = marker2[kchild];
 
-		   	if ( chmark != jcol ) { /* Not reached yet */
-		   	    marker2[kchild] = jcol;
-		   	    chperm = perm_r[kchild];
+			if ( chmark != jcol ) { /* Not reached yet */
+			    marker2[kchild] = jcol;
+			    chperm = perm_r[kchild];
 
-		   	    /* Case kchild is in L: place it in L[*,k] */
-		   	    if ( chperm == EMPTY ) {
-			    	lsub[nextl++] = kchild;
+			    /* Case kchild is in L: place it in L[*,k] */
+			    if ( chperm == EMPTY ) {
+				lsub[nextl++] = kchild;
 				if ( nextl >= nzlmax ) {
-				    if ( mem_error =
-					 sLUMemXpand(jcol,nextl,LSUB,&nzlmax,Glu) )
+				    if ( (mem_error = sLUMemXpand(jcol,nextl,
+					    LSUB,&nzlmax,Glu)) )
 					return (mem_error);
 				    lsub = Glu->lsub;
 				}
 				if ( chmark != jcolm1 ) jsuper = EMPTY;
 			    } else {
-		    	    	/* Case kchild is in U: 
-				 *   chrep = its supernode-rep. If its rep has 
-			         *   been explored, update its repfnz[*]
-			         */
-		   	    	chrep = xsup[supno[chperm]+1] - 1;
-		   		myfnz = repfnz[chrep];
-		   		if ( myfnz != EMPTY ) { /* Visited before */
+				/* Case kchild is in U:
+				 *   chrep = its supernode-rep. If its rep has
+				 *   been explored, update its repfnz[*]
+				 */
+				chrep = xsup[supno[chperm]+1] - 1;
+				myfnz = repfnz[chrep];
+				if ( myfnz != EMPTY ) { /* Visited before */
 				    if ( myfnz > chperm )
-     				  	repfnz[chrep] = chperm;
+					repfnz[chrep] = chperm;
 				} else {
-		        	    /* Continue dfs at super-rep of kchild */
-		   		    xplore[krep] = xdfs;	
-		   		    oldrep = krep;
-		   		    krep = chrep; /* Go deeper down G(L^t) */
+				    /* Continue dfs at super-rep of kchild */
+				    xplore[krep] = xdfs;
+				    oldrep = krep;
+				    krep = chrep; /* Go deeper down G(L^t) */
 				    parent[krep] = oldrep;
-		    		    repfnz[krep] = chperm;
-		   		    xdfs = xlsub[krep];     
-				    maxdfs = xprune[krep];
+				    repfnz[krep] = chperm;
+				    xdfs = xlsub[xsup[supno[krep]]];
+				    maxdfs = xlsub[krep + 1];
 				} /* else */
 
 			   } /* else */
@@ -200,8 +191,8 @@ scolumn_dfs(
 		    } /* while */
 
 		    /* krow has no more unexplored nbrs;
-	   	     *    place supernode-rep krep in postorder DFS.
-	   	     *    backtrack dfs to its parent
+		     *	  place supernode-rep krep in postorder DFS.
+		     *	  backtrack dfs to its parent
 		     */
 		    segrep[*nseg] = krep;
 		    ++(*nseg);
@@ -209,9 +200,9 @@ scolumn_dfs(
 		    if ( kpar == EMPTY ) break; /* dfs done */
 		    krep = kpar;
 		    xdfs = xplore[krep];
-		    maxdfs = xprune[krep];
+		    maxdfs = xlsub[krep + 1];
 
-		} while ( kpar != EMPTY ); 	/* Until empty stack */
+		} while ( kpar != EMPTY );	/* Until empty stack */
 
 	    } /* else */
 
@@ -223,46 +214,44 @@ scolumn_dfs(
     if ( jcol == 0 ) { /* Do nothing for column 0 */
 	nsuper = supno[0] = 0;
     } else {
-   	fsupc = xsup[nsuper];
+	fsupc = xsup[nsuper];
 	jptr = xlsub[jcol];	/* Not compressed yet */
 	jm1ptr = xlsub[jcolm1];
 
-#ifdef T2_SUPER
 	if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
-#endif
+
+	/* Always start a new supernode for a singular column */
+	if ( nextl == jptr ) jsuper = EMPTY;
+
 	/* Make sure the number of columns in a supernode doesn't
 	   exceed threshold. */
 	if ( jcol - fsupc >= maxsuper ) jsuper = EMPTY;
 
 	/* If jcol starts a new supernode, reclaim storage space in
 	 * lsub from the previous supernode. Note we only store
-	 * the subscript set of the first and last columns of
-   	 * a supernode. (first for num values, last for pruning)
+	 * the subscript set of the first columns of the supernode.
 	 */
 	if ( jsuper == EMPTY ) {	/* starts a new supernode */
-	    if ( (fsupc < jcolm1-1) ) {	/* >= 3 columns in nsuper */
+	    if ( (fsupc < jcolm1) ) { /* >= 2 columns in nsuper */
 #ifdef CHK_COMPRESS
 		printf("  Compress lsub[] at super %d-%d\n", fsupc, jcolm1);
 #endif
-	        ito = xlsub[fsupc+1];
+		ito = xlsub[fsupc+1];
 		xlsub[jcolm1] = ito;
-		istop = ito + jptr - jm1ptr;
-		xprune[jcolm1] = istop; /* Initialize xprune[jcol-1] */
-		xlsub[jcol] = istop;
-		for (ifrom = jm1ptr; ifrom < nextl; ++ifrom, ++ito)
+		xlsub[jcol] = ito;
+		for (ifrom = jptr; ifrom < nextl; ++ifrom, ++ito)
 		    lsub[ito] = lsub[ifrom];
-		nextl = ito;            /* = istop + length(jcol) */
+		nextl = ito;
 	    }
 	    nsuper++;
 	    supno[jcol] = nsuper;
 	} /* if a new supernode */
 
-    }	/* else: jcol > 0 */ 
-    
+    }	/* else: jcol > 0 */
+
     /* Tidy up the pointers before exit */
     xsup[nsuper+1] = jcolp1;
     supno[jcolp1]  = nsuper;
-    xprune[jcol]   = nextl;	/* Initialize upper bound for pruning */
     xlsub[jcolp1]  = nextl;
 
     return 0;
diff --git a/SRC/ilu_scopy_to_ucol.c b/SRC/ilu_scopy_to_ucol.c
new file mode 100644
index 0000000..7e0e97c
--- /dev/null
+++ b/SRC/ilu_scopy_to_ucol.c
@@ -0,0 +1,207 @@
+
+/*! @file ilu_scopy_to_ucol.c
+ * \brief Copy a computed column of U to the compressed data structure
+ * and drop some small entries
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory
+ * November, 2010
+ * </pre>
+ */
+
+#include "slu_sdefs.h"
+
+#ifdef DEBUG
+int num_drop_U;
+#endif
+
+extern void scopy_(int *, float [], int *, float [], int *);
+
+#if 0
+static float *A;  /* used in _compare_ only */
+static int _compare_(const void *a, const void *b)
+{
+    register int *x = (int *)a, *y = (int *)b;
+    register double xx = fabs(A[*x]), yy = fabs(A[*y]);
+    if (xx > yy) return -1;
+    else if (xx < yy) return 1;
+    else return 0;
+}
+#endif
+
+int
+ilu_scopy_to_ucol(
+	      int	 jcol,	   /* in */
+	      int	 nseg,	   /* in */
+	      int	 *segrep,  /* in */
+	      int	 *repfnz,  /* in */
+	      int	 *perm_r,  /* in */
+	      float	 *dense,   /* modified - reset to zero on return */
+	      int  	 drop_rule,/* in */
+	      milu_t	 milu,	   /* in */
+	      double	 drop_tol, /* in */
+	      int	 quota,    /* maximum nonzero entries allowed */
+	      float	 *sum,	   /* out - the sum of dropped entries */
+	      int	 *nnzUj,   /* in - out */
+	      GlobalLU_t *Glu,	   /* modified */
+	      float	 *work	   /* working space with minimum size n,
+				    * used by the second dropping rule */
+	      )
+{
+/*
+ * Gather from SPA dense[*] to global ucol[*].
+ */
+    int       ksub, krep, ksupno;
+    int       i, k, kfnz, segsze;
+    int       fsupc, isub, irow;
+    int       jsupno, nextu;
+    int       new_next, mem_error;
+    int       *xsup, *supno;
+    int       *lsub, *xlsub;
+    float    *ucol;
+    int       *usub, *xusub;
+    int       nzumax;
+    int       m; /* number of entries in the nonzero U-segments */
+    register float d_max = 0.0, d_min = 1.0 / dlamch_("Safe minimum");
+    register double tmp;
+    float zero = 0.0;
+    int i_1 = 1;
+
+    xsup    = Glu->xsup;
+    supno   = Glu->supno;
+    lsub    = Glu->lsub;
+    xlsub   = Glu->xlsub;
+    ucol    = Glu->ucol;
+    usub    = Glu->usub;
+    xusub   = Glu->xusub;
+    nzumax  = Glu->nzumax;
+
+    *sum = zero;
+    if (drop_rule == NODROP) {
+	drop_tol = -1.0, quota = Glu->n;
+    }
+
+    jsupno = supno[jcol];
+    nextu  = xusub[jcol];
+    k = nseg - 1;
+    for (ksub = 0; ksub < nseg; ksub++) {
+	krep = segrep[k--];
+	ksupno = supno[krep];
+
+	if ( ksupno != jsupno ) { /* Should go into ucol[] */
+	    kfnz = repfnz[krep];
+	    if ( kfnz != EMPTY ) {	/* Nonzero U-segment */
+
+		fsupc = xsup[ksupno];
+		isub = xlsub[fsupc] + kfnz - fsupc;
+		segsze = krep - kfnz + 1;
+
+		new_next = nextu + segsze;
+		while ( new_next > nzumax ) {
+		    if ((mem_error = sLUMemXpand(jcol, nextu, UCOL, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    ucol = Glu->ucol;
+		    if ((mem_error = sLUMemXpand(jcol, nextu, USUB, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    usub = Glu->usub;
+		    lsub = Glu->lsub;
+		}
+
+		for (i = 0; i < segsze; i++) {
+		    irow = lsub[isub++];
+		    tmp = fabs(dense[irow]);
+
+		    /* first dropping rule */
+		    if (quota > 0 && tmp >= drop_tol) {
+			if (tmp > d_max) d_max = tmp;
+			if (tmp < d_min) d_min = tmp;
+			usub[nextu] = perm_r[irow];
+			ucol[nextu] = dense[irow];
+			nextu++;
+		    } else {
+			switch (milu) {
+			    case SMILU_1:
+			    case SMILU_2:
+				*sum += dense[irow];
+				break;
+			    case SMILU_3:
+				/* *sum += fabs(dense[irow]);*/
+				*sum += tmp;
+				break;
+			    case SILU:
+			    default:
+				break;
+			}
+#ifdef DEBUG
+			num_drop_U++;
+#endif
+		    }
+		    dense[irow] = zero;
+		}
+
+	    }
+
+	}
+
+    } /* for each segment... */
+
+    xusub[jcol + 1] = nextu;	  /* Close U[*,jcol] */
+    m = xusub[jcol + 1] - xusub[jcol];
+
+    /* second dropping rule */
+    if (drop_rule & DROP_SECONDARY && m > quota) {
+	register double tol = d_max;
+	register int m0 = xusub[jcol] + m - 1;
+
+	if (quota > 0) {
+	    if (drop_rule & DROP_INTERP) {
+		d_max = 1.0 / d_max; d_min = 1.0 / d_min;
+		tol = 1.0 / (d_max + (d_min - d_max) * quota / m);
+	    } else {
+		scopy_(&m, &ucol[xusub[jcol]], &i_1, work, &i_1);
+		tol = sqselect(m, work, quota);
+#if 0
+		A = &ucol[xusub[jcol]];
+		for (i = 0; i < m; i++) work[i] = i;
+		qsort(work, m, sizeof(int), _compare_);
+		tol = fabs(usub[xusub[jcol] + work[quota]]);
+#endif
+	    }
+	}
+	for (i = xusub[jcol]; i <= m0; ) {
+	    if (fabs(ucol[i]) <= tol) {
+		switch (milu) {
+		    case SMILU_1:
+		    case SMILU_2:
+			*sum += ucol[i];
+			break;
+		    case SMILU_3:
+			*sum += fabs(ucol[i]);
+			break;
+		    case SILU:
+		    default:
+			break;
+		}
+		ucol[i] = ucol[m0];
+		usub[i] = usub[m0];
+		m0--;
+		m--;
+#ifdef DEBUG
+		num_drop_U++;
+#endif
+		xusub[jcol + 1]--;
+		continue;
+	    }
+	    i++;
+	}
+    }
+
+    if (milu == SMILU_2) *sum = fabs(*sum);
+
+    *nnzUj += m;
+
+    return 0;
+}
diff --git a/SRC/ilu_scopy_to_ucol.c.bak b/SRC/ilu_scopy_to_ucol.c.bak
new file mode 100644
index 0000000..2b3bc70
--- /dev/null
+++ b/SRC/ilu_scopy_to_ucol.c.bak
@@ -0,0 +1,199 @@
+
+/*! @file ilu_scopy_to_ucol.c
+ * \brief Copy a computed column of U to the compressed data structure
+ * and drop some small entries
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_sdefs.h"
+
+#ifdef DEBUG
+int num_drop_U;
+#endif
+
+static float *A;  /* used in _compare_ only */
+static int _compare_(const void *a, const void *b)
+{
+    register int *x = (int *)a, *y = (int *)b;
+    register double xx = fabs(A[*x]), yy = fabs(A[*y]);
+    if (xx > yy) return -1;
+    else if (xx < yy) return 1;
+    else return 0;
+}
+
+
+int
+ilu_scopy_to_ucol(
+	      int	 jcol,	   /* in */
+	      int	 nseg,	   /* in */
+	      int	 *segrep,  /* in */
+	      int	 *repfnz,  /* in */
+	      int	 *perm_r,  /* in */
+	      float	 *dense,   /* modified - reset to zero on return */
+	      int  	 drop_rule,/* in */
+	      milu_t	 milu,	   /* in */
+	      double	 drop_tol, /* in */
+	      int	 quota,    /* maximum nonzero entries allowed */
+	      float	 *sum,	   /* out - the sum of dropped entries */
+	      int	 *nnzUj,   /* in - out */
+	      GlobalLU_t *Glu,	   /* modified */
+	      int	 *work	   /* working space with minimum size n,
+				    * used by the second dropping rule */
+	      )
+{
+/*
+ * Gather from SPA dense[*] to global ucol[*].
+ */
+    int       ksub, krep, ksupno;
+    int       i, k, kfnz, segsze;
+    int       fsupc, isub, irow;
+    int       jsupno, nextu;
+    int       new_next, mem_error;
+    int       *xsup, *supno;
+    int       *lsub, *xlsub;
+    float    *ucol;
+    int       *usub, *xusub;
+    int       nzumax;
+    int       m; /* number of entries in the nonzero U-segments */
+    register float d_max = 0.0, d_min = 1.0 / dlamch_("Safe minimum");
+    register double tmp;
+    float zero = 0.0;
+
+    xsup    = Glu->xsup;
+    supno   = Glu->supno;
+    lsub    = Glu->lsub;
+    xlsub   = Glu->xlsub;
+    ucol    = Glu->ucol;
+    usub    = Glu->usub;
+    xusub   = Glu->xusub;
+    nzumax  = Glu->nzumax;
+
+    *sum = zero;
+    if (drop_rule == NODROP) {
+	drop_tol = -1.0, quota = Glu->n;
+    }
+
+    jsupno = supno[jcol];
+    nextu  = xusub[jcol];
+    k = nseg - 1;
+    for (ksub = 0; ksub < nseg; ksub++) {
+	krep = segrep[k--];
+	ksupno = supno[krep];
+
+	if ( ksupno != jsupno ) { /* Should go into ucol[] */
+	    kfnz = repfnz[krep];
+	    if ( kfnz != EMPTY ) {	/* Nonzero U-segment */
+
+		fsupc = xsup[ksupno];
+		isub = xlsub[fsupc] + kfnz - fsupc;
+		segsze = krep - kfnz + 1;
+
+		new_next = nextu + segsze;
+		while ( new_next > nzumax ) {
+		    if ((mem_error = sLUMemXpand(jcol, nextu, UCOL, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    ucol = Glu->ucol;
+		    if ((mem_error = sLUMemXpand(jcol, nextu, USUB, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    usub = Glu->usub;
+		    lsub = Glu->lsub;
+		}
+
+		for (i = 0; i < segsze; i++) {
+		    irow = lsub[isub++];
+		    tmp = fabs(dense[irow]);
+
+		    /* first dropping rule */
+		    if (quota > 0 && tmp >= drop_tol) {
+			if (tmp > d_max) d_max = tmp;
+			if (tmp < d_min) d_min = tmp;
+			usub[nextu] = perm_r[irow];
+			ucol[nextu] = dense[irow];
+			nextu++;
+		    } else {
+			switch (milu) {
+			    case SMILU_1:
+			    case SMILU_2:
+				*sum += dense[irow];
+				break;
+			    case SMILU_3:
+				/* *sum += fabs(dense[irow]);*/
+				*sum += tmp;
+				break;
+			    case SILU:
+			    default:
+				break;
+			}
+#ifdef DEBUG
+			num_drop_U++;
+#endif
+		    }
+		    dense[irow] = zero;
+		}
+
+	    }
+
+	}
+
+    } /* for each segment... */
+
+    xusub[jcol + 1] = nextu;	  /* Close U[*,jcol] */
+    m = xusub[jcol + 1] - xusub[jcol];
+
+    /* second dropping rule */
+    if (drop_rule & DROP_SECONDARY && m > quota) {
+	register double tol = d_max;
+	register int m0 = xusub[jcol] + m - 1;
+
+	if (quota > 0) {
+	    if (drop_rule & DROP_INTERP) {
+		d_max = 1.0 / d_max; d_min = 1.0 / d_min;
+		tol = 1.0 / (d_max + (d_min - d_max) * quota / m);
+	    } else {
+		A = &ucol[xusub[jcol]];
+		for (i = 0; i < m; i++) work[i] = i;
+		qsort(work, m, sizeof(int), _compare_);
+		tol = fabs(usub[xusub[jcol] + work[quota]]);
+	    }
+	}
+	for (i = xusub[jcol]; i <= m0; ) {
+	    if (fabs(ucol[i]) <= tol) {
+		switch (milu) {
+		    case SMILU_1:
+		    case SMILU_2:
+			*sum += ucol[i];
+			break;
+		    case SMILU_3:
+			*sum += fabs(ucol[i]);
+			break;
+		    case SILU:
+		    default:
+			break;
+		}
+		ucol[i] = ucol[m0];
+		usub[i] = usub[m0];
+		m0--;
+		m--;
+#ifdef DEBUG
+		num_drop_U++;
+#endif
+		xusub[jcol + 1]--;
+		continue;
+	    }
+	    i++;
+	}
+    }
+
+    if (milu == SMILU_2) *sum = fabs(*sum);
+
+    *nnzUj += m;
+
+    return 0;
+}
diff --git a/SRC/ilu_sdrop_row.c b/SRC/ilu_sdrop_row.c
new file mode 100644
index 0000000..108f849
--- /dev/null
+++ b/SRC/ilu_sdrop_row.c
@@ -0,0 +1,329 @@
+
+/*! @file ilu_sdrop_row.c
+ * \brief Drop small rows from L
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include <math.h>
+#include <stdlib.h>
+#include "slu_sdefs.h"
+
+extern void sswap_(int *, float [], int *, float [], int *);
+extern void saxpy_(int *, float *, float [], int *, float [], int *);
+extern void scopy_(int *, float [], int *, float [], int *);
+extern float sasum_(int *, float *, int *);
+extern float snrm2_(int *, float *, int *);
+extern double dnrm2_(int *, double [], int *);
+extern int isamax_(int *, float [], int *);
+
+static float *A;  /* used in _compare_ only */
+static int _compare_(const void *a, const void *b)
+{
+    register int *x = (int *)a, *y = (int *)b;
+    if (A[*x] - A[*y] > 0.0) return -1;
+    else if (A[*x] - A[*y] < 0.0) return 1;
+    else return 0;
+}
+
+/*! \brief
+ * <pre>
+ * Purpose
+ * =======
+ *    ilu_sdrop_row() - Drop some small rows from the previous 
+ *    supernode (L-part only).
+ * </pre>
+ */
+int ilu_sdrop_row(
+	superlu_options_t *options, /* options */
+	int    first,	    /* index of the first column in the supernode */
+	int    last,	    /* index of the last column in the supernode */
+	double drop_tol,    /* dropping parameter */
+	int    quota,	    /* maximum nonzero entries allowed */
+	int    *nnzLj,	    /* in/out number of nonzeros in L(:, 1:last) */
+	double *fill_tol,   /* in/out - on exit, fill_tol=-num_zero_pivots,
+			     * does not change if options->ILU_MILU != SMILU1 */
+	GlobalLU_t *Glu,    /* modified */
+	float swork[],   /* working space
+	                     * the length of swork[] should be no less than
+			     * the number of rows in the supernode */
+	float swork2[], /* working space with the same size as swork[],
+			     * used only by the second dropping rule */
+	int    lastc	    /* if lastc == 0, there is nothing after the
+			     * working supernode [first:last];
+			     * if lastc == 1, there is one more column after
+			     * the working supernode. */ )
+{
+    register int i, j, k, m1;
+    register int nzlc; /* number of nonzeros in column last+1 */
+    register int xlusup_first, xlsub_first;
+    int m, n; /* m x n is the size of the supernode */
+    int r = 0; /* number of dropped rows */
+    register float *temp;
+    register float *lusup = Glu->lusup;
+    register int *lsub = Glu->lsub;
+    register int *xlsub = Glu->xlsub;
+    register int *xlusup = Glu->xlusup;
+    register float d_max = 0.0, d_min = 1.0;
+    int    drop_rule = options->ILU_DropRule;
+    milu_t milu = options->ILU_MILU;
+    norm_t nrm = options->ILU_Norm;
+    float zero = 0.0;
+    float one = 1.0;
+    float none = -1.0;
+    int i_1 = 1;
+    int inc_diag; /* inc_diag = m + 1 */
+    int nzp = 0;  /* number of zero pivots */
+    float alpha = pow((double)(Glu->n), -1.0 / options->ILU_MILU_Dim);
+
+    xlusup_first = xlusup[first];
+    xlsub_first = xlsub[first];
+    m = xlusup[first + 1] - xlusup_first;
+    n = last - first + 1;
+    m1 = m - 1;
+    inc_diag = m + 1;
+    nzlc = lastc ? (xlusup[last + 2] - xlusup[last + 1]) : 0;
+    temp = swork - n;
+
+    /* Quick return if nothing to do. */
+    if (m == 0 || m == n || drop_rule == NODROP)
+    {
+	*nnzLj += m * n;
+	return 0;
+    }
+
+    /* basic dropping: ILU(tau) */
+    for (i = n; i <= m1; )
+    {
+	/* the average abs value of ith row */
+	switch (nrm)
+	{
+	    case ONE_NORM:
+		temp[i] = sasum_(&n, &lusup[xlusup_first + i], &m) / (double)n;
+		break;
+	    case TWO_NORM:
+		temp[i] = snrm2_(&n, &lusup[xlusup_first + i], &m)
+		    / sqrt((double)n);
+		break;
+	    case INF_NORM:
+	    default:
+		k = isamax_(&n, &lusup[xlusup_first + i], &m) - 1;
+		temp[i] = fabs(lusup[xlusup_first + i + m * k]);
+		break;
+	}
+
+	/* drop small entries due to drop_tol */
+	if (drop_rule & DROP_BASIC && temp[i] < drop_tol)
+	{
+	    r++;
+	    /* drop the current row and move the last undropped row here */
+	    if (r > 1) /* add to last row */
+	    {
+		/* accumulate the sum (for MILU) */
+		switch (milu)
+		{
+		    case SMILU_1:
+		    case SMILU_2:
+			saxpy_(&n, &one, &lusup[xlusup_first + i], &m,
+				&lusup[xlusup_first + m - 1], &m);
+			break;
+		    case SMILU_3:
+			for (j = 0; j < n; j++)
+			    lusup[xlusup_first + (m - 1) + j * m] +=
+				    fabs(lusup[xlusup_first + i + j * m]);
+			break;
+		    case SILU:
+		    default:
+			break;
+		}
+		scopy_(&n, &lusup[xlusup_first + m1], &m,
+                       &lusup[xlusup_first + i], &m);
+	    } /* if (r > 1) */
+	    else /* move to last row */
+	    {
+		sswap_(&n, &lusup[xlusup_first + m1], &m,
+			&lusup[xlusup_first + i], &m);
+		if (milu == SMILU_3)
+		    for (j = 0; j < n; j++) {
+			lusup[xlusup_first + m1 + j * m] =
+				fabs(lusup[xlusup_first + m1 + j * m]);
+                    }
+	    }
+	    lsub[xlsub_first + i] = lsub[xlsub_first + m1];
+	    m1--;
+	    continue;
+	} /* if dropping */
+	else
+	{
+	    if (temp[i] > d_max) d_max = temp[i];
+	    if (temp[i] < d_min) d_min = temp[i];
+	}
+	i++;
+    } /* for */
+
+    /* Secondary dropping: drop more rows according to the quota. */
+    quota = ceil((double)quota / (double)n);
+    if (drop_rule & DROP_SECONDARY && m - r > quota)
+    {
+	register double tol = d_max;
+
+	/* Calculate the second dropping tolerance */
+	if (quota > n)
+	{
+	    if (drop_rule & DROP_INTERP) /* by interpolation */
+	    {
+		d_max = 1.0 / d_max; d_min = 1.0 / d_min;
+		tol = 1.0 / (d_max + (d_min - d_max) * quota / (m - n - r));
+	    }
+	    else /* by quick select */
+	    {
+		int len = m1 - n + 1;
+		scopy_(&len, swork, &i_1, swork2, &i_1);
+		tol = sqselect(len, swork2, quota - n);
+#if 0
+		register int *itemp = iwork - n;
+		A = temp;
+		for (i = n; i <= m1; i++) itemp[i] = i;
+		qsort(iwork, m1 - n + 1, sizeof(int), _compare_);
+		tol = temp[itemp[quota]];
+#endif
+	    }
+	}
+
+	for (i = n; i <= m1; )
+	{
+	    if (temp[i] <= tol)
+	    {
+		register int j;
+		r++;
+		/* drop the current row and move the last undropped row here */
+		if (r > 1) /* add to last row */
+		{
+		    /* accumulate the sum (for MILU) */
+		    switch (milu)
+		    {
+			case SMILU_1:
+			case SMILU_2:
+			    saxpy_(&n, &one, &lusup[xlusup_first + i], &m,
+				    &lusup[xlusup_first + m - 1], &m);
+			    break;
+			case SMILU_3:
+			    for (j = 0; j < n; j++)
+				lusup[xlusup_first + (m - 1) + j * m] +=
+					fabs(lusup[xlusup_first + i + j * m]);
+			    break;
+			case SILU:
+			default:
+			    break;
+		    }
+		    scopy_(&n, &lusup[xlusup_first + m1], &m,
+			    &lusup[xlusup_first + i], &m);
+		} /* if (r > 1) */
+		else /* move to last row */
+		{
+		    sswap_(&n, &lusup[xlusup_first + m1], &m,
+			    &lusup[xlusup_first + i], &m);
+		    if (milu == SMILU_3)
+			for (j = 0; j < n; j++) {
+			    lusup[xlusup_first + m1 + j * m] =
+				    fabs(lusup[xlusup_first + m1 + j * m]);
+                        }
+		}
+		lsub[xlsub_first + i] = lsub[xlsub_first + m1];
+		m1--;
+		temp[i] = temp[m1];
+
+		continue;
+	    }
+	    i++;
+
+	} /* for */
+
+    } /* if secondary dropping */
+
+    for (i = n; i < m; i++) temp[i] = 0.0;
+
+    if (r == 0)
+    {
+	*nnzLj += m * n;
+	return 0;
+    }
+
+    /* add dropped entries to the diagnal */
+    if (milu != SILU)
+    {
+	register int j;
+	float t;
+	float omega;
+	for (j = 0; j < n; j++)
+	{
+	    t = lusup[xlusup_first + (m - 1) + j * m];
+            if (t == zero) continue;
+	    if (t > zero)
+		omega = SUPERLU_MIN(2.0 * (1.0 - alpha) / t, 1.0);
+	    else
+		omega = SUPERLU_MAX(2.0 * (1.0 - alpha) / t, -1.0);
+	    t *= omega;
+
+ 	    switch (milu)
+	    {
+		case SMILU_1:
+		    if (t != none) {
+			lusup[xlusup_first + j * inc_diag] *= (one + t);
+                    }
+		    else
+		    {
+			lusup[xlusup_first + j * inc_diag] *= *fill_tol;
+#ifdef DEBUG
+			printf("[1] ZERO PIVOT: FILL col %d.\n", first + j);
+			fflush(stdout);
+#endif
+			nzp++;
+		    }
+		    break;
+		case SMILU_2:
+		    lusup[xlusup_first + j * inc_diag] *= (1.0 + fabs(t));
+		    break;
+		case SMILU_3:
+		    lusup[xlusup_first + j * inc_diag] *= (one + t);
+		    break;
+		case SILU:
+		default:
+		    break;
+	    }
+	}
+	if (nzp > 0) *fill_tol = -nzp;
+    }
+
+    /* Remove dropped entries from the memory and fix the pointers. */
+    m1 = m - r;
+    for (j = 1; j < n; j++)
+    {
+	register int tmp1, tmp2;
+	tmp1 = xlusup_first + j * m1;
+	tmp2 = xlusup_first + j * m;
+	for (i = 0; i < m1; i++)
+	    lusup[i + tmp1] = lusup[i + tmp2];
+    }
+    for (i = 0; i < nzlc; i++)
+	lusup[xlusup_first + i + n * m1] = lusup[xlusup_first + i + n * m];
+    for (i = 0; i < nzlc; i++)
+	lsub[xlsub[last + 1] - r + i] = lsub[xlsub[last + 1] + i];
+    for (i = first + 1; i <= last + 1; i++)
+    {
+	xlusup[i] -= r * (i - first);
+	xlsub[i] -= r;
+    }
+    if (lastc)
+    {
+	xlusup[last + 2] -= r * n;
+	xlsub[last + 2] -= r;
+    }
+
+    *nnzLj += (m - r) * n;
+    return r;
+}
diff --git a/SRC/spanel_dfs.c b/SRC/ilu_spanel_dfs.c
similarity index 68%
copy from SRC/spanel_dfs.c
copy to SRC/ilu_spanel_dfs.c
index cb4417c..a741846 100644
--- a/SRC/spanel_dfs.c
+++ b/SRC/ilu_spanel_dfs.c
@@ -1,46 +1,20 @@
 
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
+/*! @file ilu_spanel_dfs.c
+ * \brief Peforms a symbolic factorization on a panel of symbols and
+ * record the entries with maximum absolute value in each column
  *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
 
 #include "slu_sdefs.h"
 
-void
-spanel_dfs (
-	   const int  m,           /* in - number of rows in the matrix */
-	   const int  w,           /* in */
-	   const int  jcol,        /* in */
-	   SuperMatrix *A,       /* in - original matrix */
-	   int        *perm_r,     /* in */
-	   int        *nseg,	   /* out */
-	   float     *dense,      /* out */
-	   int        *panel_lsub, /* out */
-	   int        *segrep,     /* out */
-	   int        *repfnz,     /* out */
-	   int        *xprune,     /* out */
-	   int        *marker,     /* out */     
-	   int        *parent,     /* working array */
-	   int        *xplore,     /* working array */
-	   GlobalLU_t *Glu         /* modified */
-	   )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -53,9 +27,9 @@ spanel_dfs (
  *   The routine returns one list of the supernodal representatives
  *   in topological order of the dfs that generates them. This list is
  *   a superset of the topological order of each individual column within
- *   the panel. 
+ *   the panel.
  *   The location of the first nonzero in each supernodal segment
- *   (supernodal entry location) is also returned. Each column has a 
+ *   (supernodal entry location) is also returned. Each column has a
  *   separate list for this purpose.
  *
  *   Two marker arrays are used for dfs:
@@ -66,33 +40,56 @@ spanel_dfs (
  *   repfnz: SuperA-col --> PA-row
  *   parent: SuperA-col --> SuperA-col
  *   xplore: SuperA-col --> index to L-structure
- *
+ * </pre>
  */
+void
+ilu_spanel_dfs(
+   const int  m,	   /* in - number of rows in the matrix */
+   const int  w,	   /* in */
+   const int  jcol,	   /* in */
+   SuperMatrix *A,	   /* in - original matrix */
+   int	      *perm_r,	   /* in */
+   int	      *nseg,	   /* out */
+   float     *dense,	   /* out */
+   float     *amax,	   /* out - max. abs. value of each column in panel */
+   int	      *panel_lsub, /* out */
+   int	      *segrep,	   /* out */
+   int	      *repfnz,	   /* out */
+   int	      *marker,	   /* out */
+   int	      *parent,	   /* working array */
+   int	      *xplore,	   /* working array */
+   GlobalLU_t *Glu	   /* modified */
+)
+{
+
     NCPformat *Astore;
     float    *a;
     int       *asub;
     int       *xa_begin, *xa_end;
-    int	      krep, chperm, chmark, chrep, oldrep, kchild, myfnz;
+    int       krep, chperm, chmark, chrep, oldrep, kchild, myfnz;
     int       k, krow, kmark, kperm;
     int       xdfs, maxdfs, kpar;
     int       jj;	   /* index through each column in the panel */
-    int       *marker1;	   /* marker1[jj] >= jcol if vertex jj was visited 
-			      by a previous column within this panel.   */
+    int       *marker1;    /* marker1[jj] >= jcol if vertex jj was visited
+			      by a previous column within this panel. */
     int       *repfnz_col; /* start of each column in the panel */
     float    *dense_col;  /* start of each column in the panel */
     int       nextl_col;   /* next available position in panel_lsub[*,jj] */
     int       *xsup, *supno;
     int       *lsub, *xlsub;
+    float    *amax_col;
+    register double tmp;
 
     /* Initialize pointers */
     Astore     = A->Store;
-    a          = Astore->nzval;
+    a	       = Astore->nzval;
     asub       = Astore->rowind;
     xa_begin   = Astore->colbeg;
     xa_end     = Astore->colend;
     marker1    = marker + m;
     repfnz_col = repfnz;
     dense_col  = dense;
+    amax_col   = amax;
     *nseg      = 0;
     xsup       = Glu->xsup;
     supno      = Glu->supno;
@@ -107,12 +104,15 @@ spanel_dfs (
 	printf("\npanel col %d: ", jj);
 #endif
 
+	*amax_col = 0.0;
 	/* For each nonz in A[*,jj] do dfs */
 	for (k = xa_begin[jj]; k < xa_end[jj]; k++) {
 	    krow = asub[k];
-            dense_col[krow] = a[k];
-	    kmark = marker[krow];    	
-	    if ( kmark == jj ) 
+	    tmp = fabs(a[k]);
+	    if (tmp > *amax_col) *amax_col = tmp;
+	    dense_col[krow] = a[k];
+	    kmark = marker[krow];
+	    if ( kmark == jj )
 		continue;     /* krow visited before, go to the next nonzero */
 
 	    /* For each unmarked nbr krow of jj
@@ -120,11 +120,11 @@ spanel_dfs (
 	     */
 	    marker[krow] = jj;
 	    kperm = perm_r[krow];
-	    
+
 	    if ( kperm == EMPTY ) {
 		panel_lsub[nextl_col++] = krow; /* krow is indexed into A */
 	    }
-	    /* 
+	    /*
 	     * krow is in U: if its supernode-rep krep
 	     * has been explored, update repfnz[*]
 	     */
@@ -136,7 +136,7 @@ spanel_dfs (
 #ifdef CHK_DFS
 		printf("krep %d, myfnz %d, perm_r[%d] %d\n", krep, myfnz, krow, kperm);
 #endif
-		if ( myfnz != EMPTY ) {	/* Representative visited before */
+		if ( myfnz != EMPTY ) { /* Representative visited before */
 		    if ( myfnz > kperm ) repfnz_col[krep] = kperm;
 		    /* continue; */
 		}
@@ -145,34 +145,34 @@ spanel_dfs (
 		    oldrep = EMPTY;
 		    parent[krep] = oldrep;
 		    repfnz_col[krep] = kperm;
-		    xdfs = xlsub[krep];
-		    maxdfs = xprune[krep];
-		    
-#ifdef CHK_DFS 
+		    xdfs = xlsub[xsup[supno[krep]]];
+		    maxdfs = xlsub[krep + 1];
+
+#ifdef CHK_DFS
 		    printf("  xdfs %d, maxdfs %d: ", xdfs, maxdfs);
 		    for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);
 		    printf("\n");
 #endif
 		    do {
-			/* 
-			 * For each unmarked kchild of krep 
+			/*
+			 * For each unmarked kchild of krep
 			 */
 			while ( xdfs < maxdfs ) {
-			    
+
 			    kchild = lsub[xdfs];
 			    xdfs++;
 			    chmark = marker[kchild];
-			    
+
 			    if ( chmark != jj ) { /* Not reached yet */
 				marker[kchild] = jj;
 				chperm = perm_r[kchild];
-			      
+
 				/* Case kchild is in L: place it in L[*,j] */
 				if ( chperm == EMPTY ) {
 				    panel_lsub[nextl_col++] = kchild;
-				} 
-				/* Case kchild is in U: 
-				 *   chrep = its supernode-rep. If its rep has 
+				}
+				/* Case kchild is in U:
+				 *   chrep = its supernode-rep. If its rep has
 				 *   been explored, update its repfnz[*]
 				 */
 				else {
@@ -188,28 +188,28 @@ spanel_dfs (
 				    }
 				    else {
 					/* Cont. dfs at snode-rep of kchild */
-					xplore[krep] = xdfs;	
+					xplore[krep] = xdfs;
 					oldrep = krep;
 					krep = chrep; /* Go deeper down G(L) */
 					parent[krep] = oldrep;
 					repfnz_col[krep] = chperm;
-					xdfs = xlsub[krep];     
-					maxdfs = xprune[krep];
-#ifdef CHK_DFS 
+					xdfs = xlsub[xsup[supno[krep]]];
+					maxdfs = xlsub[krep + 1];
+#ifdef CHK_DFS
 					printf("  xdfs %d, maxdfs %d: ", xdfs, maxdfs);
-					for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);	
+					for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);
 					printf("\n");
 #endif
 				    } /* else */
-				  
+
 				} /* else */
-			      
+
 			    } /* if... */
-			    
+
 			} /* while xdfs < maxdfs */
-			
+
 			/* krow has no more unexplored nbrs:
-			 *    Place snode-rep krep in postorder DFS, if this 
+			 *    Place snode-rep krep in postorder DFS, if this
 			 *    segment is seen for the first time. (Note that
 			 *    "repfnz[krep]" may change later.)
 			 *    Backtrack dfs to its parent.
@@ -219,29 +219,30 @@ spanel_dfs (
 			    ++(*nseg);
 			    marker1[krep] = jj;
 			}
-			
+
 			kpar = parent[krep]; /* Pop stack, mimic recursion */
 			if ( kpar == EMPTY ) break; /* dfs done */
 			krep = kpar;
 			xdfs = xplore[krep];
-			maxdfs = xprune[krep];
-			
-#ifdef CHK_DFS 
+			maxdfs = xlsub[krep + 1];
+
+#ifdef CHK_DFS
 			printf("  pop stack: krep %d,xdfs %d,maxdfs %d: ", krep,xdfs,maxdfs);
 			for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);
 			printf("\n");
 #endif
 		    } while ( kpar != EMPTY ); /* do-while - until empty stack */
-		    
+
 		} /* else */
 		
 	    } /* else */
-	    
+
 	} /* for each nonz in A[*,jj] */
-	
+
 	repfnz_col += m;    /* Move to next column */
-        dense_col += m;
-	
+	dense_col += m;
+	amax_col++;
+
     } /* for jj ... */
-    
+
 }
diff --git a/SRC/ilu_spivotL.c b/SRC/ilu_spivotL.c
new file mode 100644
index 0000000..25b6b00
--- /dev/null
+++ b/SRC/ilu_spivotL.c
@@ -0,0 +1,266 @@
+
+/*! @file ilu_spivotL.c
+ * \brief Performs numerical pivoting
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+
+#include <math.h>
+#include <stdlib.h>
+#include "slu_sdefs.h"
+
+#ifndef SGN
+#define SGN(x) ((x)>=0?1:-1)
+#endif
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *   Performs the numerical pivoting on the current column of L,
+ *   and the CDIV operation.
+ *
+ *   Pivot policy:
+ *   (1) Compute thresh = u * max_(i>=j) abs(A_ij);
+ *   (2) IF user specifies pivot row k and abs(A_kj) >= thresh THEN
+ *	     pivot row = k;
+ *	 ELSE IF abs(A_jj) >= thresh THEN
+ *	     pivot row = j;
+ *	 ELSE
+ *	     pivot row = m;
+ *
+ *   Note: If you absolutely want to use a given pivot order, then set u=0.0.
+ *
+ *   Return value: 0	  success;
+ *		   i > 0  U(i,i) is exactly zero.
+ * </pre>
+ */
+
+int
+ilu_spivotL(
+	const int  jcol,     /* in */
+	const double u,      /* in - diagonal pivoting threshold */
+	int	   *usepr,   /* re-use the pivot sequence given by
+			      * perm_r/iperm_r */
+	int	   *perm_r,  /* may be modified */
+	int	   diagind,  /* diagonal of Pc*A*Pc' */
+	int	   *swap,    /* in/out record the row permutation */
+	int	   *iswap,   /* in/out inverse of swap, it is the same as
+				perm_r after the factorization */
+	int	   *marker,  /* in */
+	int	   *pivrow,  /* in/out, as an input if *usepr!=0 */
+	double	   fill_tol, /* in - fill tolerance of current column
+			      * used for a singular column */
+	milu_t	   milu,     /* in */
+	float	   drop_sum, /* in - computed in ilu_scopy_to_ucol()
+                                (MILU only) */
+	GlobalLU_t *Glu,     /* modified - global LU data structures */
+	SuperLUStat_t *stat  /* output */
+       )
+{
+
+    int		 n;	 /* number of columns */
+    int		 fsupc;  /* first column in the supernode */
+    int		 nsupc;  /* no of columns in the supernode */
+    int		 nsupr;  /* no of rows in the supernode */
+    int		 lptr;	 /* points to the starting subscript of the supernode */
+    register int	 pivptr;
+    int		 old_pivptr, diag, ptr0;
+    register float  pivmax, rtemp;
+    float	 thresh;
+    float	 temp;
+    float	 *lu_sup_ptr;
+    float	 *lu_col_ptr;
+    int		 *lsub_ptr;
+    register int	 isub, icol, k, itemp;
+    int		 *lsub, *xlsub;
+    float	 *lusup;
+    int		 *xlusup;
+    flops_t	 *ops = stat->ops;
+    int		 info;
+
+    /* Initialize pointers */
+    n	       = Glu->n;
+    lsub       = Glu->lsub;
+    xlsub      = Glu->xlsub;
+    lusup      = Glu->lusup;
+    xlusup     = Glu->xlusup;
+    fsupc      = (Glu->xsup)[(Glu->supno)[jcol]];
+    nsupc      = jcol - fsupc;		/* excluding jcol; nsupc >= 0 */
+    lptr       = xlsub[fsupc];
+    nsupr      = xlsub[fsupc+1] - lptr;
+    lu_sup_ptr = &lusup[xlusup[fsupc]]; /* start of the current supernode */
+    lu_col_ptr = &lusup[xlusup[jcol]];	/* start of jcol in the supernode */
+    lsub_ptr   = &lsub[lptr];	/* start of row indices of the supernode */
+
+    /* Determine the largest abs numerical value for partial pivoting;
+       Also search for user-specified pivot, and diagonal element. */
+    pivmax = -1.0;
+    pivptr = nsupc;
+    diag = EMPTY;
+    old_pivptr = nsupc;
+    ptr0 = EMPTY;
+    for (isub = nsupc; isub < nsupr; ++isub) {
+        if (marker[lsub_ptr[isub]] > jcol)
+            continue; /* do not overlap with a later relaxed supernode */
+
+	switch (milu) {
+	    case SMILU_1:
+		rtemp = fabs(lu_col_ptr[isub] + drop_sum);
+		break;
+	    case SMILU_2:
+	    case SMILU_3:
+                /* In this case, drop_sum contains the sum of the abs. value */
+		rtemp = fabs(lu_col_ptr[isub]);
+		break;
+	    case SILU:
+	    default:
+		rtemp = fabs(lu_col_ptr[isub]);
+		break;
+	}
+	if (rtemp > pivmax) { pivmax = rtemp; pivptr = isub; }
+	if (*usepr && lsub_ptr[isub] == *pivrow) old_pivptr = isub;
+	if (lsub_ptr[isub] == diagind) diag = isub;
+	if (ptr0 == EMPTY) ptr0 = isub;
+    }
+
+    if (milu == SMILU_2 || milu == SMILU_3) pivmax += drop_sum;
+
+    /* Test for singularity */
+    if (pivmax < 0.0) {
+	fprintf(stderr, "[0]: jcol=%d, SINGULAR!!!\n", jcol);
+	fflush(stderr);
+	exit(1);
+    }
+    if ( pivmax == 0.0 ) {
+	if (diag != EMPTY)
+	    *pivrow = lsub_ptr[pivptr = diag];
+	else if (ptr0 != EMPTY)
+	    *pivrow = lsub_ptr[pivptr = ptr0];
+	else {
+	    /* look for the first row which does not
+	       belong to any later supernodes */
+	    for (icol = jcol; icol < n; icol++)
+		if (marker[swap[icol]] <= jcol) break;
+	    if (icol >= n) {
+		fprintf(stderr, "[1]: jcol=%d, SINGULAR!!!\n", jcol);
+		fflush(stderr);
+		exit(1);
+	    }
+
+	    *pivrow = swap[icol];
+
+	    /* pick up the pivot row */
+	    for (isub = nsupc; isub < nsupr; ++isub)
+		if ( lsub_ptr[isub] == *pivrow ) { pivptr = isub; break; }
+	}
+	pivmax = fill_tol;
+	lu_col_ptr[pivptr] = pivmax;
+	*usepr = 0;
+#ifdef DEBUG
+	printf("[0] ZERO PIVOT: FILL (%d, %d).\n", *pivrow, jcol);
+	fflush(stdout);
+#endif
+	info =jcol + 1;
+    } /* if (*pivrow == 0.0) */
+    else {
+	thresh = u * pivmax;
+
+	/* Choose appropriate pivotal element by our policy. */
+	if ( *usepr ) {
+	    switch (milu) {
+		case SMILU_1:
+		    rtemp = fabs(lu_col_ptr[old_pivptr] + drop_sum);
+		    break;
+		case SMILU_2:
+		case SMILU_3:
+		    rtemp = fabs(lu_col_ptr[old_pivptr]) + drop_sum;
+		    break;
+		case SILU:
+		default:
+		    rtemp = fabs(lu_col_ptr[old_pivptr]);
+		    break;
+	    }
+	    if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = old_pivptr;
+	    else *usepr = 0;
+	}
+	if ( *usepr == 0 ) {
+	    /* Use diagonal pivot? */
+	    if ( diag >= 0 ) { /* diagonal exists */
+		switch (milu) {
+		    case SMILU_1:
+			rtemp = fabs(lu_col_ptr[diag] + drop_sum);
+			break;
+		    case SMILU_2:
+		    case SMILU_3:
+			rtemp = fabs(lu_col_ptr[diag]) + drop_sum;
+			break;
+		    case SILU:
+		    default:
+			rtemp = fabs(lu_col_ptr[diag]);
+			break;
+		}
+		if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = diag;
+	    }
+	    *pivrow = lsub_ptr[pivptr];
+	}
+	info = 0;
+
+	/* Reset the diagonal */
+	switch (milu) {
+	    case SMILU_1:
+		lu_col_ptr[pivptr] += drop_sum;
+		break;
+	    case SMILU_2:
+	    case SMILU_3:
+		lu_col_ptr[pivptr] += SGN(lu_col_ptr[pivptr]) * drop_sum;
+		break;
+	    case SILU:
+	    default:
+		break;
+	}
+
+    } /* else */
+
+    /* Record pivot row */
+    perm_r[*pivrow] = jcol;
+    if (jcol < n - 1) {
+	register int t1, t2, t;
+	t1 = iswap[*pivrow]; t2 = jcol;
+	if (t1 != t2) {
+	    t = swap[t1]; swap[t1] = swap[t2]; swap[t2] = t;
+	    t1 = swap[t1]; t2 = t;
+	    t = iswap[t1]; iswap[t1] = iswap[t2]; iswap[t2] = t;
+	}
+    } /* if (jcol < n - 1) */
+
+    /* Interchange row subscripts */
+    if ( pivptr != nsupc ) {
+	itemp = lsub_ptr[pivptr];
+	lsub_ptr[pivptr] = lsub_ptr[nsupc];
+	lsub_ptr[nsupc] = itemp;
+
+	/* Interchange numerical values as well, for the whole snode, such 
+	 * that L is indexed the same way as A.
+	 */
+	for (icol = 0; icol <= nsupc; icol++) {
+	    itemp = pivptr + icol * nsupr;
+	    temp = lu_sup_ptr[itemp];
+	    lu_sup_ptr[itemp] = lu_sup_ptr[nsupc + icol*nsupr];
+	    lu_sup_ptr[nsupc + icol*nsupr] = temp;
+	}
+    } /* if */
+
+    /* cdiv operation */
+    ops[FACT] += nsupr - nsupc;
+    temp = 1.0 / lu_col_ptr[nsupc];
+    for (k = nsupc+1; k < nsupr; k++) lu_col_ptr[k] *= temp;
+
+    return info;
+}
diff --git a/SRC/ilu_ssnode_dfs.c b/SRC/ilu_ssnode_dfs.c
new file mode 100644
index 0000000..22ae226
--- /dev/null
+++ b/SRC/ilu_ssnode_dfs.c
@@ -0,0 +1,90 @@
+
+/*! @file ilu_ssnode_dfs.c
+ * \brief Determines the union of row structures of columns within the relaxed node
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_sdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *    ilu_ssnode_dfs() - Determine the union of the row structures of those
+ *    columns within the relaxed snode.
+ *    Note: The relaxed snodes are leaves of the supernodal etree, therefore,
+ *    the portion outside the rectangular supernode must be zero.
+ *
+ * Return value
+ * ============
+ *     0   success;
+ *    >0   number of bytes allocated when run out of memory.
+ * </pre>
+ */
+
+int
+ilu_ssnode_dfs(
+	   const int  jcol,	    /* in - start of the supernode */
+	   const int  kcol,	    /* in - end of the supernode */
+	   const int  *asub,	    /* in */
+	   const int  *xa_begin,    /* in */
+	   const int  *xa_end,	    /* in */
+	   int	      *marker,	    /* modified */
+	   GlobalLU_t *Glu	    /* modified */
+	   )
+{
+
+    register int i, k, nextl;
+    int 	 nsuper, krow, kmark, mem_error;
+    int 	 *xsup, *supno;
+    int 	 *lsub, *xlsub;
+    int 	 nzlmax;
+
+    xsup    = Glu->xsup;
+    supno   = Glu->supno;
+    lsub    = Glu->lsub;
+    xlsub   = Glu->xlsub;
+    nzlmax  = Glu->nzlmax;
+
+    nsuper = ++supno[jcol];	/* Next available supernode number */
+    nextl = xlsub[jcol];
+
+    for (i = jcol; i <= kcol; i++)
+    {
+	/* For each nonzero in A[*,i] */
+	for (k = xa_begin[i]; k < xa_end[i]; k++)
+	{
+	    krow = asub[k];
+	    kmark = marker[krow];
+	    if ( kmark != kcol )
+	    { /* First time visit krow */
+		marker[krow] = kcol;
+		lsub[nextl++] = krow;
+		if ( nextl >= nzlmax )
+		{
+		    if ( (mem_error = sLUMemXpand(jcol, nextl, LSUB, &nzlmax,
+			    Glu)) != 0)
+			return (mem_error);
+		    lsub = Glu->lsub;
+		}
+	    }
+	}
+	supno[i] = nsuper;
+    }
+
+    /* Supernode > 1 */
+    if ( jcol < kcol )
+	for (i = jcol+1; i <= kcol; i++) xlsub[i] = nextl;
+
+    xsup[nsuper+1] = kcol + 1;
+    supno[kcol+1]  = nsuper;
+    xlsub[kcol+1]  = nextl;
+
+    return 0;
+}
diff --git a/SRC/zcolumn_dfs.c b/SRC/ilu_zcolumn_dfs.c
similarity index 50%
copy from SRC/zcolumn_dfs.c
copy to SRC/ilu_zcolumn_dfs.c
index 92a20e2..dec9460 100644
--- a/SRC/zcolumn_dfs.c
+++ b/SRC/ilu_zcolumn_dfs.c
@@ -1,57 +1,31 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * October 15, 2003
+/*! @file ilu_zcolumn_dfs.c
+ * \brief Performs a symbolic factorization
  *
- */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
 */
 
 #include "slu_zdefs.h"
 
-/* What type of supernodes we want */
-#define T2_SUPER
 
-int
-zcolumn_dfs(
-	   const int  m,         /* in - number of rows in the matrix */
-	   const int  jcol,      /* in */
-	   int        *perm_r,   /* in */
-	   int        *nseg,     /* modified - with new segments appended */
-	   int        *lsub_col, /* in - defines the RHS vector to start the dfs */
-	   int        *segrep,   /* modified - with new segments appended */
-	   int        *repfnz,   /* modified */
-	   int        *xprune,   /* modified */
-	   int        *marker,   /* modified */
-	   int        *parent,	 /* working array */
-	   int        *xplore,   /* working array */
-	   GlobalLU_t *Glu       /* modified */
-	   )
-{
-/* 
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
- *   "column_dfs" performs a symbolic factorization on column jcol, and
+ *   ILU_ZCOLUMN_DFS performs a symbolic factorization on column jcol, and
  *   decide the supernode boundary.
  *
- *   This routine does not use numeric values, but only use the RHS 
+ *   This routine does not use numeric values, but only use the RHS
  *   row indices to start the dfs.
  *
  *   A supernode representative is the last column of a supernode.
  *   The nonzeros in U[*,j] are segments that end at supernodal
- *   representatives. The routine returns a list of such supernodal 
+ *   representatives. The routine returns a list of such supernodal
  *   representatives in topological order of the dfs that generates them.
  *   The location of the first nonzero in each such supernodal segment
  *   (supernodal entry location) is also returned.
@@ -71,22 +45,39 @@ zcolumn_dfs(
  * ============
  *     0  success;
  *   > 0  number of bytes allocated when run out of space.
- *
+ * </pre>
  */
+int
+ilu_zcolumn_dfs(
+	   const int  m,	 /* in - number of rows in the matrix */
+	   const int  jcol,	 /* in */
+	   int	      *perm_r,	 /* in */
+	   int	      *nseg,	 /* modified - with new segments appended */
+	   int	      *lsub_col, /* in - defines the RHS vector to start the
+				    dfs */
+	   int	      *segrep,	 /* modified - with new segments appended */
+	   int	      *repfnz,	 /* modified */
+	   int	      *marker,	 /* modified */
+	   int	      *parent,	 /* working array */
+	   int	      *xplore,	 /* working array */
+	   GlobalLU_t *Glu	 /* modified */
+	   )
+{
+
     int     jcolp1, jcolm1, jsuper, nsuper, nextl;
     int     k, krep, krow, kmark, kperm;
-    int     *marker2;           /* Used for small panel LU */
-    int	    fsupc;		/* First column of a snode */
+    int     *marker2;		/* Used for small panel LU */
+    int     fsupc;		/* First column of a snode */
     int     myfnz;		/* First nonz column of a U-segment */
-    int	    chperm, chmark, chrep, kchild;
+    int     chperm, chmark, chrep, kchild;
     int     xdfs, maxdfs, kpar, oldrep;
     int     jptr, jm1ptr;
-    int     ito, ifrom, istop;	/* Used to compress row subscripts */
+    int     ito, ifrom; 	/* Used to compress row subscripts */
     int     mem_error;
     int     *xsup, *supno, *lsub, *xlsub;
     int     nzlmax;
     static  int  first = 1, maxsuper;
-    
+
     xsup    = Glu->xsup;
     supno   = Glu->supno;
     lsub    = Glu->lsub;
@@ -94,7 +85,7 @@ zcolumn_dfs(
     nzlmax  = Glu->nzlmax;
 
     if ( first ) {
-	maxsuper = sp_ienv(3);
+	maxsuper = sp_ienv(7);
 	first = 0;
     }
     jcolp1  = jcol + 1;
@@ -109,11 +100,11 @@ zcolumn_dfs(
     for (k = 0; lsub_col[k] != EMPTY; k++) {
 
 	krow = lsub_col[k];
-    	lsub_col[k] = EMPTY;
-	kmark = marker2[krow];    	
+	lsub_col[k] = EMPTY;
+	kmark = marker2[krow];
 
-	/* krow was visited before, go to the next nonz */
-        if ( kmark == jcol ) continue; 
+	/* krow was visited before, go to the next nonzero */
+	if ( kmark == jcol ) continue;
 
 	/* For each unmarked nbr krow of jcol
 	 *	krow is in L: place it in structure of L[*,jcol]
@@ -121,15 +112,15 @@ zcolumn_dfs(
 	marker2[krow] = jcol;
 	kperm = perm_r[krow];
 
-   	if ( kperm == EMPTY ) {
-	    lsub[nextl++] = krow; 	/* krow is indexed into A */
+	if ( kperm == EMPTY ) {
+	    lsub[nextl++] = krow;	/* krow is indexed into A */
 	    if ( nextl >= nzlmax ) {
-		if ( mem_error = zLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu) )
+		if ((mem_error = zLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu)))
 		    return (mem_error);
 		lsub = Glu->lsub;
 	    }
-            if ( kmark != jcolm1 ) jsuper = EMPTY;/* Row index subset testing */
-  	} else {
+	    if ( kmark != jcolm1 ) jsuper = EMPTY;/* Row index subset testing */
+	} else {
 	    /*	krow is in U: if its supernode-rep krep
 	     *	has been explored, update repfnz[*]
 	     */
@@ -137,60 +128,60 @@ zcolumn_dfs(
 	    myfnz = repfnz[krep];
 
 	    if ( myfnz != EMPTY ) {	/* Visited before */
-	    	if ( myfnz > kperm ) repfnz[krep] = kperm;
+		if ( myfnz > kperm ) repfnz[krep] = kperm;
 		/* continue; */
 	    }
 	    else {
 		/* Otherwise, perform dfs starting at krep */
 		oldrep = EMPTY;
-	 	parent[krep] = oldrep;
-	  	repfnz[krep] = kperm;
-		xdfs = xlsub[krep];
-	  	maxdfs = xprune[krep];
+		parent[krep] = oldrep;
+		repfnz[krep] = kperm;
+		xdfs = xlsub[xsup[supno[krep]]];
+		maxdfs = xlsub[krep + 1];
 
 		do {
-		    /* 
-		     * For each unmarked kchild of krep 
+		    /*
+		     * For each unmarked kchild of krep
 		     */
 		    while ( xdfs < maxdfs ) {
 
-		   	kchild = lsub[xdfs];
+			kchild = lsub[xdfs];
 			xdfs++;
-		  	chmark = marker2[kchild];
+			chmark = marker2[kchild];
 
-		   	if ( chmark != jcol ) { /* Not reached yet */
-		   	    marker2[kchild] = jcol;
-		   	    chperm = perm_r[kchild];
+			if ( chmark != jcol ) { /* Not reached yet */
+			    marker2[kchild] = jcol;
+			    chperm = perm_r[kchild];
 
-		   	    /* Case kchild is in L: place it in L[*,k] */
-		   	    if ( chperm == EMPTY ) {
-			    	lsub[nextl++] = kchild;
+			    /* Case kchild is in L: place it in L[*,k] */
+			    if ( chperm == EMPTY ) {
+				lsub[nextl++] = kchild;
 				if ( nextl >= nzlmax ) {
-				    if ( mem_error =
-					 zLUMemXpand(jcol,nextl,LSUB,&nzlmax,Glu) )
+				    if ( (mem_error = zLUMemXpand(jcol,nextl,
+					    LSUB,&nzlmax,Glu)) )
 					return (mem_error);
 				    lsub = Glu->lsub;
 				}
 				if ( chmark != jcolm1 ) jsuper = EMPTY;
 			    } else {
-		    	    	/* Case kchild is in U: 
-				 *   chrep = its supernode-rep. If its rep has 
-			         *   been explored, update its repfnz[*]
-			         */
-		   	    	chrep = xsup[supno[chperm]+1] - 1;
-		   		myfnz = repfnz[chrep];
-		   		if ( myfnz != EMPTY ) { /* Visited before */
+				/* Case kchild is in U:
+				 *   chrep = its supernode-rep. If its rep has
+				 *   been explored, update its repfnz[*]
+				 */
+				chrep = xsup[supno[chperm]+1] - 1;
+				myfnz = repfnz[chrep];
+				if ( myfnz != EMPTY ) { /* Visited before */
 				    if ( myfnz > chperm )
-     				  	repfnz[chrep] = chperm;
+					repfnz[chrep] = chperm;
 				} else {
-		        	    /* Continue dfs at super-rep of kchild */
-		   		    xplore[krep] = xdfs;	
-		   		    oldrep = krep;
-		   		    krep = chrep; /* Go deeper down G(L^t) */
+				    /* Continue dfs at super-rep of kchild */
+				    xplore[krep] = xdfs;
+				    oldrep = krep;
+				    krep = chrep; /* Go deeper down G(L^t) */
 				    parent[krep] = oldrep;
-		    		    repfnz[krep] = chperm;
-		   		    xdfs = xlsub[krep];     
-				    maxdfs = xprune[krep];
+				    repfnz[krep] = chperm;
+				    xdfs = xlsub[xsup[supno[krep]]];
+				    maxdfs = xlsub[krep + 1];
 				} /* else */
 
 			   } /* else */
@@ -200,8 +191,8 @@ zcolumn_dfs(
 		    } /* while */
 
 		    /* krow has no more unexplored nbrs;
-	   	     *    place supernode-rep krep in postorder DFS.
-	   	     *    backtrack dfs to its parent
+		     *	  place supernode-rep krep in postorder DFS.
+		     *	  backtrack dfs to its parent
 		     */
 		    segrep[*nseg] = krep;
 		    ++(*nseg);
@@ -209,9 +200,9 @@ zcolumn_dfs(
 		    if ( kpar == EMPTY ) break; /* dfs done */
 		    krep = kpar;
 		    xdfs = xplore[krep];
-		    maxdfs = xprune[krep];
+		    maxdfs = xlsub[krep + 1];
 
-		} while ( kpar != EMPTY ); 	/* Until empty stack */
+		} while ( kpar != EMPTY );	/* Until empty stack */
 
 	    } /* else */
 
@@ -223,46 +214,44 @@ zcolumn_dfs(
     if ( jcol == 0 ) { /* Do nothing for column 0 */
 	nsuper = supno[0] = 0;
     } else {
-   	fsupc = xsup[nsuper];
+	fsupc = xsup[nsuper];
 	jptr = xlsub[jcol];	/* Not compressed yet */
 	jm1ptr = xlsub[jcolm1];
 
-#ifdef T2_SUPER
 	if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
-#endif
+
+	/* Always start a new supernode for a singular column */
+	if ( nextl == jptr ) jsuper = EMPTY;
+
 	/* Make sure the number of columns in a supernode doesn't
 	   exceed threshold. */
 	if ( jcol - fsupc >= maxsuper ) jsuper = EMPTY;
 
 	/* If jcol starts a new supernode, reclaim storage space in
 	 * lsub from the previous supernode. Note we only store
-	 * the subscript set of the first and last columns of
-   	 * a supernode. (first for num values, last for pruning)
+	 * the subscript set of the first columns of the supernode.
 	 */
 	if ( jsuper == EMPTY ) {	/* starts a new supernode */
-	    if ( (fsupc < jcolm1-1) ) {	/* >= 3 columns in nsuper */
+	    if ( (fsupc < jcolm1) ) { /* >= 2 columns in nsuper */
 #ifdef CHK_COMPRESS
 		printf("  Compress lsub[] at super %d-%d\n", fsupc, jcolm1);
 #endif
-	        ito = xlsub[fsupc+1];
+		ito = xlsub[fsupc+1];
 		xlsub[jcolm1] = ito;
-		istop = ito + jptr - jm1ptr;
-		xprune[jcolm1] = istop; /* Initialize xprune[jcol-1] */
-		xlsub[jcol] = istop;
-		for (ifrom = jm1ptr; ifrom < nextl; ++ifrom, ++ito)
+		xlsub[jcol] = ito;
+		for (ifrom = jptr; ifrom < nextl; ++ifrom, ++ito)
 		    lsub[ito] = lsub[ifrom];
-		nextl = ito;            /* = istop + length(jcol) */
+		nextl = ito;
 	    }
 	    nsuper++;
 	    supno[jcol] = nsuper;
 	} /* if a new supernode */
 
-    }	/* else: jcol > 0 */ 
-    
+    }	/* else: jcol > 0 */
+
     /* Tidy up the pointers before exit */
     xsup[nsuper+1] = jcolp1;
     supno[jcolp1]  = nsuper;
-    xprune[jcol]   = nextl;	/* Initialize upper bound for pruning */
     xlsub[jcolp1]  = nextl;
 
     return 0;
diff --git a/SRC/ilu_zcopy_to_ucol.c b/SRC/ilu_zcopy_to_ucol.c
new file mode 100644
index 0000000..ddf3a63
--- /dev/null
+++ b/SRC/ilu_zcopy_to_ucol.c
@@ -0,0 +1,211 @@
+
+/*! @file ilu_zcopy_to_ucol.c
+ * \brief Copy a computed column of U to the compressed data structure
+ * and drop some small entries
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory
+ * November, 2010
+ * </pre>
+ */
+
+#include "slu_zdefs.h"
+
+#ifdef DEBUG
+int num_drop_U;
+#endif
+
+extern void zcopy_(int *, doublecomplex [], int *, doublecomplex [], int *);
+
+#if 0
+static doublecomplex *A;  /* used in _compare_ only */
+static int _compare_(const void *a, const void *b)
+{
+    register int *x = (int *)a, *y = (int *)b;
+    register double xx = z_abs1(&A[*x]), yy = z_abs1(&A[*y]);
+    if (xx > yy) return -1;
+    else if (xx < yy) return 1;
+    else return 0;
+}
+#endif
+
+int
+ilu_zcopy_to_ucol(
+	      int	 jcol,	   /* in */
+	      int	 nseg,	   /* in */
+	      int	 *segrep,  /* in */
+	      int	 *repfnz,  /* in */
+	      int	 *perm_r,  /* in */
+	      doublecomplex	 *dense,   /* modified - reset to zero on return */
+	      int  	 drop_rule,/* in */
+	      milu_t	 milu,	   /* in */
+	      double	 drop_tol, /* in */
+	      int	 quota,    /* maximum nonzero entries allowed */
+	      doublecomplex	 *sum,	   /* out - the sum of dropped entries */
+	      int	 *nnzUj,   /* in - out */
+	      GlobalLU_t *Glu,	   /* modified */
+	      double	 *work	   /* working space with minimum size n,
+				    * used by the second dropping rule */
+	      )
+{
+/*
+ * Gather from SPA dense[*] to global ucol[*].
+ */
+    int       ksub, krep, ksupno;
+    int       i, k, kfnz, segsze;
+    int       fsupc, isub, irow;
+    int       jsupno, nextu;
+    int       new_next, mem_error;
+    int       *xsup, *supno;
+    int       *lsub, *xlsub;
+    doublecomplex    *ucol;
+    int       *usub, *xusub;
+    int       nzumax;
+    int       m; /* number of entries in the nonzero U-segments */
+    register double d_max = 0.0, d_min = 1.0 / dlamch_("Safe minimum");
+    register double tmp;
+    doublecomplex zero = {0.0, 0.0};
+    int i_1 = 1;
+
+    xsup    = Glu->xsup;
+    supno   = Glu->supno;
+    lsub    = Glu->lsub;
+    xlsub   = Glu->xlsub;
+    ucol    = Glu->ucol;
+    usub    = Glu->usub;
+    xusub   = Glu->xusub;
+    nzumax  = Glu->nzumax;
+
+    *sum = zero;
+    if (drop_rule == NODROP) {
+	drop_tol = -1.0, quota = Glu->n;
+    }
+
+    jsupno = supno[jcol];
+    nextu  = xusub[jcol];
+    k = nseg - 1;
+    for (ksub = 0; ksub < nseg; ksub++) {
+	krep = segrep[k--];
+	ksupno = supno[krep];
+
+	if ( ksupno != jsupno ) { /* Should go into ucol[] */
+	    kfnz = repfnz[krep];
+	    if ( kfnz != EMPTY ) {	/* Nonzero U-segment */
+
+		fsupc = xsup[ksupno];
+		isub = xlsub[fsupc] + kfnz - fsupc;
+		segsze = krep - kfnz + 1;
+
+		new_next = nextu + segsze;
+		while ( new_next > nzumax ) {
+		    if ((mem_error = zLUMemXpand(jcol, nextu, UCOL, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    ucol = Glu->ucol;
+		    if ((mem_error = zLUMemXpand(jcol, nextu, USUB, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    usub = Glu->usub;
+		    lsub = Glu->lsub;
+		}
+
+		for (i = 0; i < segsze; i++) {
+		    irow = lsub[isub++];
+         	    tmp = z_abs1(&dense[irow]);
+
+		    /* first dropping rule */
+		    if (quota > 0 && tmp >= drop_tol) {
+			if (tmp > d_max) d_max = tmp;
+			if (tmp < d_min) d_min = tmp;
+			usub[nextu] = perm_r[irow];
+			ucol[nextu] = dense[irow];
+			nextu++;
+		    } else {
+			switch (milu) {
+			    case SMILU_1:
+			    case SMILU_2:
+                                z_add(sum, sum, &dense[irow]);
+				break;
+			    case SMILU_3:
+				/* *sum += fabs(dense[irow]);*/
+				sum->r += tmp;
+				break;
+			    case SILU:
+			    default:
+				break;
+			}
+#ifdef DEBUG
+			num_drop_U++;
+#endif
+		    }
+		    dense[irow] = zero;
+		}
+
+	    }
+
+	}
+
+    } /* for each segment... */
+
+    xusub[jcol + 1] = nextu;	  /* Close U[*,jcol] */
+    m = xusub[jcol + 1] - xusub[jcol];
+
+    /* second dropping rule */
+    if (drop_rule & DROP_SECONDARY && m > quota) {
+	register double tol = d_max;
+	register int m0 = xusub[jcol] + m - 1;
+
+	if (quota > 0) {
+	    if (drop_rule & DROP_INTERP) {
+		d_max = 1.0 / d_max; d_min = 1.0 / d_min;
+		tol = 1.0 / (d_max + (d_min - d_max) * quota / m);
+	    } else {
+                i_1 = xusub[jcol];
+                for (i = 0; i < m; ++i, ++i_1) work[i] = z_abs1(&ucol[i_1]);
+		tol = dqselect(m, work, quota);
+#if 0
+		A = &ucol[xusub[jcol]];
+		for (i = 0; i < m; i++) work[i] = i;
+		qsort(work, m, sizeof(int), _compare_);
+		tol = fabs(usub[xusub[jcol] + work[quota]]);
+#endif
+	    }
+	}
+	for (i = xusub[jcol]; i <= m0; ) {
+	    if (z_abs1(&ucol[i]) <= tol) {
+		switch (milu) {
+		    case SMILU_1:
+		    case SMILU_2:
+			z_add(sum, sum, &ucol[i]);
+			break;
+		    case SMILU_3:
+			sum->r += tmp;
+			break;
+		    case SILU:
+		    default:
+			break;
+		}
+		ucol[i] = ucol[m0];
+		usub[i] = usub[m0];
+		m0--;
+		m--;
+#ifdef DEBUG
+		num_drop_U++;
+#endif
+		xusub[jcol + 1]--;
+		continue;
+	    }
+	    i++;
+	}
+    }
+
+    if (milu == SMILU_2) {
+        sum->r = z_abs1(sum); sum->i = 0.0;
+    }
+    if (milu == SMILU_3) sum->i = 0.0;
+
+    *nnzUj += m;
+
+    return 0;
+}
diff --git a/SRC/ilu_zcopy_to_ucol.c.bak b/SRC/ilu_zcopy_to_ucol.c.bak
new file mode 100644
index 0000000..9859c2f
--- /dev/null
+++ b/SRC/ilu_zcopy_to_ucol.c.bak
@@ -0,0 +1,202 @@
+
+/*! @file ilu_zcopy_to_ucol.c
+ * \brief Copy a computed column of U to the compressed data structure
+ * and drop some small entries
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_zdefs.h"
+
+#ifdef DEBUG
+int num_drop_U;
+#endif
+
+static doublecomplex *A;  /* used in _compare_ only */
+static int _compare_(const void *a, const void *b)
+{
+    register int *x = (int *)a, *y = (int *)b;
+    register double xx = z_abs1(&A[*x]), yy = z_abs1(&A[*y]);
+    if (xx > yy) return -1;
+    else if (xx < yy) return 1;
+    else return 0;
+}
+
+
+int
+ilu_zcopy_to_ucol(
+	      int	 jcol,	   /* in */
+	      int	 nseg,	   /* in */
+	      int	 *segrep,  /* in */
+	      int	 *repfnz,  /* in */
+	      int	 *perm_r,  /* in */
+	      doublecomplex	 *dense,   /* modified - reset to zero on return */
+	      int  	 drop_rule,/* in */
+	      milu_t	 milu,	   /* in */
+	      double	 drop_tol, /* in */
+	      int	 quota,    /* maximum nonzero entries allowed */
+	      doublecomplex	 *sum,	   /* out - the sum of dropped entries */
+	      int	 *nnzUj,   /* in - out */
+	      GlobalLU_t *Glu,	   /* modified */
+	      int	 *work	   /* working space with minimum size n,
+				    * used by the second dropping rule */
+	      )
+{
+/*
+ * Gather from SPA dense[*] to global ucol[*].
+ */
+    int       ksub, krep, ksupno;
+    int       i, k, kfnz, segsze;
+    int       fsupc, isub, irow;
+    int       jsupno, nextu;
+    int       new_next, mem_error;
+    int       *xsup, *supno;
+    int       *lsub, *xlsub;
+    doublecomplex    *ucol;
+    int       *usub, *xusub;
+    int       nzumax;
+    int       m; /* number of entries in the nonzero U-segments */
+    register double d_max = 0.0, d_min = 1.0 / dlamch_("Safe minimum");
+    register double tmp;
+    doublecomplex zero = {0.0, 0.0};
+
+    xsup    = Glu->xsup;
+    supno   = Glu->supno;
+    lsub    = Glu->lsub;
+    xlsub   = Glu->xlsub;
+    ucol    = Glu->ucol;
+    usub    = Glu->usub;
+    xusub   = Glu->xusub;
+    nzumax  = Glu->nzumax;
+
+    *sum = zero;
+    if (drop_rule == NODROP) {
+	drop_tol = -1.0, quota = Glu->n;
+    }
+
+    jsupno = supno[jcol];
+    nextu  = xusub[jcol];
+    k = nseg - 1;
+    for (ksub = 0; ksub < nseg; ksub++) {
+	krep = segrep[k--];
+	ksupno = supno[krep];
+
+	if ( ksupno != jsupno ) { /* Should go into ucol[] */
+	    kfnz = repfnz[krep];
+	    if ( kfnz != EMPTY ) {	/* Nonzero U-segment */
+
+		fsupc = xsup[ksupno];
+		isub = xlsub[fsupc] + kfnz - fsupc;
+		segsze = krep - kfnz + 1;
+
+		new_next = nextu + segsze;
+		while ( new_next > nzumax ) {
+		    if ((mem_error = zLUMemXpand(jcol, nextu, UCOL, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    ucol = Glu->ucol;
+		    if ((mem_error = zLUMemXpand(jcol, nextu, USUB, &nzumax,
+			    Glu)) != 0)
+			return (mem_error);
+		    usub = Glu->usub;
+		    lsub = Glu->lsub;
+		}
+
+		for (i = 0; i < segsze; i++) {
+		    irow = lsub[isub++];
+         	    tmp = z_abs1(&dense[irow]);
+
+		    /* first dropping rule */
+		    if (quota > 0 && tmp >= drop_tol) {
+			if (tmp > d_max) d_max = tmp;
+			if (tmp < d_min) d_min = tmp;
+			usub[nextu] = perm_r[irow];
+			ucol[nextu] = dense[irow];
+			nextu++;
+		    } else {
+			switch (milu) {
+			    case SMILU_1:
+			    case SMILU_2:
+                                z_add(sum, sum, &dense[irow]);
+				break;
+			    case SMILU_3:
+				/* *sum += fabs(dense[irow]);*/
+				sum->r += tmp;
+				break;
+			    case SILU:
+			    default:
+				break;
+			}
+#ifdef DEBUG
+			num_drop_U++;
+#endif
+		    }
+		    dense[irow] = zero;
+		}
+
+	    }
+
+	}
+
+    } /* for each segment... */
+
+    xusub[jcol + 1] = nextu;	  /* Close U[*,jcol] */
+    m = xusub[jcol + 1] - xusub[jcol];
+
+    /* second dropping rule */
+    if (drop_rule & DROP_SECONDARY && m > quota) {
+	register double tol = d_max;
+	register int m0 = xusub[jcol] + m - 1;
+
+	if (quota > 0) {
+	    if (drop_rule & DROP_INTERP) {
+		d_max = 1.0 / d_max; d_min = 1.0 / d_min;
+		tol = 1.0 / (d_max + (d_min - d_max) * quota / m);
+	    } else {
+		A = &ucol[xusub[jcol]];
+		for (i = 0; i < m; i++) work[i] = i;
+		qsort(work, m, sizeof(int), _compare_);
+		tol = fabs(usub[xusub[jcol] + work[quota]]);
+	    }
+	}
+	for (i = xusub[jcol]; i <= m0; ) {
+	    if (z_abs1(&ucol[i]) <= tol) {
+		switch (milu) {
+		    case SMILU_1:
+		    case SMILU_2:
+			z_add(sum, sum, &ucol[i]);
+			break;
+		    case SMILU_3:
+			sum->r += tmp;
+			break;
+		    case SILU:
+		    default:
+			break;
+		}
+		ucol[i] = ucol[m0];
+		usub[i] = usub[m0];
+		m0--;
+		m--;
+#ifdef DEBUG
+		num_drop_U++;
+#endif
+		xusub[jcol + 1]--;
+		continue;
+	    }
+	    i++;
+	}
+    }
+
+    if (milu == SMILU_2) {
+        sum->r = z_abs1(sum); sum->i = 0.0;
+    }
+    if (milu == SMILU_3) sum->i = 0.0;
+
+    *nnzUj += m;
+
+    return 0;
+}
diff --git a/SRC/ilu_zdrop_row.c b/SRC/ilu_zdrop_row.c
new file mode 100644
index 0000000..0a140d4
--- /dev/null
+++ b/SRC/ilu_zdrop_row.c
@@ -0,0 +1,339 @@
+
+/*! @file ilu_zdrop_row.c
+ * \brief Drop small rows from L
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include <math.h>
+#include <stdlib.h>
+#include "slu_zdefs.h"
+
+extern void zswap_(int *, doublecomplex [], int *, doublecomplex [], int *);
+extern void zaxpy_(int *, doublecomplex *, doublecomplex [], int *, doublecomplex [], int *);
+extern void zcopy_(int *, doublecomplex [], int *, doublecomplex [], int *);
+extern double dzasum_(int *, doublecomplex *, int *);
+extern double dznrm2_(int *, doublecomplex *, int *);
+extern double dnrm2_(int *, double [], int *);
+extern int izamax_(int *, doublecomplex [], int *);
+
+static double *A;  /* used in _compare_ only */
+static int _compare_(const void *a, const void *b)
+{
+    register int *x = (int *)a, *y = (int *)b;
+    if (A[*x] - A[*y] > 0.0) return -1;
+    else if (A[*x] - A[*y] < 0.0) return 1;
+    else return 0;
+}
+
+/*! \brief
+ * <pre>
+ * Purpose
+ * =======
+ *    ilu_zdrop_row() - Drop some small rows from the previous 
+ *    supernode (L-part only).
+ * </pre>
+ */
+int ilu_zdrop_row(
+	superlu_options_t *options, /* options */
+	int    first,	    /* index of the first column in the supernode */
+	int    last,	    /* index of the last column in the supernode */
+	double drop_tol,    /* dropping parameter */
+	int    quota,	    /* maximum nonzero entries allowed */
+	int    *nnzLj,	    /* in/out number of nonzeros in L(:, 1:last) */
+	double *fill_tol,   /* in/out - on exit, fill_tol=-num_zero_pivots,
+			     * does not change if options->ILU_MILU != SMILU1 */
+	GlobalLU_t *Glu,    /* modified */
+	double dwork[],   /* working space
+	                     * the length of dwork[] should be no less than
+			     * the number of rows in the supernode */
+	double dwork2[], /* working space with the same size as dwork[],
+			     * used only by the second dropping rule */
+	int    lastc	    /* if lastc == 0, there is nothing after the
+			     * working supernode [first:last];
+			     * if lastc == 1, there is one more column after
+			     * the working supernode. */ )
+{
+    register int i, j, k, m1;
+    register int nzlc; /* number of nonzeros in column last+1 */
+    register int xlusup_first, xlsub_first;
+    int m, n; /* m x n is the size of the supernode */
+    int r = 0; /* number of dropped rows */
+    register double *temp;
+    register doublecomplex *lusup = Glu->lusup;
+    register int *lsub = Glu->lsub;
+    register int *xlsub = Glu->xlsub;
+    register int *xlusup = Glu->xlusup;
+    register double d_max = 0.0, d_min = 1.0;
+    int    drop_rule = options->ILU_DropRule;
+    milu_t milu = options->ILU_MILU;
+    norm_t nrm = options->ILU_Norm;
+    doublecomplex zero = {0.0, 0.0};
+    doublecomplex one = {1.0, 0.0};
+    doublecomplex none = {-1.0, 0.0};
+    int i_1 = 1;
+    int inc_diag; /* inc_diag = m + 1 */
+    int nzp = 0;  /* number of zero pivots */
+    double alpha = pow((double)(Glu->n), -1.0 / options->ILU_MILU_Dim);
+
+    xlusup_first = xlusup[first];
+    xlsub_first = xlsub[first];
+    m = xlusup[first + 1] - xlusup_first;
+    n = last - first + 1;
+    m1 = m - 1;
+    inc_diag = m + 1;
+    nzlc = lastc ? (xlusup[last + 2] - xlusup[last + 1]) : 0;
+    temp = dwork - n;
+
+    /* Quick return if nothing to do. */
+    if (m == 0 || m == n || drop_rule == NODROP)
+    {
+	*nnzLj += m * n;
+	return 0;
+    }
+
+    /* basic dropping: ILU(tau) */
+    for (i = n; i <= m1; )
+    {
+	/* the average abs value of ith row */
+	switch (nrm)
+	{
+	    case ONE_NORM:
+		temp[i] = dzasum_(&n, &lusup[xlusup_first + i], &m) / (double)n;
+		break;
+	    case TWO_NORM:
+		temp[i] = dznrm2_(&n, &lusup[xlusup_first + i], &m)
+		    / sqrt((double)n);
+		break;
+	    case INF_NORM:
+	    default:
+		k = izamax_(&n, &lusup[xlusup_first + i], &m) - 1;
+		temp[i] = z_abs1(&lusup[xlusup_first + i + m * k]);
+		break;
+	}
+
+	/* drop small entries due to drop_tol */
+	if (drop_rule & DROP_BASIC && temp[i] < drop_tol)
+	{
+	    r++;
+	    /* drop the current row and move the last undropped row here */
+	    if (r > 1) /* add to last row */
+	    {
+		/* accumulate the sum (for MILU) */
+		switch (milu)
+		{
+		    case SMILU_1:
+		    case SMILU_2:
+			zaxpy_(&n, &one, &lusup[xlusup_first + i], &m,
+				&lusup[xlusup_first + m - 1], &m);
+			break;
+		    case SMILU_3:
+			for (j = 0; j < n; j++)
+			    lusup[xlusup_first + (m - 1) + j * m].r +=
+				    z_abs1(&lusup[xlusup_first + i + j * m]);
+			break;
+		    case SILU:
+		    default:
+			break;
+		}
+		zcopy_(&n, &lusup[xlusup_first + m1], &m,
+                       &lusup[xlusup_first + i], &m);
+	    } /* if (r > 1) */
+	    else /* move to last row */
+	    {
+		zswap_(&n, &lusup[xlusup_first + m1], &m,
+			&lusup[xlusup_first + i], &m);
+		if (milu == SMILU_3)
+		    for (j = 0; j < n; j++) {
+			lusup[xlusup_first + m1 + j * m].r =
+				z_abs1(&lusup[xlusup_first + m1 + j * m]);
+			lusup[xlusup_first + m1 + j * m].i = 0.0;
+                    }
+	    }
+	    lsub[xlsub_first + i] = lsub[xlsub_first + m1];
+	    m1--;
+	    continue;
+	} /* if dropping */
+	else
+	{
+	    if (temp[i] > d_max) d_max = temp[i];
+	    if (temp[i] < d_min) d_min = temp[i];
+	}
+	i++;
+    } /* for */
+
+    /* Secondary dropping: drop more rows according to the quota. */
+    quota = ceil((double)quota / (double)n);
+    if (drop_rule & DROP_SECONDARY && m - r > quota)
+    {
+	register double tol = d_max;
+
+	/* Calculate the second dropping tolerance */
+	if (quota > n)
+	{
+	    if (drop_rule & DROP_INTERP) /* by interpolation */
+	    {
+		d_max = 1.0 / d_max; d_min = 1.0 / d_min;
+		tol = 1.0 / (d_max + (d_min - d_max) * quota / (m - n - r));
+	    }
+	    else /* by quick select */
+	    {
+		int len = m1 - n + 1;
+		dcopy_(&len, dwork, &i_1, dwork2, &i_1);
+		tol = dqselect(len, dwork2, quota - n);
+#if 0
+		register int *itemp = iwork - n;
+		A = temp;
+		for (i = n; i <= m1; i++) itemp[i] = i;
+		qsort(iwork, m1 - n + 1, sizeof(int), _compare_);
+		tol = temp[itemp[quota]];
+#endif
+	    }
+	}
+
+	for (i = n; i <= m1; )
+	{
+	    if (temp[i] <= tol)
+	    {
+		register int j;
+		r++;
+		/* drop the current row and move the last undropped row here */
+		if (r > 1) /* add to last row */
+		{
+		    /* accumulate the sum (for MILU) */
+		    switch (milu)
+		    {
+			case SMILU_1:
+			case SMILU_2:
+			    zaxpy_(&n, &one, &lusup[xlusup_first + i], &m,
+				    &lusup[xlusup_first + m - 1], &m);
+			    break;
+			case SMILU_3:
+			    for (j = 0; j < n; j++)
+				lusup[xlusup_first + (m - 1) + j * m].r +=
+   				  z_abs1(&lusup[xlusup_first + i + j * m]);
+			    break;
+			case SILU:
+			default:
+			    break;
+		    }
+		    zcopy_(&n, &lusup[xlusup_first + m1], &m,
+			    &lusup[xlusup_first + i], &m);
+		} /* if (r > 1) */
+		else /* move to last row */
+		{
+		    zswap_(&n, &lusup[xlusup_first + m1], &m,
+			    &lusup[xlusup_first + i], &m);
+		    if (milu == SMILU_3)
+			for (j = 0; j < n; j++) {
+			    lusup[xlusup_first + m1 + j * m].r =
+				    z_abs1(&lusup[xlusup_first + m1 + j * m]);
+			    lusup[xlusup_first + m1 + j * m].i = 0.0;
+                        }
+		}
+		lsub[xlsub_first + i] = lsub[xlsub_first + m1];
+		m1--;
+		temp[i] = temp[m1];
+
+		continue;
+	    }
+	    i++;
+
+	} /* for */
+
+    } /* if secondary dropping */
+
+    for (i = n; i < m; i++) temp[i] = 0.0;
+
+    if (r == 0)
+    {
+	*nnzLj += m * n;
+	return 0;
+    }
+
+    /* add dropped entries to the diagnal */
+    if (milu != SILU)
+    {
+	register int j;
+	doublecomplex t;
+	double omega;
+	for (j = 0; j < n; j++)
+	{
+	    t = lusup[xlusup_first + (m - 1) + j * m];
+            if (t.r == 0.0 && t.i == 0.0) continue;
+            omega = SUPERLU_MIN(2.0 * (1.0 - alpha) / z_abs1(&t), 1.0);
+	    zd_mult(&t, &t, omega);
+
+ 	    switch (milu)
+	    {
+		case SMILU_1:
+		    if ( !(z_eq(&t, &none)) ) {
+                        z_add(&t, &t, &one);
+                        zz_mult(&lusup[xlusup_first + j * inc_diag],
+			                  &lusup[xlusup_first + j * inc_diag],
+                                          &t);
+                    }
+		    else
+		    {
+                        zd_mult(
+                                &lusup[xlusup_first + j * inc_diag],
+			        &lusup[xlusup_first + j * inc_diag],
+                                *fill_tol);
+#ifdef DEBUG
+			printf("[1] ZERO PIVOT: FILL col %d.\n", first + j);
+			fflush(stdout);
+#endif
+			nzp++;
+		    }
+		    break;
+		case SMILU_2:
+                    zd_mult(&lusup[xlusup_first + j * inc_diag],
+                                          &lusup[xlusup_first + j * inc_diag],
+                                          1.0 + z_abs1(&t));
+		    break;
+		case SMILU_3:
+                    z_add(&t, &t, &one);
+                    zz_mult(&lusup[xlusup_first + j * inc_diag],
+	                              &lusup[xlusup_first + j * inc_diag],
+                                      &t);
+		    break;
+		case SILU:
+		default:
+		    break;
+	    }
+	}
+	if (nzp > 0) *fill_tol = -nzp;
+    }
+
+    /* Remove dropped entries from the memory and fix the pointers. */
+    m1 = m - r;
+    for (j = 1; j < n; j++)
+    {
+	register int tmp1, tmp2;
+	tmp1 = xlusup_first + j * m1;
+	tmp2 = xlusup_first + j * m;
+	for (i = 0; i < m1; i++)
+	    lusup[i + tmp1] = lusup[i + tmp2];
+    }
+    for (i = 0; i < nzlc; i++)
+	lusup[xlusup_first + i + n * m1] = lusup[xlusup_first + i + n * m];
+    for (i = 0; i < nzlc; i++)
+	lsub[xlsub[last + 1] - r + i] = lsub[xlsub[last + 1] + i];
+    for (i = first + 1; i <= last + 1; i++)
+    {
+	xlusup[i] -= r * (i - first);
+	xlsub[i] -= r;
+    }
+    if (lastc)
+    {
+	xlusup[last + 2] -= r * n;
+	xlsub[last + 2] -= r;
+    }
+
+    *nnzLj += (m - r) * n;
+    return r;
+}
diff --git a/SRC/zpanel_dfs.c b/SRC/ilu_zpanel_dfs.c
similarity index 68%
copy from SRC/zpanel_dfs.c
copy to SRC/ilu_zpanel_dfs.c
index 3e535a8..3f5a081 100644
--- a/SRC/zpanel_dfs.c
+++ b/SRC/ilu_zpanel_dfs.c
@@ -1,46 +1,20 @@
 
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
+/*! @file ilu_zpanel_dfs.c
+ * \brief Peforms a symbolic factorization on a panel of symbols and
+ * record the entries with maximum absolute value in each column
  *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
 
 #include "slu_zdefs.h"
 
-void
-zpanel_dfs (
-	   const int  m,           /* in - number of rows in the matrix */
-	   const int  w,           /* in */
-	   const int  jcol,        /* in */
-	   SuperMatrix *A,       /* in - original matrix */
-	   int        *perm_r,     /* in */
-	   int        *nseg,	   /* out */
-	   doublecomplex     *dense,      /* out */
-	   int        *panel_lsub, /* out */
-	   int        *segrep,     /* out */
-	   int        *repfnz,     /* out */
-	   int        *xprune,     /* out */
-	   int        *marker,     /* out */     
-	   int        *parent,     /* working array */
-	   int        *xplore,     /* working array */
-	   GlobalLU_t *Glu         /* modified */
-	   )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -53,9 +27,9 @@ zpanel_dfs (
  *   The routine returns one list of the supernodal representatives
  *   in topological order of the dfs that generates them. This list is
  *   a superset of the topological order of each individual column within
- *   the panel. 
+ *   the panel.
  *   The location of the first nonzero in each supernodal segment
- *   (supernodal entry location) is also returned. Each column has a 
+ *   (supernodal entry location) is also returned. Each column has a
  *   separate list for this purpose.
  *
  *   Two marker arrays are used for dfs:
@@ -66,33 +40,56 @@ zpanel_dfs (
  *   repfnz: SuperA-col --> PA-row
  *   parent: SuperA-col --> SuperA-col
  *   xplore: SuperA-col --> index to L-structure
- *
+ * </pre>
  */
+void
+ilu_zpanel_dfs(
+   const int  m,	   /* in - number of rows in the matrix */
+   const int  w,	   /* in */
+   const int  jcol,	   /* in */
+   SuperMatrix *A,	   /* in - original matrix */
+   int	      *perm_r,	   /* in */
+   int	      *nseg,	   /* out */
+   doublecomplex     *dense,	   /* out */
+   double     *amax,	   /* out - max. abs. value of each column in panel */
+   int	      *panel_lsub, /* out */
+   int	      *segrep,	   /* out */
+   int	      *repfnz,	   /* out */
+   int	      *marker,	   /* out */
+   int	      *parent,	   /* working array */
+   int	      *xplore,	   /* working array */
+   GlobalLU_t *Glu	   /* modified */
+)
+{
+
     NCPformat *Astore;
     doublecomplex    *a;
     int       *asub;
     int       *xa_begin, *xa_end;
-    int	      krep, chperm, chmark, chrep, oldrep, kchild, myfnz;
+    int       krep, chperm, chmark, chrep, oldrep, kchild, myfnz;
     int       k, krow, kmark, kperm;
     int       xdfs, maxdfs, kpar;
     int       jj;	   /* index through each column in the panel */
-    int       *marker1;	   /* marker1[jj] >= jcol if vertex jj was visited 
-			      by a previous column within this panel.   */
+    int       *marker1;    /* marker1[jj] >= jcol if vertex jj was visited
+			      by a previous column within this panel. */
     int       *repfnz_col; /* start of each column in the panel */
     doublecomplex    *dense_col;  /* start of each column in the panel */
     int       nextl_col;   /* next available position in panel_lsub[*,jj] */
     int       *xsup, *supno;
     int       *lsub, *xlsub;
+    double    *amax_col;
+    register double tmp;
 
     /* Initialize pointers */
     Astore     = A->Store;
-    a          = Astore->nzval;
+    a	       = Astore->nzval;
     asub       = Astore->rowind;
     xa_begin   = Astore->colbeg;
     xa_end     = Astore->colend;
     marker1    = marker + m;
     repfnz_col = repfnz;
     dense_col  = dense;
+    amax_col   = amax;
     *nseg      = 0;
     xsup       = Glu->xsup;
     supno      = Glu->supno;
@@ -107,12 +104,15 @@ zpanel_dfs (
 	printf("\npanel col %d: ", jj);
 #endif
 
+	*amax_col = 0.0;
 	/* For each nonz in A[*,jj] do dfs */
 	for (k = xa_begin[jj]; k < xa_end[jj]; k++) {
 	    krow = asub[k];
-            dense_col[krow] = a[k];
-	    kmark = marker[krow];    	
-	    if ( kmark == jj ) 
+	    tmp = z_abs1(&a[k]);
+	    if (tmp > *amax_col) *amax_col = tmp;
+	    dense_col[krow] = a[k];
+	    kmark = marker[krow];
+	    if ( kmark == jj )
 		continue;     /* krow visited before, go to the next nonzero */
 
 	    /* For each unmarked nbr krow of jj
@@ -120,11 +120,11 @@ zpanel_dfs (
 	     */
 	    marker[krow] = jj;
 	    kperm = perm_r[krow];
-	    
+
 	    if ( kperm == EMPTY ) {
 		panel_lsub[nextl_col++] = krow; /* krow is indexed into A */
 	    }
-	    /* 
+	    /*
 	     * krow is in U: if its supernode-rep krep
 	     * has been explored, update repfnz[*]
 	     */
@@ -136,7 +136,7 @@ zpanel_dfs (
 #ifdef CHK_DFS
 		printf("krep %d, myfnz %d, perm_r[%d] %d\n", krep, myfnz, krow, kperm);
 #endif
-		if ( myfnz != EMPTY ) {	/* Representative visited before */
+		if ( myfnz != EMPTY ) { /* Representative visited before */
 		    if ( myfnz > kperm ) repfnz_col[krep] = kperm;
 		    /* continue; */
 		}
@@ -145,34 +145,34 @@ zpanel_dfs (
 		    oldrep = EMPTY;
 		    parent[krep] = oldrep;
 		    repfnz_col[krep] = kperm;
-		    xdfs = xlsub[krep];
-		    maxdfs = xprune[krep];
-		    
-#ifdef CHK_DFS 
+		    xdfs = xlsub[xsup[supno[krep]]];
+		    maxdfs = xlsub[krep + 1];
+
+#ifdef CHK_DFS
 		    printf("  xdfs %d, maxdfs %d: ", xdfs, maxdfs);
 		    for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);
 		    printf("\n");
 #endif
 		    do {
-			/* 
-			 * For each unmarked kchild of krep 
+			/*
+			 * For each unmarked kchild of krep
 			 */
 			while ( xdfs < maxdfs ) {
-			    
+
 			    kchild = lsub[xdfs];
 			    xdfs++;
 			    chmark = marker[kchild];
-			    
+
 			    if ( chmark != jj ) { /* Not reached yet */
 				marker[kchild] = jj;
 				chperm = perm_r[kchild];
-			      
+
 				/* Case kchild is in L: place it in L[*,j] */
 				if ( chperm == EMPTY ) {
 				    panel_lsub[nextl_col++] = kchild;
-				} 
-				/* Case kchild is in U: 
-				 *   chrep = its supernode-rep. If its rep has 
+				}
+				/* Case kchild is in U:
+				 *   chrep = its supernode-rep. If its rep has
 				 *   been explored, update its repfnz[*]
 				 */
 				else {
@@ -188,28 +188,28 @@ zpanel_dfs (
 				    }
 				    else {
 					/* Cont. dfs at snode-rep of kchild */
-					xplore[krep] = xdfs;	
+					xplore[krep] = xdfs;
 					oldrep = krep;
 					krep = chrep; /* Go deeper down G(L) */
 					parent[krep] = oldrep;
 					repfnz_col[krep] = chperm;
-					xdfs = xlsub[krep];     
-					maxdfs = xprune[krep];
-#ifdef CHK_DFS 
+					xdfs = xlsub[xsup[supno[krep]]];
+					maxdfs = xlsub[krep + 1];
+#ifdef CHK_DFS
 					printf("  xdfs %d, maxdfs %d: ", xdfs, maxdfs);
-					for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);	
+					for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);
 					printf("\n");
 #endif
 				    } /* else */
-				  
+
 				} /* else */
-			      
+
 			    } /* if... */
-			    
+
 			} /* while xdfs < maxdfs */
-			
+
 			/* krow has no more unexplored nbrs:
-			 *    Place snode-rep krep in postorder DFS, if this 
+			 *    Place snode-rep krep in postorder DFS, if this
 			 *    segment is seen for the first time. (Note that
 			 *    "repfnz[krep]" may change later.)
 			 *    Backtrack dfs to its parent.
@@ -219,29 +219,30 @@ zpanel_dfs (
 			    ++(*nseg);
 			    marker1[krep] = jj;
 			}
-			
+
 			kpar = parent[krep]; /* Pop stack, mimic recursion */
 			if ( kpar == EMPTY ) break; /* dfs done */
 			krep = kpar;
 			xdfs = xplore[krep];
-			maxdfs = xprune[krep];
-			
-#ifdef CHK_DFS 
+			maxdfs = xlsub[krep + 1];
+
+#ifdef CHK_DFS
 			printf("  pop stack: krep %d,xdfs %d,maxdfs %d: ", krep,xdfs,maxdfs);
 			for (i = xdfs; i < maxdfs; i++) printf(" %d", lsub[i]);
 			printf("\n");
 #endif
 		    } while ( kpar != EMPTY ); /* do-while - until empty stack */
-		    
+
 		} /* else */
 		
 	    } /* else */
-	    
+
 	} /* for each nonz in A[*,jj] */
-	
+
 	repfnz_col += m;    /* Move to next column */
-        dense_col += m;
-	
+	dense_col += m;
+	amax_col++;
+
     } /* for jj ... */
-    
+
 }
diff --git a/SRC/ilu_zpivotL.c b/SRC/ilu_zpivotL.c
new file mode 100644
index 0000000..dafea2b
--- /dev/null
+++ b/SRC/ilu_zpivotL.c
@@ -0,0 +1,274 @@
+
+/*! @file ilu_zpivotL.c
+ * \brief Performs numerical pivoting
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+
+#include <math.h>
+#include <stdlib.h>
+#include "slu_zdefs.h"
+
+#ifndef SGN
+#define SGN(x) ((x)>=0?1:-1)
+#endif
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *   Performs the numerical pivoting on the current column of L,
+ *   and the CDIV operation.
+ *
+ *   Pivot policy:
+ *   (1) Compute thresh = u * max_(i>=j) abs(A_ij);
+ *   (2) IF user specifies pivot row k and abs(A_kj) >= thresh THEN
+ *	     pivot row = k;
+ *	 ELSE IF abs(A_jj) >= thresh THEN
+ *	     pivot row = j;
+ *	 ELSE
+ *	     pivot row = m;
+ *
+ *   Note: If you absolutely want to use a given pivot order, then set u=0.0.
+ *
+ *   Return value: 0	  success;
+ *		   i > 0  U(i,i) is exactly zero.
+ * </pre>
+ */
+
+int
+ilu_zpivotL(
+	const int  jcol,     /* in */
+	const double u,      /* in - diagonal pivoting threshold */
+	int	   *usepr,   /* re-use the pivot sequence given by
+			      * perm_r/iperm_r */
+	int	   *perm_r,  /* may be modified */
+	int	   diagind,  /* diagonal of Pc*A*Pc' */
+	int	   *swap,    /* in/out record the row permutation */
+	int	   *iswap,   /* in/out inverse of swap, it is the same as
+				perm_r after the factorization */
+	int	   *marker,  /* in */
+	int	   *pivrow,  /* in/out, as an input if *usepr!=0 */
+	double	   fill_tol, /* in - fill tolerance of current column
+			      * used for a singular column */
+	milu_t	   milu,     /* in */
+	doublecomplex	   drop_sum, /* in - computed in ilu_zcopy_to_ucol()
+                                (MILU only) */
+	GlobalLU_t *Glu,     /* modified - global LU data structures */
+	SuperLUStat_t *stat  /* output */
+       )
+{
+
+    int		 n;	 /* number of columns */
+    int		 fsupc;  /* first column in the supernode */
+    int		 nsupc;  /* no of columns in the supernode */
+    int		 nsupr;  /* no of rows in the supernode */
+    int		 lptr;	 /* points to the starting subscript of the supernode */
+    register int	 pivptr;
+    int		 old_pivptr, diag, ptr0;
+    register double  pivmax, rtemp;
+    double	 thresh;
+    doublecomplex	 temp;
+    doublecomplex	 *lu_sup_ptr;
+    doublecomplex	 *lu_col_ptr;
+    int		 *lsub_ptr;
+    register int	 isub, icol, k, itemp;
+    int		 *lsub, *xlsub;
+    doublecomplex	 *lusup;
+    int		 *xlusup;
+    flops_t	 *ops = stat->ops;
+    int		 info;
+    doublecomplex one = {1.0, 0.0};
+
+    /* Initialize pointers */
+    n	       = Glu->n;
+    lsub       = Glu->lsub;
+    xlsub      = Glu->xlsub;
+    lusup      = Glu->lusup;
+    xlusup     = Glu->xlusup;
+    fsupc      = (Glu->xsup)[(Glu->supno)[jcol]];
+    nsupc      = jcol - fsupc;		/* excluding jcol; nsupc >= 0 */
+    lptr       = xlsub[fsupc];
+    nsupr      = xlsub[fsupc+1] - lptr;
+    lu_sup_ptr = &lusup[xlusup[fsupc]]; /* start of the current supernode */
+    lu_col_ptr = &lusup[xlusup[jcol]];	/* start of jcol in the supernode */
+    lsub_ptr   = &lsub[lptr];	/* start of row indices of the supernode */
+
+    /* Determine the largest abs numerical value for partial pivoting;
+       Also search for user-specified pivot, and diagonal element. */
+    pivmax = -1.0;
+    pivptr = nsupc;
+    diag = EMPTY;
+    old_pivptr = nsupc;
+    ptr0 = EMPTY;
+    for (isub = nsupc; isub < nsupr; ++isub) {
+        if (marker[lsub_ptr[isub]] > jcol)
+            continue; /* do not overlap with a later relaxed supernode */
+
+	switch (milu) {
+	    case SMILU_1:
+                z_add(&temp, &lu_col_ptr[isub], &drop_sum);
+		rtemp = z_abs1(&temp);
+		break;
+	    case SMILU_2:
+	    case SMILU_3:
+                /* In this case, drop_sum contains the sum of the abs. value */
+		rtemp = z_abs1(&lu_col_ptr[isub]);
+		break;
+	    case SILU:
+	    default:
+		rtemp = z_abs1(&lu_col_ptr[isub]);
+		break;
+	}
+	if (rtemp > pivmax) { pivmax = rtemp; pivptr = isub; }
+	if (*usepr && lsub_ptr[isub] == *pivrow) old_pivptr = isub;
+	if (lsub_ptr[isub] == diagind) diag = isub;
+	if (ptr0 == EMPTY) ptr0 = isub;
+    }
+
+    if (milu == SMILU_2 || milu == SMILU_3) pivmax += drop_sum.r;
+
+    /* Test for singularity */
+    if (pivmax < 0.0) {
+	fprintf(stderr, "[0]: jcol=%d, SINGULAR!!!\n", jcol);
+	fflush(stderr);
+	exit(1);
+    }
+    if ( pivmax == 0.0 ) {
+	if (diag != EMPTY)
+	    *pivrow = lsub_ptr[pivptr = diag];
+	else if (ptr0 != EMPTY)
+	    *pivrow = lsub_ptr[pivptr = ptr0];
+	else {
+	    /* look for the first row which does not
+	       belong to any later supernodes */
+	    for (icol = jcol; icol < n; icol++)
+		if (marker[swap[icol]] <= jcol) break;
+	    if (icol >= n) {
+		fprintf(stderr, "[1]: jcol=%d, SINGULAR!!!\n", jcol);
+		fflush(stderr);
+		exit(1);
+	    }
+
+	    *pivrow = swap[icol];
+
+	    /* pick up the pivot row */
+	    for (isub = nsupc; isub < nsupr; ++isub)
+		if ( lsub_ptr[isub] == *pivrow ) { pivptr = isub; break; }
+	}
+	pivmax = fill_tol;
+	lu_col_ptr[pivptr].r = pivmax;
+	lu_col_ptr[pivptr].i = 0.0;
+	*usepr = 0;
+#ifdef DEBUG
+	printf("[0] ZERO PIVOT: FILL (%d, %d).\n", *pivrow, jcol);
+	fflush(stdout);
+#endif
+	info =jcol + 1;
+    } /* if (*pivrow == 0.0) */
+    else {
+	thresh = u * pivmax;
+
+	/* Choose appropriate pivotal element by our policy. */
+	if ( *usepr ) {
+	    switch (milu) {
+		case SMILU_1:
+                    z_add(&temp, &lu_col_ptr[old_pivptr], &drop_sum);
+		    rtemp = z_abs1(&temp);
+		    break;
+		case SMILU_2:
+		case SMILU_3:
+		    rtemp = z_abs1(&lu_col_ptr[old_pivptr]) + drop_sum.r;
+		    break;
+		case SILU:
+		default:
+		    rtemp = z_abs1(&lu_col_ptr[old_pivptr]);
+		    break;
+	    }
+	    if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = old_pivptr;
+	    else *usepr = 0;
+	}
+	if ( *usepr == 0 ) {
+	    /* Use diagonal pivot? */
+	    if ( diag >= 0 ) { /* diagonal exists */
+		switch (milu) {
+		    case SMILU_1:
+                        z_add(&temp, &lu_col_ptr[diag], &drop_sum);
+         	        rtemp = z_abs1(&temp);
+			break;
+		    case SMILU_2:
+		    case SMILU_3:
+			rtemp = z_abs1(&lu_col_ptr[diag]) + drop_sum.r;
+			break;
+		    case SILU:
+		    default:
+			rtemp = z_abs1(&lu_col_ptr[diag]);
+			break;
+		}
+		if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = diag;
+	    }
+	    *pivrow = lsub_ptr[pivptr];
+	}
+	info = 0;
+
+	/* Reset the diagonal */
+	switch (milu) {
+	    case SMILU_1:
+		z_add(&lu_col_ptr[pivptr], &lu_col_ptr[pivptr], &drop_sum);
+		break;
+	    case SMILU_2:
+	    case SMILU_3:
+                temp = z_sgn(&lu_col_ptr[pivptr]);
+                zz_mult(&temp, &temp, &drop_sum);
+                z_add(&lu_col_ptr[pivptr], &lu_col_ptr[pivptr], &drop_sum);
+		break;
+	    case SILU:
+	    default:
+		break;
+	}
+
+    } /* else */
+
+    /* Record pivot row */
+    perm_r[*pivrow] = jcol;
+    if (jcol < n - 1) {
+	register int t1, t2, t;
+	t1 = iswap[*pivrow]; t2 = jcol;
+	if (t1 != t2) {
+	    t = swap[t1]; swap[t1] = swap[t2]; swap[t2] = t;
+	    t1 = swap[t1]; t2 = t;
+	    t = iswap[t1]; iswap[t1] = iswap[t2]; iswap[t2] = t;
+	}
+    } /* if (jcol < n - 1) */
+
+    /* Interchange row subscripts */
+    if ( pivptr != nsupc ) {
+	itemp = lsub_ptr[pivptr];
+	lsub_ptr[pivptr] = lsub_ptr[nsupc];
+	lsub_ptr[nsupc] = itemp;
+
+	/* Interchange numerical values as well, for the whole snode, such 
+	 * that L is indexed the same way as A.
+	 */
+	for (icol = 0; icol <= nsupc; icol++) {
+	    itemp = pivptr + icol * nsupr;
+	    temp = lu_sup_ptr[itemp];
+	    lu_sup_ptr[itemp] = lu_sup_ptr[nsupc + icol*nsupr];
+	    lu_sup_ptr[nsupc + icol*nsupr] = temp;
+	}
+    } /* if */
+
+    /* cdiv operation */
+    ops[FACT] += 10 * (nsupr - nsupc);
+    z_div(&temp, &one, &lu_col_ptr[nsupc]);
+    for (k = nsupc+1; k < nsupr; k++) 
+	zz_mult(&lu_col_ptr[k], &lu_col_ptr[k], &temp);
+
+    return info;
+}
diff --git a/SRC/ilu_zsnode_dfs.c b/SRC/ilu_zsnode_dfs.c
new file mode 100644
index 0000000..e7a357d
--- /dev/null
+++ b/SRC/ilu_zsnode_dfs.c
@@ -0,0 +1,90 @@
+
+/*! @file ilu_zsnode_dfs.c
+ * \brief Determines the union of row structures of columns within the relaxed node
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_zdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *    ilu_zsnode_dfs() - Determine the union of the row structures of those
+ *    columns within the relaxed snode.
+ *    Note: The relaxed snodes are leaves of the supernodal etree, therefore,
+ *    the portion outside the rectangular supernode must be zero.
+ *
+ * Return value
+ * ============
+ *     0   success;
+ *    >0   number of bytes allocated when run out of memory.
+ * </pre>
+ */
+
+int
+ilu_zsnode_dfs(
+	   const int  jcol,	    /* in - start of the supernode */
+	   const int  kcol,	    /* in - end of the supernode */
+	   const int  *asub,	    /* in */
+	   const int  *xa_begin,    /* in */
+	   const int  *xa_end,	    /* in */
+	   int	      *marker,	    /* modified */
+	   GlobalLU_t *Glu	    /* modified */
+	   )
+{
+
+    register int i, k, nextl;
+    int 	 nsuper, krow, kmark, mem_error;
+    int 	 *xsup, *supno;
+    int 	 *lsub, *xlsub;
+    int 	 nzlmax;
+
+    xsup    = Glu->xsup;
+    supno   = Glu->supno;
+    lsub    = Glu->lsub;
+    xlsub   = Glu->xlsub;
+    nzlmax  = Glu->nzlmax;
+
+    nsuper = ++supno[jcol];	/* Next available supernode number */
+    nextl = xlsub[jcol];
+
+    for (i = jcol; i <= kcol; i++)
+    {
+	/* For each nonzero in A[*,i] */
+	for (k = xa_begin[i]; k < xa_end[i]; k++)
+	{
+	    krow = asub[k];
+	    kmark = marker[krow];
+	    if ( kmark != kcol )
+	    { /* First time visit krow */
+		marker[krow] = kcol;
+		lsub[nextl++] = krow;
+		if ( nextl >= nzlmax )
+		{
+		    if ( (mem_error = zLUMemXpand(jcol, nextl, LSUB, &nzlmax,
+			    Glu)) != 0)
+			return (mem_error);
+		    lsub = Glu->lsub;
+		}
+	    }
+	}
+	supno[i] = nsuper;
+    }
+
+    /* Supernode > 1 */
+    if ( jcol < kcol )
+	for (i = jcol+1; i <= kcol; i++) xlsub[i] = nextl;
+
+    xsup[nsuper+1] = kcol + 1;
+    supno[kcol+1]  = nsuper;
+    xlsub[kcol+1]  = nextl;
+
+    return 0;
+}
diff --git a/SRC/izmax1.c b/SRC/izmax1.c
index 1a73e1f..d0154ab 100644
--- a/SRC/izmax1.c
+++ b/SRC/izmax1.c
@@ -1,16 +1,20 @@
+/*! @file izmax1.c
+ * \brief Finds the index of the element whose real part has maximum absolute value
+ *
+ * <pre>
+ *     -- LAPACK auxiliary routine (version 2.0) --   
+ *     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
+ *     Courant Institute, Argonne National Lab, and Rice University   
+ *     October 31, 1992   
+ * </pre>
+ */
 #include <math.h>
-#include "slu_Cnames.h"
 #include "slu_dcomplex.h"
+#include "slu_Cnames.h"
 
-int
-izmax1_(int *n, doublecomplex *cx, int *incx)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       September 30, 1994   
-
+/*! \brief 
 
+<pre>
     Purpose   
     =======   
 
@@ -35,8 +39,14 @@ izmax1_(int *n, doublecomplex *cx, int *incx)
             The spacing between successive values of CX.  INCX >= 1.   
 
    ===================================================================== 
+</pre>
 */  
 
+int
+izmax1_(int *n, doublecomplex *cx, int *incx)
+{
+
+
     /* System generated locals */
     int ret_val, i__1, i__2;
     double d__1;
diff --git a/SRC/lsame.c b/SRC/lsame.c
index 113c6d0..073a551 100644
--- a/SRC/lsame.c
+++ b/SRC/lsame.c
@@ -1,12 +1,18 @@
+/*! @file lsame.c
+ * \brief  Check if CA is the same letter as CB regardless of case.
+ *
+ * <pre>
+ * -- LAPACK auxiliary routine (version 2.0) --   
+ *      Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
+ *      Courant Institute, Argonne National Lab, and Rice University   
+ *      September 30, 1994   
+ * </pre>
+ */
 #include "slu_Cnames.h"
 
-int lsame_(char *ca, char *cb)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       September 30, 1994   
+/*! \brief
 
+ <pre>
     Purpose   
     =======   
 
@@ -20,8 +26,13 @@ int lsame_(char *ca, char *cb)
             CA and CB specify the single characters to be compared.   
 
    ===================================================================== 
+</pre>
 */  
 
+int lsame_(char *ca, char *cb)
+{
+
+
     /* System generated locals */
     int ret_val;
     
diff --git a/SRC/mark_relax.c b/SRC/mark_relax.c
new file mode 100644
index 0000000..b2338aa
--- /dev/null
+++ b/SRC/mark_relax.c
@@ -0,0 +1,47 @@
+/*! @file mark_relax.c
+ * \brief Record the rows pivoted by the relaxed supernodes.
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 1, 2009
+ * <\pre>
+ */
+#include "slu_ddefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *    mark_relax() - record the rows used by the relaxed supernodes.
+ * </pre>
+ */
+int mark_relax(
+	int n,		    /* order of the matrix A */
+	int *relax_end,     /* last column in a relaxed supernode.
+			     * if j-th column starts a relaxed supernode,
+			     * relax_end[j] represents the last column of
+			     * this supernode. */
+	int *relax_fsupc,   /* first column in a relaxed supernode.
+			     * relax_fsupc[j] represents the first column of
+			     * j-th supernode. */
+	int *xa_begin,	    /* Astore->colbeg */
+	int *xa_end,	    /* Astore->colend */
+	int *asub,	    /* row index of A */
+	int *marker	    /* marker[j] is the maximum column index if j-th
+			     * row belongs to a relaxed supernode. */ )
+{
+    register int jcol, kcol;
+    register int i, j, k;
+
+    for (i = 0; i < n && relax_fsupc[i] != EMPTY; i++)
+    {
+	jcol = relax_fsupc[i];	/* first column */
+	kcol = relax_end[jcol]; /* last column */
+	for (j = jcol; j <= kcol; j++)
+	    for (k = xa_begin[j]; k < xa_end[j]; k++)
+		marker[asub[k]] = jcol;
+    }
+    return i;
+}
diff --git a/SRC/memory.c b/SRC/memory.c
index 25868f6..4e15d6c 100644
--- a/SRC/memory.c
+++ b/SRC/memory.c
@@ -1,9 +1,12 @@
-/*
+/*! @file memory.c
+ * \brief Precision-independent memory-related routines
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 /** Precision-independent memory-related routines.
     (Shared by [sdcz]memory.c) **/
@@ -86,8 +89,7 @@ void superlu_free(void *addr)
 #endif
 
 
-/*
- * Set up pointers for integer working arrays.
+/*! \brief Set up pointers for integer working arrays.
  */
 void
 SetIWork(int m, int n, int panel_size, int *iworkptr, int **segrep,
@@ -131,7 +133,7 @@ user_bcopy(char *src, char *dest, int bytes)
 int *intMalloc(int n)
 {
     int *buf;
-    buf = (int *) SUPERLU_MALLOC(n * sizeof(int));
+    buf = (int *) SUPERLU_MALLOC((size_t) n * sizeof(int));
     if ( !buf ) {
 	ABORT("SUPERLU_MALLOC fails for buf in intMalloc()");
     }
diff --git a/SRC/old_colamd.c b/SRC/old_colamd.c
deleted file mode 100644
index b60718f..0000000
--- a/SRC/old_colamd.c
+++ /dev/null
@@ -1,2583 +0,0 @@
-/* ========================================================================== */
-/* === colamd - a sparse matrix column ordering algorithm =================== */
-/* ========================================================================== */
-
-/*
-    colamd:  An approximate minimum degree column ordering algorithm.
-
-    Purpose:
-
-	Colamd computes a permutation Q such that the Cholesky factorization of
-	(AQ)'(AQ) has less fill-in and requires fewer floating point operations
-	than A'A.  This also provides a good ordering for sparse partial
-	pivoting methods, P(AQ) = LU, where Q is computed prior to numerical
-	factorization, and P is computed during numerical factorization via
-	conventional partial pivoting with row interchanges.  Colamd is the
-	column ordering method used in SuperLU, part of the ScaLAPACK library.
-	It is also available as user-contributed software for Matlab 5.2,
-	available from MathWorks, Inc. (http://www.mathworks.com).  This
-	routine can be used in place of COLMMD in Matlab.  By default, the \
-	and / operators in Matlab perform a column ordering (using COLMMD)
-	prior to LU factorization using sparse partial pivoting, in the
-	built-in Matlab LU(A) routine.
-
-    Authors:
-
-	The authors of the code itself are Stefan I. Larimore and Timothy A.
-	Davis (davis at cise.ufl.edu), University of Florida.  The algorithm was
-	developed in collaboration with John Gilbert, Xerox PARC, and Esmond
-	Ng, Oak Ridge National Laboratory.
-
-    Date:
-
-	August 3, 1998.  Version 1.0.
-
-    Acknowledgements:
-
-	This work was supported by the National Science Foundation, under
-	grants DMS-9504974 and DMS-9803599.
-
-    Notice:
-
-	Copyright (c) 1998 by the University of Florida.  All Rights Reserved.
-
-	THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-	EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
-
-	Permission is hereby granted to use or copy this program for any
-	purpose, provided the above notices are retained on all copies.
-	User documentation of any code that uses this code must cite the
-	Authors, the Copyright, and "Used by permission."  If this code is
-	accessible from within Matlab, then typing "help colamd" or "colamd"
-	(with no arguments) must cite the Authors.  Permission to modify the
-	code and to distribute modified code is granted, provided the above
-	notices are retained, and a notice that the code was modified is
-	included with the above copyright notice.  You must also retain the
-	Availability information below, of the original version.
-
-	This software is provided free of charge.
-
-    Availability:
-
-	This file is located at
-
-		http://www.cise.ufl.edu/~davis/colamd/colamd.c
-
-	The colamd.h file is required, located in the same directory.
-	The colamdmex.c file provides a Matlab interface for colamd.
-	The symamdmex.c file provides a Matlab interface for symamd, which is
-	a symmetric ordering based on this code, colamd.c.  All codes are
-	purely ANSI C compliant (they use no Unix-specific routines, include
-	files, etc.).
-*/
-
-/* ========================================================================== */
-/* === Description of user-callable routines ================================ */
-/* ========================================================================== */
-
-/*
-    Each user-callable routine (declared as PUBLIC) is briefly described below.
-    Refer to the comments preceding each routine for more details.
-
-    ----------------------------------------------------------------------------
-    colamd_recommended:
-    ----------------------------------------------------------------------------
-
-	Usage:
-
-	    Alen = colamd_recommended (nnz, n_row, n_col) ;
-
-	Purpose:
-
-	    Returns recommended value of Alen for use by colamd.  Returns -1
-	    if any input argument is negative.
-
-	Arguments:
-
-	    int nnz ;		Number of nonzeros in the matrix A.  This must
-				be the same value as p [n_col] in the call to
-				colamd - otherwise you will get a wrong value
-				of the recommended memory to use.
-	    int n_row ;		Number of rows in the matrix A.
-	    int n_col ;		Number of columns in the matrix A.
-
-    ----------------------------------------------------------------------------
-    colamd_set_defaults:
-    ----------------------------------------------------------------------------
-
-	Usage:
-
-	    colamd_set_defaults (knobs) ;
-
-	Purpose:
-
-	    Sets the default parameters.
-
-	Arguments:
-
-	    double knobs [COLAMD_KNOBS] ;	Output only.
-
-		Rows with more than (knobs [COLAMD_DENSE_ROW] * n_col) entries
-		are removed prior to ordering.  Columns with more than
-		(knobs [COLAMD_DENSE_COL] * n_row) entries are removed
-		prior to ordering, and placed last in the output column
-		ordering.  Default values of these two knobs are both 0.5.
-		Currently, only knobs [0] and knobs [1] are used, but future
-		versions may use more knobs.  If so, they will be properly set
-		to their defaults by the future version of colamd_set_defaults,
-		so that the code that calls colamd will not need to change,
-		assuming that you either use colamd_set_defaults, or pass a
-		(double *) NULL pointer as the knobs array to colamd.
-
-    ----------------------------------------------------------------------------
-    colamd:
-    ----------------------------------------------------------------------------
-
-	Usage:
-
-	    colamd (n_row, n_col, Alen, A, p, knobs) ;
-
-	Purpose:
-
-	    Computes a column ordering (Q) of A such that P(AQ)=LU or
-	    (AQ)'AQ=LL' have less fill-in and require fewer floating point
-	    operations than factorizing the unpermuted matrix A or A'A,
-	    respectively.
-
-	Arguments:
-
-	    int n_row ;
-
-		Number of rows in the matrix A.
-		Restriction:  n_row >= 0.
-		Colamd returns FALSE if n_row is negative.
-
-	    int n_col ;
-
-		Number of columns in the matrix A.
-		Restriction:  n_col >= 0.
-		Colamd returns FALSE if n_col is negative.
-
-	    int Alen ;
-
-		Restriction (see note):
-		Alen >= 2*nnz + 6*(n_col+1) + 4*(n_row+1) + n_col + COLAMD_STATS
-		Colamd returns FALSE if these conditions are not met.
-
-		Note:  this restriction makes an modest assumption regarding
-		the size of the two typedef'd structures, below.  We do,
-		however, guarantee that
-		Alen >= colamd_recommended (nnz, n_row, n_col)
-		will be sufficient.
-
-	    int A [Alen] ;	Input argument, stats on output.
-
-		A is an integer array of size Alen.  Alen must be at least as
-		large as the bare minimum value given above, but this is very
-		low, and can result in excessive run time.  For best
-		performance, we recommend that Alen be greater than or equal to
-		colamd_recommended (nnz, n_row, n_col), which adds
-		nnz/5 to the bare minimum value given above.
-
-		On input, the row indices of the entries in column c of the
-		matrix are held in A [(p [c]) ... (p [c+1]-1)].  The row indices
-		in a given column c need not be in ascending order, and
-		duplicate row indices may be be present.  However, colamd will
-		work a little faster if both of these conditions are met
-		(Colamd puts the matrix into this format, if it finds that the
-		the conditions are not met).
-
-		The matrix is 0-based.  That is, rows are in the range 0 to
-		n_row-1, and columns are in the range 0 to n_col-1.  Colamd
-		returns FALSE if any row index is out of range.
-
-		The contents of A are modified during ordering, and are thus
-		undefined on output with the exception of a few statistics
-		about the ordering (A [0..COLAMD_STATS-1]):
-		A [0]:  number of dense or empty rows ignored.
-		A [1]:  number of dense or empty columns ignored (and ordered
-			last in the output permutation p)
-		A [2]:  number of garbage collections performed.
-		A [3]:  0, if all row indices in each column were in sorted
-			  order, and no duplicates were present.
-			1, otherwise (in which case colamd had to do more work)
-		Note that a row can become "empty" if it contains only
-		"dense" and/or "empty" columns, and similarly a column can
-		become "empty" if it only contains "dense" and/or "empty" rows.
-		Future versions may return more statistics in A, but the usage
-		of these 4 entries in A will remain unchanged.
-
-	    int p [n_col+1] ;	Both input and output argument.
-
-		p is an integer array of size n_col+1.  On input, it holds the
-		"pointers" for the column form of the matrix A.  Column c of
-		the matrix A is held in A [(p [c]) ... (p [c+1]-1)].  The first
-		entry, p [0], must be zero, and p [c] <= p [c+1] must hold
-		for all c in the range 0 to n_col-1.  The value p [n_col] is
-		thus the total number of entries in the pattern of the matrix A.
-		Colamd returns FALSE if these conditions are not met.
-
-		On output, if colamd returns TRUE, the array p holds the column
-		permutation (Q, for P(AQ)=LU or (AQ)'(AQ)=LL'), where p [0] is
-		the first column index in the new ordering, and p [n_col-1] is
-		the last.  That is, p [k] = j means that column j of A is the
-		kth pivot column, in AQ, where k is in the range 0 to n_col-1
-		(p [0] = j means that column j of A is the first column in AQ).
-
-		If colamd returns FALSE, then no permutation is returned, and
-		p is undefined on output.
-
-	    double knobs [COLAMD_KNOBS] ;	Input only.
-
-		See colamd_set_defaults for a description.  If the knobs array
-		is not present (that is, if a (double *) NULL pointer is passed
-		in its place), then the default values of the parameters are
-		used instead.
-
-*/
-
-
-/* ========================================================================== */
-/* === Include files ======================================================== */
-/* ========================================================================== */
-
-/* limits.h:  the largest positive integer (INT_MAX) */
-#include <limits.h>
-
-/* colamd.h:  knob array size, stats output size, and global prototypes */
-#include "colamd.h"
-
-/* ========================================================================== */
-/* === Scaffolding code definitions  ======================================== */
-/* ========================================================================== */
-
-/* Ensure that debugging is turned off: */
-#ifndef NDEBUG
-#define NDEBUG
-#endif
-
-/* assert.h:  the assert macro (no debugging if NDEBUG is defined) */
-#include <assert.h>
-
-/*
-   Our "scaffolding code" philosophy:  In our opinion, well-written library
-   code should keep its "debugging" code, and just normally have it turned off
-   by the compiler so as not to interfere with performance.  This serves
-   several purposes:
-
-   (1) assertions act as comments to the reader, telling you what the code
-	expects at that point.  All assertions will always be true (unless
-	there really is a bug, of course).
-
-   (2) leaving in the scaffolding code assists anyone who would like to modify
-	the code, or understand the algorithm (by reading the debugging output,
-	one can get a glimpse into what the code is doing).
-
-   (3) (gasp!) for actually finding bugs.  This code has been heavily tested
-	and "should" be fully functional and bug-free ... but you never know...
-
-    To enable debugging, comment out the "#define NDEBUG" above.  The code will
-    become outrageously slow when debugging is enabled.  To control the level of
-    debugging output, set an environment variable D to 0 (little), 1 (some),
-    2, 3, or 4 (lots).
-*/
-
-/* ========================================================================== */
-/* === Row and Column structures ============================================ */
-/* ========================================================================== */
-
-typedef struct ColInfo_struct
-{
-    int start ;		/* index for A of first row in this column, or DEAD */
-			/* if column is dead */
-    int length ;	/* number of rows in this column */
-    union
-    {
-	int thickness ;	/* number of original columns represented by this */
-			/* col, if the column is alive */
-	int parent ;	/* parent in parent tree super-column structure, if */
-			/* the column is dead */
-    } shared1 ;
-    union
-    {
-	int score ;	/* the score used to maintain heap, if col is alive */
-	int order ;	/* pivot ordering of this column, if col is dead */
-    } shared2 ;
-    union
-    {
-	int headhash ;	/* head of a hash bucket, if col is at the head of */
-			/* a degree list */
-	int hash ;	/* hash value, if col is not in a degree list */
-	int prev ;	/* previous column in degree list, if col is in a */
-			/* degree list (but not at the head of a degree list) */
-    } shared3 ;
-    union
-    {
-	int degree_next ;	/* next column, if col is in a degree list */
-	int hash_next ;		/* next column, if col is in a hash list */
-    } shared4 ;
-
-} ColInfo ;
-
-typedef struct RowInfo_struct
-{
-    int start ;		/* index for A of first col in this row */
-    int length ;	/* number of principal columns in this row */
-    union
-    {
-	int degree ;	/* number of principal & non-principal columns in row */
-	int p ;		/* used as a row pointer in init_rows_cols () */
-    } shared1 ;
-    union
-    {
-	int mark ;	/* for computing set differences and marking dead rows*/
-	int first_column ;/* first column in row (used in garbage collection) */
-    } shared2 ;
-
-} RowInfo ;
-
-/* ========================================================================== */
-/* === Definitions ========================================================== */
-/* ========================================================================== */
-
-#define MAX(a,b) (((a) > (b)) ? (a) : (b))
-#define MIN(a,b) (((a) < (b)) ? (a) : (b))
-
-#define ONES_COMPLEMENT(r) (-(r)-1)
-
-#define TRUE	(1)
-#define FALSE	(0)
-#define EMPTY	(-1)
-
-/* Row and column status */
-#define ALIVE	(0)
-#define DEAD	(-1)
-
-/* Column status */
-#define DEAD_PRINCIPAL		(-1)
-#define DEAD_NON_PRINCIPAL	(-2)
-
-/* Macros for row and column status update and checking. */
-#define ROW_IS_DEAD(r)			ROW_IS_MARKED_DEAD (Row[r].shared2.mark)
-#define ROW_IS_MARKED_DEAD(row_mark)	(row_mark < ALIVE)
-#define ROW_IS_ALIVE(r)			(Row [r].shared2.mark >= ALIVE)
-#define COL_IS_DEAD(c)			(Col [c].start < ALIVE)
-#define COL_IS_ALIVE(c)			(Col [c].start >= ALIVE)
-#define COL_IS_DEAD_PRINCIPAL(c)	(Col [c].start == DEAD_PRINCIPAL)
-#define KILL_ROW(r)			{ Row [r].shared2.mark = DEAD ; }
-#define KILL_PRINCIPAL_COL(c)		{ Col [c].start = DEAD_PRINCIPAL ; }
-#define KILL_NON_PRINCIPAL_COL(c)	{ Col [c].start = DEAD_NON_PRINCIPAL ; }
-
-/* Routines are either PUBLIC (user-callable) or PRIVATE (not user-callable) */
-#define PUBLIC
-#define PRIVATE static
-
-/* ========================================================================== */
-/* === Prototypes of PRIVATE routines ======================================= */
-/* ========================================================================== */
-
-PRIVATE int init_rows_cols
-(
-    int n_row,
-    int n_col,
-    RowInfo Row [],
-    ColInfo Col [],
-    int A [],
-    int p []
-) ;
-
-PRIVATE void init_scoring
-(
-    int n_row,
-    int n_col,
-    RowInfo Row [],
-    ColInfo Col [],
-    int A [],
-    int head [],
-    double knobs [COLAMD_KNOBS],
-    int *p_n_row2,
-    int *p_n_col2,
-    int *p_max_deg
-) ;
-
-PRIVATE int find_ordering
-(
-    int n_row,
-    int n_col,
-    int Alen,
-    RowInfo Row [],
-    ColInfo Col [],
-    int A [],
-    int head [],
-    int n_col2,
-    int max_deg,
-    int pfree
-) ;
-
-PRIVATE void order_children
-(
-    int n_col,
-    ColInfo Col [],
-    int p []
-) ;
-
-PRIVATE void detect_super_cols
-(
-#ifndef NDEBUG
-    int n_col,
-    RowInfo Row [],
-#endif
-    ColInfo Col [],
-    int A [],
-    int head [],
-    int row_start,
-    int row_length
-) ;
-
-PRIVATE int garbage_collection
-(
-    int n_row,
-    int n_col,
-    RowInfo Row [],
-    ColInfo Col [],
-    int A [],
-    int *pfree
-) ;
-
-PRIVATE int clear_mark
-(
-    int n_row,
-    RowInfo Row []
-) ;
-
-/* ========================================================================== */
-/* === Debugging definitions ================================================ */
-/* ========================================================================== */
-
-#ifndef NDEBUG
-
-/* === With debugging ======================================================= */
-
-/* stdlib.h: for getenv and atoi, to get debugging level from environment */
-#include <stdlib.h>
-
-/* stdio.h:  for printf (no printing if debugging is turned off) */
-#include <stdio.h>
-
-PRIVATE void debug_deg_lists
-(
-    int n_row,
-    int n_col,
-    RowInfo Row [],
-    ColInfo Col [],
-    int head [],
-    int min_score,
-    int should,
-    int max_deg
-) ;
-
-PRIVATE void debug_mark
-(
-    int n_row,
-    RowInfo Row [],
-    int tag_mark,
-    int max_mark
-) ;
-
-PRIVATE void debug_matrix
-(
-    int n_row,
-    int n_col,
-    RowInfo Row [],
-    ColInfo Col [],
-    int A []
-) ;
-
-PRIVATE void debug_structures
-(
-    int n_row,
-    int n_col,
-    RowInfo Row [],
-    ColInfo Col [],
-    int A [],
-    int n_col2
-) ;
-
-/* the following is the *ONLY* global variable in this file, and is only */
-/* present when debugging */
-
-PRIVATE int debug_colamd ;	/* debug print level */
-
-#define DEBUG0(params) { (void) printf params ; }
-#define DEBUG1(params) { if (debug_colamd >= 1) (void) printf params ; }
-#define DEBUG2(params) { if (debug_colamd >= 2) (void) printf params ; }
-#define DEBUG3(params) { if (debug_colamd >= 3) (void) printf params ; }
-#define DEBUG4(params) { if (debug_colamd >= 4) (void) printf params ; }
-
-#else
-
-/* === No debugging ========================================================= */
-
-#define DEBUG0(params) ;
-#define DEBUG1(params) ;
-#define DEBUG2(params) ;
-#define DEBUG3(params) ;
-#define DEBUG4(params) ;
-
-#endif
-
-/* ========================================================================== */
-
-
-/* ========================================================================== */
-/* === USER-CALLABLE ROUTINES: ============================================== */
-/* ========================================================================== */
-
-
-/* ========================================================================== */
-/* === colamd_recommended =================================================== */
-/* ========================================================================== */
-
-/*
-    The colamd_recommended routine returns the suggested size for Alen.  This
-    value has been determined to provide good balance between the number of
-    garbage collections and the memory requirements for colamd.
-*/
-
-PUBLIC int colamd_recommended	/* returns recommended value of Alen. */
-(
-    /* === Parameters ======================================================= */
-
-    int nnz,			/* number of nonzeros in A */
-    int n_row,			/* number of rows in A */
-    int n_col			/* number of columns in A */
-)
-{
-    /* === Local variables ================================================== */
-
-    int minimum ;		/* bare minimum requirements */
-    int recommended ;		/* recommended value of Alen */
-
-    if (nnz < 0 || n_row < 0 || n_col < 0)
-    {
-	/* return -1 if any input argument is corrupted */
-	DEBUG0 (("colamd_recommended error!")) ;
-	DEBUG0 ((" nnz: %d, n_row: %d, n_col: %d\n", nnz, n_row, n_col)) ;
-	return (-1) ;
-    }
-
-    minimum =
-	2 * (nnz)		/* for A */
-	+ (((n_col) + 1) * sizeof (ColInfo) / sizeof (int))	/* for Col */
-	+ (((n_row) + 1) * sizeof (RowInfo) / sizeof (int))	/* for Row */
-	+ n_col			/* minimum elbow room to guarrantee success */
-	+ COLAMD_STATS ;	/* for output statistics */
-
-    /* recommended is equal to the minumum plus enough memory to keep the */
-    /* number garbage collections low */
-    recommended = minimum + nnz/5 ;
-
-    return (recommended) ;
-}
-
-
-/* ========================================================================== */
-/* === colamd_set_defaults ================================================== */
-/* ========================================================================== */
-
-/*
-    The colamd_set_defaults routine sets the default values of the user-
-    controllable parameters for colamd:
-
-	knobs [0]	rows with knobs[0]*n_col entries or more are removed
-			prior to ordering.
-
-	knobs [1]	columns with knobs[1]*n_row entries or more are removed
-			prior to ordering, and placed last in the column
-			permutation.
-
-	knobs [2..19]	unused, but future versions might use this
-*/
-
-PUBLIC void colamd_set_defaults
-(
-    /* === Parameters ======================================================= */
-
-    double knobs [COLAMD_KNOBS]		/* knob array */
-)
-{
-    /* === Local variables ================================================== */
-
-    int i ;
-
-    if (!knobs)
-    {
-	return ;			/* no knobs to initialize */
-    }
-    for (i = 0 ; i < COLAMD_KNOBS ; i++)
-    {
-	knobs [i] = 0 ;
-    }
-    knobs [COLAMD_DENSE_ROW] = 0.5 ;	/* ignore rows over 50% dense */
-    knobs [COLAMD_DENSE_COL] = 0.5 ;	/* ignore columns over 50% dense */
-}
-
-
-/* ========================================================================== */
-/* === colamd =============================================================== */
-/* ========================================================================== */
-
-/*
-    The colamd routine computes a column ordering Q of a sparse matrix
-    A such that the LU factorization P(AQ) = LU remains sparse, where P is
-    selected via partial pivoting.   The routine can also be viewed as
-    providing a permutation Q such that the Cholesky factorization
-    (AQ)'(AQ) = LL' remains sparse.
-
-    On input, the nonzero patterns of the columns of A are stored in the
-    array A, in order 0 to n_col-1.  A is held in 0-based form (rows in the
-    range 0 to n_row-1 and columns in the range 0 to n_col-1).  Row indices
-    for column c are located in A [(p [c]) ... (p [c+1]-1)], where p [0] = 0,
-    and thus p [n_col] is the number of entries in A.  The matrix is
-    destroyed on output.  The row indices within each column do not have to
-    be sorted (from small to large row indices), and duplicate row indices
-    may be present.  However, colamd will work a little faster if columns are
-    sorted and no duplicates are present.  Matlab 5.2 always passes the matrix
-    with sorted columns, and no duplicates.
-
-    The integer array A is of size Alen.  Alen must be at least of size
-    (where nnz is the number of entries in A):
-
-	nnz			for the input column form of A
-	+ nnz			for a row form of A that colamd generates
-	+ 6*(n_col+1)		for a ColInfo Col [0..n_col] array
-				(this assumes sizeof (ColInfo) is 6 int's).
-	+ 4*(n_row+1)		for a RowInfo Row [0..n_row] array
-				(this assumes sizeof (RowInfo) is 4 int's).
-	+ elbow_room		must be at least n_col.  We recommend at least
-				nnz/5 in addition to that.  If sufficient,
-				changes in the elbow room affect the ordering
-				time only, not the ordering itself.
-	+ COLAMD_STATS		for the output statistics
-
-    Colamd returns FALSE is memory is insufficient, or TRUE otherwise.
-
-    On input, the caller must specify:
-
-	n_row			the number of rows of A
-	n_col			the number of columns of A
-	Alen			the size of the array A
-	A [0 ... nnz-1]		the row indices, where nnz = p [n_col]
-	A [nnz ... Alen-1]	(need not be initialized by the user)
-	p [0 ... n_col]		the column pointers,  p [0] = 0, and p [n_col]
-				is the number of entries in A.  Column c of A
-				is stored in A [p [c] ... p [c+1]-1].
-	knobs [0 ... 19]	a set of parameters that control the behavior
-				of colamd.  If knobs is a NULL pointer the
-				defaults are used.  The user-callable
-				colamd_set_defaults routine sets the default
-				parameters.  See that routine for a description
-				of the user-controllable parameters.
-
-    If the return value of Colamd is TRUE, then on output:
-
-	p [0 ... n_col-1]	the column permutation. p [0] is the first
-				column index, and p [n_col-1] is the last.
-				That is, p [k] = j means that column j of A
-				is the kth column of AQ.
-
-	A			is undefined on output (the matrix pattern is
-				destroyed), except for the following statistics:
-
-	A [0]			the number of dense (or empty) rows ignored
-	A [1]			the number of dense (or empty) columms.  These
-				are ordered last, in their natural order.
-	A [2]			the number of garbage collections performed.
-				If this is excessive, then you would have
-				gotten your results faster if Alen was larger.
-	A [3]			0, if all row indices in each column were in
-				sorted order and no duplicates were present.
-				1, if there were unsorted or duplicate row
-				indices in the input.  You would have gotten
-				your results faster if A [3] was returned as 0.
-
-    If the return value of Colamd is FALSE, then A and p are undefined on
-    output.
-*/
-
-PUBLIC int colamd		/* returns TRUE if successful */
-(
-    /* === Parameters ======================================================= */
-
-    int n_row,			/* number of rows in A */
-    int n_col,			/* number of columns in A */
-    int Alen,			/* length of A */
-    int A [],			/* row indices of A */
-    int p [],			/* pointers to columns in A */
-    double knobs [COLAMD_KNOBS]	/* parameters (uses defaults if NULL) */
-)
-{
-    /* === Local variables ================================================== */
-
-    int i ;			/* loop index */
-    int nnz ;			/* nonzeros in A */
-    int Row_size ;		/* size of Row [], in integers */
-    int Col_size ;		/* size of Col [], in integers */
-    int elbow_room ;		/* remaining free space */
-    RowInfo *Row ;		/* pointer into A of Row [0..n_row] array */
-    ColInfo *Col ;		/* pointer into A of Col [0..n_col] array */
-    int n_col2 ;		/* number of non-dense, non-empty columns */
-    int n_row2 ;		/* number of non-dense, non-empty rows */
-    int ngarbage ;		/* number of garbage collections performed */
-    int max_deg ;		/* maximum row degree */
-    double default_knobs [COLAMD_KNOBS] ;	/* default knobs knobs array */
-    int init_result ;		/* return code from initialization */
-
-#ifndef NDEBUG
-    debug_colamd = 0 ;		/* no debug printing */
-    /* get "D" environment variable, which gives the debug printing level */
-    if (getenv ("D")) debug_colamd = atoi (getenv ("D")) ;
-    DEBUG0 (("debug version, D = %d (THIS WILL BE SLOOOOW!)\n", debug_colamd)) ;
-#endif
-
-    /* === Check the input arguments ======================================== */
-
-    if (n_row < 0 || n_col < 0 || !A || !p)
-    {
-	/* n_row and n_col must be non-negative, A and p must be present */
-	DEBUG0 (("colamd error! %d %d %d\n", n_row, n_col, Alen)) ;
-	return (FALSE) ;
-    }
-    nnz = p [n_col] ;
-    if (nnz < 0 || p [0] != 0)
-    {
-	/* nnz must be non-negative, and p [0] must be zero */
-	DEBUG0 (("colamd error! %d %d\n", nnz, p [0])) ;
-	return (FALSE) ;
-    }
-
-    /* === If no knobs, set default parameters ============================== */
-
-    if (!knobs)
-    {
-	knobs = default_knobs ;
-	colamd_set_defaults (knobs) ;
-    }
-
-    /* === Allocate the Row and Col arrays from array A ===================== */
-
-    Col_size = (n_col + 1) * sizeof (ColInfo) / sizeof (int) ;
-    Row_size = (n_row + 1) * sizeof (RowInfo) / sizeof (int) ;
-    elbow_room = Alen - (2*nnz + Col_size + Row_size) ;
-    if (elbow_room < n_col + COLAMD_STATS)
-    {
-	/* not enough space in array A to perform the ordering */
-	DEBUG0 (("colamd error! elbow_room %d, %d\n", elbow_room,n_col)) ;
-	return (FALSE) ;
-    }
-    Alen = 2*nnz + elbow_room ;
-    Col  = (ColInfo *) &A [Alen] ;
-    Row  = (RowInfo *) &A [Alen + Col_size] ;
-
-    /* === Construct the row and column data structures ===================== */
-
-    init_result = init_rows_cols (n_row, n_col, Row, Col, A, p) ;
-    if (init_result == -1)
-    {
-	/* input matrix is invalid */
-	DEBUG0 (("colamd error! matrix invalid\n")) ;
-	return (FALSE) ;
-    }
-
-    /* === Initialize scores, kill dense rows/columns ======================= */
-
-    init_scoring (n_row, n_col, Row, Col, A, p, knobs,
-	&n_row2, &n_col2, &max_deg) ;
-
-    /* === Order the supercolumns =========================================== */
-
-    ngarbage = find_ordering (n_row, n_col, Alen, Row, Col, A, p,
-	n_col2, max_deg, 2*nnz) ;
-
-    /* === Order the non-principal columns ================================== */
-
-    order_children (n_col, Col, p) ;
-
-    /* === Return statistics in A =========================================== */
-
-    for (i = 0 ; i < COLAMD_STATS ; i++)
-    {
-	A [i] = 0 ;
-    }
-    A [COLAMD_DENSE_ROW] = n_row - n_row2 ;
-    A [COLAMD_DENSE_COL] = n_col - n_col2 ;
-    A [COLAMD_DEFRAG_COUNT] = ngarbage ;
-    A [COLAMD_JUMBLED_COLS] = init_result ;
-
-    return (TRUE) ;
-}
-
-
-/* ========================================================================== */
-/* === NON-USER-CALLABLE ROUTINES: ========================================== */
-/* ========================================================================== */
-
-/* There are no user-callable routines beyond this point in the file */
-
-
-/* ========================================================================== */
-/* === init_rows_cols ======================================================= */
-/* ========================================================================== */
-
-/*
-    Takes the column form of the matrix in A and creates the row form of the
-    matrix.  Also, row and column attributes are stored in the Col and Row
-    structs.  If the columns are un-sorted or contain duplicate row indices,
-    this routine will also sort and remove duplicate row indices from the
-    column form of the matrix.  Returns -1 on error, 1 if columns jumbled,
-    or 0 if columns not jumbled.  Not user-callable.
-*/
-
-PRIVATE int init_rows_cols	/* returns status code */
-(
-    /* === Parameters ======================================================= */
-
-    int n_row,			/* number of rows of A */
-    int n_col,			/* number of columns of A */
-    RowInfo Row [],		/* of size n_row+1 */
-    ColInfo Col [],		/* of size n_col+1 */
-    int A [],			/* row indices of A, of size Alen */
-    int p []			/* pointers to columns in A, of size n_col+1 */
-)
-{
-    /* === Local variables ================================================== */
-
-    int col ;			/* a column index */
-    int row ;			/* a row index */
-    int *cp ;			/* a column pointer */
-    int *cp_end ;		/* a pointer to the end of a column */
-    int *rp ;			/* a row pointer */
-    int *rp_end ;		/* a pointer to the end of a row */
-    int last_start ;		/* start index of previous column in A */
-    int start ;			/* start index of column in A */
-    int last_row ;		/* previous row */
-    int jumbled_columns ;	/* indicates if columns are jumbled */
-
-    /* === Initialize columns, and check column pointers ==================== */
-
-    last_start = 0 ;
-    for (col = 0 ; col < n_col ; col++)
-    {
-	start = p [col] ;
-	if (start < last_start)
-	{
-	    /* column pointers must be non-decreasing */
-	    DEBUG0 (("colamd error!  last p %d p [col] %d\n",last_start,start));
-	    return (-1) ;
-	}
-	Col [col].start = start ;
-	Col [col].length = p [col+1] - start ;
-	Col [col].shared1.thickness = 1 ;
-	Col [col].shared2.score = 0 ;
-	Col [col].shared3.prev = EMPTY ;
-	Col [col].shared4.degree_next = EMPTY ;
-	last_start = start ;
-    }
-    /* must check the end pointer for last column */
-    if (p [n_col] < last_start)
-    {
-	/* column pointers must be non-decreasing */
-	DEBUG0 (("colamd error!  last p %d p [n_col] %d\n",p[col],last_start)) ;
-	return (-1) ;
-    }
-
-    /* p [0..n_col] no longer needed, used as "head" in subsequent routines */
-
-    /* === Scan columns, compute row degrees, and check row indices ========= */
-
-    jumbled_columns = FALSE ;
-
-    for (row = 0 ; row < n_row ; row++)
-    {
-	Row [row].length = 0 ;
-	Row [row].shared2.mark = -1 ;
-    }
-
-    for (col = 0 ; col < n_col ; col++)
-    {
-	last_row = -1 ;
-
-	cp = &A [p [col]] ;
-	cp_end = &A [p [col+1]] ;
-
-	while (cp < cp_end)
-	{
-	    row = *cp++ ;
-
-	    /* make sure row indices within range */
-	    if (row < 0 || row >= n_row)
-	    {
-		DEBUG0 (("colamd error!  col %d row %d last_row %d\n",
-			 col, row, last_row)) ;
-		return (-1) ;
-	    }
-	    else if (row <= last_row)
-	    {
-		/* row indices are not sorted or repeated, thus cols */
-		/* are jumbled */
-		jumbled_columns = TRUE ;
-	    }
-	    /* prevent repeated row from being counted */
-	    if (Row [row].shared2.mark != col)
-	    {
-		Row [row].length++ ;
-		Row [row].shared2.mark = col ;
-		last_row = row ;
-	    }
-	    else
-	    {
-		/* this is a repeated entry in the column, */
-		/* it will be removed */
-		Col [col].length-- ;
-	    }
-	}
-    }
-
-    /* === Compute row pointers ============================================= */
-
-    /* row form of the matrix starts directly after the column */
-    /* form of matrix in A */
-    Row [0].start = p [n_col] ;
-    Row [0].shared1.p = Row [0].start ;
-    Row [0].shared2.mark = -1 ;
-    for (row = 1 ; row < n_row ; row++)
-    {
-	Row [row].start = Row [row-1].start + Row [row-1].length ;
-	Row [row].shared1.p = Row [row].start ;
-	Row [row].shared2.mark = -1 ;
-    }
-
-    /* === Create row form ================================================== */
-
-    if (jumbled_columns)
-    {
-	/* if cols jumbled, watch for repeated row indices */
-	for (col = 0 ; col < n_col ; col++)
-	{
-	    cp = &A [p [col]] ;
-	    cp_end = &A [p [col+1]] ;
-	    while (cp < cp_end)
-	    {
-		row = *cp++ ;
-		if (Row [row].shared2.mark != col)
-		{
-		    A [(Row [row].shared1.p)++] = col ;
-		    Row [row].shared2.mark = col ;
-		}
-	    }
-	}
-    }
-    else
-    {
-	/* if cols not jumbled, we don't need the mark (this is faster) */
-	for (col = 0 ; col < n_col ; col++)
-	{
-	    cp = &A [p [col]] ;
-	    cp_end = &A [p [col+1]] ;
-	    while (cp < cp_end)
-	    {
-		A [(Row [*cp++].shared1.p)++] = col ;
-	    }
-	}
-    }
-
-    /* === Clear the row marks and set row degrees ========================== */
-
-    for (row = 0 ; row < n_row ; row++)
-    {
-	Row [row].shared2.mark = 0 ;
-	Row [row].shared1.degree = Row [row].length ;
-    }
-
-    /* === See if we need to re-create columns ============================== */
-
-    if (jumbled_columns)
-    {
-
-#ifndef NDEBUG
-	/* make sure column lengths are correct */
-	for (col = 0 ; col < n_col ; col++)
-	{
-	    p [col] = Col [col].length ;
-	}
-	for (row = 0 ; row < n_row ; row++)
-	{
-	    rp = &A [Row [row].start] ;
-	    rp_end = rp + Row [row].length ;
-	    while (rp < rp_end)
-	    {
-		p [*rp++]-- ;
-	    }
-	}
-	for (col = 0 ; col < n_col ; col++)
-	{
-	    assert (p [col] == 0) ;
-	}
-	/* now p is all zero (different than when debugging is turned off) */
-#endif
-
-	/* === Compute col pointers ========================================= */
-
-	/* col form of the matrix starts at A [0]. */
-	/* Note, we may have a gap between the col form and the row */
-	/* form if there were duplicate entries, if so, it will be */
-	/* removed upon the first garbage collection */
-	Col [0].start = 0 ;
-	p [0] = Col [0].start ;
-	for (col = 1 ; col < n_col ; col++)
-	{
-	    /* note that the lengths here are for pruned columns, i.e. */
-	    /* no duplicate row indices will exist for these columns */
-	    Col [col].start = Col [col-1].start + Col [col-1].length ;
-	    p [col] = Col [col].start ;
-	}
-
-	/* === Re-create col form =========================================== */
-
-	for (row = 0 ; row < n_row ; row++)
-	{
-	    rp = &A [Row [row].start] ;
-	    rp_end = rp + Row [row].length ;
-	    while (rp < rp_end)
-	    {
-		A [(p [*rp++])++] = row ;
-	    }
-	}
-	return (1) ;
-    }
-    else
-    {
-	/* no columns jumbled (this is faster) */
-	return (0) ;
-    }
-}
-
-
-/* ========================================================================== */
-/* === init_scoring ========================================================= */
-/* ========================================================================== */
-
-/*
-    Kills dense or empty columns and rows, calculates an initial score for
-    each column, and places all columns in the degree lists.  Not user-callable.
-*/
-
-PRIVATE void init_scoring
-(
-    /* === Parameters ======================================================= */
-
-    int n_row,			/* number of rows of A */
-    int n_col,			/* number of columns of A */
-    RowInfo Row [],		/* of size n_row+1 */
-    ColInfo Col [],		/* of size n_col+1 */
-    int A [],			/* column form and row form of A */
-    int head [],		/* of size n_col+1 */
-    double knobs [COLAMD_KNOBS],/* parameters */
-    int *p_n_row2,		/* number of non-dense, non-empty rows */
-    int *p_n_col2,		/* number of non-dense, non-empty columns */
-    int *p_max_deg		/* maximum row degree */
-)
-{
-    /* === Local variables ================================================== */
-
-    int c ;			/* a column index */
-    int r, row ;		/* a row index */
-    int *cp ;			/* a column pointer */
-    int deg ;			/* degree (# entries) of a row or column */
-    int *cp_end ;		/* a pointer to the end of a column */
-    int *new_cp ;		/* new column pointer */
-    int col_length ;		/* length of pruned column */
-    int score ;			/* current column score */
-    int n_col2 ;		/* number of non-dense, non-empty columns */
-    int n_row2 ;		/* number of non-dense, non-empty rows */
-    int dense_row_count ;	/* remove rows with more entries than this */
-    int dense_col_count ;	/* remove cols with more entries than this */
-    int min_score ;		/* smallest column score */
-    int max_deg ;		/* maximum row degree */
-    int next_col ;		/* Used to add to degree list.*/
-#ifndef NDEBUG
-    int debug_count ;		/* debug only. */
-#endif
-
-    /* === Extract knobs ==================================================== */
-
-    dense_row_count = MAX (0, MIN (knobs [COLAMD_DENSE_ROW] * n_col, n_col)) ;
-    dense_col_count = MAX (0, MIN (knobs [COLAMD_DENSE_COL] * n_row, n_row)) ;
-    DEBUG0 (("densecount: %d %d\n", dense_row_count, dense_col_count)) ;
-    max_deg = 0 ;
-    n_col2 = n_col ;
-    n_row2 = n_row ;
-
-    /* === Kill empty columns =============================================== */
-
-    /* Put the empty columns at the end in their natural, so that LU */
-    /* factorization can proceed as far as possible. */
-    for (c = n_col-1 ; c >= 0 ; c--)
-    {
-	deg = Col [c].length ;
-	if (deg == 0)
-	{
-	    /* this is a empty column, kill and order it last */
-	    Col [c].shared2.order = --n_col2 ;
-	    KILL_PRINCIPAL_COL (c) ;
-	}
-    }
-    DEBUG0 (("null columns killed: %d\n", n_col - n_col2)) ;
-
-    /* === Kill dense columns =============================================== */
-
-    /* Put the dense columns at the end, in their natural order */
-    for (c = n_col-1 ; c >= 0 ; c--)
-    {
-	/* skip any dead columns */
-	if (COL_IS_DEAD (c))
-	{
-	    continue ;
-	}
-	deg = Col [c].length ;
-	if (deg > dense_col_count)
-	{
-	    /* this is a dense column, kill and order it last */
-	    Col [c].shared2.order = --n_col2 ;
-	    /* decrement the row degrees */
-	    cp = &A [Col [c].start] ;
-	    cp_end = cp + Col [c].length ;
-	    while (cp < cp_end)
-	    {
-		Row [*cp++].shared1.degree-- ;
-	    }
-	    KILL_PRINCIPAL_COL (c) ;
-	}
-    }
-    DEBUG0 (("Dense and null columns killed: %d\n", n_col - n_col2)) ;
-
-    /* === Kill dense and empty rows ======================================== */
-
-    for (r = 0 ; r < n_row ; r++)
-    {
-	deg = Row [r].shared1.degree ;
-	assert (deg >= 0 && deg <= n_col) ;
-	if (deg > dense_row_count || deg == 0)
-	{
-	    /* kill a dense or empty row */
-	    KILL_ROW (r) ;
-	    --n_row2 ;
-	}
-	else
-	{
-	    /* keep track of max degree of remaining rows */
-	    max_deg = MAX (max_deg, deg) ;
-	}
-    }
-    DEBUG0 (("Dense and null rows killed: %d\n", n_row - n_row2)) ;
-
-    /* === Compute initial column scores ==================================== */
-
-    /* At this point the row degrees are accurate.  They reflect the number */
-    /* of "live" (non-dense) columns in each row.  No empty rows exist. */
-    /* Some "live" columns may contain only dead rows, however.  These are */
-    /* pruned in the code below. */
-
-    /* now find the initial matlab score for each column */
-    for (c = n_col-1 ; c >= 0 ; c--)
-    {
-	/* skip dead column */
-	if (COL_IS_DEAD (c))
-	{
-	    continue ;
-	}
-	score = 0 ;
-	cp = &A [Col [c].start] ;
-	new_cp = cp ;
-	cp_end = cp + Col [c].length ;
-	while (cp < cp_end)
-	{
-	    /* get a row */
-	    row = *cp++ ;
-	    /* skip if dead */
-	    if (ROW_IS_DEAD (row))
-	    {
-		continue ;
-	    }
-	    /* compact the column */
-	    *new_cp++ = row ;
-	    /* add row's external degree */
-	    score += Row [row].shared1.degree - 1 ;
-	    /* guard against integer overflow */
-	    score = MIN (score, n_col) ;
-	}
-	/* determine pruned column length */
-	col_length = (int) (new_cp - &A [Col [c].start]) ;
-	if (col_length == 0)
-	{
-	    /* a newly-made null column (all rows in this col are "dense" */
-	    /* and have already been killed) */
-	    DEBUG0 (("Newly null killed: %d\n", c)) ;
-	    Col [c].shared2.order = --n_col2 ;
-	    KILL_PRINCIPAL_COL (c) ;
-	}
-	else
-	{
-	    /* set column length and set score */
-	    assert (score >= 0) ;
-	    assert (score <= n_col) ;
-	    Col [c].length = col_length ;
-	    Col [c].shared2.score = score ;
-	}
-    }
-    DEBUG0 (("Dense, null, and newly-null columns killed: %d\n",n_col-n_col2)) ;
-
-    /* At this point, all empty rows and columns are dead.  All live columns */
-    /* are "clean" (containing no dead rows) and simplicial (no supercolumns */
-    /* yet).  Rows may contain dead columns, but all live rows contain at */
-    /* least one live column. */
-
-#ifndef NDEBUG
-    debug_structures (n_row, n_col, Row, Col, A, n_col2) ;
-#endif
-
-    /* === Initialize degree lists ========================================== */
-
-#ifndef NDEBUG
-    debug_count = 0 ;
-#endif
-
-    /* clear the hash buckets */
-    for (c = 0 ; c <= n_col ; c++)
-    {
-	head [c] = EMPTY ;
-    }
-    min_score = n_col ;
-    /* place in reverse order, so low column indices are at the front */
-    /* of the lists.  This is to encourage natural tie-breaking */
-    for (c = n_col-1 ; c >= 0 ; c--)
-    {
-	/* only add principal columns to degree lists */
-	if (COL_IS_ALIVE (c))
-	{
-	    DEBUG4 (("place %d score %d minscore %d ncol %d\n",
-		c, Col [c].shared2.score, min_score, n_col)) ;
-
-	    /* === Add columns score to DList =============================== */
-
-	    score = Col [c].shared2.score ;
-
-	    assert (min_score >= 0) ;
-	    assert (min_score <= n_col) ;
-	    assert (score >= 0) ;
-	    assert (score <= n_col) ;
-	    assert (head [score] >= EMPTY) ;
-
-	    /* now add this column to dList at proper score location */
-	    next_col = head [score] ;
-	    Col [c].shared3.prev = EMPTY ;
-	    Col [c].shared4.degree_next = next_col ;
-
-	    /* if there already was a column with the same score, set its */
-	    /* previous pointer to this new column */
-	    if (next_col != EMPTY)
-	    {
-		Col [next_col].shared3.prev = c ;
-	    }
-	    head [score] = c ;
-
-	    /* see if this score is less than current min */
-	    min_score = MIN (min_score, score) ;
-
-#ifndef NDEBUG
-	    debug_count++ ;
-#endif
-	}
-    }
-
-#ifndef NDEBUG
-    DEBUG0 (("Live cols %d out of %d, non-princ: %d\n",
-	debug_count, n_col, n_col-debug_count)) ;
-    assert (debug_count == n_col2) ;
-    debug_deg_lists (n_row, n_col, Row, Col, head, min_score, n_col2, max_deg) ;
-#endif
-
-    /* === Return number of remaining columns, and max row degree =========== */
-
-    *p_n_col2 = n_col2 ;
-    *p_n_row2 = n_row2 ;
-    *p_max_deg = max_deg ;
-}
-
-
-/* ========================================================================== */
-/* === find_ordering ======================================================== */
-/* ========================================================================== */
-
-/*
-    Order the principal columns of the supercolumn form of the matrix
-    (no supercolumns on input).  Uses a minimum approximate column minimum
-    degree ordering method.  Not user-callable.
-*/
-
-PRIVATE int find_ordering	/* return the number of garbage collections */
-(
-    /* === Parameters ======================================================= */
-
-    int n_row,			/* number of rows of A */
-    int n_col,			/* number of columns of A */
-    int Alen,			/* size of A, 2*nnz + elbow_room or larger */
-    RowInfo Row [],		/* of size n_row+1 */
-    ColInfo Col [],		/* of size n_col+1 */
-    int A [],			/* column form and row form of A */
-    int head [],		/* of size n_col+1 */
-    int n_col2,			/* Remaining columns to order */
-    int max_deg,		/* Maximum row degree */
-    int pfree			/* index of first free slot (2*nnz on entry) */
-)
-{
-    /* === Local variables ================================================== */
-
-    int k ;			/* current pivot ordering step */
-    int pivot_col ;		/* current pivot column */
-    int *cp ;			/* a column pointer */
-    int *rp ;			/* a row pointer */
-    int pivot_row ;		/* current pivot row */
-    int *new_cp ;		/* modified column pointer */
-    int *new_rp ;		/* modified row pointer */
-    int pivot_row_start ;	/* pointer to start of pivot row */
-    int pivot_row_degree ;	/* # of columns in pivot row */
-    int pivot_row_length ;	/* # of supercolumns in pivot row */
-    int pivot_col_score ;	/* score of pivot column */
-    int needed_memory ;		/* free space needed for pivot row */
-    int *cp_end ;		/* pointer to the end of a column */
-    int *rp_end ;		/* pointer to the end of a row */
-    int row ;			/* a row index */
-    int col ;			/* a column index */
-    int max_score ;		/* maximum possible score */
-    int cur_score ;		/* score of current column */
-    unsigned int hash ;		/* hash value for supernode detection */
-    int head_column ;		/* head of hash bucket */
-    int first_col ;		/* first column in hash bucket */
-    int tag_mark ;		/* marker value for mark array */
-    int row_mark ;		/* Row [row].shared2.mark */
-    int set_difference ;	/* set difference size of row with pivot row */
-    int min_score ;		/* smallest column score */
-    int col_thickness ;		/* "thickness" (# of columns in a supercol) */
-    int max_mark ;		/* maximum value of tag_mark */
-    int pivot_col_thickness ;	/* number of columns represented by pivot col */
-    int prev_col ;		/* Used by Dlist operations. */
-    int next_col ;		/* Used by Dlist operations. */
-    int ngarbage ;		/* number of garbage collections performed */
-#ifndef NDEBUG
-    int debug_d ;		/* debug loop counter */
-    int debug_step = 0 ;	/* debug loop counter */
-#endif
-
-    /* === Initialization and clear mark ==================================== */
-
-    max_mark = INT_MAX - n_col ;	/* INT_MAX defined in <limits.h> */
-    tag_mark = clear_mark (n_row, Row) ;
-    min_score = 0 ;
-    ngarbage = 0 ;
-    DEBUG0 (("Ordering.. n_col2=%d\n", n_col2)) ;
-
-    /* === Order the columns ================================================ */
-
-    for (k = 0 ; k < n_col2 ; /* 'k' is incremented below */)
-    {
-
-#ifndef NDEBUG
-	if (debug_step % 100 == 0)
-	{
-	    DEBUG0 (("\n...       Step k: %d out of n_col2: %d\n", k, n_col2)) ;
-	}
-	else
-	{
-	    DEBUG1 (("\n----------Step k: %d out of n_col2: %d\n", k, n_col2)) ;
-	}
-	debug_step++ ;
-	debug_deg_lists (n_row, n_col, Row, Col, head,
-		min_score, n_col2-k, max_deg) ;
-	debug_matrix (n_row, n_col, Row, Col, A) ;
-#endif
-
-	/* === Select pivot column, and order it ============================ */
-
-	/* make sure degree list isn't empty */
-	assert (min_score >= 0) ;
-	assert (min_score <= n_col) ;
-	assert (head [min_score] >= EMPTY) ;
-
-#ifndef NDEBUG
-	for (debug_d = 0 ; debug_d < min_score ; debug_d++)
-	{
-	    assert (head [debug_d] == EMPTY) ;
-	}
-#endif
-
-	/* get pivot column from head of minimum degree list */
-	while (head [min_score] == EMPTY && min_score < n_col)
-	{
-	    min_score++ ;
-	}
-	pivot_col = head [min_score] ;
-	assert (pivot_col >= 0 && pivot_col <= n_col) ;
-	next_col = Col [pivot_col].shared4.degree_next ;
-	head [min_score] = next_col ;
-	if (next_col != EMPTY)
-	{
-	    Col [next_col].shared3.prev = EMPTY ;
-	}
-
-	assert (COL_IS_ALIVE (pivot_col)) ;
-	DEBUG3 (("Pivot col: %d\n", pivot_col)) ;
-
-	/* remember score for defrag check */
-	pivot_col_score = Col [pivot_col].shared2.score ;
-
-	/* the pivot column is the kth column in the pivot order */
-	Col [pivot_col].shared2.order = k ;
-
-	/* increment order count by column thickness */
-	pivot_col_thickness = Col [pivot_col].shared1.thickness ;
-	k += pivot_col_thickness ;
-	assert (pivot_col_thickness > 0) ;
-
-	/* === Garbage_collection, if necessary ============================= */
-
-	needed_memory = MIN (pivot_col_score, n_col - k) ;
-	if (pfree + needed_memory >= Alen)
-	{
-	    pfree = garbage_collection (n_row, n_col, Row, Col, A, &A [pfree]) ;
-	    ngarbage++ ;
-	    /* after garbage collection we will have enough */
-	    assert (pfree + needed_memory < Alen) ;
-	    /* garbage collection has wiped out the Row[].shared2.mark array */
-	    tag_mark = clear_mark (n_row, Row) ;
-#ifndef NDEBUG
-	    debug_matrix (n_row, n_col, Row, Col, A) ;
-#endif
-	}
-
-	/* === Compute pivot row pattern ==================================== */
-
-	/* get starting location for this new merged row */
-	pivot_row_start = pfree ;
-
-	/* initialize new row counts to zero */
-	pivot_row_degree = 0 ;
-
-	/* tag pivot column as having been visited so it isn't included */
-	/* in merged pivot row */
-	Col [pivot_col].shared1.thickness = -pivot_col_thickness ;
-
-	/* pivot row is the union of all rows in the pivot column pattern */
-	cp = &A [Col [pivot_col].start] ;
-	cp_end = cp + Col [pivot_col].length ;
-	while (cp < cp_end)
-	{
-	    /* get a row */
-	    row = *cp++ ;
-	    DEBUG4 (("Pivot col pattern %d %d\n", ROW_IS_ALIVE (row), row)) ;
-	    /* skip if row is dead */
-	    if (ROW_IS_DEAD (row))
-	    {
-		continue ;
-	    }
-	    rp = &A [Row [row].start] ;
-	    rp_end = rp + Row [row].length ;
-	    while (rp < rp_end)
-	    {
-		/* get a column */
-		col = *rp++ ;
-		/* add the column, if alive and untagged */
-		col_thickness = Col [col].shared1.thickness ;
-		if (col_thickness > 0 && COL_IS_ALIVE (col))
-		{
-		    /* tag column in pivot row */
-		    Col [col].shared1.thickness = -col_thickness ;
-		    assert (pfree < Alen) ;
-		    /* place column in pivot row */
-		    A [pfree++] = col ;
-		    pivot_row_degree += col_thickness ;
-		}
-	    }
-	}
-
-	/* clear tag on pivot column */
-	Col [pivot_col].shared1.thickness = pivot_col_thickness ;
-	max_deg = MAX (max_deg, pivot_row_degree) ;
-
-#ifndef NDEBUG
-	DEBUG3 (("check2\n")) ;
-	debug_mark (n_row, Row, tag_mark, max_mark) ;
-#endif
-
-	/* === Kill all rows used to construct pivot row ==================== */
-
-	/* also kill pivot row, temporarily */
-	cp = &A [Col [pivot_col].start] ;
-	cp_end = cp + Col [pivot_col].length ;
-	while (cp < cp_end)
-	{
-	    /* may be killing an already dead row */
-	    row = *cp++ ;
-	    DEBUG2 (("Kill row in pivot col: %d\n", row)) ;
-	    KILL_ROW (row) ;
-	}
-
-	/* === Select a row index to use as the new pivot row =============== */
-
-	pivot_row_length = pfree - pivot_row_start ;
-	if (pivot_row_length > 0)
-	{
-	    /* pick the "pivot" row arbitrarily (first row in col) */
-	    pivot_row = A [Col [pivot_col].start] ;
-	    DEBUG2 (("Pivotal row is %d\n", pivot_row)) ;
-	}
-	else
-	{
-	    /* there is no pivot row, since it is of zero length */
-	    pivot_row = EMPTY ;
-	    assert (pivot_row_length == 0) ;
-	}
-	assert (Col [pivot_col].length > 0 || pivot_row_length == 0) ;
-
-	/* === Approximate degree computation =============================== */
-
-	/* Here begins the computation of the approximate degree.  The column */
-	/* score is the sum of the pivot row "length", plus the size of the */
-	/* set differences of each row in the column minus the pattern of the */
-	/* pivot row itself.  The column ("thickness") itself is also */
-	/* excluded from the column score (we thus use an approximate */
-	/* external degree). */
-
-	/* The time taken by the following code (compute set differences, and */
-	/* add them up) is proportional to the size of the data structure */
-	/* being scanned - that is, the sum of the sizes of each column in */
-	/* the pivot row.  Thus, the amortized time to compute a column score */
-	/* is proportional to the size of that column (where size, in this */
-	/* context, is the column "length", or the number of row indices */
-	/* in that column).  The number of row indices in a column is */
-	/* monotonically non-decreasing, from the length of the original */
-	/* column on input to colamd. */
-
-	/* === Compute set differences ====================================== */
-
-	DEBUG1 (("** Computing set differences phase. **\n")) ;
-
-	/* pivot row is currently dead - it will be revived later. */
-
-	DEBUG2 (("Pivot row: ")) ;
-	/* for each column in pivot row */
-	rp = &A [pivot_row_start] ;
-	rp_end = rp + pivot_row_length ;
-	while (rp < rp_end)
-	{
-	    col = *rp++ ;
-	    assert (COL_IS_ALIVE (col) && col != pivot_col) ;
-	    DEBUG2 (("Col: %d\n", col)) ;
-
-	    /* clear tags used to construct pivot row pattern */
-	    col_thickness = -Col [col].shared1.thickness ;
-	    assert (col_thickness > 0) ;
-	    Col [col].shared1.thickness = col_thickness ;
-
-	    /* === Remove column from degree list =========================== */
-
-	    cur_score = Col [col].shared2.score ;
-	    prev_col = Col [col].shared3.prev ;
-	    next_col = Col [col].shared4.degree_next ;
-	    assert (cur_score >= 0) ;
-	    assert (cur_score <= n_col) ;
-	    assert (cur_score >= EMPTY) ;
-	    if (prev_col == EMPTY)
-	    {
-		head [cur_score] = next_col ;
-	    }
-	    else
-	    {
-		Col [prev_col].shared4.degree_next = next_col ;
-	    }
-	    if (next_col != EMPTY)
-	    {
-		Col [next_col].shared3.prev = prev_col ;
-	    }
-
-	    /* === Scan the column ========================================== */
-
-	    cp = &A [Col [col].start] ;
-	    cp_end = cp + Col [col].length ;
-	    while (cp < cp_end)
-	    {
-		/* get a row */
-		row = *cp++ ;
-		row_mark = Row [row].shared2.mark ;
-		/* skip if dead */
-		if (ROW_IS_MARKED_DEAD (row_mark))
-		{
-		    continue ;
-		}
-		assert (row != pivot_row) ;
-		set_difference = row_mark - tag_mark ;
-		/* check if the row has been seen yet */
-		if (set_difference < 0)
-		{
-		    assert (Row [row].shared1.degree <= max_deg) ;
-		    set_difference = Row [row].shared1.degree ;
-		}
-		/* subtract column thickness from this row's set difference */
-		set_difference -= col_thickness ;
-		assert (set_difference >= 0) ;
-		/* absorb this row if the set difference becomes zero */
-		if (set_difference == 0)
-		{
-		    DEBUG1 (("aggressive absorption. Row: %d\n", row)) ;
-		    KILL_ROW (row) ;
-		}
-		else
-		{
-		    /* save the new mark */
-		    Row [row].shared2.mark = set_difference + tag_mark ;
-		}
-	    }
-	}
-
-#ifndef NDEBUG
-	debug_deg_lists (n_row, n_col, Row, Col, head,
-		min_score, n_col2-k-pivot_row_degree, max_deg) ;
-#endif
-
-	/* === Add up set differences for each column ======================= */
-
-	DEBUG1 (("** Adding set differences phase. **\n")) ;
-
-	/* for each column in pivot row */
-	rp = &A [pivot_row_start] ;
-	rp_end = rp + pivot_row_length ;
-	while (rp < rp_end)
-	{
-	    /* get a column */
-	    col = *rp++ ;
-	    assert (COL_IS_ALIVE (col) && col != pivot_col) ;
-	    hash = 0 ;
-	    cur_score = 0 ;
-	    cp = &A [Col [col].start] ;
-	    /* compact the column */
-	    new_cp = cp ;
-	    cp_end = cp + Col [col].length ;
-
-	    DEBUG2 (("Adding set diffs for Col: %d.\n", col)) ;
-
-	    while (cp < cp_end)
-	    {
-		/* get a row */
-		row = *cp++ ;
-		assert(row >= 0 && row < n_row) ;
-		row_mark = Row [row].shared2.mark ;
-		/* skip if dead */
-		if (ROW_IS_MARKED_DEAD (row_mark))
-		{
-		    continue ;
-		}
-		assert (row_mark > tag_mark) ;
-		/* compact the column */
-		*new_cp++ = row ;
-		/* compute hash function */
-		hash += row ;
-		/* add set difference */
-		cur_score += row_mark - tag_mark ;
-		/* integer overflow... */
-		cur_score = MIN (cur_score, n_col) ;
-	    }
-
-	    /* recompute the column's length */
-	    Col [col].length = (int) (new_cp - &A [Col [col].start]) ;
-
-	    /* === Further mass elimination ================================= */
-
-	    if (Col [col].length == 0)
-	    {
-		DEBUG1 (("further mass elimination. Col: %d\n", col)) ;
-		/* nothing left but the pivot row in this column */
-		KILL_PRINCIPAL_COL (col) ;
-		pivot_row_degree -= Col [col].shared1.thickness ;
-		assert (pivot_row_degree >= 0) ;
-		/* order it */
-		Col [col].shared2.order = k ;
-		/* increment order count by column thickness */
-		k += Col [col].shared1.thickness ;
-	    }
-	    else
-	    {
-		/* === Prepare for supercolumn detection ==================== */
-
-		DEBUG2 (("Preparing supercol detection for Col: %d.\n", col)) ;
-
-		/* save score so far */
-		Col [col].shared2.score = cur_score ;
-
-		/* add column to hash table, for supercolumn detection */
-		hash %= n_col + 1 ;
-
-		DEBUG2 ((" Hash = %d, n_col = %d.\n", hash, n_col)) ;
-		assert (hash <= n_col) ;
-
-		head_column = head [hash] ;
-		if (head_column > EMPTY)
-		{
-		    /* degree list "hash" is non-empty, use prev (shared3) of */
-		    /* first column in degree list as head of hash bucket */
-		    first_col = Col [head_column].shared3.headhash ;
-		    Col [head_column].shared3.headhash = col ;
-		}
-		else
-		{
-		    /* degree list "hash" is empty, use head as hash bucket */
-		    first_col = - (head_column + 2) ;
-		    head [hash] = - (col + 2) ;
-		}
-		Col [col].shared4.hash_next = first_col ;
-
-		/* save hash function in Col [col].shared3.hash */
-		Col [col].shared3.hash = (int) hash ;
-		assert (COL_IS_ALIVE (col)) ;
-	    }
-	}
-
-	/* The approximate external column degree is now computed.  */
-
-	/* === Supercolumn detection ======================================== */
-
-	DEBUG1 (("** Supercolumn detection phase. **\n")) ;
-
-	detect_super_cols (
-#ifndef NDEBUG
-		n_col, Row,
-#endif
-		Col, A, head, pivot_row_start, pivot_row_length) ;
-
-	/* === Kill the pivotal column ====================================== */
-
-	KILL_PRINCIPAL_COL (pivot_col) ;
-
-	/* === Clear mark =================================================== */
-
-	tag_mark += (max_deg + 1) ;
-	if (tag_mark >= max_mark)
-	{
-	    DEBUG1 (("clearing tag_mark\n")) ;
-	    tag_mark = clear_mark (n_row, Row) ;
-	}
-#ifndef NDEBUG
-	DEBUG3 (("check3\n")) ;
-	debug_mark (n_row, Row, tag_mark, max_mark) ;
-#endif
-
-	/* === Finalize the new pivot row, and column scores ================ */
-
-	DEBUG1 (("** Finalize scores phase. **\n")) ;
-
-	/* for each column in pivot row */
-	rp = &A [pivot_row_start] ;
-	/* compact the pivot row */
-	new_rp = rp ;
-	rp_end = rp + pivot_row_length ;
-	while (rp < rp_end)
-	{
-	    col = *rp++ ;
-	    /* skip dead columns */
-	    if (COL_IS_DEAD (col))
-	    {
-		continue ;
-	    }
-	    *new_rp++ = col ;
-	    /* add new pivot row to column */
-	    A [Col [col].start + (Col [col].length++)] = pivot_row ;
-
-	    /* retrieve score so far and add on pivot row's degree. */
-	    /* (we wait until here for this in case the pivot */
-	    /* row's degree was reduced due to mass elimination). */
-	    cur_score = Col [col].shared2.score + pivot_row_degree ;
-
-	    /* calculate the max possible score as the number of */
-	    /* external columns minus the 'k' value minus the */
-	    /* columns thickness */
-	    max_score = n_col - k - Col [col].shared1.thickness ;
-
-	    /* make the score the external degree of the union-of-rows */
-	    cur_score -= Col [col].shared1.thickness ;
-
-	    /* make sure score is less or equal than the max score */
-	    cur_score = MIN (cur_score, max_score) ;
-	    assert (cur_score >= 0) ;
-
-	    /* store updated score */
-	    Col [col].shared2.score = cur_score ;
-
-	    /* === Place column back in degree list ========================= */
-
-	    assert (min_score >= 0) ;
-	    assert (min_score <= n_col) ;
-	    assert (cur_score >= 0) ;
-	    assert (cur_score <= n_col) ;
-	    assert (head [cur_score] >= EMPTY) ;
-	    next_col = head [cur_score] ;
-	    Col [col].shared4.degree_next = next_col ;
-	    Col [col].shared3.prev = EMPTY ;
-	    if (next_col != EMPTY)
-	    {
-		Col [next_col].shared3.prev = col ;
-	    }
-	    head [cur_score] = col ;
-
-	    /* see if this score is less than current min */
-	    min_score = MIN (min_score, cur_score) ;
-
-	}
-
-#ifndef NDEBUG
-	debug_deg_lists (n_row, n_col, Row, Col, head,
-		min_score, n_col2-k, max_deg) ;
-#endif
-
-	/* === Resurrect the new pivot row ================================== */
-
-	if (pivot_row_degree > 0)
-	{
-	    /* update pivot row length to reflect any cols that were killed */
-	    /* during super-col detection and mass elimination */
-	    Row [pivot_row].start  = pivot_row_start ;
-	    Row [pivot_row].length = (int) (new_rp - &A[pivot_row_start]) ;
-	    Row [pivot_row].shared1.degree = pivot_row_degree ;
-	    Row [pivot_row].shared2.mark = 0 ;
-	    /* pivot row is no longer dead */
-	}
-    }
-
-    /* === All principal columns have now been ordered ====================== */
-
-    return (ngarbage) ;
-}
-
-
-/* ========================================================================== */
-/* === order_children ======================================================= */
-/* ========================================================================== */
-
-/*
-    The find_ordering routine has ordered all of the principal columns (the
-    representatives of the supercolumns).  The non-principal columns have not
-    yet been ordered.  This routine orders those columns by walking up the
-    parent tree (a column is a child of the column which absorbed it).  The
-    final permutation vector is then placed in p [0 ... n_col-1], with p [0]
-    being the first column, and p [n_col-1] being the last.  It doesn't look
-    like it at first glance, but be assured that this routine takes time linear
-    in the number of columns.  Although not immediately obvious, the time
-    taken by this routine is O (n_col), that is, linear in the number of
-    columns.  Not user-callable.
-*/
-
-PRIVATE void order_children
-(
-    /* === Parameters ======================================================= */
-
-    int n_col,			/* number of columns of A */
-    ColInfo Col [],		/* of size n_col+1 */
-    int p []			/* p [0 ... n_col-1] is the column permutation*/
-)
-{
-    /* === Local variables ================================================== */
-
-    int i ;			/* loop counter for all columns */
-    int c ;			/* column index */
-    int parent ;		/* index of column's parent */
-    int order ;			/* column's order */
-
-    /* === Order each non-principal column ================================== */
-
-    for (i = 0 ; i < n_col ; i++)
-    {
-	/* find an un-ordered non-principal column */
-	assert (COL_IS_DEAD (i)) ;
-	if (!COL_IS_DEAD_PRINCIPAL (i) && Col [i].shared2.order == EMPTY)
-	{
-	    parent = i ;
-	    /* once found, find its principal parent */
-	    do
-	    {
-		parent = Col [parent].shared1.parent ;
-	    } while (!COL_IS_DEAD_PRINCIPAL (parent)) ;
-
-	    /* now, order all un-ordered non-principal columns along path */
-	    /* to this parent.  collapse tree at the same time */
-	    c = i ;
-	    /* get order of parent */
-	    order = Col [parent].shared2.order ;
-
-	    do
-	    {
-		assert (Col [c].shared2.order == EMPTY) ;
-
-		/* order this column */
-		Col [c].shared2.order = order++ ;
-		/* collaps tree */
-		Col [c].shared1.parent = parent ;
-
-		/* get immediate parent of this column */
-		c = Col [c].shared1.parent ;
-
-		/* continue until we hit an ordered column.  There are */
-		/* guarranteed not to be anymore unordered columns */
-		/* above an ordered column */
-	    } while (Col [c].shared2.order == EMPTY) ;
-
-	    /* re-order the super_col parent to largest order for this group */
-	    Col [parent].shared2.order = order ;
-	}
-    }
-
-    /* === Generate the permutation ========================================= */
-
-    for (c = 0 ; c < n_col ; c++)
-    {
-	p [Col [c].shared2.order] = c ;
-    }
-}
-
-
-/* ========================================================================== */
-/* === detect_super_cols ==================================================== */
-/* ========================================================================== */
-
-/*
-    Detects supercolumns by finding matches between columns in the hash buckets.
-    Check amongst columns in the set A [row_start ... row_start + row_length-1].
-    The columns under consideration are currently *not* in the degree lists,
-    and have already been placed in the hash buckets.
-
-    The hash bucket for columns whose hash function is equal to h is stored
-    as follows:
-
-	if head [h] is >= 0, then head [h] contains a degree list, so:
-
-		head [h] is the first column in degree bucket h.
-		Col [head [h]].headhash gives the first column in hash bucket h.
-
-	otherwise, the degree list is empty, and:
-
-		-(head [h] + 2) is the first column in hash bucket h.
-
-    For a column c in a hash bucket, Col [c].shared3.prev is NOT a "previous
-    column" pointer.  Col [c].shared3.hash is used instead as the hash number
-    for that column.  The value of Col [c].shared4.hash_next is the next column
-    in the same hash bucket.
-
-    Assuming no, or "few" hash collisions, the time taken by this routine is
-    linear in the sum of the sizes (lengths) of each column whose score has
-    just been computed in the approximate degree computation.
-    Not user-callable.
-*/
-
-PRIVATE void detect_super_cols
-(
-    /* === Parameters ======================================================= */
-
-#ifndef NDEBUG
-    /* these two parameters are only needed when debugging is enabled: */
-    int n_col,			/* number of columns of A */
-    RowInfo Row [],		/* of size n_row+1 */
-#endif
-    ColInfo Col [],		/* of size n_col+1 */
-    int A [],			/* row indices of A */
-    int head [],		/* head of degree lists and hash buckets */
-    int row_start,		/* pointer to set of columns to check */
-    int row_length		/* number of columns to check */
-)
-{
-    /* === Local variables ================================================== */
-
-    int hash ;			/* hash # for a column */
-    int *rp ;			/* pointer to a row */
-    int c ;			/* a column index */
-    int super_c ;		/* column index of the column to absorb into */
-    int *cp1 ;			/* column pointer for column super_c */
-    int *cp2 ;			/* column pointer for column c */
-    int length ;		/* length of column super_c */
-    int prev_c ;		/* column preceding c in hash bucket */
-    int i ;			/* loop counter */
-    int *rp_end ;		/* pointer to the end of the row */
-    int col ;			/* a column index in the row to check */
-    int head_column ;		/* first column in hash bucket or degree list */
-    int first_col ;		/* first column in hash bucket */
-
-    /* === Consider each column in the row ================================== */
-
-    rp = &A [row_start] ;
-    rp_end = rp + row_length ;
-    while (rp < rp_end)
-    {
-	col = *rp++ ;
-	if (COL_IS_DEAD (col))
-	{
-	    continue ;
-	}
-
-	/* get hash number for this column */
-	hash = Col [col].shared3.hash ;
-	assert (hash <= n_col) ;
-
-	/* === Get the first column in this hash bucket ===================== */
-
-	head_column = head [hash] ;
-	if (head_column > EMPTY)
-	{
-	    first_col = Col [head_column].shared3.headhash ;
-	}
-	else
-	{
-	    first_col = - (head_column + 2) ;
-	}
-
-	/* === Consider each column in the hash bucket ====================== */
-
-	for (super_c = first_col ; super_c != EMPTY ;
-	    super_c = Col [super_c].shared4.hash_next)
-	{
-	    assert (COL_IS_ALIVE (super_c)) ;
-	    assert (Col [super_c].shared3.hash == hash) ;
-	    length = Col [super_c].length ;
-
-	    /* prev_c is the column preceding column c in the hash bucket */
-	    prev_c = super_c ;
-
-	    /* === Compare super_c with all columns after it ================ */
-
-	    for (c = Col [super_c].shared4.hash_next ;
-		 c != EMPTY ; c = Col [c].shared4.hash_next)
-	    {
-		assert (c != super_c) ;
-		assert (COL_IS_ALIVE (c)) ;
-		assert (Col [c].shared3.hash == hash) ;
-
-		/* not identical if lengths or scores are different */
-		if (Col [c].length != length ||
-		    Col [c].shared2.score != Col [super_c].shared2.score)
-		{
-		    prev_c = c ;
-		    continue ;
-		}
-
-		/* compare the two columns */
-		cp1 = &A [Col [super_c].start] ;
-		cp2 = &A [Col [c].start] ;
-
-		for (i = 0 ; i < length ; i++)
-		{
-		    /* the columns are "clean" (no dead rows) */
-		    assert (ROW_IS_ALIVE (*cp1))  ;
-		    assert (ROW_IS_ALIVE (*cp2))  ;
-		    /* row indices will same order for both supercols, */
-		    /* no gather scatter nessasary */
-		    if (*cp1++ != *cp2++)
-		    {
-			break ;
-		    }
-		}
-
-		/* the two columns are different if the for-loop "broke" */
-		if (i != length)
-		{
-		    prev_c = c ;
-		    continue ;
-		}
-
-		/* === Got it!  two columns are identical =================== */
-
-		assert (Col [c].shared2.score == Col [super_c].shared2.score) ;
-
-		Col [super_c].shared1.thickness += Col [c].shared1.thickness ;
-		Col [c].shared1.parent = super_c ;
-		KILL_NON_PRINCIPAL_COL (c) ;
-		/* order c later, in order_children() */
-		Col [c].shared2.order = EMPTY ;
-		/* remove c from hash bucket */
-		Col [prev_c].shared4.hash_next = Col [c].shared4.hash_next ;
-	    }
-	}
-
-	/* === Empty this hash bucket ======================================= */
-
-	if (head_column > EMPTY)
-	{
-	    /* corresponding degree list "hash" is not empty */
-	    Col [head_column].shared3.headhash = EMPTY ;
-	}
-	else
-	{
-	    /* corresponding degree list "hash" is empty */
-	    head [hash] = EMPTY ;
-	}
-    }
-}
-
-
-/* ========================================================================== */
-/* === garbage_collection =================================================== */
-/* ========================================================================== */
-
-/*
-    Defragments and compacts columns and rows in the workspace A.  Used when
-    all avaliable memory has been used while performing row merging.  Returns
-    the index of the first free position in A, after garbage collection.  The
-    time taken by this routine is linear is the size of the array A, which is
-    itself linear in the number of nonzeros in the input matrix.
-    Not user-callable.
-*/
-
-PRIVATE int garbage_collection  /* returns the new value of pfree */
-(
-    /* === Parameters ======================================================= */
-
-    int n_row,			/* number of rows */
-    int n_col,			/* number of columns */
-    RowInfo Row [],		/* row info */
-    ColInfo Col [],		/* column info */
-    int A [],			/* A [0 ... Alen-1] holds the matrix */
-    int *pfree			/* &A [0] ... pfree is in use */
-)
-{
-    /* === Local variables ================================================== */
-
-    int *psrc ;			/* source pointer */
-    int *pdest ;		/* destination pointer */
-    int j ;			/* counter */
-    int r ;			/* a row index */
-    int c ;			/* a column index */
-    int length ;		/* length of a row or column */
-
-#ifndef NDEBUG
-    int debug_rows ;
-    DEBUG0 (("Defrag..\n")) ;
-    for (psrc = &A[0] ; psrc < pfree ; psrc++) assert (*psrc >= 0) ;
-    debug_rows = 0 ;
-#endif
-
-    /* === Defragment the columns =========================================== */
-
-    pdest = &A[0] ;
-    for (c = 0 ; c < n_col ; c++)
-    {
-	if (COL_IS_ALIVE (c))
-	{
-	    psrc = &A [Col [c].start] ;
-
-	    /* move and compact the column */
-	    assert (pdest <= psrc) ;
-	    Col [c].start = (int) (pdest - &A [0]) ;
-	    length = Col [c].length ;
-	    for (j = 0 ; j < length ; j++)
-	    {
-		r = *psrc++ ;
-		if (ROW_IS_ALIVE (r))
-		{
-		    *pdest++ = r ;
-		}
-	    }
-	    Col [c].length = (int) (pdest - &A [Col [c].start]) ;
-	}
-    }
-
-    /* === Prepare to defragment the rows =================================== */
-
-    for (r = 0 ; r < n_row ; r++)
-    {
-	if (ROW_IS_ALIVE (r))
-	{
-	    if (Row [r].length == 0)
-	    {
-		/* this row is of zero length.  cannot compact it, so kill it */
-		DEBUG0 (("Defrag row kill\n")) ;
-		KILL_ROW (r) ;
-	    }
-	    else
-	    {
-		/* save first column index in Row [r].shared2.first_column */
-		psrc = &A [Row [r].start] ;
-		Row [r].shared2.first_column = *psrc ;
-		assert (ROW_IS_ALIVE (r)) ;
-		/* flag the start of the row with the one's complement of row */
-		*psrc = ONES_COMPLEMENT (r) ;
-#ifndef NDEBUG
-		debug_rows++ ;
-#endif
-	    }
-	}
-    }
-
-    /* === Defragment the rows ============================================== */
-
-    psrc = pdest ;
-    while (psrc < pfree)
-    {
-	/* find a negative number ... the start of a row */
-	if (*psrc++ < 0)
-	{
-	    psrc-- ;
-	    /* get the row index */
-	    r = ONES_COMPLEMENT (*psrc) ;
-	    assert (r >= 0 && r < n_row) ;
-	    /* restore first column index */
-	    *psrc = Row [r].shared2.first_column ;
-	    assert (ROW_IS_ALIVE (r)) ;
-
-	    /* move and compact the row */
-	    assert (pdest <= psrc) ;
-	    Row [r].start = (int) (pdest - &A [0]) ;
-	    length = Row [r].length ;
-	    for (j = 0 ; j < length ; j++)
-	    {
-		c = *psrc++ ;
-		if (COL_IS_ALIVE (c))
-		{
-		    *pdest++ = c ;
-		}
-	    }
-	    Row [r].length = (int) (pdest - &A [Row [r].start]) ;
-#ifndef NDEBUG
-	    debug_rows-- ;
-#endif
-	}
-    }
-    /* ensure we found all the rows */
-    assert (debug_rows == 0) ;
-
-    /* === Return the new value of pfree ==================================== */
-
-    return ((int) (pdest - &A [0])) ;
-}
-
-
-/* ========================================================================== */
-/* === clear_mark =========================================================== */
-/* ========================================================================== */
-
-/*
-    Clears the Row [].shared2.mark array, and returns the new tag_mark.
-    Return value is the new tag_mark.  Not user-callable.
-*/
-
-PRIVATE int clear_mark	/* return the new value for tag_mark */
-(
-    /* === Parameters ======================================================= */
-
-    int n_row,		/* number of rows in A */
-    RowInfo Row []	/* Row [0 ... n_row-1].shared2.mark is set to zero */
-)
-{
-    /* === Local variables ================================================== */
-
-    int r ;
-
-    DEBUG0 (("Clear mark\n")) ;
-    for (r = 0 ; r < n_row ; r++)
-    {
-	if (ROW_IS_ALIVE (r))
-	{
-	    Row [r].shared2.mark = 0 ;
-	}
-    }
-    return (1) ;
-}
-
-
-/* ========================================================================== */
-/* === debugging routines =================================================== */
-/* ========================================================================== */
-
-/* When debugging is disabled, the remainder of this file is ignored. */
-
-#ifndef NDEBUG
-
-
-/* ========================================================================== */
-/* === debug_structures ===================================================== */
-/* ========================================================================== */
-
-/*
-    At this point, all empty rows and columns are dead.  All live columns
-    are "clean" (containing no dead rows) and simplicial (no supercolumns
-    yet).  Rows may contain dead columns, but all live rows contain at
-    least one live column.
-*/
-
-PRIVATE void debug_structures
-(
-    /* === Parameters ======================================================= */
-
-    int n_row,
-    int n_col,
-    RowInfo Row [],
-    ColInfo Col [],
-    int A [],
-    int n_col2
-)
-{
-    /* === Local variables ================================================== */
-
-    int i ;
-    int c ;
-    int *cp ;
-    int *cp_end ;
-    int len ;
-    int score ;
-    int r ;
-    int *rp ;
-    int *rp_end ;
-    int deg ;
-
-    /* === Check A, Row, and Col ============================================ */
-
-    for (c = 0 ; c < n_col ; c++)
-    {
-	if (COL_IS_ALIVE (c))
-	{
-	    len = Col [c].length ;
-	    score = Col [c].shared2.score ;
-	    DEBUG4 (("initial live col %5d %5d %5d\n", c, len, score)) ;
-	    assert (len > 0) ;
-	    assert (score >= 0) ;
-	    assert (Col [c].shared1.thickness == 1) ;
-	    cp = &A [Col [c].start] ;
-	    cp_end = cp + len ;
-	    while (cp < cp_end)
-	    {
-		r = *cp++ ;
-		assert (ROW_IS_ALIVE (r)) ;
-	    }
-	}
-	else
-	{
-	    i = Col [c].shared2.order ;
-	    assert (i >= n_col2 && i < n_col) ;
-	}
-    }
-
-    for (r = 0 ; r < n_row ; r++)
-    {
-	if (ROW_IS_ALIVE (r))
-	{
-	    i = 0 ;
-	    len = Row [r].length ;
-	    deg = Row [r].shared1.degree ;
-	    assert (len > 0) ;
-	    assert (deg > 0) ;
-	    rp = &A [Row [r].start] ;
-	    rp_end = rp + len ;
-	    while (rp < rp_end)
-	    {
-		c = *rp++ ;
-		if (COL_IS_ALIVE (c))
-		{
-		    i++ ;
-		}
-	    }
-	    assert (i > 0) ;
-	}
-    }
-}
-
-
-/* ========================================================================== */
-/* === debug_deg_lists ====================================================== */
-/* ========================================================================== */
-
-/*
-    Prints the contents of the degree lists.  Counts the number of columns
-    in the degree list and compares it to the total it should have.  Also
-    checks the row degrees.
-*/
-
-PRIVATE void debug_deg_lists
-(
-    /* === Parameters ======================================================= */
-
-    int n_row,
-    int n_col,
-    RowInfo Row [],
-    ColInfo Col [],
-    int head [],
-    int min_score,
-    int should,
-    int max_deg
-)
-{
-    /* === Local variables ================================================== */
-
-    int deg ;
-    int col ;
-    int have ;
-    int row ;
-
-    /* === Check the degree lists =========================================== */
-
-    if (n_col > 10000 && debug_colamd <= 0)
-    {
-	return ;
-    }
-    have = 0 ;
-    DEBUG4 (("Degree lists: %d\n", min_score)) ;
-    for (deg = 0 ; deg <= n_col ; deg++)
-    {
-	col = head [deg] ;
-	if (col == EMPTY)
-	{
-	    continue ;
-	}
-	DEBUG4 (("%d:", deg)) ;
-	while (col != EMPTY)
-	{
-	    DEBUG4 ((" %d", col)) ;
-	    have += Col [col].shared1.thickness ;
-	    assert (COL_IS_ALIVE (col)) ;
-	    col = Col [col].shared4.degree_next ;
-	}
-	DEBUG4 (("\n")) ;
-    }
-    DEBUG4 (("should %d have %d\n", should, have)) ;
-    assert (should == have) ;
-
-    /* === Check the row degrees ============================================ */
-
-    if (n_row > 10000 && debug_colamd <= 0)
-    {
-	return ;
-    }
-    for (row = 0 ; row < n_row ; row++)
-    {
-	if (ROW_IS_ALIVE (row))
-	{
-	    assert (Row [row].shared1.degree <= max_deg) ;
-	}
-    }
-}
-
-
-/* ========================================================================== */
-/* === debug_mark =========================================================== */
-/* ========================================================================== */
-
-/*
-    Ensures that the tag_mark is less that the maximum and also ensures that
-    each entry in the mark array is less than the tag mark.
-*/
-
-PRIVATE void debug_mark
-(
-    /* === Parameters ======================================================= */
-
-    int n_row,
-    RowInfo Row [],
-    int tag_mark,
-    int max_mark
-)
-{
-    /* === Local variables ================================================== */
-
-    int r ;
-
-    /* === Check the Row marks ============================================== */
-
-    assert (tag_mark > 0 && tag_mark <= max_mark) ;
-    if (n_row > 10000 && debug_colamd <= 0)
-    {
-	return ;
-    }
-    for (r = 0 ; r < n_row ; r++)
-    {
-	assert (Row [r].shared2.mark < tag_mark) ;
-    }
-}
-
-
-/* ========================================================================== */
-/* === debug_matrix ========================================================= */
-/* ========================================================================== */
-
-/*
-    Prints out the contents of the columns and the rows.
-*/
-
-PRIVATE void debug_matrix
-(
-    /* === Parameters ======================================================= */
-
-    int n_row,
-    int n_col,
-    RowInfo Row [],
-    ColInfo Col [],
-    int A []
-)
-{
-    /* === Local variables ================================================== */
-
-    int r ;
-    int c ;
-    int *rp ;
-    int *rp_end ;
-    int *cp ;
-    int *cp_end ;
-
-    /* === Dump the rows and columns of the matrix ========================== */
-
-    if (debug_colamd < 3)
-    {
-	return ;
-    }
-    DEBUG3 (("DUMP MATRIX:\n")) ;
-    for (r = 0 ; r < n_row ; r++)
-    {
-	DEBUG3 (("Row %d alive? %d\n", r, ROW_IS_ALIVE (r))) ;
-	if (ROW_IS_DEAD (r))
-	{
-	    continue ;
-	}
-	DEBUG3 (("start %d length %d degree %d\n",
-		Row [r].start, Row [r].length, Row [r].shared1.degree)) ;
-	rp = &A [Row [r].start] ;
-	rp_end = rp + Row [r].length ;
-	while (rp < rp_end)
-	{
-	    c = *rp++ ;
-	    DEBUG3 (("	%d col %d\n", COL_IS_ALIVE (c), c)) ;
-	}
-    }
-
-    for (c = 0 ; c < n_col ; c++)
-    {
-	DEBUG3 (("Col %d alive? %d\n", c, COL_IS_ALIVE (c))) ;
-	if (COL_IS_DEAD (c))
-	{
-	    continue ;
-	}
-	DEBUG3 (("start %d length %d shared1 %d shared2 %d\n",
-		Col [c].start, Col [c].length,
-		Col [c].shared1.thickness, Col [c].shared2.score)) ;
-	cp = &A [Col [c].start] ;
-	cp_end = cp + Col [c].length ;
-	while (cp < cp_end)
-	{
-	    r = *cp++ ;
-	    DEBUG3 (("	%d row %d\n", ROW_IS_ALIVE (r), r)) ;
-	}
-    }
-}
-
-#endif
-
diff --git a/SRC/old_colamd.h b/SRC/old_colamd.h
deleted file mode 100644
index 0078398..0000000
--- a/SRC/old_colamd.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* ========================================================================== */
-/* === colamd prototypes and definitions ==================================== */
-/* ========================================================================== */
-
-/*
-    This is the colamd include file,
-
-	http://www.cise.ufl.edu/~davis/colamd/colamd.h
-
-    for use in the colamd.c, colamdmex.c, and symamdmex.c files located at
-
-	http://www.cise.ufl.edu/~davis/colamd/
-
-    See those files for a description of colamd and symamd, and for the
-    copyright notice, which also applies to this file.
-
-    August 3, 1998.  Version 1.0.
-*/
-
-/* ========================================================================== */
-/* === Definitions ========================================================== */
-/* ========================================================================== */
-
-/* size of the knobs [ ] array.  Only knobs [0..1] are currently used. */
-#define COLAMD_KNOBS 20
-
-/* number of output statistics.  Only A [0..2] are currently used. */
-#define COLAMD_STATS 20
-
-/* knobs [0] and A [0]: dense row knob and output statistic. */
-#define COLAMD_DENSE_ROW 0
-
-/* knobs [1] and A [1]: dense column knob and output statistic. */
-#define COLAMD_DENSE_COL 1
-
-/* A [2]: memory defragmentation count output statistic */
-#define COLAMD_DEFRAG_COUNT 2
-
-/* A [3]: whether or not the input columns were jumbled or had duplicates */
-#define COLAMD_JUMBLED_COLS 3
-
-/* ========================================================================== */
-/* === Prototypes of user-callable routines ================================= */
-/* ========================================================================== */
-
-int colamd_recommended		/* returns recommended value of Alen */
-(
-    int nnz,			/* nonzeros in A */
-    int n_row,			/* number of rows in A */
-    int n_col			/* number of columns in A */
-) ;
-
-void colamd_set_defaults	/* sets default parameters */
-(				/* knobs argument is modified on output */
-    double knobs [COLAMD_KNOBS]	/* parameter settings for colamd */
-) ;
-
-int colamd			/* returns TRUE if successful, FALSE otherwise*/
-(				/* A and p arguments are modified on output */
-    int n_row,			/* number of rows in A */
-    int n_col,			/* number of columns in A */
-    int Alen,			/* size of the array A */
-    int A [],			/* row indices of A, of size Alen */
-    int p [],			/* column pointers of A, of size n_col+1 */
-    double knobs [COLAMD_KNOBS]	/* parameter settings for colamd */
-) ;
-
diff --git a/SRC/qselect.c b/SRC/qselect.c
new file mode 100755
index 0000000..60d77e4
--- /dev/null
+++ b/SRC/qselect.c
@@ -0,0 +1,74 @@
+
+/*! @file qselect.c
+ * \brief Quickselect: returns the k-th (zero-based) largest value in A[].
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory.
+ * November, 2010
+ * </pre>
+ */
+
+#include "slu_ddefs.h"
+
+double dqselect(int n, double A[], int k)
+{
+    register int i, j, p;
+    register double val;
+
+    k = SUPERLU_MAX(k, 0);
+    k = SUPERLU_MIN(k, n - 1);
+    while (n > 1)
+    {
+	i = 0; j = n-1;
+	p = j; val = A[p];
+	while (i < j)
+	{
+	    for (; A[i] >= val && i < p; i++);
+	    if (A[i] < val) { A[p] = A[i]; p = i; }
+	    for (; A[j] <= val && j > p; j--);
+	    if (A[j] > val) { A[p] = A[j]; p = j; }
+	}
+	A[p] = val;
+	if (p == k) return val;
+	else if (p > k) n = p;
+	else
+	{
+	    p++;
+	    n -= p; A += p; k -= p;
+	}
+    }
+
+    return A[0];
+}
+
+float sqselect(int n, float A[], int k)
+{
+    register int i, j, p;
+    register float val;
+
+    k = SUPERLU_MAX(k, 0);
+    k = SUPERLU_MIN(k, n - 1);
+    while (n > 1)
+    {
+	i = 0; j = n-1;
+	p = j; val = A[p];
+	while (i < j)
+	{
+	    for (; A[i] >= val && i < p; i++);
+	    if (A[i] < val) { A[p] = A[i]; p = i; }
+	    for (; A[j] <= val && j > p; j--);
+	    if (A[j] > val) { A[p] = A[j]; p = j; }
+	}
+	A[p] = val;
+	if (p == k) return val;
+	else if (p > k) n = p;
+	else
+	{
+	    p++;
+	    n -= p; A += p; k -= p;
+	}
+    }
+
+    return A[0];
+}
diff --git a/SRC/relax_snode.c b/SRC/relax_snode.c
index ef20127..f666b6e 100644
--- a/SRC/relax_snode.c
+++ b/SRC/relax_snode.c
@@ -1,25 +1,35 @@
-/*
+/*! @file relax_snode.c
+ * \brief Identify initial relaxed supernodes
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
 
 #include "slu_ddefs.h"
-
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *    relax_snode() - Identify the initial relaxed supernodes, assuming that 
+ *    the matrix has been reordered according to the postorder of the etree.
+ * </pre>
+ */ 
 void
 relax_snode (
 	     const     int n,
@@ -31,13 +41,7 @@ relax_snode (
 	     int       *relax_end     /* last column in a supernode */
 	     )
 {
-/*
- * Purpose
- * =======
- *    relax_snode() - Identify the initial relaxed supernodes, assuming that 
- *    the matrix has been reordered according to the postorder of the etree.
- *
- */ 
+
     register int j, parent;
     register int snode_start;	/* beginning of a snode */
     
diff --git a/SRC/scolumn_bmod.c b/SRC/scolumn_bmod.c
index 303b3d4..c1839d3 100644
--- a/SRC/scolumn_bmod.c
+++ b/SRC/scolumn_bmod.c
@@ -1,22 +1,24 @@
 
-/*
+/*! @file scolumn_bmod.c
+ *  \brief performs numeric block updates
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
- */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ *  Permission is hereby granted to use or copy this program for any
+ *  purpose, provided the above notices are retained on all copies.
+ *  Permission to modify the code and to distribute modified code is
+ *  granted, provided the above notices are retained, and a notice that
+ *  the code was modified is included with the above copyright notice.
+ * </pre>
 */
 
 #include <stdio.h>
@@ -32,8 +34,17 @@ void smatvec(int, int, int, float*, float*, float*);
 
 
 
-/* Return value:   0 - successful return
+/*! \brief 
+ *
+ * <pre>
+ * Purpose:
+ * ========
+ * Performs numeric block updates (sup-col) in topological order.
+ * It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ * Special processing on the supernodal portion of L\U[*,j]
+ * Return value:   0 - successful return
  *               > 0 - number of bytes allocated when run out of space
+ * </pre>
  */
 int
 scolumn_bmod (
@@ -48,14 +59,7 @@ scolumn_bmod (
 	     SuperLUStat_t *stat  /* output */
 	     )
 {
-/*
- * Purpose:
- * ========
- *    Performs numeric block updates (sup-col) in topological order.
- *    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
- *    Special processing on the supernodal portion of L\U[*,j]
- *
- */
+
 #ifdef _CRAY
     _fcd ftcs1 = _cptofcd("L", strlen("L")),
          ftcs2 = _cptofcd("N", strlen("N")),
diff --git a/SRC/scolumn_dfs.c b/SRC/scolumn_dfs.c
index 923b25d..4a412ab 100644
--- a/SRC/scolumn_dfs.c
+++ b/SRC/scolumn_dfs.c
@@ -1,49 +1,38 @@
 
-/*
+/*! @file scolumn_dfs.c
+ * \brief Performs a symbolic factorization
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
- */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
 */
 
 #include "slu_sdefs.h"
 
-/* What type of supernodes we want */
+/*! \brief What type of supernodes we want */
 #define T2_SUPER
 
-int
-scolumn_dfs(
-	   const int  m,         /* in - number of rows in the matrix */
-	   const int  jcol,      /* in */
-	   int        *perm_r,   /* in */
-	   int        *nseg,     /* modified - with new segments appended */
-	   int        *lsub_col, /* in - defines the RHS vector to start the dfs */
-	   int        *segrep,   /* modified - with new segments appended */
-	   int        *repfnz,   /* modified */
-	   int        *xprune,   /* modified */
-	   int        *marker,   /* modified */
-	   int        *parent,	 /* working array */
-	   int        *xplore,   /* working array */
-	   GlobalLU_t *Glu       /* modified */
-	   )
-{
-/* 
+
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
- *   "column_dfs" performs a symbolic factorization on column jcol, and
+ *   SCOLUMN_DFS performs a symbolic factorization on column jcol, and
  *   decide the supernode boundary.
  *
  *   This routine does not use numeric values, but only use the RHS 
@@ -71,8 +60,25 @@ scolumn_dfs(
  * ============
  *     0  success;
  *   > 0  number of bytes allocated when run out of space.
- *
+ * </pre>
  */
+int
+scolumn_dfs(
+	   const int  m,         /* in - number of rows in the matrix */
+	   const int  jcol,      /* in */
+	   int        *perm_r,   /* in */
+	   int        *nseg,     /* modified - with new segments appended */
+	   int        *lsub_col, /* in - defines the RHS vector to start the dfs */
+	   int        *segrep,   /* modified - with new segments appended */
+	   int        *repfnz,   /* modified */
+	   int        *xprune,   /* modified */
+	   int        *marker,   /* modified */
+	   int        *parent,	 /* working array */
+	   int        *xplore,   /* working array */
+	   GlobalLU_t *Glu       /* modified */
+	   )
+{
+
     int     jcolp1, jcolm1, jsuper, nsuper, nextl;
     int     k, krep, krow, kmark, kperm;
     int     *marker2;           /* Used for small panel LU */
diff --git a/SRC/scomplex.c b/SRC/scomplex.c
index d353281..2f78c07 100644
--- a/SRC/scomplex.c
+++ b/SRC/scomplex.c
@@ -1,21 +1,24 @@
 
-/*
+/*! @file scomplex.c
+ * \brief Common arithmetic for complex type
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
- */
-/*
  * This file defines common arithmetic operations for complex type.
+ * </pre>
  */
+
 #include <math.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include "slu_scomplex.h"
 
 
-/* Complex Division c = a/b */
+/*! \brief Complex Division c = a/b */
 void c_div(complex *c, complex *a, complex *b)
 {
     float ratio, den;
@@ -45,7 +48,7 @@ void c_div(complex *c, complex *a, complex *b)
 }
 
 
-/* Returns sqrt(z.r^2 + z.i^2) */
+/*! \brief Returns sqrt(z.r^2 + z.i^2) */
 double c_abs(complex *z)
 {
     float temp;
@@ -67,8 +70,7 @@ double c_abs(complex *z)
 }
 
 
-/* Approximates the abs */
-/* Returns abs(z.r) + abs(z.i) */
+/*! \brief Approximates the abs. Returns abs(z.r) + abs(z.i) */
 double c_abs1(complex *z)
 {
     float real = z->r;
@@ -80,7 +82,7 @@ double c_abs1(complex *z)
     return (real + imag);
 }
 
-/* Return the exponentiation */
+/*! \brief Return the exponentiation */
 void c_exp(complex *r, complex *z)
 {
     float expx;
@@ -90,17 +92,56 @@ void c_exp(complex *r, complex *z)
     r->i = expx * sin(z->i);
 }
 
-/* Return the complex conjugate */
+/*! \brief Return the complex conjugate */
 void r_cnjg(complex *r, complex *z)
 {
     r->r = z->r;
     r->i = -z->i;
 }
 
-/* Return the imaginary part */
+/*! \brief Return the imaginary part */
 double r_imag(complex *z)
 {
     return (z->i);
 }
 
 
+/*! \brief SIGN functions for complex number. Returns z/abs(z) */
+complex c_sgn(complex *z)
+{
+    register float t = c_abs(z);
+    register complex retval;
+
+    if (t == 0.0) {
+	retval.r = 1.0, retval.i = 0.0;
+    } else {
+	retval.r = z->r / t, retval.i = z->i / t;
+    }
+
+    return retval;
+}
+
+/*! \brief Square-root of a complex number. */
+complex c_sqrt(complex *z)
+{
+    complex retval;
+    register float cr, ci, real, imag;
+
+    real = z->r;
+    imag = z->i;
+
+    if ( imag == 0.0 ) {
+        retval.r = sqrt(real);
+        retval.i = 0.0;
+    } else {
+        ci = (sqrt(real*real + imag*imag) - real) / 2.0;
+        ci = sqrt(ci);
+        cr = imag / (2.0 * ci);
+        retval.r = cr;
+        retval.i = ci;
+    }
+
+    return retval;
+}
+
+
diff --git a/SRC/scopy_to_ucol.c b/SRC/scopy_to_ucol.c
index daed16a..2f6399f 100644
--- a/SRC/scopy_to_ucol.c
+++ b/SRC/scopy_to_ucol.c
@@ -1,23 +1,24 @@
 
-/*
+/*! @file scopy_to_ucol.c
+ * \brief Copy a computed column of U to the compressed data structure
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
  *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
 
 #include "slu_sdefs.h"
 
@@ -45,7 +46,6 @@ scopy_to_ucol(
     float    *ucol;
     int       *usub, *xusub;
     int       nzumax;
-
     float zero = 0.0;
 
     xsup    = Glu->xsup;
diff --git a/SRC/scsum1.c b/SRC/scsum1.c
index 5ab8fc2..5b4eb3a 100644
--- a/SRC/scsum1.c
+++ b/SRC/scsum1.c
@@ -1,14 +1,19 @@
-#include "slu_Cnames.h"
+/*! @file scsum1.c
+ * \brief Takes sum of the absolute values of a complex vector and returns a single precision result
+ *
+ * <pre>
+ *     -- LAPACK auxiliary routine (version 2.0) --   
+ *     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
+ *     Courant Institute, Argonne National Lab, and Rice University   
+ *     October 31, 1992   
+ * </pre>
+ */
 #include "slu_scomplex.h"
+#include "slu_Cnames.h"
 
-double scsum1_(int *n, complex *cx, int *incx)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       October 31, 1992   
-
+/*! \brief
 
+<pre>
     Purpose   
     =======   
 
@@ -33,12 +38,10 @@ double scsum1_(int *n, complex *cx, int *incx)
             The spacing between successive values of CX.  INCX > 0.   
 
     ===================================================================== 
-  
-
-
-    
-   Parameter adjustments   
-       Function Body */
+</pre>
+*/
+double scsum1_(int *n, complex *cx, int *incx)
+{
     /* System generated locals */
     int i__1, i__2;
     float ret_val;
diff --git a/SRC/sdiagonal.c b/SRC/sdiagonal.c
new file mode 100644
index 0000000..54a56c8
--- /dev/null
+++ b/SRC/sdiagonal.c
@@ -0,0 +1,129 @@
+
+/*! @file sdiagonal.c
+ * \brief Auxiliary routines to work with diagonal elements
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_sdefs.h"
+
+int sfill_diag(int n, NCformat *Astore)
+/* fill explicit zeros on the diagonal entries, so that the matrix is not
+   structurally singular. */
+{
+    float *nzval = (float *)Astore->nzval;
+    int *rowind = Astore->rowind;
+    int *colptr = Astore->colptr;
+    int nnz = colptr[n];
+    int fill = 0;
+    float *nzval_new;
+    float zero = 0.0;
+    int *rowind_new;
+    int i, j, diag;
+
+    for (i = 0; i < n; i++)
+    {
+	diag = -1;
+	for (j = colptr[i]; j < colptr[i + 1]; j++)
+	    if (rowind[j] == i) diag = j;
+	if (diag < 0) fill++;
+    }
+    if (fill)
+    {
+	nzval_new = floatMalloc(nnz + fill);
+	rowind_new = intMalloc(nnz + fill);
+	fill = 0;
+	for (i = 0; i < n; i++)
+	{
+	    diag = -1;
+	    for (j = colptr[i] - fill; j < colptr[i + 1]; j++)
+	    {
+		if ((rowind_new[j + fill] = rowind[j]) == i) diag = j;
+		nzval_new[j + fill] = nzval[j];
+	    }
+	    if (diag < 0)
+	    {
+		rowind_new[colptr[i + 1] + fill] = i;
+		nzval_new[colptr[i + 1] + fill] = zero;
+		fill++;
+	    }
+	    colptr[i + 1] += fill;
+	}
+	Astore->nzval = nzval_new;
+	Astore->rowind = rowind_new;
+	SUPERLU_FREE(nzval);
+	SUPERLU_FREE(rowind);
+    }
+    Astore->nnz += fill;
+    return fill;
+}
+
+int sdominate(int n, NCformat *Astore)
+/* make the matrix diagonally dominant */
+{
+    float *nzval = (float *)Astore->nzval;
+    int *rowind = Astore->rowind;
+    int *colptr = Astore->colptr;
+    int nnz = colptr[n];
+    int fill = 0;
+    float *nzval_new;
+    int *rowind_new;
+    int i, j, diag;
+    double s;
+
+    for (i = 0; i < n; i++)
+    {
+	diag = -1;
+	for (j = colptr[i]; j < colptr[i + 1]; j++)
+	    if (rowind[j] == i) diag = j;
+	if (diag < 0) fill++;
+    }
+    if (fill)
+    {
+	nzval_new = floatMalloc(nnz + fill);
+	rowind_new = intMalloc(nnz+ fill);
+	fill = 0;
+	for (i = 0; i < n; i++)
+	{
+	    s = 1e-6;
+	    diag = -1;
+	    for (j = colptr[i] - fill; j < colptr[i + 1]; j++)
+	    {
+		if ((rowind_new[j + fill] = rowind[j]) == i) diag = j;
+		s += fabs(nzval_new[j + fill] = nzval[j]);
+	    }
+	    if (diag >= 0) {
+		nzval_new[diag+fill] = s * 3.0;
+	    } else {
+		rowind_new[colptr[i + 1] + fill] = i;
+		nzval_new[colptr[i + 1] + fill] = s * 3.0;
+		fill++;
+	    }
+	    colptr[i + 1] += fill;
+	}
+	Astore->nzval = nzval_new;
+	Astore->rowind = rowind_new;
+	SUPERLU_FREE(nzval);
+	SUPERLU_FREE(rowind);
+    }
+    else
+    {
+	for (i = 0; i < n; i++)
+	{
+	    s = 1e-6;
+	    diag = -1;
+	    for (j = colptr[i]; j < colptr[i + 1]; j++)
+	    {
+		if (rowind[j] == i) diag = j;
+		s += fabs(nzval[j]);
+	    }
+	    nzval[diag] = s * 3.0;
+	}
+    }
+    Astore->nnz += fill;
+    return fill;
+}
diff --git a/SRC/sgscon.c b/SRC/sgscon.c
index 9080602..a474967 100644
--- a/SRC/sgscon.c
+++ b/SRC/sgscon.c
@@ -1,11 +1,17 @@
 
-/*
+/*! @file sgscon.c
+ * \brief Estimates reciprocal of the condition number of a general matrix
+ * 
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Modified from lapack routines SGECON.
+ * </pre> 
  */
+
 /*
  * File name:	sgscon.c
  * History:     Modified from lapack routines SGECON.
@@ -13,57 +19,62 @@
 #include <math.h>
 #include "slu_sdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   SGSCON estimates the reciprocal of the condition number of a general 
+ *   real matrix A, in either the 1-norm or the infinity-norm, using   
+ *   the LU factorization computed by SGETRF.   *
+ *
+ *   An estimate is obtained for norm(inv(A)), and the reciprocal of the   
+ *   condition number is computed as   
+ *      RCOND = 1 / ( norm(A) * norm(inv(A)) ).   
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ * 
+ *   Arguments   
+ *   =========   
+ *
+ *    NORM    (input) char*
+ *            Specifies whether the 1-norm condition number or the   
+ *            infinity-norm condition number is required:   
+ *            = '1' or 'O':  1-norm;   
+ *            = 'I':         Infinity-norm.
+ *	    
+ *    L       (input) SuperMatrix*
+ *            The factor L from the factorization Pr*A*Pc=L*U as computed by
+ *            sgstrf(). Use compressed row subscripts storage for supernodes,
+ *            i.e., L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.
+ * 
+ *    U       (input) SuperMatrix*
+ *            The factor U from the factorization Pr*A*Pc=L*U as computed by
+ *            sgstrf(). Use column-wise storage scheme, i.e., U has types:
+ *            Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.
+ *	    
+ *    ANORM   (input) float
+ *            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
+ *            If NORM = 'I', the infinity-norm of the original matrix A.
+ *	    
+ *    RCOND   (output) float*
+ *           The reciprocal of the condition number of the matrix A,   
+ *           computed as RCOND = 1/(norm(A) * norm(inv(A))).
+ *	    
+ *    INFO    (output) int*
+ *           = 0:  successful exit   
+ *           < 0:  if INFO = -i, the i-th argument had an illegal value   
+ *
+ *    ===================================================================== 
+ * </pre>
+ */
+
 void
 sgscon(char *norm, SuperMatrix *L, SuperMatrix *U,
        float anorm, float *rcond, SuperLUStat_t *stat, int *info)
 {
-/*
-    Purpose   
-    =======   
-
-    SGSCON estimates the reciprocal of the condition number of a general 
-    real matrix A, in either the 1-norm or the infinity-norm, using   
-    the LU factorization computed by SGETRF.   
-
-    An estimate is obtained for norm(inv(A)), and the reciprocal of the   
-    condition number is computed as   
-       RCOND = 1 / ( norm(A) * norm(inv(A)) ).   
-
-    See supermatrix.h for the definition of 'SuperMatrix' structure.
- 
-    Arguments   
-    =========   
-
-    NORM    (input) char*
-            Specifies whether the 1-norm condition number or the   
-            infinity-norm condition number is required:   
-            = '1' or 'O':  1-norm;   
-            = 'I':         Infinity-norm.
-	    
-    L       (input) SuperMatrix*
-            The factor L from the factorization Pr*A*Pc=L*U as computed by
-            sgstrf(). Use compressed row subscripts storage for supernodes,
-            i.e., L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.
- 
-    U       (input) SuperMatrix*
-            The factor U from the factorization Pr*A*Pc=L*U as computed by
-            sgstrf(). Use column-wise storage scheme, i.e., U has types:
-            Stype = SLU_NC, Dtype = SLU_S, Mtype = TRU.
-	    
-    ANORM   (input) float
-            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
-            If NORM = 'I', the infinity-norm of the original matrix A.
-	    
-    RCOND   (output) float*
-            The reciprocal of the condition number of the matrix A,   
-            computed as RCOND = 1/(norm(A) * norm(inv(A))).
-	    
-    INFO    (output) int*
-            = 0:  successful exit   
-            < 0:  if INFO = -i, the i-th argument had an illegal value   
 
-    ===================================================================== 
-*/
 
     /* Local variables */
     int    kase, kase1, onenrm, i;
diff --git a/SRC/sgsequ.c b/SRC/sgsequ.c
index 10a2ffc..3637d7e 100644
--- a/SRC/sgsequ.c
+++ b/SRC/sgsequ.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file sgsequ.c
+ * \brief Computes row and column scalings
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Modified from LAPACK routine SGEEQU
+ * </pre>
  */
 /*
  * File name:	sgsequ.c
@@ -13,67 +18,73 @@
 #include <math.h>
 #include "slu_sdefs.h"
 
+
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose   
+ *   =======   
+ *
+ *   SGSEQU computes row and column scalings intended to equilibrate an   
+ *   M-by-N sparse matrix A and reduce its condition number. R returns the row
+ *   scale factors and C the column scale factors, chosen to try to make   
+ *   the largest element in each row and column of the matrix B with   
+ *   elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.   
+ *
+ *   R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
+ *   number and BIGNUM = largest safe number.  Use of these scaling   
+ *   factors is not guaranteed to reduce the condition number of A but   
+ *   works well in practice.   
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   A       (input) SuperMatrix*
+ *           The matrix of dimension (A->nrow, A->ncol) whose equilibration
+ *           factors are to be computed. The type of A can be:
+ *           Stype = SLU_NC; Dtype = SLU_S; Mtype = SLU_GE.
+ *	    
+ *   R       (output) float*, size A->nrow
+ *           If INFO = 0 or INFO > M, R contains the row scale factors   
+ *           for A.
+ *	    
+ *   C       (output) float*, size A->ncol
+ *           If INFO = 0,  C contains the column scale factors for A.
+ *	    
+ *   ROWCND  (output) float*
+ *           If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
+ *           smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
+ *           AMAX is neither too large nor too small, it is not worth   
+ *           scaling by R.
+ *	    
+ *   COLCND  (output) float*
+ *           If INFO = 0, COLCND contains the ratio of the smallest   
+ *           C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
+ *           worth scaling by C.
+ *	    
+ *   AMAX    (output) float*
+ *           Absolute value of largest matrix element.  If AMAX is very   
+ *           close to overflow or very close to underflow, the matrix   
+ *           should be scaled.
+ *	    
+ *   INFO    (output) int*
+ *           = 0:  successful exit   
+ *           < 0:  if INFO = -i, the i-th argument had an illegal value   
+ *           > 0:  if INFO = i,  and i is   
+ *                 <= A->nrow:  the i-th row of A is exactly zero   
+ *                 >  A->ncol:  the (i-M)-th column of A is exactly zero   
+ *
+ *   ===================================================================== 
+ * </pre>
+ */
 void
 sgsequ(SuperMatrix *A, float *r, float *c, float *rowcnd,
 	float *colcnd, float *amax, int *info)
 {
-/*    
-    Purpose   
-    =======   
-
-    SGSEQU computes row and column scalings intended to equilibrate an   
-    M-by-N sparse matrix A and reduce its condition number. R returns the row
-    scale factors and C the column scale factors, chosen to try to make   
-    the largest element in each row and column of the matrix B with   
-    elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.   
-
-    R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
-    number and BIGNUM = largest safe number.  Use of these scaling   
-    factors is not guaranteed to reduce the condition number of A but   
-    works well in practice.   
-
-    See supermatrix.h for the definition of 'SuperMatrix' structure.
- 
-    Arguments   
-    =========   
-
-    A       (input) SuperMatrix*
-            The matrix of dimension (A->nrow, A->ncol) whose equilibration
-            factors are to be computed. The type of A can be:
-            Stype = SLU_NC; Dtype = SLU_S; Mtype = SLU_GE.
-	    
-    R       (output) float*, size A->nrow
-            If INFO = 0 or INFO > M, R contains the row scale factors   
-            for A.
-	    
-    C       (output) float*, size A->ncol
-            If INFO = 0,  C contains the column scale factors for A.
-	    
-    ROWCND  (output) float*
-            If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
-            smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
-            AMAX is neither too large nor too small, it is not worth   
-            scaling by R.
-	    
-    COLCND  (output) float*
-            If INFO = 0, COLCND contains the ratio of the smallest   
-            C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
-            worth scaling by C.
-	    
-    AMAX    (output) float*
-            Absolute value of largest matrix element.  If AMAX is very   
-            close to overflow or very close to underflow, the matrix   
-            should be scaled.
-	    
-    INFO    (output) int*
-            = 0:  successful exit   
-            < 0:  if INFO = -i, the i-th argument had an illegal value   
-            > 0:  if INFO = i,  and i is   
-                  <= A->nrow:  the i-th row of A is exactly zero   
-                  >  A->ncol:  the (i-M)-th column of A is exactly zero   
-
-    ===================================================================== 
-*/
+
 
     /* Local variables */
     NCformat *Astore;
@@ -81,7 +92,7 @@ sgsequ(SuperMatrix *A, float *r, float *c, float *rowcnd,
     int i, j, irow;
     float rcmin, rcmax;
     float bignum, smlnum;
-    extern double slamch_(char *);
+    extern float slamch_(char *);
     
     /* Test the input parameters. */
     *info = 0;
diff --git a/SRC/sgsisx.c b/SRC/sgsisx.c
new file mode 100644
index 0000000..993fc34
--- /dev/null
+++ b/SRC/sgsisx.c
@@ -0,0 +1,727 @@
+
+/*! @file sgsisx.c
+ * \brief Computes an approximate solutions of linear equations A*X=B or A'*X=B
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.2) --
+ * Lawrence Berkeley National Laboratory.
+ * November, 2010
+ * August, 2011
+ * </pre>
+ */
+#include "slu_sdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * SGSISX computes an approximate solutions of linear equations
+ * A*X=B or A'*X=B, using the ILU factorization from sgsitrf().
+ * An estimation of the condition number is provided. 
+ * The routine performs the following steps:
+ *
+ *   1. If A is stored column-wise (A->Stype = SLU_NC):
+ *  
+ *	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A is
+ *	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+ *	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+ *	     = TRANS or CONJ).
+ *
+ *	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+ *	     matrix that usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the matrix A (after equilibration if options->Equil = YES)
+ *	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.
+ *
+ *	1.4. Compute the reciprocal pivot growth factor.
+ *
+ *	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+ *	     and info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	1.6. The system of equations is solved for X using the factored form
+ *	     of A.
+ *
+ *	1.7. options->IterRefine is not used
+ *
+ *	1.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *	1.9. options for ILU only
+ *	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+ *		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+ *		entries of modulus 1 on the diagonal and off-diagonal entries
+ *		of modulus at most 1. If MC64 fails, dgsequ() is used to
+ *		equilibrate the system.
+ *              ( Default: LargeDiag )
+ *	     2) options->ILU_DropTol = tau is the threshold for dropping.
+ *		For L, it is used directly (for the whole row in a supernode);
+ *		For U, ||A(:,i)||_oo * tau is used as the threshold
+ *	        for the	i-th column.
+ *		If a secondary dropping rule is required, tau will
+ *	        also be used to compute the second threshold.
+ *              ( Default: 1e-4 )
+ *	     3) options->ILU_FillFactor = gamma, used as the initial guess
+ *		of memory growth.
+ *		If a secondary dropping rule is required, it will also
+ *              be used as an upper bound of the memory.
+ *              ( Default: 10 )
+ *	     4) options->ILU_DropRule specifies the dropping rule.
+ *		Option	      Meaning
+ *		======	      ===========
+ *		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+ *		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+ *		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+ *			      p = gamma * nnz(A(:,j)).
+ *		DROP_AREA:    Variation of ILUTP, for j-th column, use
+ *			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+ *		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+ *			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+ *				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+ *			      Otherwise
+ *				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+ *			      tau_U(j) uses the similar rule.
+ *			      NOTE: the thresholds used by L and U are separate.
+ *		DROP_INTERP:  Compute the second dropping threshold by
+ *			      interpolation instead of sorting (default).
+ *			      In this case, the actual fill ratio is not
+ *			      guaranteed smaller than gamma.
+ *		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+ *		( Default: DROP_BASIC | DROP_AREA )
+ *	     5) options->ILU_Norm is the criterion of measuring the magnitude
+ *		of a row in a supernode of L. ( Default is INF_NORM )
+ *		options->ILU_Norm	RowSize(x[1:n])
+ *		=================	===============
+ *		ONE_NORM		||x||_1 / n
+ *		TWO_NORM		||x||_2 / sqrt(n)
+ *		INF_NORM		max{|x[i]|}
+ *	     6) options->ILU_MILU specifies the type of MILU's variation.
+ *		= SILU: do not perform Modified ILU;
+ *		= SMILU_1 (not recommended):
+ *		    U(i,i) := U(i,i) + sum(dropped entries);
+ *		= SMILU_2:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+ *		= SMILU_3:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+ *		NOTE: Even SMILU_1 does not preserve the column sum because of
+ *		late dropping.
+ *              ( Default: SILU )
+ *	     7) options->ILU_FillTol is used as the perturbation when
+ *		encountering zero pivots. If some U(i,i) = 0, so that U is
+ *		exactly singular, then
+ *		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+ *              ( Default: 1e-2 )
+ *
+ *   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ *	to the transpose of A:
+ *
+ *	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A' is
+ *	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+ *	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').
+ *
+ *	2.2. Permute columns of transpose(A) (rows of A),
+ *	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+ *	     usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the transpose(A) (after equilibration if
+ *	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+ *	     permutation Pr determined by partial pivoting.
+ *
+ *	2.4. Compute the reciprocal pivot growth factor.
+ *
+ *	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+ *	     And info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	2.6. The system of equations is solved for X using the factored form
+ *	     of transpose(A).
+ *
+ *	2.7. If options->IterRefine is not used.
+ *
+ *	2.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the LU decomposition will be performed and how the
+ *	   system will be solved.
+ *
+ * A	   (input/output) SuperMatrix*
+ *	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+ *	   of the linear equations is A->nrow. Currently, the type of A can be:
+ *	   Stype = SLU_NC or SLU_NR, Dtype = SLU_S, Mtype = SLU_GE.
+ *	   In the future, more general A may be handled.
+ *
+ *	   On entry, If options->Fact = FACTORED and equed is not 'N',
+ *	   then A must have been equilibrated by the scaling factors in
+ *	   R and/or C.
+ *	   On exit, A is not modified
+ *         if options->Equil = NO, or
+ *         if options->Equil = YES but equed = 'N' on exit, or
+ *         if options->RowPerm = NO.
+ *
+ *	   Otherwise, if options->Equil = YES and equed is not 'N',
+ *	   A is scaled as follows:
+ *	   If A->Stype = SLU_NC:
+ *	     equed = 'R':  A := diag(R) * A
+ *	     equed = 'C':  A := A * diag(C)
+ *	     equed = 'B':  A := diag(R) * A * diag(C).
+ *	   If A->Stype = SLU_NR:
+ *	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+ *	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+ *	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).
+ *
+ *         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+ *            the matrix to an I-matrix, that is A is modified as follows:
+ *            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+ *            off-diagonal entries of modulus at most 1. P is a permutation
+ *            obtained from MC64.
+ *            If MC64 fails, sgsequ() is used to equilibrate the system,
+ *            and A is scaled as above, but no permutation is involved.
+ *            On exit, A is restored to the orginal row numbering, so
+ *            Dr*A*Dc is returned.
+ *
+ * perm_c  (input/output) int*
+ *	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+ *	   which defines the permutation matrix Pc; perm_c[i] = j means
+ *	   column i of A is in position j in A*Pc.
+ *	   On exit, perm_c may be overwritten by the product of the input
+ *	   perm_c and a permutation that postorders the elimination tree
+ *	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+ *	   is already in postorder.
+ *
+ *	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+ *	   which describes permutation of columns of transpose(A) 
+ *	   (rows of A) as described above.
+ *
+ * perm_r  (input/output) int*
+ *	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+ *	   which defines the permutation matrix Pr, and is determined
+ *	   by MC64 first then followed by partial pivoting.
+ *         perm_r[i] = j means row i of A is in position j in Pr*A.
+ *
+ *	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+ *	   determines permutation of rows of transpose(A)
+ *	   (columns of A) as described above.
+ *
+ *	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	   will try to use the input perm_r, unless a certain threshold
+ *	   criterion is violated. In that case, perm_r is overwritten by a
+ *	   new permutation determined by partial pivoting or diagonal
+ *	   threshold pivoting.
+ *	   Otherwise, perm_r is output argument.
+ *
+ * etree   (input/output) int*,  dimension (A->ncol)
+ *	   Elimination tree of Pc'*A'*A*Pc.
+ *	   If options->Fact != FACTORED and options->Fact != DOFACT,
+ *	   etree is an input argument, otherwise it is an output argument.
+ *	   Note: etree is a vector of parent pointers for a forest whose
+ *	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *
+ * equed   (input/output) char*
+ *	   Specifies the form of equilibration that was done.
+ *	   = 'N': No equilibration.
+ *	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+ *	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+ *	   = 'B': Both row and column equilibration, i.e., A was replaced 
+ *		  by diag(R)*A*diag(C).
+ *	   If options->Fact = FACTORED, equed is an input argument,
+ *	   otherwise it is an output argument.
+ *
+ * R	   (input/output) float*, dimension (A->nrow)
+ *	   The row scale factors for A or transpose(A).
+ *	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+ *	   If equed = 'N' or 'C', R is not accessed.
+ *	   If options->Fact = FACTORED, R is an input argument,
+ *	       otherwise, R is output.
+ *	   If options->Fact = FACTORED and equed = 'R' or 'B', each element
+ *	       of R must be positive.
+ *
+ * C	   (input/output) float*, dimension (A->ncol)
+ *	   The column scale factors for A or transpose(A).
+ *	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+ *	   If equed = 'N' or 'R', C is not accessed.
+ *	   If options->Fact = FACTORED, C is an input argument,
+ *	       otherwise, C is output.
+ *	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+ *	       of C must be positive.
+ *
+ * L	   (output) SuperMatrix*
+ *	   The factor L from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses compressed row subscripts storage for supernodes, i.e.,
+ *	   L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.
+ *
+ * U	   (output) SuperMatrix*
+ *	   The factor U from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses column-wise storage scheme, i.e., U has types:
+ *	   Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.
+ *
+ * work    (workspace/output) void*, size (lwork) (in bytes)
+ *	   User supplied workspace, should be large enough
+ *	   to hold data structures for factors L and U.
+ *	   On exit, if fact is not 'F', L and U point to this array.
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 mem_usage->total_needed; no other side effects.
+ *
+ *	   See argument 'mem_usage' for memory usage statistics.
+ *
+ * B	   (input/output) SuperMatrix*
+ *	   B has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+ *	   On entry, the right hand side matrix.
+ *	   If B->ncol = 0, only LU decomposition is performed, the triangular
+ *			   solve is skipped.
+ *	   On exit,
+ *	      if equed = 'N', B is not modified; otherwise
+ *	      if A->Stype = SLU_NC:
+ *		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+ *		    B is overwritten by diag(R)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+ *		    B is overwritten by diag(C)*B;
+ *	      if A->Stype = SLU_NR:
+ *		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+ *		    B is overwritten by diag(C)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+ *		    B is overwritten by diag(R)*B.
+ *
+ * X	   (output) SuperMatrix*
+ *	   X has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+ *	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+ *	   to the original system of equations. Note that A and B are modified
+ *	   on exit if equed is not 'N', and the solution to the equilibrated
+ *	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+ *	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+ *	   and equed = 'R' or 'B'.
+ *
+ * recip_pivot_growth (output) float*
+ *	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+ *	   The infinity norm is used. If recip_pivot_growth is much less
+ *	   than 1, the stability of the LU factorization could be poor.
+ *
+ * rcond   (output) float*
+ *	   The estimate of the reciprocal condition number of the matrix A
+ *	   after equilibration (if done). If rcond is less than the machine
+ *	   precision (in particular, if rcond = 0), the matrix is singular
+ *	   to working precision. This condition is indicated by a return
+ *	   code of info > 0.
+ *
+ * mem_usage (output) mem_usage_t*
+ *	   Record the memory usage statistics, consisting of following fields:
+ *	   - for_lu (float)
+ *	     The amount of space used in bytes for L\U data structures.
+ *	   - total_needed (float)
+ *	     The amount of space needed in bytes to perform factorization.
+ *	   - expansions (int)
+ *	     The number of memory expansions during the LU factorization.
+ *
+ * stat   (output) SuperLUStat_t*
+ *	  Record the statistics on runtime and floating-point operation count.
+ *	  See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info    (output) int*
+ *	   = 0: successful exit
+ *	   < 0: if info = -i, the i-th argument had an illegal value
+ *	   > 0: if info = i, and i is
+ *		<= A->ncol: number of zero pivots. They are replaced by small
+ *		      entries due to options->ILU_FillTol.
+ *		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+ *		      precision, meaning that the matrix is singular to
+ *		      working precision. Nevertheless, the solution and
+ *		      error bounds are computed because there are a number
+ *		      of situations where the computed solution can be more
+ *		      accurate than the value of RCOND would suggest.
+ *		> A->ncol+1: number of bytes allocated when memory allocation
+ *		      failure occurred, plus A->ncol.
+ * </pre>
+ */
+
+void
+sgsisx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+       int *etree, char *equed, float *R, float *C,
+       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
+       SuperMatrix *B, SuperMatrix *X,
+       float *recip_pivot_growth, float *rcond,
+       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)
+{
+
+    DNformat  *Bstore, *Xstore;
+    float    *Bmat, *Xmat;
+    int       ldb, ldx, nrhs, n;
+    SuperMatrix *AA;/* A in SLU_NC format used by the factorization routine.*/
+    SuperMatrix AC; /* Matrix postmultiplied by Pc */
+    int       colequ, equil, nofact, notran, rowequ, permc_spec, mc64;
+    trans_t   trant;
+    char      norm[1];
+    int       i, j, info1;
+    float    amax, anorm, bignum, smlnum, colcnd, rowcnd, rcmax, rcmin;
+    int       relax, panel_size;
+    float    diag_pivot_thresh;
+    double    t0;      /* temporary time */
+    double    *utime;
+
+    int *perm = NULL; /* permutation returned from MC64 */
+
+    /* External functions */
+    extern float slangs(char *, SuperMatrix *);
+
+    Bstore = B->Store;
+    Xstore = X->Store;
+    Bmat   = Bstore->nzval;
+    Xmat   = Xstore->nzval;
+    ldb    = Bstore->lda;
+    ldx    = Xstore->lda;
+    nrhs   = B->ncol;
+    n      = B->nrow;
+
+    *info = 0;
+    nofact = (options->Fact != FACTORED);
+    equil = (options->Equil == YES);
+    notran = (options->Trans == NOTRANS);
+    mc64 = (options->RowPerm == LargeDiag);
+    if ( nofact ) {
+	*(unsigned char *)equed = 'N';
+	rowequ = FALSE;
+	colequ = FALSE;
+    } else {
+	rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+	colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	smlnum = slamch_("Safe minimum");
+	bignum = 1. / smlnum;
+    }
+
+    /* Test the input parameters */
+    if (options->Fact != DOFACT && options->Fact != SamePattern &&
+	options->Fact != SamePattern_SameRowPerm &&
+	options->Fact != FACTORED &&
+	options->Trans != NOTRANS && options->Trans != TRANS && 
+	options->Trans != CONJ &&
+	options->Equil != NO && options->Equil != YES)
+	*info = -1;
+    else if ( A->nrow != A->ncol || A->nrow < 0 ||
+	      (A->Stype != SLU_NC && A->Stype != SLU_NR) ||
+	      A->Dtype != SLU_S || A->Mtype != SLU_GE )
+	*info = -2;
+    else if (options->Fact == FACTORED &&
+	     !(rowequ || colequ || lsame_(equed, "N")))
+	*info = -6;
+    else {
+	if (rowequ) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, R[j]);
+		rcmax = SUPERLU_MAX(rcmax, R[j]);
+	    }
+	    if (rcmin <= 0.) *info = -7;
+	    else if ( A->nrow > 0)
+		rowcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else rowcnd = 1.;
+	}
+	if (colequ && *info == 0) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, C[j]);
+		rcmax = SUPERLU_MAX(rcmax, C[j]);
+	    }
+	    if (rcmin <= 0.) *info = -8;
+	    else if (A->nrow > 0)
+		colcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else colcnd = 1.;
+	}
+	if (*info == 0) {
+	    if ( lwork < -1 ) *info = -12;
+	    else if ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      B->Stype != SLU_DN || B->Dtype != SLU_S || 
+		      B->Mtype != SLU_GE )
+		*info = -13;
+	    else if ( X->ncol < 0 || Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      (B->ncol != 0 && B->ncol != X->ncol) ||
+		      X->Stype != SLU_DN ||
+		      X->Dtype != SLU_S || X->Mtype != SLU_GE )
+		*info = -14;
+	}
+    }
+    if (*info != 0) {
+	i = -(*info);
+	xerbla_("sgsisx", &i);
+	return;
+    }
+
+    /* Initialization for factor parameters */
+    panel_size = sp_ienv(1);
+    relax      = sp_ienv(2);
+    diag_pivot_thresh = options->DiagPivotThresh;
+
+    utime = stat->utime;
+
+    /* Convert A to SLU_NC format when necessary. */
+    if ( A->Stype == SLU_NR ) {
+	NRformat *Astore = A->Store;
+	AA = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+	sCreate_CompCol_Matrix(AA, A->ncol, A->nrow, Astore->nnz,
+			       Astore->nzval, Astore->colind, Astore->rowptr,
+			       SLU_NC, A->Dtype, A->Mtype);
+	if ( notran ) { /* Reverse the transpose argument. */
+	    trant = TRANS;
+	    notran = 0;
+	} else {
+	    trant = NOTRANS;
+	    notran = 1;
+	}
+    } else { /* A->Stype == SLU_NC */
+	trant = options->Trans;
+	AA = A;
+    }
+
+    if ( nofact ) {
+	register int i, j;
+	NCformat *Astore = AA->Store;
+	int nnz = Astore->nnz;
+	int *colptr = Astore->colptr;
+	int *rowind = Astore->rowind;
+	float *nzval = (float *)Astore->nzval;
+
+	if ( mc64 ) {
+	    t0 = SuperLU_timer_();
+	    if ((perm = intMalloc(n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for perm[]");
+
+	    info1 = sldperm(5, n, nnz, colptr, rowind, nzval, perm, R, C);
+
+	    if (info1 != 0) { /* MC64 fails, call sgsequ() later */
+		mc64 = 0;
+		SUPERLU_FREE(perm);
+		perm = NULL;
+	    } else {
+	        if ( equil ) {
+	            rowequ = colequ = 1;
+		    for (i = 0; i < n; i++) {
+		        R[i] = exp(R[i]);
+		        C[i] = exp(C[i]);
+		    }
+		    /* scale the matrix */
+		    for (j = 0; j < n; j++) {
+		        for (i = colptr[j]; i < colptr[j + 1]; i++) {
+			    nzval[i] *= R[rowind[i]] * C[j];
+		        }
+		    }
+	            *equed = 'B';
+                }
+
+                /* permute the matrix */
+		for (j = 0; j < n; j++) {
+		    for (i = colptr[j]; i < colptr[j + 1]; i++) {
+			/*nzval[i] *= R[rowind[i]] * C[j];*/
+			rowind[i] = perm[rowind[i]];
+		    }
+		}
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+
+	if ( !mc64 & equil ) { /* Only perform equilibration, no row perm */
+	    t0 = SuperLU_timer_();
+	    /* Compute row and column scalings to equilibrate the matrix A. */
+	    sgsequ(AA, R, C, &rowcnd, &colcnd, &amax, &info1);
+
+	    if ( info1 == 0 ) {
+		/* Equilibrate matrix A. */
+		slaqgs(AA, R, C, rowcnd, colcnd, amax, equed);
+		rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+		colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+    }
+
+
+    if ( nofact ) {
+	
+	t0 = SuperLU_timer_();
+	/*
+	 * Gnet column permutation vector perm_c[], according to permc_spec:
+	 *   permc_spec = NATURAL:  natural ordering 
+	 *   permc_spec = MMD_AT_PLUS_A: minimum degree on structure of A'+A
+	 *   permc_spec = MMD_ATA:  minimum degree on structure of A'*A
+	 *   permc_spec = COLAMD:   approximate minimum degree column ordering
+	 *   permc_spec = MY_PERMC: the ordering already supplied in perm_c[]
+	 */
+	permc_spec = options->ColPerm;
+	if ( permc_spec != MY_PERMC && options->Fact == DOFACT )
+	    get_perm_c(permc_spec, AA, perm_c);
+	utime[COLPERM] = SuperLU_timer_() - t0;
+
+	t0 = SuperLU_timer_();
+	sp_preorder(options, AA, perm_c, etree, &AC);
+	utime[ETREE] = SuperLU_timer_() - t0;
+
+	/* Compute the LU factorization of A*Pc. */
+	t0 = SuperLU_timer_();
+	sgsitrf(options, &AC, relax, panel_size, etree, work, lwork,
+                perm_c, perm_r, L, U, stat, info);
+	utime[FACT] = SuperLU_timer_() - t0;
+
+	if ( lwork == -1 ) {
+	    mem_usage->total_needed = *info - A->ncol;
+	    return;
+	}
+
+	if ( mc64 ) { /* Fold MC64's perm[] into perm_r[]. */
+	    NCformat *Astore = AA->Store;
+	    int nnz = Astore->nnz, *rowind = Astore->rowind;
+	    int *perm_tmp, *iperm;
+	    if ((perm_tmp = intMalloc(2*n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for perm_tmp[]");
+	    iperm = perm_tmp + n;
+	    for (i = 0; i < n; ++i) perm_tmp[i] = perm_r[perm[i]];
+	    for (i = 0; i < n; ++i) {
+		perm_r[i] = perm_tmp[i];
+		iperm[perm[i]] = i;
+	    }
+
+	    /* Restore A's original row indices. */
+	    for (i = 0; i < nnz; ++i) rowind[i] = iperm[rowind[i]];
+
+	    SUPERLU_FREE(perm); /* MC64 permutation */
+	    SUPERLU_FREE(perm_tmp);
+	}
+    }
+
+    if ( options->PivotGrowth ) {
+	if ( *info > 0 ) return;
+
+	/* Compute the reciprocal pivot growth factor *recip_pivot_growth. */
+	*recip_pivot_growth = sPivotGrowth(A->ncol, AA, perm_c, L, U);
+    }
+
+    if ( options->ConditionNumber ) {
+	/* Estimate the reciprocal of the condition number of A. */
+	t0 = SuperLU_timer_();
+	if ( notran ) {
+	    *(unsigned char *)norm = '1';
+	} else {
+	    *(unsigned char *)norm = 'I';
+	}
+	anorm = slangs(norm, AA);
+	sgscon(norm, L, U, anorm, rcond, stat, &info1);
+	utime[RCOND] = SuperLU_timer_() - t0;
+    }
+
+    if ( nrhs > 0 ) { /* Solve the system */
+        float *rhs_work;
+
+	/* Scale and permute the right-hand side if equilibration
+           and permutation from MC64 were performed. */
+	if ( notran ) {
+	    if ( rowequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i)
+		        Bmat[i + j*ldb] *= R[i];
+	    }
+	} else if ( colequ ) {
+	    for (j = 0; j < nrhs; ++j)
+		for (i = 0; i < n; ++i) {
+	            Bmat[i + j*ldb] *= C[i];
+		}
+	}
+
+	/* Compute the solution matrix X. */
+	for (j = 0; j < nrhs; j++)  /* Save a copy of the right hand sides */
+	    for (i = 0; i < B->nrow; i++)
+		Xmat[i + j*ldx] = Bmat[i + j*ldb];
+
+	t0 = SuperLU_timer_();
+	sgstrs (trant, L, U, perm_c, perm_r, X, stat, &info1);
+	utime[SOLVE] = SuperLU_timer_() - t0;
+
+	/* Transform the solution matrix X to a solution of the original
+	   system. */
+	if ( notran ) {
+	    if ( colequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i) {
+                        Xmat[i + j*ldx] *= C[i];
+                    }
+	    }
+	} else { /* transposed system */
+	    if ( rowequ ) {
+	        for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < A->nrow; ++i) {
+              	        Xmat[i + j*ldx] *= R[i];
+                    }
+	    }
+	}
+
+    } /* end if nrhs > 0 */
+
+    if ( options->ConditionNumber ) {
+	/* The matrix is singular to working precision. */
+	if ( *rcond < slamch_("E") && *info == 0) *info = A->ncol + 1;
+    }
+
+    if ( nofact ) {
+	ilu_sQuerySpace(L, U, mem_usage);
+	Destroy_CompCol_Permuted(&AC);
+    }
+    if ( A->Stype == SLU_NR ) {
+	Destroy_SuperMatrix_Store(AA);
+	SUPERLU_FREE(AA);
+    }
+
+}
diff --git a/SRC/sgsisx.c.bak b/SRC/sgsisx.c.bak
new file mode 100644
index 0000000..5d98f06
--- /dev/null
+++ b/SRC/sgsisx.c.bak
@@ -0,0 +1,723 @@
+
+/*! @file sgsisx.c
+ * \brief Computes an approximate solutions of linear equations A*X=B or A'*X=B
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory.
+ * November, 2010
+ * </pre>
+ */
+#include "slu_sdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * SGSISX computes an approximate solutions of linear equations
+ * A*X=B or A'*X=B, using the ILU factorization from sgsitrf().
+ * An estimation of the condition number is provided. 
+ * The routine performs the following steps:
+ *
+ *   1. If A is stored column-wise (A->Stype = SLU_NC):
+ *  
+ *	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A is
+ *	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+ *	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+ *	     = TRANS or CONJ).
+ *
+ *	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+ *	     matrix that usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the matrix A (after equilibration if options->Equil = YES)
+ *	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.
+ *
+ *	1.4. Compute the reciprocal pivot growth factor.
+ *
+ *	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+ *	     and info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	1.6. The system of equations is solved for X using the factored form
+ *	     of A.
+ *
+ *	1.7. options->IterRefine is not used
+ *
+ *	1.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *	1.9. options for ILU only
+ *	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+ *		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+ *		entries of modulus 1 on the diagonal and off-diagonal entries
+ *		of modulus at most 1. If MC64 fails, dgsequ() is used to
+ *		equilibrate the system.
+ *              ( Default: LargeDiag )
+ *	     2) options->ILU_DropTol = tau is the threshold for dropping.
+ *		For L, it is used directly (for the whole row in a supernode);
+ *		For U, ||A(:,i)||_oo * tau is used as the threshold
+ *	        for the	i-th column.
+ *		If a secondary dropping rule is required, tau will
+ *	        also be used to compute the second threshold.
+ *              ( Default: 1e-4 )
+ *	     3) options->ILU_FillFactor = gamma, used as the initial guess
+ *		of memory growth.
+ *		If a secondary dropping rule is required, it will also
+ *              be used as an upper bound of the memory.
+ *              ( Default: 10 )
+ *	     4) options->ILU_DropRule specifies the dropping rule.
+ *		Option	      Meaning
+ *		======	      ===========
+ *		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+ *		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+ *		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+ *			      p = gamma * nnz(A(:,j)).
+ *		DROP_AREA:    Variation of ILUTP, for j-th column, use
+ *			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+ *		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+ *			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+ *				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+ *			      Otherwise
+ *				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+ *			      tau_U(j) uses the similar rule.
+ *			      NOTE: the thresholds used by L and U are separate.
+ *		DROP_INTERP:  Compute the second dropping threshold by
+ *			      interpolation instead of sorting (default).
+ *			      In this case, the actual fill ratio is not
+ *			      guaranteed smaller than gamma.
+ *		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+ *		( Default: DROP_BASIC | DROP_AREA )
+ *	     5) options->ILU_Norm is the criterion of measuring the magnitude
+ *		of a row in a supernode of L. ( Default is INF_NORM )
+ *		options->ILU_Norm	RowSize(x[1:n])
+ *		=================	===============
+ *		ONE_NORM		||x||_1 / n
+ *		TWO_NORM		||x||_2 / sqrt(n)
+ *		INF_NORM		max{|x[i]|}
+ *	     6) options->ILU_MILU specifies the type of MILU's variation.
+ *		= SILU: do not perform Modified ILU;
+ *		= SMILU_1 (not recommended):
+ *		    U(i,i) := U(i,i) + sum(dropped entries);
+ *		= SMILU_2:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+ *		= SMILU_3:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+ *		NOTE: Even SMILU_1 does not preserve the column sum because of
+ *		late dropping.
+ *              ( Default: SILU )
+ *	     7) options->ILU_FillTol is used as the perturbation when
+ *		encountering zero pivots. If some U(i,i) = 0, so that U is
+ *		exactly singular, then
+ *		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+ *              ( Default: 1e-2 )
+ *
+ *   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ *	to the transpose of A:
+ *
+ *	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A' is
+ *	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+ *	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').
+ *
+ *	2.2. Permute columns of transpose(A) (rows of A),
+ *	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+ *	     usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the transpose(A) (after equilibration if
+ *	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+ *	     permutation Pr determined by partial pivoting.
+ *
+ *	2.4. Compute the reciprocal pivot growth factor.
+ *
+ *	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+ *	     And info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	2.6. The system of equations is solved for X using the factored form
+ *	     of transpose(A).
+ *
+ *	2.7. If options->IterRefine is not used.
+ *
+ *	2.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the LU decomposition will be performed and how the
+ *	   system will be solved.
+ *
+ * A	   (input/output) SuperMatrix*
+ *	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+ *	   of the linear equations is A->nrow. Currently, the type of A can be:
+ *	   Stype = SLU_NC or SLU_NR, Dtype = SLU_S, Mtype = SLU_GE.
+ *	   In the future, more general A may be handled.
+ *
+ *	   On entry, If options->Fact = FACTORED and equed is not 'N',
+ *	   then A must have been equilibrated by the scaling factors in
+ *	   R and/or C.
+ *	   On exit, A is not modified
+ *         if options->Equil = NO, or
+ *         if options->Equil = YES but equed = 'N' on exit, or
+ *         if options->RowPerm = NO.
+ *
+ *	   Otherwise, if options->Equil = YES and equed is not 'N',
+ *	   A is scaled as follows:
+ *	   If A->Stype = SLU_NC:
+ *	     equed = 'R':  A := diag(R) * A
+ *	     equed = 'C':  A := A * diag(C)
+ *	     equed = 'B':  A := diag(R) * A * diag(C).
+ *	   If A->Stype = SLU_NR:
+ *	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+ *	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+ *	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).
+ *
+ *         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+ *            the matrix to an I-matrix, that is A is modified as follows:
+ *            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+ *            off-diagonal entries of modulus at most 1. P is a permutation
+ *            obtained from MC64.
+ *            If MC64 fails, sgsequ() is used to equilibrate the system,
+ *            and A is scaled as above, there is no permutation involved.
+ *
+ * perm_c  (input/output) int*
+ *	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+ *	   which defines the permutation matrix Pc; perm_c[i] = j means
+ *	   column i of A is in position j in A*Pc.
+ *	   On exit, perm_c may be overwritten by the product of the input
+ *	   perm_c and a permutation that postorders the elimination tree
+ *	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+ *	   is already in postorder.
+ *
+ *	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+ *	   which describes permutation of columns of transpose(A) 
+ *	   (rows of A) as described above.
+ *
+ * perm_r  (input/output) int*
+ *	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+ *	   which defines the permutation matrix Pr, and is determined
+ *	   by partial pivoting.  perm_r[i] = j means row i of A is in 
+ *	   position j in Pr*A.
+ *
+ *	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+ *	   determines permutation of rows of transpose(A)
+ *	   (columns of A) as described above.
+ *
+ *	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	   will try to use the input perm_r, unless a certain threshold
+ *	   criterion is violated. In that case, perm_r is overwritten by a
+ *	   new permutation determined by partial pivoting or diagonal
+ *	   threshold pivoting.
+ *	   Otherwise, perm_r is output argument.
+ *
+ * etree   (input/output) int*,  dimension (A->ncol)
+ *	   Elimination tree of Pc'*A'*A*Pc.
+ *	   If options->Fact != FACTORED and options->Fact != DOFACT,
+ *	   etree is an input argument, otherwise it is an output argument.
+ *	   Note: etree is a vector of parent pointers for a forest whose
+ *	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *
+ * equed   (input/output) char*
+ *	   Specifies the form of equilibration that was done.
+ *	   = 'N': No equilibration.
+ *	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+ *	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+ *	   = 'B': Both row and column equilibration, i.e., A was replaced 
+ *		  by diag(R)*A*diag(C).
+ *	   If options->Fact = FACTORED, equed is an input argument,
+ *	   otherwise it is an output argument.
+ *
+ * R	   (input/output) float*, dimension (A->nrow)
+ *	   The row scale factors for A or transpose(A).
+ *	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+ *	   If equed = 'N' or 'C', R is not accessed.
+ *	   If options->Fact = FACTORED, R is an input argument,
+ *	       otherwise, R is output.
+ *	   If options->zFact = FACTORED and equed = 'R' or 'B', each element
+ *	       of R must be positive.
+ *
+ * C	   (input/output) float*, dimension (A->ncol)
+ *	   The column scale factors for A or transpose(A).
+ *	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+ *	   If equed = 'N' or 'R', C is not accessed.
+ *	   If options->Fact = FACTORED, C is an input argument,
+ *	       otherwise, C is output.
+ *	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+ *	       of C must be positive.
+ *
+ * L	   (output) SuperMatrix*
+ *	   The factor L from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses compressed row subscripts storage for supernodes, i.e.,
+ *	   L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.
+ *
+ * U	   (output) SuperMatrix*
+ *	   The factor U from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses column-wise storage scheme, i.e., U has types:
+ *	   Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.
+ *
+ * work    (workspace/output) void*, size (lwork) (in bytes)
+ *	   User supplied workspace, should be large enough
+ *	   to hold data structures for factors L and U.
+ *	   On exit, if fact is not 'F', L and U point to this array.
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 mem_usage->total_needed; no other side effects.
+ *
+ *	   See argument 'mem_usage' for memory usage statistics.
+ *
+ * B	   (input/output) SuperMatrix*
+ *	   B has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+ *	   On entry, the right hand side matrix.
+ *	   If B->ncol = 0, only LU decomposition is performed, the triangular
+ *			   solve is skipped.
+ *	   On exit,
+ *	      if equed = 'N', B is not modified; otherwise
+ *	      if A->Stype = SLU_NC:
+ *		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+ *		    B is overwritten by diag(R)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+ *		    B is overwritten by diag(C)*B;
+ *	      if A->Stype = SLU_NR:
+ *		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+ *		    B is overwritten by diag(C)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+ *		    B is overwritten by diag(R)*B.
+ *
+ *         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+ *            the matrix A to an I-matrix. Then, in addition to the scaling
+ *            above, B is further permuted by P*B if options->Trans = NOTRANS,
+ *            where P is obtained from MC64.
+ *
+ * X	   (output) SuperMatrix*
+ *	   X has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = SLU_GE.
+ *	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+ *	   to the original system of equations. Note that A and B are modified
+ *	   on exit if equed is not 'N', and the solution to the equilibrated
+ *	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+ *	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+ *	   and equed = 'R' or 'B'.
+ *
+ * recip_pivot_growth (output) float*
+ *	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+ *	   The infinity norm is used. If recip_pivot_growth is much less
+ *	   than 1, the stability of the LU factorization could be poor.
+ *
+ * rcond   (output) float*
+ *	   The estimate of the reciprocal condition number of the matrix A
+ *	   after equilibration (if done). If rcond is less than the machine
+ *	   precision (in particular, if rcond = 0), the matrix is singular
+ *	   to working precision. This condition is indicated by a return
+ *	   code of info > 0.
+ *
+ * mem_usage (output) mem_usage_t*
+ *	   Record the memory usage statistics, consisting of following fields:
+ *	   - for_lu (float)
+ *	     The amount of space used in bytes for L\U data structures.
+ *	   - total_needed (float)
+ *	     The amount of space needed in bytes to perform factorization.
+ *	   - expansions (int)
+ *	     The number of memory expansions during the LU factorization.
+ *
+ * stat   (output) SuperLUStat_t*
+ *	  Record the statistics on runtime and floating-point operation count.
+ *	  See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info    (output) int*
+ *	   = 0: successful exit
+ *	   < 0: if info = -i, the i-th argument had an illegal value
+ *	   > 0: if info = i, and i is
+ *		<= A->ncol: number of zero pivots. They are replaced by small
+ *		      entries due to options->ILU_FillTol.
+ *		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+ *		      precision, meaning that the matrix is singular to
+ *		      working precision. Nevertheless, the solution and
+ *		      error bounds are computed because there are a number
+ *		      of situations where the computed solution can be more
+ *		      accurate than the value of RCOND would suggest.
+ *		> A->ncol+1: number of bytes allocated when memory allocation
+ *		      failure occurred, plus A->ncol.
+ * </pre>
+ */
+
+void
+sgsisx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+       int *etree, char *equed, float *R, float *C,
+       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
+       SuperMatrix *B, SuperMatrix *X,
+       float *recip_pivot_growth, float *rcond,
+       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)
+{
+
+    DNformat  *Bstore, *Xstore;
+    float    *Bmat, *Xmat;
+    int       ldb, ldx, nrhs;
+    SuperMatrix *AA;/* A in SLU_NC format used by the factorization routine.*/
+    SuperMatrix AC; /* Matrix postmultiplied by Pc */
+    int       colequ, equil, nofact, notran, rowequ, permc_spec, mc64;
+    trans_t   trant;
+    char      norm[1];
+    int       i, j, info1;
+    float    amax, anorm, bignum, smlnum, colcnd, rowcnd, rcmax, rcmin;
+    int       relax, panel_size;
+    float    diag_pivot_thresh;
+    double    t0;      /* temporary time */
+    double    *utime;
+
+    int *perm = NULL; /* permutation returned from MC64 */
+
+    /* External functions */
+    extern float slangs(char *, SuperMatrix *);
+
+    Bstore = B->Store;
+    Xstore = X->Store;
+    Bmat   = Bstore->nzval;
+    Xmat   = Xstore->nzval;
+    ldb    = Bstore->lda;
+    ldx    = Xstore->lda;
+    nrhs   = B->ncol;
+
+    *info = 0;
+    nofact = (options->Fact != FACTORED);
+    equil = (options->Equil == YES);
+    notran = (options->Trans == NOTRANS);
+    mc64 = (options->RowPerm == LargeDiag);
+    if ( nofact ) {
+	*(unsigned char *)equed = 'N';
+	rowequ = FALSE;
+	colequ = FALSE;
+    } else {
+	rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+	colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	smlnum = slamch_("Safe minimum");
+	bignum = 1. / smlnum;
+    }
+
+    /* Test the input parameters */
+    if (!nofact && options->Fact != DOFACT && options->Fact != SamePattern &&
+	options->Fact != SamePattern_SameRowPerm &&
+	!notran && options->Trans != TRANS && options->Trans != CONJ &&
+	!equil && options->Equil != NO)
+	*info = -1;
+    else if ( A->nrow != A->ncol || A->nrow < 0 ||
+	      (A->Stype != SLU_NC && A->Stype != SLU_NR) ||
+	      A->Dtype != SLU_S || A->Mtype != SLU_GE )
+	*info = -2;
+    else if (options->Fact == FACTORED &&
+	     !(rowequ || colequ || lsame_(equed, "N")))
+	*info = -6;
+    else {
+	if (rowequ) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, R[j]);
+		rcmax = SUPERLU_MAX(rcmax, R[j]);
+	    }
+	    if (rcmin <= 0.) *info = -7;
+	    else if ( A->nrow > 0)
+		rowcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else rowcnd = 1.;
+	}
+	if (colequ && *info == 0) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, C[j]);
+		rcmax = SUPERLU_MAX(rcmax, C[j]);
+	    }
+	    if (rcmin <= 0.) *info = -8;
+	    else if (A->nrow > 0)
+		colcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else colcnd = 1.;
+	}
+	if (*info == 0) {
+	    if ( lwork < -1 ) *info = -12;
+	    else if ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      B->Stype != SLU_DN || B->Dtype != SLU_S || 
+		      B->Mtype != SLU_GE )
+		*info = -13;
+	    else if ( X->ncol < 0 || Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      (B->ncol != 0 && B->ncol != X->ncol) ||
+		      X->Stype != SLU_DN ||
+		      X->Dtype != SLU_S || X->Mtype != SLU_GE )
+		*info = -14;
+	}
+    }
+    if (*info != 0) {
+	i = -(*info);
+	xerbla_("sgsisx", &i);
+	return;
+    }
+
+    /* Initialization for factor parameters */
+    panel_size = sp_ienv(1);
+    relax      = sp_ienv(2);
+    diag_pivot_thresh = options->DiagPivotThresh;
+
+    utime = stat->utime;
+
+    /* Convert A to SLU_NC format when necessary. */
+    if ( A->Stype == SLU_NR ) {
+	NRformat *Astore = A->Store;
+	AA = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+	sCreate_CompCol_Matrix(AA, A->ncol, A->nrow, Astore->nnz,
+			       Astore->nzval, Astore->colind, Astore->rowptr,
+			       SLU_NC, A->Dtype, A->Mtype);
+	if ( notran ) { /* Reverse the transpose argument. */
+	    trant = TRANS;
+	    notran = 0;
+	} else {
+	    trant = NOTRANS;
+	    notran = 1;
+	}
+    } else { /* A->Stype == SLU_NC */
+	trant = options->Trans;
+	AA = A;
+    }
+
+    if ( nofact ) {
+	register int i, j;
+	NCformat *Astore = AA->Store;
+	int nnz = Astore->nnz;
+	int *colptr = Astore->colptr;
+	int *rowind = Astore->rowind;
+	float *nzval = (float *)Astore->nzval;
+	int n = AA->nrow;
+
+	if ( mc64 ) {
+	    *equed = 'B';
+    	    /*rowequ = colequ = 1;*/
+	    t0 = SuperLU_timer_();
+	    if ((perm = intMalloc(n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for perm[]");
+
+	    info1 = sldperm(5, n, nnz, colptr, rowind, nzval, perm, R, C);
+
+	    if (info1 > 0) { /* MC64 fails, call sgsequ() later */
+		mc64 = 0;
+		SUPERLU_FREE(perm);
+		perm = NULL;
+	    } else {
+	        rowequ = colequ = 1;
+		for (i = 0; i < n; i++) {
+		    R[i] = exp(R[i]);
+		    C[i] = exp(C[i]);
+		}
+		/* permute and scale the matrix */
+		for (j = 0; j < n; j++) {
+		    for (i = colptr[j]; i < colptr[j + 1]; i++) {
+			nzval[i] *= R[rowind[i]] * C[j];
+			rowind[i] = perm[rowind[i]];
+		    }
+		}
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+	if ( !mc64 & equil ) {
+	    t0 = SuperLU_timer_();
+	    /* Compute row and column scalings to equilibrate the matrix A. */
+	    sgsequ(AA, R, C, &rowcnd, &colcnd, &amax, &info1);
+
+	    if ( info1 == 0 ) {
+		/* Equilibrate matrix A. */
+		slaqgs(AA, R, C, rowcnd, colcnd, amax, equed);
+		rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+		colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+    }
+
+
+    if ( nofact ) {
+	
+	t0 = SuperLU_timer_();
+	/*
+	 * Gnet column permutation vector perm_c[], according to permc_spec:
+	 *   permc_spec = NATURAL:  natural ordering 
+	 *   permc_spec = MMD_AT_PLUS_A: minimum degree on structure of A'+A
+	 *   permc_spec = MMD_ATA:  minimum degree on structure of A'*A
+	 *   permc_spec = COLAMD:   approximate minimum degree column ordering
+	 *   permc_spec = MY_PERMC: the ordering already supplied in perm_c[]
+	 */
+	permc_spec = options->ColPerm;
+	if ( permc_spec != MY_PERMC && options->Fact == DOFACT )
+	    get_perm_c(permc_spec, AA, perm_c);
+	utime[COLPERM] = SuperLU_timer_() - t0;
+
+	t0 = SuperLU_timer_();
+	sp_preorder(options, AA, perm_c, etree, &AC);
+	utime[ETREE] = SuperLU_timer_() - t0;
+
+	/* Compute the LU factorization of A*Pc. */
+	t0 = SuperLU_timer_();
+	sgsitrf(options, &AC, relax, panel_size, etree, work, lwork,
+                perm_c, perm_r, L, U, stat, info);
+	utime[FACT] = SuperLU_timer_() - t0;
+
+	if ( lwork == -1 ) {
+	    mem_usage->total_needed = *info - A->ncol;
+	    return;
+	}
+    }
+
+    if ( options->PivotGrowth ) {
+	if ( *info > 0 ) return;
+
+	/* Compute the reciprocal pivot growth factor *recip_pivot_growth. */
+	*recip_pivot_growth = sPivotGrowth(A->ncol, AA, perm_c, L, U);
+    }
+
+    if ( options->ConditionNumber ) {
+	/* Estimate the reciprocal of the condition number of A. */
+	t0 = SuperLU_timer_();
+	if ( notran ) {
+	    *(unsigned char *)norm = '1';
+	} else {
+	    *(unsigned char *)norm = 'I';
+	}
+	anorm = slangs(norm, AA);
+	sgscon(norm, L, U, anorm, rcond, stat, &info1);
+	utime[RCOND] = SuperLU_timer_() - t0;
+    }
+
+    if ( nrhs > 0 ) { /* Solve the system */
+        float *tmp, *rhs_work;
+        int n = A->nrow;
+        if ( mc64 ) {
+	    if ((tmp = floatMalloc(n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for tmp[]");
+        }
+
+	/* Scale and permute the right-hand side if equilibration
+           and permutation from MC64 were performed. */
+	if ( notran ) {
+	    if ( rowequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i)
+		        Bmat[i + j*ldb] *= R[i];
+	    }
+	    if ( mc64 ) {
+		for (j = 0; j < nrhs; ++j) {
+                   rhs_work = &Bmat[j*ldb];
+  	           for (i = 0; i < n; i++) tmp[perm[i]] = rhs_work[i];
+	           for (i = 0; i < n; i++) rhs_work[i] = tmp[i];
+                }
+	    }
+	} else if ( colequ ) {
+	    for (j = 0; j < nrhs; ++j)
+		for (i = 0; i < n; ++i) {
+	            Bmat[i + j*ldb] *= C[i];
+		}
+	}
+
+	/* Compute the solution matrix X. */
+	for (j = 0; j < nrhs; j++)  /* Save a copy of the right hand sides */
+	    for (i = 0; i < B->nrow; i++)
+		Xmat[i + j*ldx] = Bmat[i + j*ldb];
+
+	t0 = SuperLU_timer_();
+	sgstrs (trant, L, U, perm_c, perm_r, X, stat, &info1);
+	utime[SOLVE] = SuperLU_timer_() - t0;
+
+	/* Transform the solution matrix X to a solution of the original
+	   system. */
+	if ( notran ) {
+	    if ( colequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i) {
+                        Xmat[i + j*ldx] *= C[i];
+                    }
+	    }
+	} else { /* transposed system */
+	    if ( rowequ ) {
+		if ( mc64 ) {
+		    for (j = 0; j < nrhs; j++) {
+			for (i = 0; i < n; i++)
+			    tmp[i] = Xmat[i + j * ldx]; /*dcopy*/
+			for (i = 0; i < n; i++)
+			    Xmat[i + j * ldx] = R[i] * tmp[perm[i]];
+		    }
+		} else {
+		    for (j = 0; j < nrhs; ++j)
+			for (i = 0; i < A->nrow; ++i) {
+              	            Xmat[i + j*ldx] *= R[i];
+                        }
+		}
+	    }
+	}
+
+        if ( mc64 ) SUPERLU_FREE(tmp);
+
+    } /* end if nrhs > 0 */
+
+    if ( options->ConditionNumber ) {
+	/* Set INFO = A->ncol+1 if the matrix is singular to working precision. */
+	if ( *rcond < slamch_("E") && *info == 0) *info = A->ncol + 1;
+    }
+
+    if (perm) SUPERLU_FREE(perm);
+
+    if ( nofact ) {
+	ilu_sQuerySpace(L, U, mem_usage);
+	Destroy_CompCol_Permuted(&AC);
+    }
+    if ( A->Stype == SLU_NR ) {
+	Destroy_SuperMatrix_Store(AA);
+	SUPERLU_FREE(AA);
+    }
+
+}
diff --git a/SRC/sgsitrf.c b/SRC/sgsitrf.c
new file mode 100644
index 0000000..c0a3675
--- /dev/null
+++ b/SRC/sgsitrf.c
@@ -0,0 +1,639 @@
+
+/*! @file sgsitrf.c
+ * \brief Computes an ILU factorization of a general sparse matrix
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ *
+ * </pre>
+ */
+
+#include "slu_sdefs.h"
+
+#ifdef DEBUG
+int num_drop_L;
+#endif
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * SGSITRF computes an ILU factorization of a general sparse m-by-n
+ * matrix A using partial pivoting with row interchanges.
+ * The factorization has the form
+ *     Pr * A = L * U
+ * where Pr is a row permutation matrix, L is lower triangular with unit
+ * diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ * triangular (upper trapezoidal if A->nrow < A->ncol).
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the ILU decomposition will be performed.
+ *
+ * A	    (input) SuperMatrix*
+ *	    Original matrix A, permuted by columns, of dimension
+ *	    (A->nrow, A->ncol). The type of A can be:
+ *	    Stype = SLU_NCP; Dtype = SLU_S; Mtype = SLU_GE.
+ *
+ * relax    (input) int
+ *	    To control degree of relaxing supernodes. If the number
+ *	    of nodes (columns) in a subtree of the elimination tree is less
+ *	    than relax, this subtree is considered as one supernode,
+ *	    regardless of the row structures of those columns.
+ *
+ * panel_size (input) int
+ *	    A panel consists of at most panel_size consecutive columns.
+ *
+ * etree    (input) int*, dimension (A->ncol)
+ *	    Elimination tree of A'*A.
+ *	    Note: etree is a vector of parent pointers for a forest whose
+ *	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *	    On input, the columns of A should be permuted so that the
+ *	    etree is in a certain postorder.
+ *
+ * work     (input/output) void*, size (lwork) (in bytes)
+ *	    User-supplied work space and space for the output data structures.
+ *	    Not referenced if lwork = 0;
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 *info; no other side effects.
+ *
+ * perm_c   (input) int*, dimension (A->ncol)
+ *	    Column permutation vector, which defines the
+ *	    permutation matrix Pc; perm_c[i] = j means column i of A is
+ *	    in position j in A*Pc.
+ *	    When searching for diagonal, perm_c[*] is applied to the
+ *	    row subscripts of A, so that diagonal threshold pivoting
+ *	    can find the diagonal of A, rather than that of A*Pc.
+ *
+ * perm_r   (input/output) int*, dimension (A->nrow)
+ *	    Row permutation vector which defines the permutation matrix Pr,
+ *	    perm_r[i] = j means row i of A is in position j in Pr*A.
+ *	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	       will try to use the input perm_r, unless a certain threshold
+ *	       criterion is violated. In that case, perm_r is overwritten by
+ *	       a new permutation determined by partial pivoting or diagonal
+ *	       threshold pivoting.
+ *	    Otherwise, perm_r is output argument;
+ *
+ * L	    (output) SuperMatrix*
+ *	    The factor L from the factorization Pr*A=L*U; use compressed row
+ *	    subscripts storage for supernodes, i.e., L has type:
+ *	    Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.
+ *
+ * U	    (output) SuperMatrix*
+ *	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+ *	    storage scheme, i.e., U has types: Stype = SLU_NC,
+ *	    Dtype = SLU_S, Mtype = SLU_TRU.
+ *
+ * stat     (output) SuperLUStat_t*
+ *	    Record the statistics on runtime and floating-point operation count.
+ *	    See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info     (output) int*
+ *	    = 0: successful exit
+ *	    < 0: if info = -i, the i-th argument had an illegal value
+ *	    > 0: if info = i, and i is
+ *	       <= A->ncol: number of zero pivots. They are replaced by small
+ *		  entries according to options->ILU_FillTol.
+ *	       > A->ncol: number of bytes allocated when memory allocation
+ *		  failure occurred, plus A->ncol. If lwork = -1, it is
+ *		  the estimated amount of space needed, plus A->ncol.
+ *
+ * ======================================================================
+ *
+ * Local Working Arrays:
+ * ======================
+ *   m = number of rows in the matrix
+ *   n = number of columns in the matrix
+ *
+ *   marker[0:3*m-1]: marker[i] = j means that node i has been
+ *	reached when working on column j.
+ *	Storage: relative to original row subscripts
+ *	NOTE: There are 4 of them:
+ *	      marker/marker1 are used for panel dfs, see (ilu_)dpanel_dfs.c;
+ *	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+ *	      marker_relax(has its own space) is used for relaxed supernodes.
+ *
+ *   parent[0:m-1]: parent vector used during dfs
+ *	Storage: relative to new row subscripts
+ *
+ *   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ *	unexplored neighbor of i in lsub[*]
+ *
+ *   segrep[0:nseg-1]: contains the list of supernodal representatives
+ *	in topological order of the dfs. A supernode representative is the
+ *	last column of a supernode.
+ *	The maximum size of segrep[] is n.
+ *
+ *   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+ *	supernodal representative r, repfnz[r] is the location of the first
+ *	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+ *	indicates the supernode r has been explored.
+ *	NOTE: There are W of them, each used for one column of a panel.
+ *
+ *   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+ *	the panel diagonal. These are filled in during dpanel_dfs(), and are
+ *	used later in the inner LU factorization within the panel.
+ *	panel_lsub[]/dense[] pair forms the SPA data structure.
+ *	NOTE: There are W of them.
+ *
+ *   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ *		   NOTE: there are W of them.
+ *
+ *   tempv[0:*]: real temporary used for dense numeric kernels;
+ *	The size of this array is defined by NUM_TEMPV() in slu_util.h.
+ *	It is also used by the dropping routine ilu_ddrop_row().
+ * </pre>
+ */
+
+void
+sgsitrf(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size,
+	int *etree, void *work, int lwork, int *perm_c, int *perm_r,
+	SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)
+{
+    /* Local working arrays */
+    NCPformat *Astore;
+    int       *iperm_r = NULL; /* inverse of perm_r; used when
+				  options->Fact == SamePattern_SameRowPerm */
+    int       *iperm_c; /* inverse of perm_c */
+    int       *swap, *iswap; /* swap is used to store the row permutation
+				during the factorization. Initially, it is set
+				to iperm_c (row indeces of Pc*A*Pc').
+				iswap is the inverse of swap. After the
+				factorization, it is equal to perm_r. */
+    int       *iwork;
+    float   *swork;
+    int       *segrep, *repfnz, *parent, *xplore;
+    int       *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
+    int       *marker, *marker_relax;
+    float    *dense, *tempv;
+    int       *relax_end, *relax_fsupc;
+    float    *a;
+    int       *asub;
+    int       *xa_begin, *xa_end;
+    int       *xsup, *supno;
+    int       *xlsub, *xlusup, *xusub;
+    int       nzlumax;
+    float    *amax; 
+    float    drop_sum;
+    float alpha, omega;  /* used in MILU, mimicing DRIC */
+    static GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
+    float    *swork2;	   /* used by the second dropping rule */
+
+    /* Local scalars */
+    fact_t    fact = options->Fact;
+    double    diag_pivot_thresh = options->DiagPivotThresh;
+    double    drop_tol = options->ILU_DropTol; /* tau */
+    double    fill_ini = options->ILU_FillTol; /* tau^hat */
+    double    gamma = options->ILU_FillFactor;
+    int       drop_rule = options->ILU_DropRule;
+    milu_t    milu = options->ILU_MILU;
+    double    fill_tol;
+    int       pivrow;	/* pivotal row number in the original matrix A */
+    int       nseg1;	/* no of segments in U-column above panel row jcol */
+    int       nseg;	/* no of segments in each U-column */
+    register int jcol;
+    register int kcol;	/* end column of a relaxed snode */
+    register int icol;
+    register int i, k, jj, new_next, iinfo;
+    int       m, n, min_mn, jsupno, fsupc, nextlu, nextu;
+    int       w_def;	/* upper bound on panel width */
+    int       usepr, iperm_r_allocated = 0;
+    int       nnzL, nnzU;
+    int       *panel_histo = stat->panel_histo;
+    flops_t   *ops = stat->ops;
+
+    int       last_drop;/* the last column which the dropping rules applied */
+    int       quota;
+    int       nnzAj;	/* number of nonzeros in A(:,1:j) */
+    int       nnzLj, nnzUj;
+    double    tol_L = drop_tol, tol_U = drop_tol;
+    float zero = 0.0;
+    float one = 1.0;
+
+    /* Executable */	   
+    iinfo    = 0;
+    m	     = A->nrow;
+    n	     = A->ncol;
+    min_mn   = SUPERLU_MIN(m, n);
+    Astore   = A->Store;
+    a	     = Astore->nzval;
+    asub     = Astore->rowind;
+    xa_begin = Astore->colbeg;
+    xa_end   = Astore->colend;
+
+    /* Allocate storage common to the factor routines */
+    *info = sLUMemInit(fact, work, lwork, m, n, Astore->nnz, panel_size,
+		       gamma, L, U, &Glu, &iwork, &swork);
+    if ( *info ) return;
+
+    xsup    = Glu.xsup;
+    supno   = Glu.supno;
+    xlsub   = Glu.xlsub;
+    xlusup  = Glu.xlusup;
+    xusub   = Glu.xusub;
+
+    SetIWork(m, n, panel_size, iwork, &segrep, &parent, &xplore,
+	     &repfnz, &panel_lsub, &marker_relax, &marker);
+    sSetRWork(m, panel_size, swork, &dense, &tempv);
+
+    usepr = (fact == SamePattern_SameRowPerm);
+    if ( usepr ) {
+	/* Compute the inverse of perm_r */
+	iperm_r = (int *) intMalloc(m);
+	for (k = 0; k < m; ++k) iperm_r[perm_r[k]] = k;
+	iperm_r_allocated = 1;
+    }
+
+    iperm_c = (int *) intMalloc(n);
+    for (k = 0; k < n; ++k) iperm_c[perm_c[k]] = k;
+    swap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) swap[k] = iperm_c[k];
+    iswap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) iswap[k] = perm_c[k];
+    amax = (float *) floatMalloc(panel_size);
+    if (drop_rule & DROP_SECONDARY)
+	swork2 = (float *)floatMalloc(n);
+    else
+	swork2 = NULL;
+
+    nnzAj = 0;
+    nnzLj = 0;
+    nnzUj = 0;
+    last_drop = SUPERLU_MAX(min_mn - 2 * sp_ienv(7), (int)(min_mn * 0.95));
+    alpha = pow((double)n, -1.0 / options->ILU_MILU_Dim);
+
+    /* Identify relaxed snodes */
+    relax_end = (int *) intMalloc(n);
+    relax_fsupc = (int *) intMalloc(n);
+    if ( options->SymmetricMode == YES )
+	ilu_heap_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+    else
+	ilu_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+
+    ifill (perm_r, m, EMPTY);
+    ifill (marker, m * NO_MARKER, EMPTY);
+    supno[0] = -1;
+    xsup[0]  = xlsub[0] = xusub[0] = xlusup[0] = 0;
+    w_def    = panel_size;
+
+    /* Mark the rows used by relaxed supernodes */
+    ifill (marker_relax, m, EMPTY);
+    i = mark_relax(m, relax_end, relax_fsupc, xa_begin, xa_end,
+	         asub, marker_relax);
+#if ( PRNTlevel >= 1)
+    printf("%d relaxed supernodes.\n", i);
+#endif
+
+    /*
+     * Work on one "panel" at a time. A panel is one of the following:
+     *	   (a) a relaxed supernode at the bottom of the etree, or
+     *	   (b) panel_size contiguous columns, defined by the user
+     */
+    for (jcol = 0; jcol < min_mn; ) {
+
+	if ( relax_end[jcol] != EMPTY ) { /* start of a relaxed snode */
+	    kcol = relax_end[jcol];	  /* end of the relaxed snode */
+	    panel_histo[kcol-jcol+1]++;
+
+	    /* Drop small rows in the previous supernode. */
+	    if (jcol > 0 && jcol < last_drop) {
+		int first = xsup[supno[jcol - 1]];
+		int last = jcol - 1;
+		int quota;
+
+		/* Compute the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * (m - first) / m
+			    * (last - first + 1);
+		else if (drop_rule & DROP_COLUMN) {
+		    int i;
+		    quota = 0;
+		    for (i = first; i <= last; i++)
+			quota += xa_end[i] - xa_begin[i];
+		    quota = gamma * quota * (m - first) / m;
+		} else if (drop_rule & DROP_AREA)
+		    quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			    - nnzLj;
+		else
+		    quota = m * n;
+		fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) / min_mn);
+
+		/* Drop small rows */
+		i = ilu_sdrop_row(options, first, last, tol_L, quota, &nnzLj,
+				  &fill_tol, &Glu, tempv, swork2, 0);
+		/* Reset the parameters */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			     < nnzLj)
+			tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+		    else
+			tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		}
+		if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		num_drop_L += i * (last - first + 1);
+#endif
+	    }
+
+	    /* --------------------------------------
+	     * Factorize the relaxed supernode(jcol:kcol)
+	     * -------------------------------------- */
+	    /* Determine the union of the row structure of the snode */
+	    if ( (*info = ilu_ssnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
+					 marker, &Glu)) != 0 )
+		return;
+
+	    nextu    = xusub[jcol];
+	    nextlu   = xlusup[jcol];
+	    jsupno   = supno[jcol];
+	    fsupc    = xsup[jsupno];
+	    new_next = nextlu + (xlsub[fsupc+1]-xlsub[fsupc])*(kcol-jcol+1);
+	    nzlumax = Glu.nzlumax;
+	    while ( new_next > nzlumax ) {
+		if ((*info = sLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, &Glu)))
+		    return;
+	    }
+
+	    for (icol = jcol; icol <= kcol; icol++) {
+		xusub[icol+1] = nextu;
+
+		amax[0] = 0.0;
+		/* Scatter into SPA dense[*] */
+		for (k = xa_begin[icol]; k < xa_end[icol]; k++) {
+		    register float tmp = fabs(a[k]);
+		    if (tmp > amax[0]) amax[0] = tmp;
+		    dense[asub[k]] = a[k];
+		}
+		nnzAj += xa_end[icol] - xa_begin[icol];
+		if (amax[0] == 0.0) {
+		    amax[0] = fill_ini;
+#if ( PRNTlevel >= 1)
+		    printf("Column %d is entirely zero!\n", icol);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Numeric update within the snode */
+		ssnode_bmod(icol, jsupno, fsupc, dense, tempv, &Glu, stat);
+
+		if (usepr) pivrow = iperm_r[icol];
+		fill_tol = pow(fill_ini, 1.0 - (double)icol / (double)min_mn);
+		if ( (*info = ilu_spivotL(icol, diag_pivot_thresh, &usepr,
+					  perm_r, iperm_c[icol], swap, iswap,
+					  marker_relax, &pivrow,
+                                          amax[0] * fill_tol, milu, zero,
+                                          &Glu, stat)) ) {
+		    iinfo++;
+		    marker[pivrow] = kcol;
+		}
+
+	    }
+
+	    jcol = kcol + 1;
+
+	} else { /* Work on one panel of panel_size columns */
+
+	    /* Adjust panel_size so that a panel won't overlap with the next
+	     * relaxed snode.
+	     */
+	    panel_size = w_def;
+	    for (k = jcol + 1; k < SUPERLU_MIN(jcol+panel_size, min_mn); k++)
+		if ( relax_end[k] != EMPTY ) {
+		    panel_size = k - jcol;
+		    break;
+		}
+	    if ( k == min_mn ) panel_size = min_mn - jcol;
+	    panel_histo[panel_size]++;
+
+	    /* symbolic factor on a panel of columns */
+	    ilu_spanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
+                          dense, amax, panel_lsub, segrep, repfnz,
+                          marker, parent, xplore, &Glu);
+
+	    /* numeric sup-panel updates in topological order */
+	    spanel_bmod(m, panel_size, jcol, nseg1, dense,
+			tempv, segrep, repfnz, &Glu, stat);
+
+	    /* Sparse LU within the panel, and below panel diagonal */
+	    for (jj = jcol; jj < jcol + panel_size; jj++) {
+
+		k = (jj - jcol) * m; /* column index for w-wide arrays */
+
+		nseg = nseg1;	/* Begin after all the panel segments */
+
+		nnzAj += xa_end[jj] - xa_begin[jj];
+
+		if ((*info = ilu_scolumn_dfs(m, jj, perm_r, &nseg,
+					     &panel_lsub[k], segrep, &repfnz[k],
+					     marker, parent, xplore, &Glu)))
+		    return;
+
+		/* Numeric updates */
+		if ((*info = scolumn_bmod(jj, (nseg - nseg1), &dense[k],
+					  tempv, &segrep[nseg1], &repfnz[k],
+					  jcol, &Glu, stat)) != 0) return;
+
+		/* Make a fill-in position if the column is entirely zero */
+		if (xlsub[jj + 1] == xlsub[jj]) {
+		    register int i, row;
+		    int nextl;
+		    int nzlmax = Glu.nzlmax;
+		    int *lsub = Glu.lsub;
+		    int *marker2 = marker + 2 * m;
+
+		    /* Allocate memory */
+		    nextl = xlsub[jj] + 1;
+		    if (nextl >= nzlmax) {
+			int error = sLUMemXpand(jj, nextl, LSUB, &nzlmax, &Glu);
+			if (error) { *info = error; return; }
+			lsub = Glu.lsub;
+		    }
+		    xlsub[jj + 1]++;
+		    assert(xlusup[jj]==xlusup[jj+1]);
+		    xlusup[jj + 1]++;
+		    Glu.lusup[xlusup[jj]] = zero;
+
+		    /* Choose a row index (pivrow) for fill-in */
+		    for (i = jj; i < n; i++)
+			if (marker_relax[swap[i]] <= jj) break;
+		    row = swap[i];
+		    marker2[row] = jj;
+		    lsub[xlsub[jj]] = row;
+#ifdef DEBUG
+		    printf("Fill col %d.\n", jj);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Computer the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * jj / m;
+		else if (drop_rule & DROP_COLUMN)
+		    quota = gamma * (xa_end[jj] - xa_begin[jj]) *
+			    (jj + 1) / m;
+		else if (drop_rule & DROP_AREA)
+		    quota = gamma * 0.9 * nnzAj * 0.5 - nnzUj;
+		else
+		    quota = m;
+
+		/* Copy the U-segments to ucol[*] and drop small entries */
+		if ((*info = ilu_scopy_to_ucol(jj, nseg, segrep, &repfnz[k],
+					       perm_r, &dense[k], drop_rule,
+					       milu, amax[jj - jcol] * tol_U,
+					       quota, &drop_sum, &nnzUj, &Glu,
+					       swork2)) != 0)
+		    return;
+
+		/* Reset the dropping threshold if required */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * 0.9 * nnzAj * 0.5 < nnzLj)
+			tol_U = SUPERLU_MIN(1.0, tol_U * 2.0);
+		    else
+			tol_U = SUPERLU_MAX(drop_tol, tol_U * 0.5);
+		}
+
+		if (drop_sum != zero)
+		{
+		    if (drop_sum > zero)
+			omega = SUPERLU_MIN(2.0 * (1.0 - alpha)
+				* amax[jj - jcol] / drop_sum, one);
+		    else
+			omega = SUPERLU_MAX(2.0 * (1.0 - alpha)
+				* amax[jj - jcol] / drop_sum, -one);
+		    drop_sum *= omega;
+                }
+		if (usepr) pivrow = iperm_r[jj];
+		fill_tol = pow(fill_ini, 1.0 - (double)jj / (double)min_mn);
+		if ( (*info = ilu_spivotL(jj, diag_pivot_thresh, &usepr, perm_r,
+					  iperm_c[jj], swap, iswap,
+					  marker_relax, &pivrow,
+					  amax[jj - jcol] * fill_tol, milu,
+					  drop_sum, &Glu, stat)) ) {
+		    iinfo++;
+		    marker[m + pivrow] = jj;
+		    marker[2 * m + pivrow] = jj;
+		}
+
+		/* Reset repfnz[] for this column */
+		resetrep_col (nseg, segrep, &repfnz[k]);
+
+		/* Start a new supernode, drop the previous one */
+		if (jj > 0 && supno[jj] > supno[jj - 1] && jj < last_drop) {
+		    int first = xsup[supno[jj - 1]];
+		    int last = jj - 1;
+		    int quota;
+
+		    /* Compute the quota */
+		    if (drop_rule & DROP_PROWS)
+			quota = gamma * Astore->nnz / m * (m - first) / m
+				* (last - first + 1);
+		    else if (drop_rule & DROP_COLUMN) {
+			int i;
+			quota = 0;
+			for (i = first; i <= last; i++)
+			    quota += xa_end[i] - xa_begin[i];
+			quota = gamma * quota * (m - first) / m;
+		    } else if (drop_rule & DROP_AREA)
+			quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0)
+				/ m) - nnzLj;
+		    else
+			quota = m * n;
+		    fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) /
+			    (double)min_mn);
+
+		    /* Drop small rows */
+		    i = ilu_sdrop_row(options, first, last, tol_L, quota,
+				      &nnzLj, &fill_tol, &Glu, tempv, swork2,
+				      1);
+
+		    /* Reset the parameters */
+		    if (drop_rule & DROP_DYNAMIC) {
+			if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+				< nnzLj)
+			    tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+			else
+			    tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		    }
+		    if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		    num_drop_L += i * (last - first + 1);
+#endif
+		} /* if start a new supernode */
+
+	    } /* for */
+
+	    jcol += panel_size; /* Move to the next panel */
+
+	} /* else */
+
+    } /* for */
+
+    *info = iinfo;
+
+    if ( m > n ) {
+	k = 0;
+	for (i = 0; i < m; ++i)
+	    if ( perm_r[i] == EMPTY ) {
+		perm_r[i] = n + k;
+		++k;
+	    }
+    }
+
+    ilu_countnz(min_mn, &nnzL, &nnzU, &Glu);
+    fixupL(min_mn, perm_r, &Glu);
+
+    sLUWorkFree(iwork, swork, &Glu); /* Free work space and compress storage */
+
+    if ( fact == SamePattern_SameRowPerm ) {
+	/* L and U structures may have changed due to possibly different
+	   pivoting, even though the storage is available.
+	   There could also be memory expansions, so the array locations
+	   may have changed, */
+	((SCformat *)L->Store)->nnz = nnzL;
+	((SCformat *)L->Store)->nsuper = Glu.supno[n];
+	((SCformat *)L->Store)->nzval = Glu.lusup;
+	((SCformat *)L->Store)->nzval_colptr = Glu.xlusup;
+	((SCformat *)L->Store)->rowind = Glu.lsub;
+	((SCformat *)L->Store)->rowind_colptr = Glu.xlsub;
+	((NCformat *)U->Store)->nnz = nnzU;
+	((NCformat *)U->Store)->nzval = Glu.ucol;
+	((NCformat *)U->Store)->rowind = Glu.usub;
+	((NCformat *)U->Store)->colptr = Glu.xusub;
+    } else {
+	sCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL, Glu.lusup,
+				 Glu.xlusup, Glu.lsub, Glu.xlsub, Glu.supno,
+				 Glu.xsup, SLU_SC, SLU_S, SLU_TRLU);
+	sCreate_CompCol_Matrix(U, min_mn, min_mn, nnzU, Glu.ucol,
+			       Glu.usub, Glu.xusub, SLU_NC, SLU_S, SLU_TRU);
+    }
+
+    ops[FACT] += ops[TRSV] + ops[GEMV];
+    stat->expansions = --(Glu.num_expansions);
+
+    if ( iperm_r_allocated ) SUPERLU_FREE (iperm_r);
+    SUPERLU_FREE (iperm_c);
+    SUPERLU_FREE (relax_end);
+    SUPERLU_FREE (swap);
+    SUPERLU_FREE (iswap);
+    SUPERLU_FREE (relax_fsupc);
+    SUPERLU_FREE (amax);
+    if ( swork2 ) SUPERLU_FREE (swork2);
+
+}
diff --git a/SRC/sgsitrf.c.bak b/SRC/sgsitrf.c.bak
new file mode 100644
index 0000000..3dfaadd
--- /dev/null
+++ b/SRC/sgsitrf.c.bak
@@ -0,0 +1,626 @@
+
+/*! @file sgsitf.c
+ * \brief Computes an ILU factorization of a general sparse matrix
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_sdefs.h"
+
+#ifdef DEBUG
+int num_drop_L;
+#endif
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * SGSITRF computes an ILU factorization of a general sparse m-by-n
+ * matrix A using partial pivoting with row interchanges.
+ * The factorization has the form
+ *     Pr * A = L * U
+ * where Pr is a row permutation matrix, L is lower triangular with unit
+ * diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ * triangular (upper trapezoidal if A->nrow < A->ncol).
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the ILU decomposition will be performed.
+ *
+ * A	    (input) SuperMatrix*
+ *	    Original matrix A, permuted by columns, of dimension
+ *	    (A->nrow, A->ncol). The type of A can be:
+ *	    Stype = SLU_NCP; Dtype = SLU_S; Mtype = SLU_GE.
+ *
+ * relax    (input) int
+ *	    To control degree of relaxing supernodes. If the number
+ *	    of nodes (columns) in a subtree of the elimination tree is less
+ *	    than relax, this subtree is considered as one supernode,
+ *	    regardless of the row structures of those columns.
+ *
+ * panel_size (input) int
+ *	    A panel consists of at most panel_size consecutive columns.
+ *
+ * etree    (input) int*, dimension (A->ncol)
+ *	    Elimination tree of A'*A.
+ *	    Note: etree is a vector of parent pointers for a forest whose
+ *	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *	    On input, the columns of A should be permuted so that the
+ *	    etree is in a certain postorder.
+ *
+ * work     (input/output) void*, size (lwork) (in bytes)
+ *	    User-supplied work space and space for the output data structures.
+ *	    Not referenced if lwork = 0;
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 *info; no other side effects.
+ *
+ * perm_c   (input) int*, dimension (A->ncol)
+ *	    Column permutation vector, which defines the
+ *	    permutation matrix Pc; perm_c[i] = j means column i of A is
+ *	    in position j in A*Pc.
+ *	    When searching for diagonal, perm_c[*] is applied to the
+ *	    row subscripts of A, so that diagonal threshold pivoting
+ *	    can find the diagonal of A, rather than that of A*Pc.
+ *
+ * perm_r   (input/output) int*, dimension (A->nrow)
+ *	    Row permutation vector which defines the permutation matrix Pr,
+ *	    perm_r[i] = j means row i of A is in position j in Pr*A.
+ *	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	       will try to use the input perm_r, unless a certain threshold
+ *	       criterion is violated. In that case, perm_r is overwritten by
+ *	       a new permutation determined by partial pivoting or diagonal
+ *	       threshold pivoting.
+ *	    Otherwise, perm_r is output argument;
+ *
+ * L	    (output) SuperMatrix*
+ *	    The factor L from the factorization Pr*A=L*U; use compressed row
+ *	    subscripts storage for supernodes, i.e., L has type:
+ *	    Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.
+ *
+ * U	    (output) SuperMatrix*
+ *	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+ *	    storage scheme, i.e., U has types: Stype = SLU_NC,
+ *	    Dtype = SLU_S, Mtype = SLU_TRU.
+ *
+ * stat     (output) SuperLUStat_t*
+ *	    Record the statistics on runtime and floating-point operation count.
+ *	    See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info     (output) int*
+ *	    = 0: successful exit
+ *	    < 0: if info = -i, the i-th argument had an illegal value
+ *	    > 0: if info = i, and i is
+ *	       <= A->ncol: number of zero pivots. They are replaced by small
+ *		  entries according to options->ILU_FillTol.
+ *	       > A->ncol: number of bytes allocated when memory allocation
+ *		  failure occurred, plus A->ncol. If lwork = -1, it is
+ *		  the estimated amount of space needed, plus A->ncol.
+ *
+ * ======================================================================
+ *
+ * Local Working Arrays:
+ * ======================
+ *   m = number of rows in the matrix
+ *   n = number of columns in the matrix
+ *
+ *   marker[0:3*m-1]: marker[i] = j means that node i has been
+ *	reached when working on column j.
+ *	Storage: relative to original row subscripts
+ *	NOTE: There are 4 of them:
+ *	      marker/marker1 are used for panel dfs, see (ilu_)dpanel_dfs.c;
+ *	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+ *	      marker_relax(has its own space) is used for relaxed supernodes.
+ *
+ *   parent[0:m-1]: parent vector used during dfs
+ *	Storage: relative to new row subscripts
+ *
+ *   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ *	unexplored neighbor of i in lsub[*]
+ *
+ *   segrep[0:nseg-1]: contains the list of supernodal representatives
+ *	in topological order of the dfs. A supernode representative is the
+ *	last column of a supernode.
+ *	The maximum size of segrep[] is n.
+ *
+ *   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+ *	supernodal representative r, repfnz[r] is the location of the first
+ *	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+ *	indicates the supernode r has been explored.
+ *	NOTE: There are W of them, each used for one column of a panel.
+ *
+ *   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+ *	the panel diagonal. These are filled in during dpanel_dfs(), and are
+ *	used later in the inner LU factorization within the panel.
+ *	panel_lsub[]/dense[] pair forms the SPA data structure.
+ *	NOTE: There are W of them.
+ *
+ *   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ *		   NOTE: there are W of them.
+ *
+ *   tempv[0:*]: real temporary used for dense numeric kernels;
+ *	The size of this array is defined by NUM_TEMPV() in slu_util.h.
+ *	It is also used by the dropping routine ilu_ddrop_row().
+ * </pre>
+ */
+
+void
+sgsitrf(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size,
+	int *etree, void *work, int lwork, int *perm_c, int *perm_r,
+	SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)
+{
+    /* Local working arrays */
+    NCPformat *Astore;
+    int       *iperm_r = NULL; /* inverse of perm_r; used when
+				  options->Fact == SamePattern_SameRowPerm */
+    int       *iperm_c; /* inverse of perm_c */
+    int       *swap, *iswap; /* swap is used to store the row permutation
+				during the factorization. Initially, it is set
+				to iperm_c (row indeces of Pc*A*Pc').
+				iswap is the inverse of swap. After the
+				factorization, it is equal to perm_r. */
+    int       *iwork;
+    float   *swork;
+    int       *segrep, *repfnz, *parent, *xplore;
+    int       *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
+    int       *marker, *marker_relax;
+    float    *dense, *tempv;
+    int       *relax_end, *relax_fsupc;
+    float    *a;
+    int       *asub;
+    int       *xa_begin, *xa_end;
+    int       *xsup, *supno;
+    int       *xlsub, *xlusup, *xusub;
+    int       nzlumax;
+    float    *amax; 
+    float    drop_sum;
+    static GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
+    int       *iwork2;	   /* used by the second dropping rule */
+
+    /* Local scalars */
+    fact_t    fact = options->Fact;
+    double    diag_pivot_thresh = options->DiagPivotThresh;
+    double    drop_tol = options->ILU_DropTol; /* tau */
+    double    fill_ini = options->ILU_FillTol; /* tau^hat */
+    double    gamma = options->ILU_FillFactor;
+    int       drop_rule = options->ILU_DropRule;
+    milu_t    milu = options->ILU_MILU;
+    double    fill_tol;
+    int       pivrow;	/* pivotal row number in the original matrix A */
+    int       nseg1;	/* no of segments in U-column above panel row jcol */
+    int       nseg;	/* no of segments in each U-column */
+    register int jcol;
+    register int kcol;	/* end column of a relaxed snode */
+    register int icol;
+    register int i, k, jj, new_next, iinfo;
+    int       m, n, min_mn, jsupno, fsupc, nextlu, nextu;
+    int       w_def;	/* upper bound on panel width */
+    int       usepr, iperm_r_allocated = 0;
+    int       nnzL, nnzU;
+    int       *panel_histo = stat->panel_histo;
+    flops_t   *ops = stat->ops;
+
+    int       last_drop;/* the last column which the dropping rules applied */
+    int       quota;
+    int       nnzAj;	/* number of nonzeros in A(:,1:j) */
+    int       nnzLj, nnzUj;
+    double    tol_L = drop_tol, tol_U = drop_tol;
+    float zero = 0.0;
+
+    /* Executable */	   
+    iinfo    = 0;
+    m	     = A->nrow;
+    n	     = A->ncol;
+    min_mn   = SUPERLU_MIN(m, n);
+    Astore   = A->Store;
+    a	     = Astore->nzval;
+    asub     = Astore->rowind;
+    xa_begin = Astore->colbeg;
+    xa_end   = Astore->colend;
+
+    /* Allocate storage common to the factor routines */
+    *info = sLUMemInit(fact, work, lwork, m, n, Astore->nnz, panel_size,
+		       gamma, L, U, &Glu, &iwork, &swork);
+    if ( *info ) return;
+
+    xsup    = Glu.xsup;
+    supno   = Glu.supno;
+    xlsub   = Glu.xlsub;
+    xlusup  = Glu.xlusup;
+    xusub   = Glu.xusub;
+
+    SetIWork(m, n, panel_size, iwork, &segrep, &parent, &xplore,
+	     &repfnz, &panel_lsub, &marker_relax, &marker);
+    sSetRWork(m, panel_size, swork, &dense, &tempv);
+
+    usepr = (fact == SamePattern_SameRowPerm);
+    if ( usepr ) {
+	/* Compute the inverse of perm_r */
+	iperm_r = (int *) intMalloc(m);
+	for (k = 0; k < m; ++k) iperm_r[perm_r[k]] = k;
+	iperm_r_allocated = 1;
+    }
+
+    iperm_c = (int *) intMalloc(n);
+    for (k = 0; k < n; ++k) iperm_c[perm_c[k]] = k;
+    swap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) swap[k] = iperm_c[k];
+    iswap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) iswap[k] = perm_c[k];
+    amax = (float *) floatMalloc(panel_size);
+    if (drop_rule & DROP_SECONDARY)
+	iwork2 = (int *)intMalloc(n);
+    else
+	iwork2 = NULL;
+
+    nnzAj = 0;
+    nnzLj = 0;
+    nnzUj = 0;
+    last_drop = SUPERLU_MAX(min_mn - 2 * sp_ienv(7), (int)(min_mn * 0.95));
+
+    /* Identify relaxed snodes */
+    relax_end = (int *) intMalloc(n);
+    relax_fsupc = (int *) intMalloc(n);
+    if ( options->SymmetricMode == YES )
+	ilu_heap_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+    else
+	ilu_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+
+    ifill (perm_r, m, EMPTY);
+    ifill (marker, m * NO_MARKER, EMPTY);
+    supno[0] = -1;
+    xsup[0]  = xlsub[0] = xusub[0] = xlusup[0] = 0;
+    w_def    = panel_size;
+
+    /* Mark the rows used by relaxed supernodes */
+    ifill (marker_relax, m, EMPTY);
+    i = mark_relax(m, relax_end, relax_fsupc, xa_begin, xa_end,
+	         asub, marker_relax);
+#if ( PRNTlevel >= 1)
+    printf("%d relaxed supernodes.\n", i);
+#endif
+
+    /*
+     * Work on one "panel" at a time. A panel is one of the following:
+     *	   (a) a relaxed supernode at the bottom of the etree, or
+     *	   (b) panel_size contiguous columns, defined by the user
+     */
+    for (jcol = 0; jcol < min_mn; ) {
+
+	if ( relax_end[jcol] != EMPTY ) { /* start of a relaxed snode */
+	    kcol = relax_end[jcol];	  /* end of the relaxed snode */
+	    panel_histo[kcol-jcol+1]++;
+
+	    /* Drop small rows in the previous supernode. */
+	    if (jcol > 0 && jcol < last_drop) {
+		int first = xsup[supno[jcol - 1]];
+		int last = jcol - 1;
+		int quota;
+
+		/* Compute the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * (m - first) / m
+			    * (last - first + 1);
+		else if (drop_rule & DROP_COLUMN) {
+		    int i;
+		    quota = 0;
+		    for (i = first; i <= last; i++)
+			quota += xa_end[i] - xa_begin[i];
+		    quota = gamma * quota * (m - first) / m;
+		} else if (drop_rule & DROP_AREA)
+		    quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			    - nnzLj;
+		else
+		    quota = m * n;
+		fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) / min_mn);
+
+		/* Drop small rows */
+		i = ilu_sdrop_row(options, first, last, tol_L, quota, &nnzLj,
+				  &fill_tol, &Glu, tempv, iwork2, 0);
+		/* Reset the parameters */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			     < nnzLj)
+			tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+		    else
+			tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		}
+		if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		num_drop_L += i * (last - first + 1);
+#endif
+	    }
+
+	    /* --------------------------------------
+	     * Factorize the relaxed supernode(jcol:kcol)
+	     * -------------------------------------- */
+	    /* Determine the union of the row structure of the snode */
+	    if ( (*info = ilu_ssnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
+					 marker, &Glu)) != 0 )
+		return;
+
+	    nextu    = xusub[jcol];
+	    nextlu   = xlusup[jcol];
+	    jsupno   = supno[jcol];
+	    fsupc    = xsup[jsupno];
+	    new_next = nextlu + (xlsub[fsupc+1]-xlsub[fsupc])*(kcol-jcol+1);
+	    nzlumax = Glu.nzlumax;
+	    while ( new_next > nzlumax ) {
+		if ((*info = sLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, &Glu)))
+		    return;
+	    }
+
+	    for (icol = jcol; icol <= kcol; icol++) {
+		xusub[icol+1] = nextu;
+
+		amax[0] = 0.0;
+		/* Scatter into SPA dense[*] */
+		for (k = xa_begin[icol]; k < xa_end[icol]; k++) {
+		    register float tmp = fabs(a[k]);
+		    if (tmp > amax[0]) amax[0] = tmp;
+		    dense[asub[k]] = a[k];
+		}
+		nnzAj += xa_end[icol] - xa_begin[icol];
+		if (amax[0] == 0.0) {
+		    amax[0] = fill_ini;
+#if ( PRNTlevel >= 1)
+		    printf("Column %d is entirely zero!\n", icol);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Numeric update within the snode */
+		ssnode_bmod(icol, jsupno, fsupc, dense, tempv, &Glu, stat);
+
+		if (usepr) pivrow = iperm_r[icol];
+		fill_tol = pow(fill_ini, 1.0 - (double)icol / (double)min_mn);
+		if ( (*info = ilu_spivotL(icol, diag_pivot_thresh, &usepr,
+					  perm_r, iperm_c[icol], swap, iswap,
+					  marker_relax, &pivrow,
+                                          amax[0] * fill_tol, milu, zero,
+                                          &Glu, stat)) ) {
+		    iinfo++;
+		    marker[pivrow] = kcol;
+		}
+
+	    }
+
+	    jcol = kcol + 1;
+
+	} else { /* Work on one panel of panel_size columns */
+
+	    /* Adjust panel_size so that a panel won't overlap with the next
+	     * relaxed snode.
+	     */
+	    panel_size = w_def;
+	    for (k = jcol + 1; k < SUPERLU_MIN(jcol+panel_size, min_mn); k++)
+		if ( relax_end[k] != EMPTY ) {
+		    panel_size = k - jcol;
+		    break;
+		}
+	    if ( k == min_mn ) panel_size = min_mn - jcol;
+	    panel_histo[panel_size]++;
+
+	    /* symbolic factor on a panel of columns */
+	    ilu_spanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
+                          dense, amax, panel_lsub, segrep, repfnz,
+                          marker, parent, xplore, &Glu);
+
+	    /* numeric sup-panel updates in topological order */
+	    spanel_bmod(m, panel_size, jcol, nseg1, dense,
+			tempv, segrep, repfnz, &Glu, stat);
+
+	    /* Sparse LU within the panel, and below panel diagonal */
+	    for (jj = jcol; jj < jcol + panel_size; jj++) {
+
+		k = (jj - jcol) * m; /* column index for w-wide arrays */
+
+		nseg = nseg1;	/* Begin after all the panel segments */
+
+		nnzAj += xa_end[jj] - xa_begin[jj];
+
+		if ((*info = ilu_scolumn_dfs(m, jj, perm_r, &nseg,
+					     &panel_lsub[k], segrep, &repfnz[k],
+					     marker, parent, xplore, &Glu)))
+		    return;
+
+		/* Numeric updates */
+		if ((*info = scolumn_bmod(jj, (nseg - nseg1), &dense[k],
+					  tempv, &segrep[nseg1], &repfnz[k],
+					  jcol, &Glu, stat)) != 0) return;
+
+		/* Make a fill-in position if the column is entirely zero */
+		if (xlsub[jj + 1] == xlsub[jj]) {
+		    register int i, row;
+		    int nextl;
+		    int nzlmax = Glu.nzlmax;
+		    int *lsub = Glu.lsub;
+		    int *marker2 = marker + 2 * m;
+
+		    /* Allocate memory */
+		    nextl = xlsub[jj] + 1;
+		    if (nextl >= nzlmax) {
+			int error = sLUMemXpand(jj, nextl, LSUB, &nzlmax, &Glu);
+			if (error) { *info = error; return; }
+			lsub = Glu.lsub;
+		    }
+		    xlsub[jj + 1]++;
+		    assert(xlusup[jj]==xlusup[jj+1]);
+		    xlusup[jj + 1]++;
+		    Glu.lusup[xlusup[jj]] = zero;
+
+		    /* Choose a row index (pivrow) for fill-in */
+		    for (i = jj; i < n; i++)
+			if (marker_relax[swap[i]] <= jj) break;
+		    row = swap[i];
+		    marker2[row] = jj;
+		    lsub[xlsub[jj]] = row;
+#ifdef DEBUG
+		    printf("Fill col %d.\n", jj);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Computer the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * jj / m;
+		else if (drop_rule & DROP_COLUMN)
+		    quota = gamma * (xa_end[jj] - xa_begin[jj]) *
+			    (jj + 1) / m;
+		else if (drop_rule & DROP_AREA)
+		    quota = gamma * 0.9 * nnzAj * 0.5 - nnzUj;
+		else
+		    quota = m;
+
+		/* Copy the U-segments to ucol[*] and drop small entries */
+		if ((*info = ilu_scopy_to_ucol(jj, nseg, segrep, &repfnz[k],
+					       perm_r, &dense[k], drop_rule,
+					       milu, amax[jj - jcol] * tol_U,
+					       quota, &drop_sum, &nnzUj, &Glu,
+					       iwork2)) != 0)
+		    return;
+
+		/* Reset the dropping threshold if required */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * 0.9 * nnzAj * 0.5 < nnzLj)
+			tol_U = SUPERLU_MIN(1.0, tol_U * 2.0);
+		    else
+			tol_U = SUPERLU_MAX(drop_tol, tol_U * 0.5);
+		}
+
+                drop_sum *= MILU_ALPHA;
+		if (usepr) pivrow = iperm_r[jj];
+		fill_tol = pow(fill_ini, 1.0 - (double)jj / (double)min_mn);
+		if ( (*info = ilu_spivotL(jj, diag_pivot_thresh, &usepr, perm_r,
+					  iperm_c[jj], swap, iswap,
+					  marker_relax, &pivrow,
+					  amax[jj - jcol] * fill_tol, milu,
+					  drop_sum, &Glu, stat)) ) {
+		    iinfo++;
+		    marker[m + pivrow] = jj;
+		    marker[2 * m + pivrow] = jj;
+		}
+
+		/* Reset repfnz[] for this column */
+		resetrep_col (nseg, segrep, &repfnz[k]);
+
+		/* Start a new supernode, drop the previous one */
+		if (jj > 0 && supno[jj] > supno[jj - 1] && jj < last_drop) {
+		    int first = xsup[supno[jj - 1]];
+		    int last = jj - 1;
+		    int quota;
+
+		    /* Compute the quota */
+		    if (drop_rule & DROP_PROWS)
+			quota = gamma * Astore->nnz / m * (m - first) / m
+				* (last - first + 1);
+		    else if (drop_rule & DROP_COLUMN) {
+			int i;
+			quota = 0;
+			for (i = first; i <= last; i++)
+			    quota += xa_end[i] - xa_begin[i];
+			quota = gamma * quota * (m - first) / m;
+		    } else if (drop_rule & DROP_AREA)
+			quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0)
+				/ m) - nnzLj;
+		    else
+			quota = m * n;
+		    fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) /
+			    (double)min_mn);
+
+		    /* Drop small rows */
+		    i = ilu_sdrop_row(options, first, last, tol_L, quota,
+				      &nnzLj, &fill_tol, &Glu, tempv, iwork2,
+				      1);
+
+		    /* Reset the parameters */
+		    if (drop_rule & DROP_DYNAMIC) {
+			if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+				< nnzLj)
+			    tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+			else
+			    tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		    }
+		    if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		    num_drop_L += i * (last - first + 1);
+#endif
+		} /* if start a new supernode */
+
+	    } /* for */
+
+	    jcol += panel_size; /* Move to the next panel */
+
+	} /* else */
+
+    } /* for */
+
+    *info = iinfo;
+
+    if ( m > n ) {
+	k = 0;
+	for (i = 0; i < m; ++i)
+	    if ( perm_r[i] == EMPTY ) {
+		perm_r[i] = n + k;
+		++k;
+	    }
+    }
+
+    ilu_countnz(min_mn, &nnzL, &nnzU, &Glu);
+    fixupL(min_mn, perm_r, &Glu);
+
+    sLUWorkFree(iwork, swork, &Glu); /* Free work space and compress storage */
+
+    if ( fact == SamePattern_SameRowPerm ) {
+	/* L and U structures may have changed due to possibly different
+	   pivoting, even though the storage is available.
+	   There could also be memory expansions, so the array locations
+	   may have changed, */
+	((SCformat *)L->Store)->nnz = nnzL;
+	((SCformat *)L->Store)->nsuper = Glu.supno[n];
+	((SCformat *)L->Store)->nzval = Glu.lusup;
+	((SCformat *)L->Store)->nzval_colptr = Glu.xlusup;
+	((SCformat *)L->Store)->rowind = Glu.lsub;
+	((SCformat *)L->Store)->rowind_colptr = Glu.xlsub;
+	((NCformat *)U->Store)->nnz = nnzU;
+	((NCformat *)U->Store)->nzval = Glu.ucol;
+	((NCformat *)U->Store)->rowind = Glu.usub;
+	((NCformat *)U->Store)->colptr = Glu.xusub;
+    } else {
+	sCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL, Glu.lusup,
+				 Glu.xlusup, Glu.lsub, Glu.xlsub, Glu.supno,
+				 Glu.xsup, SLU_SC, SLU_S, SLU_TRLU);
+	sCreate_CompCol_Matrix(U, min_mn, min_mn, nnzU, Glu.ucol,
+			       Glu.usub, Glu.xusub, SLU_NC, SLU_S, SLU_TRU);
+    }
+
+    ops[FACT] += ops[TRSV] + ops[GEMV];
+    stat->expansions = --(Glu.num_expansions);
+
+    if ( iperm_r_allocated ) SUPERLU_FREE (iperm_r);
+    SUPERLU_FREE (iperm_c);
+    SUPERLU_FREE (relax_end);
+    SUPERLU_FREE (swap);
+    SUPERLU_FREE (iswap);
+    SUPERLU_FREE (relax_fsupc);
+    SUPERLU_FREE (amax);
+    if ( iwork2 ) SUPERLU_FREE (iwork2);
+
+}
diff --git a/SRC/sgsrfs.c b/SRC/sgsrfs.c
index 9d03b04..a93bc5b 100644
--- a/SRC/sgsrfs.c
+++ b/SRC/sgsrfs.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file sgsrfs.c
+ * \brief Improves computed solution to a system of inear equations
+ * 
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Modified from lapack routine SGERFS
+ * </pre>
  */
 /*
  * File name:	sgsrfs.c
@@ -13,13 +18,9 @@
 #include <math.h>
 #include "slu_sdefs.h"
 
-void
-sgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
-       int *perm_c, int *perm_r, char *equed, float *R, float *C,
-       SuperMatrix *B, SuperMatrix *X, float *ferr, float *berr,
-       SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  *   Purpose   
  *   =======   
  *
@@ -123,7 +124,15 @@ sgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
  *
  *    ITMAX is the maximum number of steps of iterative refinement.   
  *
- */  
+ * </pre>
+ */
+void
+sgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
+       int *perm_c, int *perm_r, char *equed, float *R, float *C,
+       SuperMatrix *B, SuperMatrix *X, float *ferr, float *berr,
+       SuperLUStat_t *stat, int *info)
+{
+
 
 #define ITMAX 5
     
@@ -148,7 +157,7 @@ sgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
     float   *work;
     float   *rwork;
     int      *iwork;
-    extern double slamch_(char *);
+
     extern int slacon_(int *, float *, float *, int *, float *, int *);
 #ifdef _CRAY
     extern int SCOPY(int *, float *, int *, float *, int *);
@@ -224,6 +233,8 @@ sgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
     nz     = A->ncol + 1;
     eps    = slamch_("Epsilon");
     safmin = slamch_("Safe minimum");
+    /* Set SAFE1 essentially to be the underflow threshold times the
+       number of additions in each row. */
     safe1  = nz * safmin;
     safe2  = safe1 / eps;
 
@@ -274,7 +285,7 @@ sgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
 	       where abs(Z) is the componentwise absolute value of the matrix
 	       or vector Z.  If the i-th component of the denominator is less
 	       than SAFE2, then SAFE1 is added to the i-th component of the   
-	       numerator and denominator before dividing. */
+	       numerator before dividing. */
 
 	    for (i = 0; i < A->nrow; ++i) rwork[i] = fabs( Bptr[i] );
 	    
@@ -297,11 +308,15 @@ sgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
 	    }
 	    s = 0.;
 	    for (i = 0; i < A->nrow; ++i) {
-		if (rwork[i] > safe2)
+		if (rwork[i] > safe2) {
 		    s = SUPERLU_MAX( s, fabs(work[i]) / rwork[i] );
-		else
-		    s = SUPERLU_MAX( s, (fabs(work[i]) + safe1) / 
-				(rwork[i] + safe1) );
+		} else if ( rwork[i] != 0.0 ) {
+                    /* Adding SAFE1 to the numerator guards against
+                       spuriously zero residuals (underflow). */
+		    s = SUPERLU_MAX( s, (safe1 + fabs(work[i])) / rwork[i] );
+                }
+                /* If rwork[i] is exactly 0.0, then we know the true 
+                   residual also must be exactly 0.0. */
 	    }
 	    berr[j] = s;
 
diff --git a/SRC/sgssv.c b/SRC/sgssv.c
index 2e622bf..c567daa 100644
--- a/SRC/sgssv.c
+++ b/SRC/sgssv.c
@@ -1,19 +1,19 @@
 
-/*
+/*! @file sgssv.c
+ * \brief Solves the system of linear equations A*X=B 
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
- *
+ * </pre>  
  */
 #include "slu_sdefs.h"
 
-void
-sgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
-      SuperMatrix *L, SuperMatrix *U, SuperMatrix *B,
-      SuperLUStat_t *stat, int *info )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -126,15 +126,21 @@ sgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *                so the solution could not be computed.
  *             > A->ncol: number of bytes allocated when memory allocation
  *                failure occurred, plus A->ncol.
- *   
+ * </pre>
  */
+
+void
+sgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+      SuperMatrix *L, SuperMatrix *U, SuperMatrix *B,
+      SuperLUStat_t *stat, int *info )
+{
+
     DNformat *Bstore;
     SuperMatrix *AA;/* A in SLU_NC format used by the factorization routine.*/
     SuperMatrix AC; /* Matrix postmultiplied by Pc */
     int      lwork = 0, *etree, i;
     
     /* Set default values for some parameters */
-    float   drop_tol = 0.;
     int      panel_size;     /* panel size */
     int      relax;          /* no of columns in a relaxed snodes */
     int      permc_spec;
@@ -200,8 +206,8 @@ sgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
 	  relax, panel_size, sp_ienv(3), sp_ienv(4));*/
     t = SuperLU_timer_(); 
     /* Compute the LU factorization of A. */
-    sgstrf(options, &AC, drop_tol, relax, panel_size,
-	   etree, NULL, lwork, perm_c, perm_r, L, U, stat, info);
+    sgstrf(options, &AC, relax, panel_size, etree,
+            NULL, lwork, perm_c, perm_r, L, U, stat, info);
     utime[FACT] = SuperLU_timer_() - t;
 
     t = SuperLU_timer_();
diff --git a/SRC/sgssvx.c b/SRC/sgssvx.c
index f611b9f..d33ca33 100644
--- a/SRC/sgssvx.c
+++ b/SRC/sgssvx.c
@@ -1,22 +1,19 @@
 
-/*
+/*! @file sgssvx.c
+ * \brief Solves the system of linear equations A*X=B or A'*X=B
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
- *
+ * </pre>
  */
 #include "slu_sdefs.h"
 
-void
-sgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
-       int *etree, char *equed, float *R, float *C,
-       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
-       SuperMatrix *B, SuperMatrix *X, float *recip_pivot_growth, 
-       float *rcond, float *ferr, float *berr, 
-       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -314,7 +311,7 @@ sgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *
  * stat   (output) SuperLUStat_t*
  *        Record the statistics on runtime and floating-point operation count.
- *        See util.h for the definition of 'SuperLUStat_t'.
+ *        See slu_util.h for the definition of 'SuperLUStat_t'.
  *
  * info    (output) int*
  *         = 0: successful exit   
@@ -332,9 +329,19 @@ sgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *                    accurate than the value of RCOND would suggest.   
  *              > A->ncol+1: number of bytes allocated when memory allocation
  *                    failure occurred, plus A->ncol.
- *
+ * </pre>
  */
 
+void
+sgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+       int *etree, char *equed, float *R, float *C,
+       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
+       SuperMatrix *B, SuperMatrix *X, float *recip_pivot_growth, 
+       float *rcond, float *ferr, float *berr, 
+       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info )
+{
+
+
     DNformat  *Bstore, *Xstore;
     float    *Bmat, *Xmat;
     int       ldb, ldx, nrhs;
@@ -346,13 +353,12 @@ sgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
     int       i, j, info1;
     float    amax, anorm, bignum, smlnum, colcnd, rowcnd, rcmax, rcmin;
     int       relax, panel_size;
-    float    diag_pivot_thresh, drop_tol;
+    float    diag_pivot_thresh;
     double    t0;      /* temporary time */
     double    *utime;
 
     /* External functions */
     extern float slangs(char *, SuperMatrix *);
-    extern double slamch_(char *);
 
     Bstore = B->Store;
     Xstore = X->Store;
@@ -383,10 +389,12 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 #endif
 
     /* Test the input parameters */
-    if (!nofact && options->Fact != DOFACT && options->Fact != SamePattern &&
+    if (options->Fact != DOFACT && options->Fact != SamePattern &&
 	options->Fact != SamePattern_SameRowPerm &&
-	!notran && options->Trans != TRANS && options->Trans != CONJ &&
-	!equil && options->Equil != NO)
+	options->Fact != FACTORED &&
+	options->Trans != NOTRANS && options->Trans != TRANS && 
+	options->Trans != CONJ &&
+	options->Equil != NO && options->Equil != YES)
 	*info = -1;
     else if ( A->nrow != A->ncol || A->nrow < 0 ||
 	      (A->Stype != SLU_NC && A->Stype != SLU_NR) ||
@@ -422,15 +430,21 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 	}
 	if (*info == 0) {
 	    if ( lwork < -1 ) *info = -12;
-	    else if ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+	    else if ( B->ncol < 0 ) *info = -13;
+	    else if ( B->ncol > 0 ) { /* no checking if B->ncol=0 */
+	         if ( Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
 		      B->Stype != SLU_DN || B->Dtype != SLU_S || 
 		      B->Mtype != SLU_GE )
 		*info = -13;
-	    else if ( X->ncol < 0 || Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
+            }
+	    if ( X->ncol < 0 ) *info = -14;
+            else if ( X->ncol > 0 ) { /* no checking if X->ncol=0 */
+                 if ( Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
 		      (B->ncol != 0 && B->ncol != X->ncol) ||
                       X->Stype != SLU_DN ||
 		      X->Dtype != SLU_S || X->Mtype != SLU_GE )
 		*info = -14;
+            }
 	}
     }
     if (*info != 0) {
@@ -443,7 +457,6 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
     panel_size = sp_ienv(1);
     relax      = sp_ienv(2);
     diag_pivot_thresh = options->DiagPivotThresh;
-    drop_tol   = 0.0;
 
     utime = stat->utime;
     
@@ -480,22 +493,6 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 	utime[EQUIL] = SuperLU_timer_() - t0;
     }
 
-    if ( nrhs > 0 ) {
-        /* Scale the right hand side if equilibration was performed. */
-        if ( notran ) {
-	    if ( rowequ ) {
-	        for (j = 0; j < nrhs; ++j)
-		    for (i = 0; i < A->nrow; ++i) {
-		        Bmat[i + j*ldb] *= R[i];
-	            }
-	    }
-        } else if ( colequ ) {
-	    for (j = 0; j < nrhs; ++j)
-	        for (i = 0; i < A->nrow; ++i) {
-	            Bmat[i + j*ldb] *= C[i];
-	        }
-        }
-    }
 
     if ( nofact ) {
 	
@@ -523,8 +520,8 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 	
 	/* Compute the LU factorization of A*Pc. */
 	t0 = SuperLU_timer_();
-	sgstrf(options, &AC, drop_tol, relax, panel_size,
-	       etree, work, lwork, perm_c, perm_r, L, U, stat, info);
+	sgstrf(options, &AC, relax, panel_size, etree,
+                work, lwork, perm_c, perm_r, L, U, stat, info);
 	utime[FACT] = SuperLU_timer_() - t0;
 	
 	if ( lwork == -1 ) {
@@ -561,6 +558,19 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
     }
     
     if ( nrhs > 0 ) {
+        /* Scale the right hand side if equilibration was performed. */
+        if ( notran ) {
+	    if ( rowequ ) {
+	        for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < A->nrow; ++i)
+		        Bmat[i + j*ldb] *= R[i];
+	    }
+        } else if ( colequ ) {
+	    for (j = 0; j < nrhs; ++j)
+	        for (i = 0; i < A->nrow; ++i)
+	            Bmat[i + j*ldb] *= C[i];
+        }
+
         /* Compute the solution matrix X. */
         for (j = 0; j < nrhs; j++)  /* Save a copy of the right hand sides */
             for (i = 0; i < B->nrow; i++)
@@ -585,15 +595,13 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
         if ( notran ) {
 	    if ( colequ ) {
 	        for (j = 0; j < nrhs; ++j)
-		    for (i = 0; i < A->nrow; ++i) {
+		    for (i = 0; i < A->nrow; ++i)
                         Xmat[i + j*ldx] *= C[i];
-	            }
 	    }
         } else if ( rowequ ) {
 	    for (j = 0; j < nrhs; ++j)
-	        for (i = 0; i < A->nrow; ++i) {
+	        for (i = 0; i < A->nrow; ++i)
 	            Xmat[i + j*ldx] *= R[i];
-                }
         }
     } /* end if nrhs > 0 */
 
diff --git a/SRC/sgstrf.c b/SRC/sgstrf.c
index b65f93d..109f0bb 100644
--- a/SRC/sgstrf.c
+++ b/SRC/sgstrf.c
@@ -1,33 +1,32 @@
 
-/*
+/*! @file sgstrf.c
+ * \brief Computes an LU factorization of a general sparse matrix
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
+ * 
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
  *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_sdefs.h"
 
-void
-sgstrf (superlu_options_t *options, SuperMatrix *A, float drop_tol,
-        int relax, int panel_size, int *etree, void *work, int lwork,
-        int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U,
-        SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -53,11 +52,6 @@ sgstrf (superlu_options_t *options, SuperMatrix *A, float drop_tol,
  *          (A->nrow, A->ncol). The type of A can be:
  *          Stype = SLU_NCP; Dtype = SLU_S; Mtype = SLU_GE.
  *
- * drop_tol (input) float (NOT IMPLEMENTED)
- *	    Drop tolerance parameter. At step j of the Gaussian elimination,
- *          if abs(A_ij)/(max_i abs(A_ij)) < drop_tol, drop entry A_ij.
- *          0 <= drop_tol <= 1. The default value of drop_tol is 0.
- *
  * relax    (input) int
  *          To control degree of relaxing supernodes. If the number
  *          of nodes (columns) in a subtree of the elimination tree is less
@@ -117,7 +111,7 @@ sgstrf (superlu_options_t *options, SuperMatrix *A, float drop_tol,
  *
  * stat     (output) SuperLUStat_t*
  *          Record the statistics on runtime and floating-point operation count.
- *          See util.h for the definition of 'SuperLUStat_t'.
+ *          See slu_util.h for the definition of 'SuperLUStat_t'.
  *
  * info     (output) int*
  *          = 0: successful exit
@@ -177,9 +171,16 @@ sgstrf (superlu_options_t *options, SuperMatrix *A, float drop_tol,
  *	    	   NOTE: there are W of them.
  *
  *   tempv[0:*]: real temporary used for dense numeric kernels;
- *	The size of this array is defined by NUM_TEMPV() in ssp_defs.h.
- *
+ *	The size of this array is defined by NUM_TEMPV() in slu_sdefs.h.
+ * </pre>
  */
+
+void
+sgstrf (superlu_options_t *options, SuperMatrix *A,
+        int relax, int panel_size, int *etree, void *work, int lwork,
+        int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U,
+        SuperLUStat_t *stat, int *info)
+{
     /* Local working arrays */
     NCPformat *Astore;
     int       *iperm_r = NULL; /* inverse of perm_r; used when 
@@ -199,7 +200,8 @@ sgstrf (superlu_options_t *options, SuperMatrix *A, float drop_tol,
     int       *xsup, *supno;
     int       *xlsub, *xlusup, *xusub;
     int       nzlumax;
-    static GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
+    float fill_ratio = sp_ienv(6);  /* estimated fill ratio */
+    static    GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
 
     /* Local scalars */
     fact_t    fact = options->Fact;
@@ -230,7 +232,7 @@ sgstrf (superlu_options_t *options, SuperMatrix *A, float drop_tol,
 
     /* Allocate storage common to the factor routines */
     *info = sLUMemInit(fact, work, lwork, m, n, Astore->nnz,
-                       panel_size, L, U, &Glu, &iwork, &swork);
+                       panel_size, fill_ratio, L, U, &Glu, &iwork, &swork);
     if ( *info ) return;
     
     xsup    = Glu.xsup;
@@ -425,6 +427,7 @@ sgstrf (superlu_options_t *options, SuperMatrix *A, float drop_tol,
     }
     
     ops[FACT] += ops[TRSV] + ops[GEMV];	
+    stat->expansions = --(Glu.num_expansions);
     
     if ( iperm_r_allocated ) SUPERLU_FREE (iperm_r);
     SUPERLU_FREE (iperm_c);
diff --git a/SRC/sgstrs.c b/SRC/sgstrs.c
index 367e088..13b9bb4 100644
--- a/SRC/sgstrs.c
+++ b/SRC/sgstrs.c
@@ -1,23 +1,25 @@
 
-/*
+/*! @file sgstrs.c
+ * \brief Solves a system using LU factorization
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
 
 #include "slu_sdefs.h"
 
@@ -29,13 +31,9 @@ void susolve(int, int, float*, float*);
 void slsolve(int, int, float*, float*);
 void smatvec(int, int, int, float*, float*, float*);
 
-
-void
-sgstrs (trans_t trans, SuperMatrix *L, SuperMatrix *U,
-        int *perm_c, int *perm_r, SuperMatrix *B,
-        SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -85,8 +83,15 @@ sgstrs (trans_t trans, SuperMatrix *L, SuperMatrix *U,
  * info    (output) int*
  * 	   = 0: successful exit
  *	   < 0: if info = -i, the i-th argument had an illegal value
- *
+ * </pre>
  */
+
+void
+sgstrs (trans_t trans, SuperMatrix *L, SuperMatrix *U,
+        int *perm_c, int *perm_r, SuperMatrix *B,
+        SuperLUStat_t *stat, int *info)
+{
+
 #ifdef _CRAY
     _fcd ftcs1, ftcs2, ftcs3, ftcs4;
 #endif
diff --git a/SRC/slacon.c b/SRC/slacon.c
index ccf4d3a..4e02fdc 100644
--- a/SRC/slacon.c
+++ b/SRC/slacon.c
@@ -1,65 +1,73 @@
 
-/*
+/*! @file slacon.c
+ * \brief Estimates the 1-norm
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 #include <math.h>
 #include "slu_Cnames.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   SLACON estimates the 1-norm of a square matrix A.   
+ *   Reverse communication is used for evaluating matrix-vector products. 
+ * 
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   N      (input) INT
+ *          The order of the matrix.  N >= 1.   
+ *
+ *   V      (workspace) FLOAT PRECISION array, dimension (N)   
+ *          On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
+ *          (W is not returned).   
+ *
+ *   X      (input/output) FLOAT PRECISION array, dimension (N)   
+ *          On an intermediate return, X should be overwritten by   
+ *                A * X,   if KASE=1,   
+ *                A' * X,  if KASE=2,
+ *         and SLACON must be re-called with all the other parameters   
+ *          unchanged.   
+ *
+ *   ISGN   (workspace) INT array, dimension (N)
+ *
+ *   EST    (output) FLOAT PRECISION   
+ *          An estimate (a lower bound) for norm(A).   
+ *
+ *   KASE   (input/output) INT
+ *          On the initial call to SLACON, KASE should be 0.   
+ *          On an intermediate return, KASE will be 1 or 2, indicating   
+ *          whether X should be overwritten by A * X  or A' * X.   
+ *          On the final return from SLACON, KASE will again be 0.   
+ *
+ *   Further Details   
+ *   ======= =======   
+ *
+ *   Contributed by Nick Higham, University of Manchester.   
+ *   Originally named CONEST, dated March 16, 1988.   
+ *
+ *   Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
+ *   a real or complex matrix, with applications to condition estimation", 
+ *   ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
+ *   ===================================================================== 
+ * </pre>
+ */
+
 int
 slacon_(int *n, float *v, float *x, int *isgn, float *est, int *kase)
 
 {
-/*
-    Purpose   
-    =======   
-
-    SLACON estimates the 1-norm of a square matrix A.   
-    Reverse communication is used for evaluating matrix-vector products. 
-  
-
-    Arguments   
-    =========   
-
-    N      (input) INT
-           The order of the matrix.  N >= 1.   
-
-    V      (workspace) FLOAT PRECISION array, dimension (N)   
-           On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
-           (W is not returned).   
-
-    X      (input/output) FLOAT PRECISION array, dimension (N)   
-           On an intermediate return, X should be overwritten by   
-                 A * X,   if KASE=1,   
-                 A' * X,  if KASE=2,
-           and SLACON must be re-called with all the other parameters   
-           unchanged.   
-
-    ISGN   (workspace) INT array, dimension (N)
-
-    EST    (output) FLOAT PRECISION   
-           An estimate (a lower bound) for norm(A).   
-
-    KASE   (input/output) INT
-           On the initial call to SLACON, KASE should be 0.   
-           On an intermediate return, KASE will be 1 or 2, indicating   
-           whether X should be overwritten by A * X  or A' * X.   
-           On the final return from SLACON, KASE will again be 0.   
-
-    Further Details   
-    ======= =======   
-
-    Contributed by Nick Higham, University of Manchester.   
-    Originally named CONEST, dated March 16, 1988.   
 
-    Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
-    a real or complex matrix, with applications to condition estimation", 
-    ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
-    ===================================================================== 
-*/
 
     /* Table of constant values */
     int c__1 = 1;
diff --git a/SRC/slacon.c b/SRC/slacon.c.bak
similarity index 67%
copy from SRC/slacon.c
copy to SRC/slacon.c.bak
index ccf4d3a..4e02fdc 100644
--- a/SRC/slacon.c
+++ b/SRC/slacon.c.bak
@@ -1,65 +1,73 @@
 
-/*
+/*! @file slacon.c
+ * \brief Estimates the 1-norm
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 #include <math.h>
 #include "slu_Cnames.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   SLACON estimates the 1-norm of a square matrix A.   
+ *   Reverse communication is used for evaluating matrix-vector products. 
+ * 
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   N      (input) INT
+ *          The order of the matrix.  N >= 1.   
+ *
+ *   V      (workspace) FLOAT PRECISION array, dimension (N)   
+ *          On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
+ *          (W is not returned).   
+ *
+ *   X      (input/output) FLOAT PRECISION array, dimension (N)   
+ *          On an intermediate return, X should be overwritten by   
+ *                A * X,   if KASE=1,   
+ *                A' * X,  if KASE=2,
+ *         and SLACON must be re-called with all the other parameters   
+ *          unchanged.   
+ *
+ *   ISGN   (workspace) INT array, dimension (N)
+ *
+ *   EST    (output) FLOAT PRECISION   
+ *          An estimate (a lower bound) for norm(A).   
+ *
+ *   KASE   (input/output) INT
+ *          On the initial call to SLACON, KASE should be 0.   
+ *          On an intermediate return, KASE will be 1 or 2, indicating   
+ *          whether X should be overwritten by A * X  or A' * X.   
+ *          On the final return from SLACON, KASE will again be 0.   
+ *
+ *   Further Details   
+ *   ======= =======   
+ *
+ *   Contributed by Nick Higham, University of Manchester.   
+ *   Originally named CONEST, dated March 16, 1988.   
+ *
+ *   Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
+ *   a real or complex matrix, with applications to condition estimation", 
+ *   ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
+ *   ===================================================================== 
+ * </pre>
+ */
+
 int
 slacon_(int *n, float *v, float *x, int *isgn, float *est, int *kase)
 
 {
-/*
-    Purpose   
-    =======   
-
-    SLACON estimates the 1-norm of a square matrix A.   
-    Reverse communication is used for evaluating matrix-vector products. 
-  
-
-    Arguments   
-    =========   
-
-    N      (input) INT
-           The order of the matrix.  N >= 1.   
-
-    V      (workspace) FLOAT PRECISION array, dimension (N)   
-           On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
-           (W is not returned).   
-
-    X      (input/output) FLOAT PRECISION array, dimension (N)   
-           On an intermediate return, X should be overwritten by   
-                 A * X,   if KASE=1,   
-                 A' * X,  if KASE=2,
-           and SLACON must be re-called with all the other parameters   
-           unchanged.   
-
-    ISGN   (workspace) INT array, dimension (N)
-
-    EST    (output) FLOAT PRECISION   
-           An estimate (a lower bound) for norm(A).   
-
-    KASE   (input/output) INT
-           On the initial call to SLACON, KASE should be 0.   
-           On an intermediate return, KASE will be 1 or 2, indicating   
-           whether X should be overwritten by A * X  or A' * X.   
-           On the final return from SLACON, KASE will again be 0.   
-
-    Further Details   
-    ======= =======   
-
-    Contributed by Nick Higham, University of Manchester.   
-    Originally named CONEST, dated March 16, 1988.   
 
-    Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
-    a real or complex matrix, with applications to condition estimation", 
-    ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
-    ===================================================================== 
-*/
 
     /* Table of constant values */
     int c__1 = 1;
diff --git a/SRC/slamch.c b/SRC/slamch.c
index 2581c0d..ec3cd61 100644
--- a/SRC/slamch.c
+++ b/SRC/slamch.c
@@ -1,3 +1,13 @@
+/*! @file slamch.c
+ * \brief Determines single precision machine parameters and other service routines
+ *
+ * <pre>
+ *   -- LAPACK auxiliary routine (version 2.0) --   
+ *      Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
+ *      Courant Institute, Argonne National Lab, and Rice University   
+ *      October 31, 1992   
+ * </pre>
+ */
 #include <stdio.h>
 #include "slu_Cnames.h"
 
@@ -8,15 +18,10 @@
 #define abs(x) ((x) >= 0 ? (x) : -(x))
 #define dabs(x) (double)abs(x)
 
-double slamch_(char *cmach)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       October 31, 1992   
-
+/*! \brief
 
-    Purpose   
+<pre>
+ Purpose   
     =======   
 
     SLAMCH determines single precision machine parameters.   
@@ -51,7 +56,10 @@ double slamch_(char *cmach)
             rmax  = overflow threshold  - (base**emax)*(1-eps)   
 
    ===================================================================== 
+</pre>
 */
+float slamch_(char *cmach)
+{
 /* >>Start of File<<   
        Initialized data */
     static int first = TRUE_;
@@ -135,16 +143,11 @@ nding
 } /* slamch_ */
 
 
-/* Subroutine */ int slamc1_(int *beta, int *t, int *rnd, int 
-	*ieee1)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       October 31, 1992   
-
+/* Subroutine */ 
+/*! \brief
 
-    Purpose   
+<pre>
+ Purpose   
     =======   
 
     SLAMC1 determines the machine parameters given by BETA, T, RND, and   
@@ -185,7 +188,12 @@ nding
           Comms. of the ACM, 17, 276-277.   
 
    ===================================================================== 
+</pre>
 */
+
+int slamc1_(int *beta, int *t, int *rnd, int 
+	*ieee1)
+{
     /* Initialized data */
     static int first = TRUE_;
     /* System generated locals */
@@ -347,15 +355,11 @@ L30:
 } /* slamc1_ */
 
 
-/* Subroutine */ int slamc2_(int *beta, int *t, int *rnd, float *
-	eps, int *emin, float *rmin, int *emax, float *rmax)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       October 31, 1992   
+/* Subroutine */ 
 
+/*! \brief
 
+<pre>
     Purpose   
     =======   
 
@@ -411,7 +415,11 @@ L30:
     W. Kahan of the University of California at Berkeley.   
 
    ===================================================================== 
+</pre>
 */
+int slamc2_(int *beta, int *t, int *rnd, float *
+	eps, int *emin, float *rmin, int *emax, float *rmax)
+{
     /* Table of constant values */
     static int c__1 = 1;
     
@@ -649,15 +657,9 @@ ing
 
 } /* slamc2_ */
 
+/*! \brief
 
-double slamc3_(float *a, float *b)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       October 31, 1992   
-
-
+<pre>
     Purpose   
     =======   
 
@@ -674,7 +676,12 @@ double slamc3_(float *a, float *b)
             The values A and B.   
 
    ===================================================================== 
+</pre>
 */
+
+double slamc3_(float *a, float *b)
+{
+
 /* >>Start of File<<   
        System generated locals */
     float ret_val;
@@ -690,14 +697,11 @@ double slamc3_(float *a, float *b)
 } /* slamc3_ */
 
 
-/* Subroutine */ int slamc4_(int *emin, float *start, int *base)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       October 31, 1992   
+/* Subroutine */ 
 
+/*! \brief
 
+<pre>
     Purpose   
     =======   
 
@@ -719,7 +723,11 @@ double slamc3_(float *a, float *b)
             The base of the machine.   
 
    ===================================================================== 
+</pre>
 */
+
+int slamc4_(int *emin, float *start, int *base)
+{
     /* System generated locals */
     int i__1;
     float r__1;
@@ -780,15 +788,10 @@ L10:
 } /* slamc4_ */
 
 
-/* Subroutine */ int slamc5_(int *beta, int *p, int *emin, 
-	int *ieee, int *emax, float *rmax)
-{
-/*  -- LAPACK auxiliary routine (version 2.0) --   
-       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
-       Courant Institute, Argonne National Lab, and Rice University   
-       October 31, 1992   
-
+/* Subroutine */ 
+/*! \brief
 
+<pre>
     Purpose   
     =======   
 
@@ -830,7 +833,13 @@ L10:
        First compute LEXP and UEXP, two powers of 2 that bound   
        abs(EMIN). We then assume that EMAX + abs(EMIN) will sum   
        approximately to the bound that is closest to abs(EMIN).   
-       (EMAX is the exponent of the required number RMAX). */
+       (EMAX is the exponent of the required number RMAX). 
+</pre>
+*/
+
+int slamc5_(int *beta, int *p, int *emin, 
+	int *ieee, int *emax, float *rmax)
+{
     /* Table of constant values */
     static float c_b5 = 0.f;
     
diff --git a/SRC/slangs.c b/SRC/slangs.c
index a680db4..d765f2d 100644
--- a/SRC/slangs.c
+++ b/SRC/slangs.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file slangs.c
+ * \brief Returns the value of the one norm
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Modified from lapack routine SLANGE 
+ * </pre>
  */
 /*
  * File name:	slangs.c
@@ -13,44 +18,48 @@
 #include <math.h>
 #include "slu_sdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose   
+ *   =======   
+ *
+ *   SLANGS returns the value of the one norm, or the Frobenius norm, or 
+ *   the infinity norm, or the element of largest absolute value of a 
+ *   real matrix A.   
+ *
+ *   Description   
+ *   ===========   
+ *
+ *   SLANGE returns the value   
+ *
+ *      SLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm'   
+ *               (   
+ *               ( norm1(A),         NORM = '1', 'O' or 'o'   
+ *               (   
+ *               ( normI(A),         NORM = 'I' or 'i'   
+ *               (   
+ *               ( normF(A),         NORM = 'F', 'f', 'E' or 'e'   
+ *
+ *   where  norm1  denotes the  one norm of a matrix (maximum column sum), 
+ *   normI  denotes the  infinity norm  of a matrix  (maximum row sum) and 
+ *   normF  denotes the  Frobenius norm of a matrix (square root of sum of 
+ *   squares).  Note that  max(abs(A(i,j)))  is not a  matrix norm.   
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   NORM    (input) CHARACTER*1   
+ *           Specifies the value to be returned in SLANGE as described above.   
+ *   A       (input) SuperMatrix*
+ *           The M by N sparse matrix A. 
+ *
+ *  =====================================================================
+ * </pre>
+ */
+
 float slangs(char *norm, SuperMatrix *A)
 {
-/* 
-    Purpose   
-    =======   
-
-    SLANGS returns the value of the one norm, or the Frobenius norm, or 
-    the infinity norm, or the element of largest absolute value of a 
-    real matrix A.   
-
-    Description   
-    ===========   
-
-    SLANGE returns the value   
-
-       SLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm'   
-                (   
-                ( norm1(A),         NORM = '1', 'O' or 'o'   
-                (   
-                ( normI(A),         NORM = 'I' or 'i'   
-                (   
-                ( normF(A),         NORM = 'F', 'f', 'E' or 'e'   
-
-    where  norm1  denotes the  one norm of a matrix (maximum column sum), 
-    normI  denotes the  infinity norm  of a matrix  (maximum row sum) and 
-    normF  denotes the  Frobenius norm of a matrix (square root of sum of 
-    squares).  Note that  max(abs(A(i,j)))  is not a  matrix norm.   
-
-    Arguments   
-    =========   
-
-    NORM    (input) CHARACTER*1   
-            Specifies the value to be returned in SLANGE as described above.   
-    A       (input) SuperMatrix*
-            The M by N sparse matrix A. 
-
-   ===================================================================== 
-*/
     
     /* Local variables */
     NCformat *Astore;
diff --git a/SRC/slaqgs.c b/SRC/slaqgs.c
index f65931e..dcadea0 100644
--- a/SRC/slaqgs.c
+++ b/SRC/slaqgs.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file slaqgs.c
+ * \brief Equlibrates a general sprase matrix
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * 
+ * Modified from LAPACK routine SLAQGE
+ * </pre>
  */
 /*
  * File name:	slaqgs.c
@@ -13,66 +18,71 @@
 #include <math.h>
 #include "slu_sdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   SLAQGS equilibrates a general sparse M by N matrix A using the row and   
+ *   scaling factors in the vectors R and C.   
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   A       (input/output) SuperMatrix*
+ *           On exit, the equilibrated matrix.  See EQUED for the form of 
+ *           the equilibrated matrix. The type of A can be:
+ *	    Stype = NC; Dtype = SLU_S; Mtype = GE.
+ *	    
+ *   R       (input) float*, dimension (A->nrow)
+ *           The row scale factors for A.
+ *	    
+ *   C       (input) float*, dimension (A->ncol)
+ *           The column scale factors for A.
+ *	    
+ *   ROWCND  (input) float
+ *           Ratio of the smallest R(i) to the largest R(i).
+ *	    
+ *   COLCND  (input) float
+ *           Ratio of the smallest C(i) to the largest C(i).
+ *	    
+ *   AMAX    (input) float
+ *           Absolute value of largest matrix entry.
+ *	    
+ *   EQUED   (output) char*
+ *           Specifies the form of equilibration that was done.   
+ *           = 'N':  No equilibration   
+ *           = 'R':  Row equilibration, i.e., A has been premultiplied by  
+ *                   diag(R).   
+ *           = 'C':  Column equilibration, i.e., A has been postmultiplied  
+ *                   by diag(C).   
+ *           = 'B':  Both row and column equilibration, i.e., A has been
+ *                   replaced by diag(R) * A * diag(C).   
+ *
+ *   Internal Parameters   
+ *   ===================   
+ *
+ *   THRESH is a threshold value used to decide if row or column scaling   
+ *   should be done based on the ratio of the row or column scaling   
+ *   factors.  If ROWCND < THRESH, row scaling is done, and if   
+ *   COLCND < THRESH, column scaling is done.   
+ *
+ *   LARGE and SMALL are threshold values used to decide if row scaling   
+ *   should be done based on the absolute size of the largest matrix   
+ *   element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.   
+ *
+ *   ===================================================================== 
+ * </pre>
+ */
+
 void
 slaqgs(SuperMatrix *A, float *r, float *c, 
 	float rowcnd, float colcnd, float amax, char *equed)
 {
-/*
-    Purpose   
-    =======   
-
-    SLAQGS equilibrates a general sparse M by N matrix A using the row and   
-    scaling factors in the vectors R and C.   
-
-    See supermatrix.h for the definition of 'SuperMatrix' structure.
-
-    Arguments   
-    =========   
-
-    A       (input/output) SuperMatrix*
-            On exit, the equilibrated matrix.  See EQUED for the form of 
-            the equilibrated matrix. The type of A can be:
-	    Stype = NC; Dtype = SLU_S; Mtype = GE.
-	    
-    R       (input) float*, dimension (A->nrow)
-            The row scale factors for A.
-	    
-    C       (input) float*, dimension (A->ncol)
-            The column scale factors for A.
-	    
-    ROWCND  (input) float
-            Ratio of the smallest R(i) to the largest R(i).
-	    
-    COLCND  (input) float
-            Ratio of the smallest C(i) to the largest C(i).
-	    
-    AMAX    (input) float
-            Absolute value of largest matrix entry.
-	    
-    EQUED   (output) char*
-            Specifies the form of equilibration that was done.   
-            = 'N':  No equilibration   
-            = 'R':  Row equilibration, i.e., A has been premultiplied by  
-                    diag(R).   
-            = 'C':  Column equilibration, i.e., A has been postmultiplied  
-                    by diag(C).   
-            = 'B':  Both row and column equilibration, i.e., A has been
-                    replaced by diag(R) * A * diag(C).   
-
-    Internal Parameters   
-    ===================   
-
-    THRESH is a threshold value used to decide if row or column scaling   
-    should be done based on the ratio of the row or column scaling   
-    factors.  If ROWCND < THRESH, row scaling is done, and if   
-    COLCND < THRESH, column scaling is done.   
-
-    LARGE and SMALL are threshold values used to decide if row scaling   
-    should be done based on the absolute size of the largest matrix   
-    element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.   
 
-    ===================================================================== 
-*/
 
 #define THRESH    (0.1)
     
@@ -81,7 +91,6 @@ slaqgs(SuperMatrix *A, float *r, float *c,
     float   *Aval;
     int i, j, irow;
     float large, small, cj;
-    extern double slamch_(char *);
 
 
     /* Quick return if possible */
diff --git a/SRC/sldperm.c b/SRC/sldperm.c
new file mode 100644
index 0000000..acb82bc
--- /dev/null
+++ b/SRC/sldperm.c
@@ -0,0 +1,168 @@
+
+/*! @file 
+ * \brief Finds a row permutation so that the matrix has large entries on the diagonal
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_sdefs.h"
+
+extern int_t mc64id_(int_t*);
+extern int_t mc64ad_(int_t*, int_t*, int_t*, int_t [], int_t [], double [],
+		    int_t*, int_t [], int_t*, int_t[], int_t*, double [],
+		    int_t [], int_t []);
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ *   SLDPERM finds a row permutation so that the matrix has large
+ *   entries on the diagonal.
+ *
+ * Arguments
+ * =========
+ *
+ * job    (input) int
+ *        Control the action. Possible values for JOB are:
+ *        = 1 : Compute a row permutation of the matrix so that the
+ *              permuted matrix has as many entries on its diagonal as
+ *              possible. The values on the diagonal are of arbitrary size.
+ *              HSL subroutine MC21A/AD is used for this.
+ *        = 2 : Compute a row permutation of the matrix so that the smallest 
+ *              value on the diagonal of the permuted matrix is maximized.
+ *        = 3 : Compute a row permutation of the matrix so that the smallest
+ *              value on the diagonal of the permuted matrix is maximized.
+ *              The algorithm differs from the one used for JOB = 2 and may
+ *              have quite a different performance.
+ *        = 4 : Compute a row permutation of the matrix so that the sum
+ *              of the diagonal entries of the permuted matrix is maximized.
+ *        = 5 : Compute a row permutation of the matrix so that the product
+ *              of the diagonal entries of the permuted matrix is maximized
+ *              and vectors to scale the matrix so that the nonzero diagonal 
+ *              entries of the permuted matrix are one in absolute value and 
+ *              all the off-diagonal entries are less than or equal to one in 
+ *              absolute value.
+ *        Restriction: 1 <= JOB <= 5.
+ *
+ * n      (input) int
+ *        The order of the matrix.
+ *
+ * nnz    (input) int
+ *        The number of nonzeros in the matrix.
+ *
+ * adjncy (input) int*, of size nnz
+ *        The adjacency structure of the matrix, which contains the row
+ *        indices of the nonzeros.
+ *
+ * colptr (input) int*, of size n+1
+ *        The pointers to the beginning of each column in ADJNCY.
+ *
+ * nzval  (input) float*, of size nnz
+ *        The nonzero values of the matrix. nzval[k] is the value of
+ *        the entry corresponding to adjncy[k].
+ *        It is not used if job = 1.
+ *
+ * perm   (output) int*, of size n
+ *        The permutation vector. perm[i] = j means row i in the
+ *        original matrix is in row j of the permuted matrix.
+ *
+ * u      (output) double*, of size n
+ *        If job = 5, the natural logarithms of the row scaling factors. 
+ *
+ * v      (output) double*, of size n
+ *        If job = 5, the natural logarithms of the column scaling factors. 
+ *        The scaled matrix B has entries b_ij = a_ij * exp(u_i + v_j).
+ * </pre>
+ */
+
+int
+sldperm(int_t job, int_t n, int_t nnz, int_t colptr[], int_t adjncy[],
+	float nzval[], int_t *perm, float u[], float v[])
+{ 
+    int_t i, liw, ldw, num;
+    int_t *iw, icntl[10], info[10];
+    double *dw;
+    double *nzval_d = (double *) SUPERLU_MALLOC(nnz * sizeof(double));
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Enter sldperm()");
+#endif
+    liw = 5*n;
+    if ( job == 3 ) liw = 10*n + nnz;
+    if ( !(iw = intMalloc(liw)) ) ABORT("Malloc fails for iw[]");
+    ldw = 3*n + nnz;
+    if ( !(dw = (double*) SUPERLU_MALLOC(ldw * sizeof(double))) )
+          ABORT("Malloc fails for dw[]");
+	    
+    /* Increment one to get 1-based indexing. */
+    for (i = 0; i <= n; ++i) ++colptr[i];
+    for (i = 0; i < nnz; ++i) ++adjncy[i];
+#if ( DEBUGlevel>=2 )
+    printf("LDPERM(): n %d, nnz %d\n", n, nnz);
+    slu_PrintInt10("colptr", n+1, colptr);
+    slu_PrintInt10("adjncy", nnz, adjncy);
+#endif
+	
+    /* 
+     * NOTE:
+     * =====
+     *
+     * MC64AD assumes that column permutation vector is defined as:
+     * perm(i) = j means column i of permuted A is in column j of original A.
+     *
+     * Since a symmetric permutation preserves the diagonal entries. Then
+     * by the following relation:
+     *     P'(A*P')P = P'A
+     * we can apply inverse(perm) to rows of A to get large diagonal entries.
+     * But, since 'perm' defined in MC64AD happens to be the reverse of
+     * SuperLU's definition of permutation vector, therefore, it is already
+     * an inverse for our purpose. We will thus use it directly.
+     *
+     */
+    mc64id_(icntl);
+#if 0
+    /* Suppress error and warning messages. */
+    icntl[0] = -1;
+    icntl[1] = -1;
+#endif
+
+    for (i = 0; i < nnz; ++i) nzval_d[i] = nzval[i];
+    mc64ad_(&job, &n, &nnz, colptr, adjncy, nzval_d, &num, perm,
+	    &liw, iw, &ldw, dw, icntl, info);
+
+#if ( DEBUGlevel>=2 )
+    slu_PrintInt10("perm", n, perm);
+    printf(".. After MC64AD info %d\tsize of matching %d\n", info[0], num);
+#endif
+    if ( info[0] == 1 ) { /* Structurally singular */
+        printf(".. The last %d permutations:\n", n-num);
+	slu_PrintInt10("perm", n-num, &perm[num]);
+    }
+
+    /* Restore to 0-based indexing. */
+    for (i = 0; i <= n; ++i) --colptr[i];
+    for (i = 0; i < nnz; ++i) --adjncy[i];
+    for (i = 0; i < n; ++i) --perm[i];
+
+    if ( job == 5 )
+        for (i = 0; i < n; ++i) {
+	    u[i] = dw[i];
+	    v[i] = dw[n+i];
+	}
+
+    SUPERLU_FREE(iw);
+    SUPERLU_FREE(dw);
+    SUPERLU_FREE(nzval_d);
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Exit sldperm()");
+#endif
+
+    return info[0];
+}
diff --git a/SRC/slu_Cnames.h b/SRC/slu_Cnames.h
index 8b8df4e..7bcd1bc 100644
--- a/SRC/slu_Cnames.h
+++ b/SRC/slu_Cnames.h
@@ -1,14 +1,12 @@
-/*
+/*! @file slu_Cnames.h
+ * \brief Macros defining how C routines will be called
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 1, 1997
  *
- */
-#ifndef __SUPERLU_CNAMES /* allow multiple inclusions */
-#define __SUPERLU_CNAMES
-
-/*
  * These macros define how C routines will be called.  ADD_ assumes that
  * they will be called by fortran, which expects C routines to have an
  * underscore postfixed to the name (Suns, and the Intel expect this).
@@ -16,33 +14,42 @@
  * the name called by fortran to be identical to that compiled by the C
  * (RS6K's do this).  UPCASE says it expects C routines called by fortran
  * to be in all upcase (CRAY wants this). 
+ * </pre>
  */
+#ifndef __SUPERLU_CNAMES /* allow multiple inclusions */
+#define __SUPERLU_CNAMES
+
 
 #define ADD_       0
 #define ADD__      1
 #define NOCHANGE   2
 #define UPCASE     3
-#define C_CALL     4
+#define OLD_CRAY   4
+#define C_CALL     5
 
 #ifdef UpCase
-#define F77_CALL_C UPCASE
+#define F77_CALL_C  UPCASE
 #endif
 
 #ifdef NoChange
-#define F77_CALL_C NOCHANGE
+#define F77_CALL_C  NOCHANGE
 #endif
 
 #ifdef Add_
-#define F77_CALL_C ADD_
+#define F77_CALL_C  ADD_
 #endif
 
 #ifdef Add__
-#define F77_CALL_C ADD__
+#define F77_CALL_C  ADD__
+#endif
+
+#ifdef _CRAY
+#define F77_CALL_C  OLD_CRAY
 #endif
 
 /* Default */
 #ifndef F77_CALL_C
-#define F77_CALL_C ADD_
+#define F77_CALL_C  ADD_
 #endif
 
 
@@ -68,6 +75,8 @@
  *           call dgemm(...)           void dgemm__(...)
  */
 /* BLAS */
+#define sswap_    sswap__
+#define saxpy_    saxpy__
 #define sasum_    sasum__
 #define isamax_   isamax__
 #define scopy_    scopy__
@@ -84,6 +93,8 @@
 #define sgemm_    sgemm__
 #define strsm_    strsm__
 
+#define dswap_    dswap__
+#define daxpy_    daxpy__
 #define dasum_    dasum__
 #define idamax_   idamax__
 #define dcopy_    dcopy__
@@ -92,7 +103,6 @@
 #define dnrm2_    dnrm2__
 #define dsymv_    dsymv__
 #define ddot_     ddot__
-#define daxpy_    daxpy__
 #define dsyr2_    dsyr2__
 #define drot_     drot__
 #define dgemv_    dgemv__
@@ -100,6 +110,8 @@
 #define dgemm_    dgemm__
 #define dtrsm_    dtrsm__
 
+#define cswap_    cswap__
+#define caxpy_    caxpy__
 #define scasum_   scasum__
 #define icamax_   icamax__
 #define ccopy_    ccopy__
@@ -114,6 +126,8 @@
 #define chemv_    chemv__
 #define cher2_    cher2__
 
+#define zswap_    zswap__
+#define zaxpy_    zaxpy__
 #define dzasum_   dzasum__
 #define izamax_   izamax__
 #define zcopy_    zcopy__
@@ -159,6 +173,8 @@
  *           call dgemm(...)           void DGEMM(...)
  */
 /* BLAS */
+#define sswap_    SSWAP
+#define saxpy_    SAXPY
 #define sasum_    SASUM
 #define isamax_   ISAMAX
 #define scopy_    SCOPY
@@ -175,6 +191,104 @@
 #define sgemm_    SGEMM
 #define strsm_    STRSM
 
+#define dswap_    DSWAP
+#define daxpy_    DAXPY
+#define dasum_    DASUM
+#define idamax_   IDAMAX
+#define dcopy_    DCOPY
+#define dscal_    DSCAL
+#define dger_     DGER
+#define dnrm2_    DNRM2
+#define dsymv_    DSYMV
+#define ddot_     DDOT
+#define dsyr2_    DSYR2
+#define drot_     DROT
+#define dgemv_    DGEMV
+#define dtrsv_    DTRSV
+#define dgemm_    DGEMM
+#define dtrsm_    DTRSM
+
+#define cswap_    CSWAP
+#define caxpy_    CAXPY
+#define scasum_   SCASUM
+#define icamax_   ICAMAX
+#define ccopy_    CCOPY
+#define cscal_    CSCAL
+#define scnrm2_   SCNRM2
+#define cgemv_    CGEMV
+#define ctrsv_    CTRSV
+#define cgemm_    CGEMM
+#define ctrsm_    CTRSM
+#define cgerc_    CGERC
+#define chemv_    CHEMV
+#define cher2_    CHER2
+
+#define zswap_    ZSWAP
+#define zaxpy_    ZAXPY
+#define dzasum_   DZASUM
+#define izamax_   IZAMAX
+#define zcopy_    ZCOPY
+#define zscal_    ZSCAL
+#define dznrm2_   DZNRM2
+#define zgemv_    ZGEMV
+#define ztrsv_    ZTRSV
+#define zgemm_    ZGEMM
+#define ztrsm_    ZTRSM
+#define zgerc_    ZGERC
+#define zhemv_    ZHEMV
+#define zher2_    ZHER2
+
+/* LAPACK */
+#define dlamch_   DLAMCH
+#define slamch_   SLAMCH
+#define xerbla_   XERBLA
+#define lsame_    LSAME
+#define dlacon_   DLACON
+#define slacon_   SLACON
+#define icmax1_   ICMAX1
+#define scsum1_   SCSUM1
+#define clacon_   CLACON
+#define dzsum1_   DZSUM1
+#define izmax1_   IZMAX1
+#define zlacon_   ZLACON
+
+/* Fortran interface */
+#define c_bridge_dgssv_ C_BRIDGE_DGSSV
+#define c_fortran_sgssv_ C_FORTRAN_SGSSV
+#define c_fortran_dgssv_ C_FORTRAN_DGSSV
+#define c_fortran_cgssv_ C_FORTRAN_CGSSV
+#define c_fortran_zgssv_ C_FORTRAN_ZGSSV
+#endif
+
+
+#if (F77_CALL_C == OLD_CRAY)
+/*
+ * These defines set up the naming scheme required to have a fortran 77
+ * routine call a C routine 
+ * following Fortran to C interface:
+ *           FORTRAN CALL               C DECLARATION
+ *           call dgemm(...)           void SGEMM(...)
+ */
+/* BLAS */
+#define sswap_    SSWAP
+#define saxpy_    SAXPY
+#define sasum_    SASUM
+#define isamax_   ISAMAX
+#define scopy_    SCOPY
+#define sscal_    SSCAL
+#define sger_     SGER
+#define snrm2_    SNRM2
+#define ssymv_    SSYMV
+#define sdot_     SDOT
+#define ssyr2_    SSYR2
+#define srot_     SROT
+#define sgemv_    SGEMV
+#define strsv_    STRSV
+#define sgemm_    SGEMM
+#define strsm_    STRSM
+
+#define dswap_    SSWAP
+#define daxpy_    SAXPY
 #define dasum_    SASUM
 #define idamax_   ISAMAX
 #define dcopy_    SCOPY
@@ -183,7 +297,6 @@
 #define dnrm2_    SNRM2
 #define dsymv_    SSYMV
 #define ddot_     SDOT
-#define daxpy_    SAXPY
 #define dsyr2_    SSYR2
 #define drot_     SROT
 #define dgemv_    SGEMV
@@ -191,6 +304,8 @@
 #define dgemm_    SGEMM
 #define dtrsm_    STRSM
 
+#define cswap_    CSWAP
+#define caxpy_    CAXPY
 #define scasum_   SCASUM
 #define icamax_   ICAMAX
 #define ccopy_    CCOPY
@@ -205,19 +320,20 @@
 #define chemv_    CHEMV
 #define cher2_    CHER2
 
-#define dzasum_   SCASUM
-#define izamax_   ICAMAX
-#define zcopy_    CCOPY
-#define zscal_    CSCAL
-#define dznrm2_   SCNRM2
-#define zaxpy_    CAXPY
-#define zgemv_    CGEMV
-#define ztrsv_    CTRSV
-#define zgemm_    CGEMM
-#define ztrsm_    CTRSM
-#define zgerc_    CGERC
-#define zhemv_    CHEMV
-#define zher2_    CHER2
+#define zswap_    ZSWAP
+#define zaxpy_    ZAXPY
+#define dzasum_   DZASUM
+#define izamax_   IZAMAX
+#define zcopy_    ZCOPY
+#define zscal_    ZSCAL
+#define dznrm2_   DZNRM2
+#define zgemv_    ZGEMV
+#define ztrsv_    ZTRSV
+#define zgemm_    ZGEMM
+#define ztrsm_    ZTRSM
+#define zgerc_    ZGERC
+#define zhemv_    ZHEMV
+#define zher2_    ZHER2
 
 /* LAPACK */
 #define dlamch_   DLAMCH
@@ -241,6 +357,7 @@
 #define c_fortran_zgssv_ C_FORTRAN_ZGSSV
 #endif
 
+
 #if (F77_CALL_C == NOCHANGE)
 /*
  * These defines set up the naming scheme required to have a fortran 77
@@ -250,6 +367,8 @@
  *           call dgemm(...)           void dgemm(...)
  */
 /* BLAS */
+#define sswap_    sswap
+#define saxpy_    saxpy
 #define sasum_    sasum
 #define isamax_   isamax
 #define scopy_    scopy
@@ -266,6 +385,8 @@
 #define sgemm_    sgemm
 #define strsm_    strsm
 
+#define dswap_    dswap
+#define daxpy_    daxpy
 #define dasum_    dasum
 #define idamax_   idamax
 #define dcopy_    dcopy
@@ -274,7 +395,6 @@
 #define dnrm2_    dnrm2
 #define dsymv_    dsymv
 #define ddot_     ddot
-#define daxpy_    daxpy
 #define dsyr2_    dsyr2
 #define drot_     drot
 #define dgemv_    dgemv
@@ -282,12 +402,13 @@
 #define dgemm_    dgemm
 #define dtrsm_    dtrsm
 
+#define cswap_    cswap
+#define caxpy_    caxpy
 #define scasum_   scasum
 #define icamax_   icamax
 #define ccopy_    ccopy
 #define cscal_    cscal
 #define scnrm2_   scnrm2
-#define caxpy_    caxpy
 #define cgemv_    cgemv
 #define ctrsv_    ctrsv
 #define cgemm_    cgemm
@@ -296,12 +417,13 @@
 #define chemv_    chemv
 #define cher2_    cher2
 
+#define zswap_    zswap
+#define zaxpy_    zaxpy
 #define dzasum_   dzasum
 #define izamax_   izamax
 #define zcopy_    zcopy
 #define zscal_    zscal
 #define dznrm2_   dznrm2
-#define zaxpy_    zaxpy
 #define zgemv_    zgemv
 #define ztrsv_    ztrsv
 #define zgemm_    zgemm
@@ -332,4 +454,5 @@
 #define c_fortran_zgssv_ c_fortran_zgssv
 #endif
 
+
 #endif /* __SUPERLU_CNAMES */
diff --git a/SRC/slu_cdefs.h b/SRC/slu_cdefs.h
index 31bb482..24d1374 100644
--- a/SRC/slu_cdefs.h
+++ b/SRC/slu_cdefs.h
@@ -1,35 +1,13 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
+/*! @file slu_cdefs.h
+ * \brief Header file for real operations
+ * 
+ * <pre> 
+ * -- SuperLU routine (version 4.1) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * October 15, 2003
- *
- */
-#ifndef __SUPERLU_cSP_DEFS /* allow multiple inclusions */
-#define __SUPERLU_cSP_DEFS
-
-/*
- * File name:		csp_defs.h
- * Purpose:             Sparse matrix types and function prototypes
- * History:
- */
-
-#ifdef _CRAY
-#include <fortran.h>
-#include <string.h>
-#endif
-
-/* Define my integer type int_t */
-typedef int int_t; /* default */
-
-#include "slu_Cnames.h"
-#include "supermatrix.h"
-#include "slu_util.h"
-#include "slu_scomplex.h"
-
-
-/*
+ * November, 2010
+ * 
  * Global data structures used in LU factorization -
  * 
  *   nsuper: #supernodes = nsuper + 1, numbered [0, nsuper].
@@ -80,7 +58,34 @@ typedef int int_t; /* default */
  *	subscript of nonzero ucol[k] is stored in usub[k].
  *	xusub[i] points to the starting location of column i in ucol.
  *	Storage: new row subscripts; that is subscripts of PA.
+ * </pre>
  */
+#ifndef __SUPERLU_cSP_DEFS /* allow multiple inclusions */
+#define __SUPERLU_cSP_DEFS
+
+/*
+ * File name:		csp_defs.h
+ * Purpose:             Sparse matrix types and function prototypes
+ * History:
+ */
+
+#ifdef _CRAY
+#include <fortran.h>
+#include <string.h>
+#endif
+
+/* Define my integer type int_t */
+typedef int int_t; /* default */
+
+#include <math.h>
+#include <limits.h>
+#include "slu_Cnames.h"
+#include "supermatrix.h"
+#include "slu_util.h"
+#include "slu_scomplex.h"
+
+
+
 typedef struct {
     int     *xsup;    /* supernode and column mapping */
     int     *supno;   
@@ -96,19 +101,19 @@ typedef struct {
     int     nzlumax;  /*    "    "    "     lusup */
     int     n;        /* number of columns in the matrix */
     LU_space_t MemModel; /* 0 - system malloc'd; 1 - user provided */
+    int     num_expansions;
+    ExpHeader *expanders; /* Array of pointers to 4 types of memory */
+    LU_stack_t stack;     /* use user supplied memory */
 } GlobalLU_t;
 
-typedef struct {
-    float for_lu;
-    float total_needed;
-    int   expansions;
-} mem_usage_t;
+
+/* -------- Prototypes -------- */
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-/* Driver routines */
+/*! \brief Driver routines */
 extern void
 cgssv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
       SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
@@ -118,8 +123,18 @@ cgssvx(superlu_options_t *, SuperMatrix *, int *, int *, int *,
        void *, int, SuperMatrix *, SuperMatrix *,
        float *, float *, float *, float *,
        mem_usage_t *, SuperLUStat_t *, int *);
+    /* ILU */
+extern void
+cgsisv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
+      SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
+extern void
+cgsisx(superlu_options_t *, SuperMatrix *, int *, int *, int *,
+       char *, float *, float *, SuperMatrix *, SuperMatrix *,
+       void *, int, SuperMatrix *, SuperMatrix *, float *, float *,
+       mem_usage_t *, SuperLUStat_t *, int *);
 
-/* Supernodal LU factor related */
+
+/*! \brief Supernodal LU factor related */
 extern void
 cCreate_CompCol_Matrix(SuperMatrix *, int, int, int, complex *,
 		       int *, int *, Stype_t, Dtype_t, Mtype_t);
@@ -139,10 +154,11 @@ extern void
 cCopy_Dense_Matrix(int, int, complex *, int, complex *, int);
 
 extern void    countnz (const int, int *, int *, int *, GlobalLU_t *);
+extern void    ilu_countnz (const int, int *, int *, GlobalLU_t *);
 extern void    fixupL (const int, const int *, GlobalLU_t *);
 
 extern void    callocateA (int, int, complex **, int **, int **);
-extern void    cgstrf (superlu_options_t*, SuperMatrix*, float, 
+extern void    cgstrf (superlu_options_t*, SuperMatrix*,
                        int, int, int*, void *, int, int *, int *, 
                        SuperMatrix *, SuperMatrix *, SuperLUStat_t*, int *);
 extern int     csnode_dfs (const int, const int, const int *, const int *,
@@ -162,7 +178,7 @@ extern int     ccolumn_bmod (const int, const int, complex *,
                            GlobalLU_t *, SuperLUStat_t*);
 extern int     ccopy_to_ucol (int, int, int *, int *, int *,
                               complex *, GlobalLU_t *);         
-extern int     cpivotL (const int, const float, int *, int *, 
+extern int     cpivotL (const int, const double, int *, int *, 
                          int *, int *, int *, GlobalLU_t *, SuperLUStat_t*);
 extern void    cpruneL (const int, const int *, const int, const int,
 			  const int *, const int *, int *, GlobalLU_t *);
@@ -172,9 +188,32 @@ extern void    cFillRHS (trans_t, int, complex *, int, SuperMatrix *,
 			  SuperMatrix *);
 extern void    cgstrs (trans_t, SuperMatrix *, SuperMatrix *, int *, int *,
                         SuperMatrix *, SuperLUStat_t*, int *);
+/* ILU */
+extern void    cgsitrf (superlu_options_t*, SuperMatrix*, int, int, int*,
+		        void *, int, int *, int *, SuperMatrix *, SuperMatrix *,
+                        SuperLUStat_t*, int *);
+extern int     cldperm(int, int, int, int [], int [], complex [],
+                        int [],	float [], float []);
+extern int     ilu_csnode_dfs (const int, const int, const int *, const int *,
+			       const int *, int *, GlobalLU_t *);
+extern void    ilu_cpanel_dfs (const int, const int, const int, SuperMatrix *,
+			       int *, int *, complex *, float *, int *, int *,
+			       int *, int *, int *, int *, GlobalLU_t *);
+extern int     ilu_ccolumn_dfs (const int, const int, int *, int *, int *,
+				int *, int *, int *, int *, int *,
+				GlobalLU_t *);
+extern int     ilu_ccopy_to_ucol (int, int, int *, int *, int *,
+                                  complex *, int, milu_t, double, int,
+                                  complex *, int *, GlobalLU_t *, float *);
+extern int     ilu_cpivotL (const int, const double, int *, int *, int, int *,
+			    int *, int *, int *, double, milu_t,
+                            complex, GlobalLU_t *, SuperLUStat_t*);
+extern int     ilu_cdrop_row (superlu_options_t *, int, int, double,
+                              int, int *, double *, GlobalLU_t *, 
+                              float *, float *, int);
 
 
-/* Driver related */
+/*! \brief Driver related */
 
 extern void    cgsequ (SuperMatrix *, float *, float *, float *,
 			float *, float *, int *);
@@ -197,11 +236,13 @@ extern int     sp_cgemv (char *, complex, SuperMatrix *, complex *,
 extern int     sp_cgemm (char *, char *, int, int, int, complex,
 			SuperMatrix *, complex *, int, complex, 
 			complex *, int);
+extern         float slamch_(char *);
+
 
-/* Memory-related */
+/*! \brief Memory-related */
 extern int     cLUMemInit (fact_t, void *, int, int, int, int, int,
-			     SuperMatrix *, SuperMatrix *,
-			     GlobalLU_t *, int **, complex **);
+                            float, SuperMatrix *, SuperMatrix *,
+                            GlobalLU_t *, int **, complex **);
 extern void    cSetRWork (int, int, complex *, complex **, complex **);
 extern void    cLUWorkFree (int *, complex *, GlobalLU_t *);
 extern int     cLUMemXpand (int, int, MemType, int *, GlobalLU_t *);
@@ -212,21 +253,27 @@ extern float  *floatMalloc(int);
 extern float  *floatCalloc(int);
 extern int     cmemory_usage(const int, const int, const int, const int);
 extern int     cQuerySpace (SuperMatrix *, SuperMatrix *, mem_usage_t *);
+extern int     ilu_cQuerySpace (SuperMatrix *, SuperMatrix *, mem_usage_t *);
 
-/* Auxiliary routines */
+/*! \brief Auxiliary routines */
 extern void    creadhb(int *, int *, int *, complex **, int **, int **);
+extern void    creadrb(int *, int *, int *, complex **, int **, int **);
+extern void    creadtriple(int *, int *, int *, complex **, int **, int **);
 extern void    cCompRow_to_CompCol(int, int, int, complex*, int*, int*,
 		                   complex **, int **, int **);
 extern void    cfill (complex *, int, complex);
 extern void    cinf_norm_error (int, SuperMatrix *, complex *);
 extern void    PrintPerf (SuperMatrix *, SuperMatrix *, mem_usage_t *,
 			 complex, complex, complex *, complex *, char *);
+extern float  sqselect(int, float *, int);
+
 
-/* Routines for debugging */
+/*! \brief Routines for debugging */
 extern void    cPrint_CompCol_Matrix(char *, SuperMatrix *);
 extern void    cPrint_SuperNode_Matrix(char *, SuperMatrix *);
 extern void    cPrint_Dense_Matrix(char *, SuperMatrix *);
-extern void    print_lu_col(char *, int, int, int *, GlobalLU_t *);
+extern void    cprint_lu_col(char *, int, int, int *, GlobalLU_t *);
+extern int     print_double_vec(char *, int, double *);
 extern void    check_tempv(int, complex *);
 
 #ifdef __cplusplus
diff --git a/SRC/slu_dcomplex.h b/SRC/slu_dcomplex.h
index 04de089..386ad68 100644
--- a/SRC/slu_dcomplex.h
+++ b/SRC/slu_dcomplex.h
@@ -1,17 +1,20 @@
 
-/*
- * -- SuperLU routine (version 2.0) --
+/*! @file slu_dcomplex.h
+ * \brief Header file for complex operations
+ * <pre> 
+ *  -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Contains definitions for various complex operations.
+ * This header file is to be included in source files z*.c
+ * </pre>
  */
 #ifndef __SUPERLU_DCOMPLEX /* allow multiple inclusions */
 #define __SUPERLU_DCOMPLEX
 
-/* 
- * This header file is to be included in source files z*.c
- */
+
 #ifndef DCOMPLEX_INCLUDE
 #define DCOMPLEX_INCLUDE
 
@@ -20,19 +23,19 @@ typedef struct { double r, i; } doublecomplex;
 
 /* Macro definitions */
 
-/* Complex Addition c = a + b */
+/*! \brief Complex Addition c = a + b */
 #define z_add(c, a, b) { (c)->r = (a)->r + (b)->r; \
 			 (c)->i = (a)->i + (b)->i; }
 
-/* Complex Subtraction c = a - b */
+/*! \brief Complex Subtraction c = a - b */
 #define z_sub(c, a, b) { (c)->r = (a)->r - (b)->r; \
 			 (c)->i = (a)->i - (b)->i; }
 
-/* Complex-Double Multiplication */
+/*! \brief Complex-Double Multiplication */
 #define zd_mult(c, a, b) { (c)->r = (a)->r * (b); \
                            (c)->i = (a)->i * (b); }
 
-/* Complex-Complex Multiplication */
+/*! \brief Complex-Complex Multiplication */
 #define zz_mult(c, a, b) { \
 	double cr, ci; \
     	cr = (a)->r * (b)->r - (a)->i * (b)->i; \
@@ -46,7 +49,7 @@ typedef struct { double r, i; } doublecomplex;
         (a)->i = -((b)->i); \
     }
 
-/* Complex equality testing */
+/*! \brief Complex equality testing */
 #define z_eq(a, b)  ( (a)->r == (b)->r && (a)->i == (b)->i )
 
 
@@ -61,6 +64,9 @@ double z_abs1(doublecomplex *);    /* approximate */
 void z_exp(doublecomplex *, doublecomplex *);
 void d_cnjg(doublecomplex *r, doublecomplex *z);
 double d_imag(doublecomplex *);
+doublecomplex z_sgn(doublecomplex *);
+doublecomplex z_sqrt(doublecomplex *);
+
 
 
 #ifdef __cplusplus
diff --git a/SRC/slu_ddefs.h b/SRC/slu_ddefs.h
index 292622f..199fa96 100644
--- a/SRC/slu_ddefs.h
+++ b/SRC/slu_ddefs.h
@@ -1,34 +1,13 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
+/*! @file slu_ddefs.h
+ * \brief Header file for real operations
+ * 
+ * <pre> 
+ * -- SuperLU routine (version 4.1) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * October 15, 2003
- *
- */
-#ifndef __SUPERLU_dSP_DEFS /* allow multiple inclusions */
-#define __SUPERLU_dSP_DEFS
-
-/*
- * File name:		dsp_defs.h
- * Purpose:             Sparse matrix types and function prototypes
- * History:
- */
-
-#ifdef _CRAY
-#include <fortran.h>
-#include <string.h>
-#endif
-
-/* Define my integer type int_t */
-typedef int int_t; /* default */
-
-#include "slu_Cnames.h"
-#include "supermatrix.h"
-#include "slu_util.h"
-
-
-/*
+ * November, 2010
+ * 
  * Global data structures used in LU factorization -
  * 
  *   nsuper: #supernodes = nsuper + 1, numbered [0, nsuper].
@@ -79,7 +58,33 @@ typedef int int_t; /* default */
  *	subscript of nonzero ucol[k] is stored in usub[k].
  *	xusub[i] points to the starting location of column i in ucol.
  *	Storage: new row subscripts; that is subscripts of PA.
+ * </pre>
  */
+#ifndef __SUPERLU_dSP_DEFS /* allow multiple inclusions */
+#define __SUPERLU_dSP_DEFS
+
+/*
+ * File name:		dsp_defs.h
+ * Purpose:             Sparse matrix types and function prototypes
+ * History:
+ */
+
+#ifdef _CRAY
+#include <fortran.h>
+#include <string.h>
+#endif
+
+/* Define my integer type int_t */
+typedef int int_t; /* default */
+
+#include <math.h>
+#include <limits.h>
+#include "slu_Cnames.h"
+#include "supermatrix.h"
+#include "slu_util.h"
+
+
+
 typedef struct {
     int     *xsup;    /* supernode and column mapping */
     int     *supno;   
@@ -95,19 +100,19 @@ typedef struct {
     int     nzlumax;  /*    "    "    "     lusup */
     int     n;        /* number of columns in the matrix */
     LU_space_t MemModel; /* 0 - system malloc'd; 1 - user provided */
+    int     num_expansions;
+    ExpHeader *expanders; /* Array of pointers to 4 types of memory */
+    LU_stack_t stack;     /* use user supplied memory */
 } GlobalLU_t;
 
-typedef struct {
-    float for_lu;
-    float total_needed;
-    int   expansions;
-} mem_usage_t;
+
+/* -------- Prototypes -------- */
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-/* Driver routines */
+/*! \brief Driver routines */
 extern void
 dgssv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
       SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
@@ -117,8 +122,18 @@ dgssvx(superlu_options_t *, SuperMatrix *, int *, int *, int *,
        void *, int, SuperMatrix *, SuperMatrix *,
        double *, double *, double *, double *,
        mem_usage_t *, SuperLUStat_t *, int *);
+    /* ILU */
+extern void
+dgsisv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
+      SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
+extern void
+dgsisx(superlu_options_t *, SuperMatrix *, int *, int *, int *,
+       char *, double *, double *, SuperMatrix *, SuperMatrix *,
+       void *, int, SuperMatrix *, SuperMatrix *, double *, double *,
+       mem_usage_t *, SuperLUStat_t *, int *);
 
-/* Supernodal LU factor related */
+
+/*! \brief Supernodal LU factor related */
 extern void
 dCreate_CompCol_Matrix(SuperMatrix *, int, int, int, double *,
 		       int *, int *, Stype_t, Dtype_t, Mtype_t);
@@ -138,10 +153,11 @@ extern void
 dCopy_Dense_Matrix(int, int, double *, int, double *, int);
 
 extern void    countnz (const int, int *, int *, int *, GlobalLU_t *);
+extern void    ilu_countnz (const int, int *, int *, GlobalLU_t *);
 extern void    fixupL (const int, const int *, GlobalLU_t *);
 
 extern void    dallocateA (int, int, double **, int **, int **);
-extern void    dgstrf (superlu_options_t*, SuperMatrix*, double, 
+extern void    dgstrf (superlu_options_t*, SuperMatrix*,
                        int, int, int*, void *, int, int *, int *, 
                        SuperMatrix *, SuperMatrix *, SuperLUStat_t*, int *);
 extern int     dsnode_dfs (const int, const int, const int *, const int *,
@@ -171,9 +187,32 @@ extern void    dFillRHS (trans_t, int, double *, int, SuperMatrix *,
 			  SuperMatrix *);
 extern void    dgstrs (trans_t, SuperMatrix *, SuperMatrix *, int *, int *,
                         SuperMatrix *, SuperLUStat_t*, int *);
+/* ILU */
+extern void    dgsitrf (superlu_options_t*, SuperMatrix*, int, int, int*,
+		        void *, int, int *, int *, SuperMatrix *, SuperMatrix *,
+                        SuperLUStat_t*, int *);
+extern int     dldperm(int, int, int, int [], int [], double [],
+                        int [],	double [], double []);
+extern int     ilu_dsnode_dfs (const int, const int, const int *, const int *,
+			       const int *, int *, GlobalLU_t *);
+extern void    ilu_dpanel_dfs (const int, const int, const int, SuperMatrix *,
+			       int *, int *, double *, double *, int *, int *,
+			       int *, int *, int *, int *, GlobalLU_t *);
+extern int     ilu_dcolumn_dfs (const int, const int, int *, int *, int *,
+				int *, int *, int *, int *, int *,
+				GlobalLU_t *);
+extern int     ilu_dcopy_to_ucol (int, int, int *, int *, int *,
+                                  double *, int, milu_t, double, int,
+                                  double *, int *, GlobalLU_t *, double *);
+extern int     ilu_dpivotL (const int, const double, int *, int *, int, int *,
+			    int *, int *, int *, double, milu_t,
+                            double, GlobalLU_t *, SuperLUStat_t*);
+extern int     ilu_ddrop_row (superlu_options_t *, int, int, double,
+                              int, int *, double *, GlobalLU_t *, 
+                              double *, double *, int);
 
 
-/* Driver related */
+/*! \brief Driver related */
 
 extern void    dgsequ (SuperMatrix *, double *, double *, double *,
 			double *, double *, int *);
@@ -196,11 +235,13 @@ extern int     sp_dgemv (char *, double, SuperMatrix *, double *,
 extern int     sp_dgemm (char *, char *, int, int, int, double,
 			SuperMatrix *, double *, int, double, 
 			double *, int);
+extern         double dlamch_(char *);
+
 
-/* Memory-related */
+/*! \brief Memory-related */
 extern int     dLUMemInit (fact_t, void *, int, int, int, int, int,
-			     SuperMatrix *, SuperMatrix *,
-			     GlobalLU_t *, int **, double **);
+                            double, SuperMatrix *, SuperMatrix *,
+                            GlobalLU_t *, int **, double **);
 extern void    dSetRWork (int, int, double *, double **, double **);
 extern void    dLUWorkFree (int *, double *, GlobalLU_t *);
 extern int     dLUMemXpand (int, int, MemType, int *, GlobalLU_t *);
@@ -209,21 +250,27 @@ extern double  *doubleMalloc(int);
 extern double  *doubleCalloc(int);
 extern int     dmemory_usage(const int, const int, const int, const int);
 extern int     dQuerySpace (SuperMatrix *, SuperMatrix *, mem_usage_t *);
+extern int     ilu_dQuerySpace (SuperMatrix *, SuperMatrix *, mem_usage_t *);
 
-/* Auxiliary routines */
+/*! \brief Auxiliary routines */
 extern void    dreadhb(int *, int *, int *, double **, int **, int **);
+extern void    dreadrb(int *, int *, int *, double **, int **, int **);
+extern void    dreadtriple(int *, int *, int *, double **, int **, int **);
 extern void    dCompRow_to_CompCol(int, int, int, double*, int*, int*,
 		                   double **, int **, int **);
 extern void    dfill (double *, int, double);
 extern void    dinf_norm_error (int, SuperMatrix *, double *);
 extern void    PrintPerf (SuperMatrix *, SuperMatrix *, mem_usage_t *,
 			 double, double, double *, double *, char *);
+extern double  dqselect(int, double *, int);
+
 
-/* Routines for debugging */
+/*! \brief Routines for debugging */
 extern void    dPrint_CompCol_Matrix(char *, SuperMatrix *);
 extern void    dPrint_SuperNode_Matrix(char *, SuperMatrix *);
 extern void    dPrint_Dense_Matrix(char *, SuperMatrix *);
-extern void    print_lu_col(char *, int, int, int *, GlobalLU_t *);
+extern void    dprint_lu_col(char *, int, int, int *, GlobalLU_t *);
+extern int     print_double_vec(char *, int, double *);
 extern void    check_tempv(int, double *);
 
 #ifdef __cplusplus
diff --git a/SRC/slu_scomplex.h b/SRC/slu_scomplex.h
index d7d70f1..c17490d 100644
--- a/SRC/slu_scomplex.h
+++ b/SRC/slu_scomplex.h
@@ -1,17 +1,20 @@
 
-/*
- * -- SuperLU routine (version 2.0) --
+/*! @file slu_scomplex.h
+ * \brief Header file for complex operations
+ * <pre> 
+ *  -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Contains definitions for various complex operations.
+ * This header file is to be included in source files c*.c
+ * </pre>
  */
 #ifndef __SUPERLU_SCOMPLEX /* allow multiple inclusions */
 #define __SUPERLU_SCOMPLEX
 
-/* 
- * This header file is to be included in source files c*.c
- */
+
 #ifndef SCOMPLEX_INCLUDE
 #define SCOMPLEX_INCLUDE
 
@@ -20,19 +23,19 @@ typedef struct { float r, i; } complex;
 
 /* Macro definitions */
 
-/* Complex Addition c = a + b */
+/*! \brief Complex Addition c = a + b */
 #define c_add(c, a, b) { (c)->r = (a)->r + (b)->r; \
 			 (c)->i = (a)->i + (b)->i; }
 
-/* Complex Subtraction c = a - b */
+/*! \brief Complex Subtraction c = a - b */
 #define c_sub(c, a, b) { (c)->r = (a)->r - (b)->r; \
 			 (c)->i = (a)->i - (b)->i; }
 
-/* Complex-Double Multiplication */
+/*! \brief Complex-Double Multiplication */
 #define cs_mult(c, a, b) { (c)->r = (a)->r * (b); \
                            (c)->i = (a)->i * (b); }
 
-/* Complex-Complex Multiplication */
+/*! \brief Complex-Complex Multiplication */
 #define cc_mult(c, a, b) { \
 	float cr, ci; \
     	cr = (a)->r * (b)->r - (a)->i * (b)->i; \
@@ -46,7 +49,7 @@ typedef struct { float r, i; } complex;
         (a)->i = -((b)->i); \
     }
 
-/* Complex equality testing */
+/*! \brief Complex equality testing */
 #define c_eq(a, b)  ( (a)->r == (b)->r && (a)->i == (b)->i )
 
 
@@ -61,6 +64,9 @@ double c_abs1(complex *);    /* approximate */
 void c_exp(complex *, complex *);
 void r_cnjg(complex *, complex *);
 double r_imag(complex *);
+complex c_sgn(complex *);
+complex c_sqrt(complex *);
+
 
 
 #ifdef __cplusplus
diff --git a/SRC/slu_sdefs.h b/SRC/slu_sdefs.h
index b9cff8c..745d76f 100644
--- a/SRC/slu_sdefs.h
+++ b/SRC/slu_sdefs.h
@@ -1,34 +1,13 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
+/*! @file slu_sdefs.h
+ * \brief Header file for real operations
+ * 
+ * <pre> 
+ * -- SuperLU routine (version 4.1) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * October 15, 2003
- *
- */
-#ifndef __SUPERLU_sSP_DEFS /* allow multiple inclusions */
-#define __SUPERLU_sSP_DEFS
-
-/*
- * File name:		ssp_defs.h
- * Purpose:             Sparse matrix types and function prototypes
- * History:
- */
-
-#ifdef _CRAY
-#include <fortran.h>
-#include <string.h>
-#endif
-
-/* Define my integer type int_t */
-typedef int int_t; /* default */
-
-#include "slu_Cnames.h"
-#include "supermatrix.h"
-#include "slu_util.h"
-
-
-/*
+ * November, 2010
+ * 
  * Global data structures used in LU factorization -
  * 
  *   nsuper: #supernodes = nsuper + 1, numbered [0, nsuper].
@@ -79,7 +58,33 @@ typedef int int_t; /* default */
  *	subscript of nonzero ucol[k] is stored in usub[k].
  *	xusub[i] points to the starting location of column i in ucol.
  *	Storage: new row subscripts; that is subscripts of PA.
+ * </pre>
  */
+#ifndef __SUPERLU_sSP_DEFS /* allow multiple inclusions */
+#define __SUPERLU_sSP_DEFS
+
+/*
+ * File name:		ssp_defs.h
+ * Purpose:             Sparse matrix types and function prototypes
+ * History:
+ */
+
+#ifdef _CRAY
+#include <fortran.h>
+#include <string.h>
+#endif
+
+/* Define my integer type int_t */
+typedef int int_t; /* default */
+
+#include <math.h>
+#include <limits.h>
+#include "slu_Cnames.h"
+#include "supermatrix.h"
+#include "slu_util.h"
+
+
+
 typedef struct {
     int     *xsup;    /* supernode and column mapping */
     int     *supno;   
@@ -95,19 +100,19 @@ typedef struct {
     int     nzlumax;  /*    "    "    "     lusup */
     int     n;        /* number of columns in the matrix */
     LU_space_t MemModel; /* 0 - system malloc'd; 1 - user provided */
+    int     num_expansions;
+    ExpHeader *expanders; /* Array of pointers to 4 types of memory */
+    LU_stack_t stack;     /* use user supplied memory */
 } GlobalLU_t;
 
-typedef struct {
-    float for_lu;
-    float total_needed;
-    int   expansions;
-} mem_usage_t;
+
+/* -------- Prototypes -------- */
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-/* Driver routines */
+/*! \brief Driver routines */
 extern void
 sgssv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
       SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
@@ -117,8 +122,18 @@ sgssvx(superlu_options_t *, SuperMatrix *, int *, int *, int *,
        void *, int, SuperMatrix *, SuperMatrix *,
        float *, float *, float *, float *,
        mem_usage_t *, SuperLUStat_t *, int *);
+    /* ILU */
+extern void
+sgsisv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
+      SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
+extern void
+sgsisx(superlu_options_t *, SuperMatrix *, int *, int *, int *,
+       char *, float *, float *, SuperMatrix *, SuperMatrix *,
+       void *, int, SuperMatrix *, SuperMatrix *, float *, float *,
+       mem_usage_t *, SuperLUStat_t *, int *);
 
-/* Supernodal LU factor related */
+
+/*! \brief Supernodal LU factor related */
 extern void
 sCreate_CompCol_Matrix(SuperMatrix *, int, int, int, float *,
 		       int *, int *, Stype_t, Dtype_t, Mtype_t);
@@ -138,10 +153,11 @@ extern void
 sCopy_Dense_Matrix(int, int, float *, int, float *, int);
 
 extern void    countnz (const int, int *, int *, int *, GlobalLU_t *);
+extern void    ilu_countnz (const int, int *, int *, GlobalLU_t *);
 extern void    fixupL (const int, const int *, GlobalLU_t *);
 
 extern void    sallocateA (int, int, float **, int **, int **);
-extern void    sgstrf (superlu_options_t*, SuperMatrix*, float, 
+extern void    sgstrf (superlu_options_t*, SuperMatrix*,
                        int, int, int*, void *, int, int *, int *, 
                        SuperMatrix *, SuperMatrix *, SuperLUStat_t*, int *);
 extern int     ssnode_dfs (const int, const int, const int *, const int *,
@@ -161,7 +177,7 @@ extern int     scolumn_bmod (const int, const int, float *,
                            GlobalLU_t *, SuperLUStat_t*);
 extern int     scopy_to_ucol (int, int, int *, int *, int *,
                               float *, GlobalLU_t *);         
-extern int     spivotL (const int, const float, int *, int *, 
+extern int     spivotL (const int, const double, int *, int *, 
                          int *, int *, int *, GlobalLU_t *, SuperLUStat_t*);
 extern void    spruneL (const int, const int *, const int, const int,
 			  const int *, const int *, int *, GlobalLU_t *);
@@ -171,9 +187,32 @@ extern void    sFillRHS (trans_t, int, float *, int, SuperMatrix *,
 			  SuperMatrix *);
 extern void    sgstrs (trans_t, SuperMatrix *, SuperMatrix *, int *, int *,
                         SuperMatrix *, SuperLUStat_t*, int *);
+/* ILU */
+extern void    sgsitrf (superlu_options_t*, SuperMatrix*, int, int, int*,
+		        void *, int, int *, int *, SuperMatrix *, SuperMatrix *,
+                        SuperLUStat_t*, int *);
+extern int     sldperm(int, int, int, int [], int [], float [],
+                        int [],	float [], float []);
+extern int     ilu_ssnode_dfs (const int, const int, const int *, const int *,
+			       const int *, int *, GlobalLU_t *);
+extern void    ilu_spanel_dfs (const int, const int, const int, SuperMatrix *,
+			       int *, int *, float *, float *, int *, int *,
+			       int *, int *, int *, int *, GlobalLU_t *);
+extern int     ilu_scolumn_dfs (const int, const int, int *, int *, int *,
+				int *, int *, int *, int *, int *,
+				GlobalLU_t *);
+extern int     ilu_scopy_to_ucol (int, int, int *, int *, int *,
+                                  float *, int, milu_t, double, int,
+                                  float *, int *, GlobalLU_t *, float *);
+extern int     ilu_spivotL (const int, const double, int *, int *, int, int *,
+			    int *, int *, int *, double, milu_t,
+                            float, GlobalLU_t *, SuperLUStat_t*);
+extern int     ilu_sdrop_row (superlu_options_t *, int, int, double,
+                              int, int *, double *, GlobalLU_t *, 
+                              float *, float *, int);
 
 
-/* Driver related */
+/*! \brief Driver related */
 
 extern void    sgsequ (SuperMatrix *, float *, float *, float *,
 			float *, float *, int *);
@@ -196,11 +235,13 @@ extern int     sp_sgemv (char *, float, SuperMatrix *, float *,
 extern int     sp_sgemm (char *, char *, int, int, int, float,
 			SuperMatrix *, float *, int, float, 
 			float *, int);
+extern         float slamch_(char *);
+
 
-/* Memory-related */
+/*! \brief Memory-related */
 extern int     sLUMemInit (fact_t, void *, int, int, int, int, int,
-			     SuperMatrix *, SuperMatrix *,
-			     GlobalLU_t *, int **, float **);
+                            float, SuperMatrix *, SuperMatrix *,
+                            GlobalLU_t *, int **, float **);
 extern void    sSetRWork (int, int, float *, float **, float **);
 extern void    sLUWorkFree (int *, float *, GlobalLU_t *);
 extern int     sLUMemXpand (int, int, MemType, int *, GlobalLU_t *);
@@ -209,21 +250,27 @@ extern float  *floatMalloc(int);
 extern float  *floatCalloc(int);
 extern int     smemory_usage(const int, const int, const int, const int);
 extern int     sQuerySpace (SuperMatrix *, SuperMatrix *, mem_usage_t *);
+extern int     ilu_sQuerySpace (SuperMatrix *, SuperMatrix *, mem_usage_t *);
 
-/* Auxiliary routines */
+/*! \brief Auxiliary routines */
 extern void    sreadhb(int *, int *, int *, float **, int **, int **);
+extern void    sreadrb(int *, int *, int *, float **, int **, int **);
+extern void    sreadtriple(int *, int *, int *, float **, int **, int **);
 extern void    sCompRow_to_CompCol(int, int, int, float*, int*, int*,
 		                   float **, int **, int **);
 extern void    sfill (float *, int, float);
 extern void    sinf_norm_error (int, SuperMatrix *, float *);
 extern void    PrintPerf (SuperMatrix *, SuperMatrix *, mem_usage_t *,
 			 float, float, float *, float *, char *);
+extern float  sqselect(int, float *, int);
+
 
-/* Routines for debugging */
+/*! \brief Routines for debugging */
 extern void    sPrint_CompCol_Matrix(char *, SuperMatrix *);
 extern void    sPrint_SuperNode_Matrix(char *, SuperMatrix *);
 extern void    sPrint_Dense_Matrix(char *, SuperMatrix *);
-extern void    print_lu_col(char *, int, int, int *, GlobalLU_t *);
+extern void    sprint_lu_col(char *, int, int, int *, GlobalLU_t *);
+extern int     print_double_vec(char *, int, double *);
 extern void    check_tempv(int, float *);
 
 #ifdef __cplusplus
diff --git a/SRC/slu_util.h b/SRC/slu_util.h
index bf115c6..30b5f9b 100644
--- a/SRC/slu_util.h
+++ b/SRC/slu_util.h
@@ -1,3 +1,13 @@
+/** @file slu_util.h
+ * \brief Utility header file 
+ *
+ * -- SuperLU routine (version 4.1) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * November, 2010
+ *
+ */
+
 #ifndef __SUPERLU_UTIL /* allow multiple inclusions */
 #define __SUPERLU_UTIL
 
@@ -10,6 +20,7 @@
 #endif
 */
 #include <assert.h>
+#include "superlu_enum_consts.h"
 
 /***********************************************************************
  * Macros
@@ -56,6 +67,17 @@
 #define SUPERLU_MAX(x, y) 	( (x) > (y) ? (x) : (y) )
 #define SUPERLU_MIN(x, y) 	( (x) < (y) ? (x) : (y) )
 
+/*********************************************************
+ * Macros used for easy access of sparse matrix entries. *
+ *********************************************************/
+#define L_SUB_START(col)     ( Lstore->rowind_colptr[col] )
+#define L_SUB(ptr)           ( Lstore->rowind[ptr] )
+#define L_NZ_START(col)      ( Lstore->nzval_colptr[col] )
+#define L_FST_SUPC(superno)  ( Lstore->sup_to_col[superno] )
+#define U_NZ_START(col)      ( Ustore->colptr[col] )
+#define U_SUB(ptr)           ( Ustore->rowind[ptr] )
+
+
 /***********************************************************************
  * Constants 
  ***********************************************************************/
@@ -64,40 +86,32 @@
 #define FALSE	0
 #define TRUE	1
 
-/***********************************************************************
- * Enumerate types
- ***********************************************************************/
-typedef enum {NO, YES}                                          yes_no_t;
-typedef enum {DOFACT, SamePattern, SamePattern_SameRowPerm, FACTORED} fact_t;
-typedef enum {NOROWPERM, LargeDiag, MY_PERMR}                   rowperm_t;
-typedef enum {NATURAL, MMD_ATA, MMD_AT_PLUS_A, COLAMD, MY_PERMC}colperm_t;
-typedef enum {NOTRANS, TRANS, CONJ}                             trans_t;
-typedef enum {NOEQUIL, ROW, COL, BOTH}                          DiagScale_t;
-typedef enum {NOREFINE, SINGLE=1, DOUBLE, EXTRA}                IterRefine_t;
-typedef enum {LUSUP, UCOL, LSUB, USUB}                          MemType;
-typedef enum {HEAD, TAIL}                                       stack_end_t;
-typedef enum {SYSTEM, USER}                                     LU_space_t;
+#define NO_MEMTYPE  4      /* 0: lusup;
+			      1: ucol;
+			      2: lsub;
+			      3: usub */
 
-/* 
- * The following enumerate type is used by the statistics variable 
- * to keep track of flop count and time spent at various stages.
- *
- * Note that not all of the fields are disjoint.
- */
-typedef enum {
-    COLPERM, /* find a column ordering that minimizes fills */
-    RELAX,   /* find artificial supernodes */
-    ETREE,   /* compute column etree */
-    EQUIL,   /* equilibrate the original matrix */
-    FACT,    /* perform LU factorization */
-    RCOND,   /* estimate reciprocal condition number */
-    SOLVE,   /* forward and back solves */
-    REFINE,  /* perform iterative refinement */
-    TRSV,    /* fraction of FACT spent in xTRSV */
-    GEMV,    /* fraction of FACT spent in xGEMV */
-    FERR,    /* estimate error bounds after iterative refinement */
-    NPHASES  /* total number of phases */
-} PhaseType;
+#define GluIntArray(n)   (5 * (n) + 5)
+
+/* Dropping rules */
+#define  NODROP	        ( 0x0000 )
+#define	 DROP_BASIC	( 0x0001 )  /* ILU(tau) */
+#define  DROP_PROWS	( 0x0002 )  /* ILUTP: keep p maximum rows */
+#define  DROP_COLUMN	( 0x0004 )  /* ILUTP: for j-th column, 
+				              p = gamma * nnz(A(:,j)) */
+#define  DROP_AREA 	( 0x0008 )  /* ILUTP: for j-th column, use
+ 		 			      nnz(F(:,1:j)) / nnz(A(:,1:j))
+					      to limit memory growth  */
+#define  DROP_SECONDARY	( 0x000E )  /* PROWS | COLUMN | AREA */
+#define  DROP_DYNAMIC	( 0x0010 )  /* adaptive tau */
+#define  DROP_INTERP	( 0x0100 )  /* use interpolation */
+
+
+#if 1
+#define MILU_ALPHA (1.0e-2) /* multiple of drop_sum to be added to diagonal */
+#else
+#define MILU_ALPHA  1.0 /* multiple of drop_sum to be added to diagonal */
+#endif
 
 
 /***********************************************************************
@@ -107,7 +121,7 @@ typedef float    flops_t;
 typedef unsigned char Logical;
 
 /* 
- *-- This contains the options used to control the solve process.
+ *-- This contains the options used to control the solution process.
  *
  * Fact   (fact_t)
  *        Specifies whether or not the factored form of the matrix
@@ -142,7 +156,7 @@ typedef unsigned char Logical;
  *        = MMD_ATA: use minimum degree ordering on structure of A'*A
  *        = MMD_AT_PLUS_A: use minimum degree ordering on structure of A'+A
  *        = COLAMD: use approximate minimum degree column ordering
- *        = MY_PERMC: use the ordering specified in ScalePermstruct->perm_c[]
+ *        = MY_PERMC: use the ordering specified by the user
  *         
  * Trans  (trans_t)
  *        Specifies the form of the system of equations:
@@ -153,28 +167,72 @@ typedef unsigned char Logical;
  * IterRefine (IterRefine_t)
  *        Specifies whether to perform iterative refinement.
  *        = NO: no iterative refinement
- *        = WorkingPrec: perform iterative refinement in working precision
- *        = ExtraPrec: perform iterative refinement in extra precision
- *
- * PrintStat (yes_no_t)
- *        Specifies whether to print the solver's statistics.
+ *        = SLU_SINGLE: perform iterative refinement in single precision
+ *        = SLU_DOUBLE: perform iterative refinement in double precision
+ *        = SLU_EXTRA: perform iterative refinement in extra precision
  *
  * DiagPivotThresh (double, in [0.0, 1.0]) (only for sequential SuperLU)
  *        Specifies the threshold used for a diagonal entry to be an
  *        acceptable pivot.
  *
+ * SymmetricMode (yest_no_t)
+ *        Specifies whether to use symmetric mode. Symmetric mode gives 
+ *        preference to diagonal pivots, and uses an (A'+A)-based column
+ *        permutation algorithm.
+ *
  * PivotGrowth (yes_no_t)
  *        Specifies whether to compute the reciprocal pivot growth.
  *
  * ConditionNumber (ues_no_t)
  *        Specifies whether to compute the reciprocal condition number.
  *
- * RowPerm (rowperm_t) (only for SuperLU_DIST)
+ * RowPerm (rowperm_t) (only for SuperLU_DIST or ILU)
  *        Specifies whether to permute rows of the original matrix.
  *        = NO: not to permute the rows
  *        = LargeDiag: make the diagonal large relative to the off-diagonal
- *        = MY_PERMR: use the permutation given in ScalePermstruct->perm_r[]
- *           
+ *        = MY_PERMR: use the permutation given by the user
+ *
+ * ILU_DropRule (int)
+ *        Specifies the dropping rule:
+ *	  = DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+ *	  = DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma * nnz(A)/n.
+ *	  = DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+ *			      p = gamma * nnz(A(:,j)).
+ *	  = DROP_AREA:    Variation of ILUTP, for j-th column, use
+ *			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+ *	  = DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+ *			  If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+ *				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+ *			  Otherwise
+ *				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+ *			  tau_U(j) uses the similar rule.
+ *			  NOTE: the thresholds used by L and U are separate.
+ *	  = DROP_INTERP:  Compute the second dropping threshold by
+ *	                  interpolation instead of sorting (default).
+ *  		          In this case, the actual fill ratio is not
+ *			  guaranteed to be smaller than gamma.
+ *   	  Note: DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+ *	  ( Default: DROP_BASIC | DROP_AREA )
+ *
+ * ILU_DropTol (double)
+ *        numerical threshold for dropping.
+ *
+ * ILU_FillFactor (double) 
+ *        Gamma in the secondary dropping.
+ *
+ * ILU_Norm (norm_t)
+ *        Specify which norm to use to measure the row size in a
+ *        supernode: infinity-norm, 1-norm, or 2-norm.
+ *
+ * ILU_FillTol (double)
+ *        numerical threshold for zero pivot perturbation.
+ *
+ * ILU_MILU (milu_t)
+ *        Specifies which version of MILU to use.
+ *
+ * ILU_MILU_Dim (double) 
+ *        Dimension of the PDE if available.
+ *
  * ReplaceTinyPivot (yes_no_t) (only for SuperLU_DIST)
  *        Specifies whether to replace the tiny diagonals by
  *        sqrt(epsilon)*||A|| during LU factorization.
@@ -187,6 +245,9 @@ typedef unsigned char Logical;
  *        Specifies whether the initialization has been performed to the
  *        sparse matrix-vector multiplication routine needed in iterative
  *        refinement.
+ *
+ * PrintStat (yes_no_t)
+ *        Specifies whether to print the solver's statistics.
  */
 typedef struct {
     fact_t        Fact;
@@ -194,25 +255,58 @@ typedef struct {
     colperm_t     ColPerm;
     trans_t       Trans;
     IterRefine_t  IterRefine;
-    yes_no_t      PrintStat;
-    yes_no_t      SymmetricMode;
     double        DiagPivotThresh;
+    yes_no_t      SymmetricMode;
     yes_no_t      PivotGrowth;
     yes_no_t      ConditionNumber;
     rowperm_t     RowPerm;
-    yes_no_t      ReplaceTinyPivot;
+    int 	  ILU_DropRule;
+    double	  ILU_DropTol;    /* threshold for dropping */
+    double	  ILU_FillFactor; /* gamma in the secondary dropping */
+    norm_t	  ILU_Norm;       /* infinity-norm, 1-norm, or 2-norm */
+    double	  ILU_FillTol;    /* threshold for zero pivot perturbation */
+    milu_t	  ILU_MILU;
+    double	  ILU_MILU_Dim;   /* Dimension of PDE (if available) */
+    yes_no_t      ParSymbFact;
+    yes_no_t      ReplaceTinyPivot; /* used in SuperLU_DIST */
     yes_no_t      SolveInitialized;
     yes_no_t      RefineInitialized;
+    yes_no_t      PrintStat;
+    int           nnzL, nnzU;      /* used to store nnzs for now       */
+    int           num_lookaheads;  /* num of levels in look-ahead      */
+    yes_no_t      lookahead_etree; /* use etree computed from the
+				      serial symbolic factorization */
+    yes_no_t      SymPattern;      /* symmetric factorization          */
 } superlu_options_t;
 
+/*! \brief Headers for 4 types of dynamatically managed memory */
+typedef struct e_node {
+    int size;      /* length of the memory that has been used */
+    void *mem;     /* pointer to the new malloc'd store */
+} ExpHeader;
+
+typedef struct {
+    int  size;
+    int  used;
+    int  top1;  /* grow upward, relative to &array[0] */
+    int  top2;  /* grow downward */
+    void *array;
+} LU_stack_t;
+
 typedef struct {
     int     *panel_histo; /* histogram of panel size distribution */
     double  *utime;       /* running time at various phases */
     flops_t *ops;         /* operation count at various phases */
     int     TinyPivots;   /* number of tiny pivots */
     int     RefineSteps;  /* number of iterative refinement steps */
+    int     expansions;   /* number of memory expansions */
 } SuperLUStat_t;
 
+typedef struct {
+    float for_lu;
+    float total_needed;
+} mem_usage_t;
+
 
 /***********************************************************************
  * Prototypes
@@ -229,6 +323,7 @@ extern void    Destroy_CompCol_Permuted(SuperMatrix *);
 extern void    Destroy_Dense_Matrix(SuperMatrix *);
 extern void    get_perm_c(int, SuperMatrix *, int *);
 extern void    set_default_options(superlu_options_t *options);
+extern void    ilu_set_default_options(superlu_options_t *options);
 extern void    sp_preorder (superlu_options_t *, SuperMatrix*, int*, int*,
 			    SuperMatrix*);
 extern void    superlu_abort_and_exit(char*);
@@ -241,6 +336,11 @@ extern void    SetIWork (int, int, int, int *, int **, int **, int **,
 extern int     sp_coletree (int *, int *, int *, int, int, int *);
 extern void    relax_snode (const int, int *, const int, int *, int *);
 extern void    heap_relax_snode (const int, int *, const int, int *, int *);
+extern int     mark_relax(int, int *, int *, int *, int *, int *, int *);
+extern void    ilu_relax_snode (const int, int *, const int, int *,
+				int *, int *);
+extern void    ilu_heap_relax_snode (const int, int *, const int, int *,
+				     int *, int*);
 extern void    resetrep_col (const int, const int *, int *);
 extern int     spcoletree (int *, int *, int *, int, int, int *);
 extern int     *TreePostorder (int, int *);
@@ -251,12 +351,14 @@ extern int     xerbla_ (char *, int *);
 extern void    ifill (int *, int, int);
 extern void    snode_profile (int, int *);
 extern void    super_stats (int, int *);
+extern void    check_repfnz(int, int, int, int *);
 extern void    PrintSumm (char *, int, int, int);
 extern void    StatInit(SuperLUStat_t *);
 extern void    StatPrint (SuperLUStat_t *);
 extern void    StatFree(SuperLUStat_t *);
 extern void    print_panel_seg(int, int, int, int, int *, int *);
-extern void    check_repfnz(int, int, int, int *);
+extern int     print_int_vec(char *,int, int *);
+extern int     slu_PrintInt10(char *, int, int *);
 
 #ifdef __cplusplus
   }
diff --git a/SRC/slu_zdefs.h b/SRC/slu_zdefs.h
index a201ff5..f7ccf87 100644
--- a/SRC/slu_zdefs.h
+++ b/SRC/slu_zdefs.h
@@ -1,35 +1,13 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
+/*! @file slu_zdefs.h
+ * \brief Header file for real operations
+ * 
+ * <pre> 
+ * -- SuperLU routine (version 4.1) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * October 15, 2003
- *
- */
-#ifndef __SUPERLU_zSP_DEFS /* allow multiple inclusions */
-#define __SUPERLU_zSP_DEFS
-
-/*
- * File name:		zsp_defs.h
- * Purpose:             Sparse matrix types and function prototypes
- * History:
- */
-
-#ifdef _CRAY
-#include <fortran.h>
-#include <string.h>
-#endif
-
-/* Define my integer type int_t */
-typedef int int_t; /* default */
-
-#include "slu_Cnames.h"
-#include "supermatrix.h"
-#include "slu_util.h"
-#include "slu_dcomplex.h"
-
-
-/*
+ * November, 2010
+ * 
  * Global data structures used in LU factorization -
  * 
  *   nsuper: #supernodes = nsuper + 1, numbered [0, nsuper].
@@ -80,7 +58,34 @@ typedef int int_t; /* default */
  *	subscript of nonzero ucol[k] is stored in usub[k].
  *	xusub[i] points to the starting location of column i in ucol.
  *	Storage: new row subscripts; that is subscripts of PA.
+ * </pre>
  */
+#ifndef __SUPERLU_zSP_DEFS /* allow multiple inclusions */
+#define __SUPERLU_zSP_DEFS
+
+/*
+ * File name:		zsp_defs.h
+ * Purpose:             Sparse matrix types and function prototypes
+ * History:
+ */
+
+#ifdef _CRAY
+#include <fortran.h>
+#include <string.h>
+#endif
+
+/* Define my integer type int_t */
+typedef int int_t; /* default */
+
+#include <math.h>
+#include <limits.h>
+#include "slu_Cnames.h"
+#include "supermatrix.h"
+#include "slu_util.h"
+#include "slu_dcomplex.h"
+
+
+
 typedef struct {
     int     *xsup;    /* supernode and column mapping */
     int     *supno;   
@@ -96,19 +101,19 @@ typedef struct {
     int     nzlumax;  /*    "    "    "     lusup */
     int     n;        /* number of columns in the matrix */
     LU_space_t MemModel; /* 0 - system malloc'd; 1 - user provided */
+    int     num_expansions;
+    ExpHeader *expanders; /* Array of pointers to 4 types of memory */
+    LU_stack_t stack;     /* use user supplied memory */
 } GlobalLU_t;
 
-typedef struct {
-    float for_lu;
-    float total_needed;
-    int   expansions;
-} mem_usage_t;
+
+/* -------- Prototypes -------- */
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-/* Driver routines */
+/*! \brief Driver routines */
 extern void
 zgssv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
       SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
@@ -118,8 +123,18 @@ zgssvx(superlu_options_t *, SuperMatrix *, int *, int *, int *,
        void *, int, SuperMatrix *, SuperMatrix *,
        double *, double *, double *, double *,
        mem_usage_t *, SuperLUStat_t *, int *);
+    /* ILU */
+extern void
+zgsisv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
+      SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
+extern void
+zgsisx(superlu_options_t *, SuperMatrix *, int *, int *, int *,
+       char *, double *, double *, SuperMatrix *, SuperMatrix *,
+       void *, int, SuperMatrix *, SuperMatrix *, double *, double *,
+       mem_usage_t *, SuperLUStat_t *, int *);
 
-/* Supernodal LU factor related */
+
+/*! \brief Supernodal LU factor related */
 extern void
 zCreate_CompCol_Matrix(SuperMatrix *, int, int, int, doublecomplex *,
 		       int *, int *, Stype_t, Dtype_t, Mtype_t);
@@ -139,10 +154,11 @@ extern void
 zCopy_Dense_Matrix(int, int, doublecomplex *, int, doublecomplex *, int);
 
 extern void    countnz (const int, int *, int *, int *, GlobalLU_t *);
+extern void    ilu_countnz (const int, int *, int *, GlobalLU_t *);
 extern void    fixupL (const int, const int *, GlobalLU_t *);
 
 extern void    zallocateA (int, int, doublecomplex **, int **, int **);
-extern void    zgstrf (superlu_options_t*, SuperMatrix*, double, 
+extern void    zgstrf (superlu_options_t*, SuperMatrix*,
                        int, int, int*, void *, int, int *, int *, 
                        SuperMatrix *, SuperMatrix *, SuperLUStat_t*, int *);
 extern int     zsnode_dfs (const int, const int, const int *, const int *,
@@ -172,9 +188,32 @@ extern void    zFillRHS (trans_t, int, doublecomplex *, int, SuperMatrix *,
 			  SuperMatrix *);
 extern void    zgstrs (trans_t, SuperMatrix *, SuperMatrix *, int *, int *,
                         SuperMatrix *, SuperLUStat_t*, int *);
+/* ILU */
+extern void    zgsitrf (superlu_options_t*, SuperMatrix*, int, int, int*,
+		        void *, int, int *, int *, SuperMatrix *, SuperMatrix *,
+                        SuperLUStat_t*, int *);
+extern int     zldperm(int, int, int, int [], int [], doublecomplex [],
+                        int [],	double [], double []);
+extern int     ilu_zsnode_dfs (const int, const int, const int *, const int *,
+			       const int *, int *, GlobalLU_t *);
+extern void    ilu_zpanel_dfs (const int, const int, const int, SuperMatrix *,
+			       int *, int *, doublecomplex *, double *, int *, int *,
+			       int *, int *, int *, int *, GlobalLU_t *);
+extern int     ilu_zcolumn_dfs (const int, const int, int *, int *, int *,
+				int *, int *, int *, int *, int *,
+				GlobalLU_t *);
+extern int     ilu_zcopy_to_ucol (int, int, int *, int *, int *,
+                                  doublecomplex *, int, milu_t, double, int,
+                                  doublecomplex *, int *, GlobalLU_t *, double *);
+extern int     ilu_zpivotL (const int, const double, int *, int *, int, int *,
+			    int *, int *, int *, double, milu_t,
+                            doublecomplex, GlobalLU_t *, SuperLUStat_t*);
+extern int     ilu_zdrop_row (superlu_options_t *, int, int, double,
+                              int, int *, double *, GlobalLU_t *, 
+                              double *, double *, int);
 
 
-/* Driver related */
+/*! \brief Driver related */
 
 extern void    zgsequ (SuperMatrix *, double *, double *, double *,
 			double *, double *, int *);
@@ -197,11 +236,13 @@ extern int     sp_zgemv (char *, doublecomplex, SuperMatrix *, doublecomplex *,
 extern int     sp_zgemm (char *, char *, int, int, int, doublecomplex,
 			SuperMatrix *, doublecomplex *, int, doublecomplex, 
 			doublecomplex *, int);
+extern         double dlamch_(char *);
+
 
-/* Memory-related */
+/*! \brief Memory-related */
 extern int     zLUMemInit (fact_t, void *, int, int, int, int, int,
-			     SuperMatrix *, SuperMatrix *,
-			     GlobalLU_t *, int **, doublecomplex **);
+                            double, SuperMatrix *, SuperMatrix *,
+                            GlobalLU_t *, int **, doublecomplex **);
 extern void    zSetRWork (int, int, doublecomplex *, doublecomplex **, doublecomplex **);
 extern void    zLUWorkFree (int *, doublecomplex *, GlobalLU_t *);
 extern int     zLUMemXpand (int, int, MemType, int *, GlobalLU_t *);
@@ -212,21 +253,27 @@ extern double  *doubleMalloc(int);
 extern double  *doubleCalloc(int);
 extern int     zmemory_usage(const int, const int, const int, const int);
 extern int     zQuerySpace (SuperMatrix *, SuperMatrix *, mem_usage_t *);
+extern int     ilu_zQuerySpace (SuperMatrix *, SuperMatrix *, mem_usage_t *);
 
-/* Auxiliary routines */
+/*! \brief Auxiliary routines */
 extern void    zreadhb(int *, int *, int *, doublecomplex **, int **, int **);
+extern void    zreadrb(int *, int *, int *, doublecomplex **, int **, int **);
+extern void    zreadtriple(int *, int *, int *, doublecomplex **, int **, int **);
 extern void    zCompRow_to_CompCol(int, int, int, doublecomplex*, int*, int*,
 		                   doublecomplex **, int **, int **);
 extern void    zfill (doublecomplex *, int, doublecomplex);
 extern void    zinf_norm_error (int, SuperMatrix *, doublecomplex *);
 extern void    PrintPerf (SuperMatrix *, SuperMatrix *, mem_usage_t *,
 			 doublecomplex, doublecomplex, doublecomplex *, doublecomplex *, char *);
+extern double  dqselect(int, double *, int);
+
 
-/* Routines for debugging */
+/*! \brief Routines for debugging */
 extern void    zPrint_CompCol_Matrix(char *, SuperMatrix *);
 extern void    zPrint_SuperNode_Matrix(char *, SuperMatrix *);
 extern void    zPrint_Dense_Matrix(char *, SuperMatrix *);
-extern void    print_lu_col(char *, int, int, int *, GlobalLU_t *);
+extern void    zprint_lu_col(char *, int, int, int *, GlobalLU_t *);
+extern int     print_double_vec(char *, int, double *);
 extern void    check_tempv(int, doublecomplex *);
 
 #ifdef __cplusplus
diff --git a/SRC/smemory.c b/SRC/smemory.c
index 0278615..17cedfd 100644
--- a/SRC/smemory.c
+++ b/SRC/smemory.c
@@ -1,54 +1,32 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * October 15, 2003
+/*! @file smemory.c
+ * \brief Memory details
  *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
  */
 #include "slu_sdefs.h"
 
-/* Constants */
-#define NO_MEMTYPE  4      /* 0: lusup;
-			      1: ucol;
-			      2: lsub;
-			      3: usub */
-#define GluIntArray(n)   (5 * (n) + 5)
 
 /* Internal prototypes */
 void  *sexpand (int *, MemType,int, int, GlobalLU_t *);
-int   sLUWorkInit (int, int, int, int **, float **, LU_space_t);
+int   sLUWorkInit (int, int, int, int **, float **, GlobalLU_t *);
 void  copy_mem_float (int, void *, void *);
 void  sStackCompress (GlobalLU_t *);
-void  sSetupSpace (void *, int, LU_space_t *);
-void  *suser_malloc (int, int);
-void  suser_free (int, int);
+void  sSetupSpace (void *, int, GlobalLU_t *);
+void  *suser_malloc (int, int, GlobalLU_t *);
+void  suser_free (int, int, GlobalLU_t *);
 
-/* External prototypes (in memory.c - prec-indep) */
+/* External prototypes (in memory.c - prec-independent) */
 extern void    copy_mem_int    (int, void *, void *);
 extern void    user_bcopy      (char *, char *, int);
 
-/* Headers for 4 types of dynamatically managed memory */
-typedef struct e_node {
-    int size;      /* length of the memory that has been used */
-    void *mem;     /* pointer to the new malloc'd store */
-} ExpHeader;
-
-typedef struct {
-    int  size;
-    int  used;
-    int  top1;  /* grow upward, relative to &array[0] */
-    int  top2;  /* grow downward */
-    void *array;
-} LU_stack_t;
-
-/* Variables local to this file */
-static ExpHeader *expanders = 0; /* Array of pointers to 4 types of memory */
-static LU_stack_t stack;
-static int no_expand;
 
 /* Macros to manipulate stack */
-#define StackFull(x)         ( x + stack.used >= stack.size )
+#define StackFull(x)         ( x + Glu->stack.used >= Glu->stack.size )
 #define NotDoubleAlign(addr) ( (long int)addr & 7 )
 #define DoubleAlign(addr)    ( ((long int)addr + 7) & ~7L )
 #define TempSpace(m, w)      ( (2*w + 4 + NO_MARKER) * m * sizeof(int) + \
@@ -58,66 +36,67 @@ static int no_expand;
 
 
 
-/*
- * Setup the memory model to be used for factorization.
+/*! \brief Setup the memory model to be used for factorization.
+ *  
  *    lwork = 0: use system malloc;
  *    lwork > 0: use user-supplied work[] space.
  */
-void sSetupSpace(void *work, int lwork, LU_space_t *MemModel)
+void sSetupSpace(void *work, int lwork, GlobalLU_t *Glu)
 {
     if ( lwork == 0 ) {
-	*MemModel = SYSTEM; /* malloc/free */
+	Glu->MemModel = SYSTEM; /* malloc/free */
     } else if ( lwork > 0 ) {
-	*MemModel = USER;   /* user provided space */
-	stack.used = 0;
-	stack.top1 = 0;
-	stack.top2 = (lwork/4)*4; /* must be word addressable */
-	stack.size = stack.top2;
-	stack.array = (void *) work;
+	Glu->MemModel = USER;   /* user provided space */
+	Glu->stack.used = 0;
+	Glu->stack.top1 = 0;
+	Glu->stack.top2 = (lwork/4)*4; /* must be word addressable */
+	Glu->stack.size = Glu->stack.top2;
+	Glu->stack.array = (void *) work;
     }
 }
 
 
 
-void *suser_malloc(int bytes, int which_end)
+void *suser_malloc(int bytes, int which_end, GlobalLU_t *Glu)
 {
     void *buf;
     
     if ( StackFull(bytes) ) return (NULL);
 
     if ( which_end == HEAD ) {
-	buf = (char*) stack.array + stack.top1;
-	stack.top1 += bytes;
+	buf = (char*) Glu->stack.array + Glu->stack.top1;
+	Glu->stack.top1 += bytes;
     } else {
-	stack.top2 -= bytes;
-	buf = (char*) stack.array + stack.top2;
+	Glu->stack.top2 -= bytes;
+	buf = (char*) Glu->stack.array + Glu->stack.top2;
     }
     
-    stack.used += bytes;
+    Glu->stack.used += bytes;
     return buf;
 }
 
 
-void suser_free(int bytes, int which_end)
+void suser_free(int bytes, int which_end, GlobalLU_t *Glu)
 {
     if ( which_end == HEAD ) {
-	stack.top1 -= bytes;
+	Glu->stack.top1 -= bytes;
     } else {
-	stack.top2 += bytes;
+	Glu->stack.top2 += bytes;
     }
-    stack.used -= bytes;
+    Glu->stack.used -= bytes;
 }
 
 
 
-/*
+/*! \brief 
+ *
+ * <pre>
  * mem_usage consists of the following fields:
  *    - for_lu (float)
  *      The amount of space used in bytes for the L\U data structures.
  *    - total_needed (float)
  *      The amount of space needed in bytes to perform factorization.
- *    - expansions (int)
- *      Number of memory expansions during the LU factorization.
+ * </pre>
  */
 int sQuerySpace(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)
 {
@@ -132,33 +111,75 @@ int sQuerySpace(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)
     dword = sizeof(float);
 
     /* For LU factors */
-    mem_usage->for_lu = (float)( (4*n + 3) * iword + Lstore->nzval_colptr[n] *
-				 dword + Lstore->rowind_colptr[n] * iword );
-    mem_usage->for_lu += (float)( (n + 1) * iword +
+    mem_usage->for_lu = (float)( (4.0*n + 3.0) * iword +
+                                 Lstore->nzval_colptr[n] * dword +
+                                 Lstore->rowind_colptr[n] * iword );
+    mem_usage->for_lu += (float)( (n + 1.0) * iword +
 				 Ustore->colptr[n] * (dword + iword) );
 
     /* Working storage to support factorization */
     mem_usage->total_needed = mem_usage->for_lu +
-	(float)( (2 * panel_size + 4 + NO_MARKER) * n * iword +
-		(panel_size + 1) * n * dword );
-
-    mem_usage->expansions = --no_expand;
+	(float)( (2.0 * panel_size + 4.0 + NO_MARKER) * n * iword +
+		(panel_size + 1.0) * n * dword );
 
     return 0;
 } /* sQuerySpace */
 
-/*
- * Allocate storage for the data structures common to all factor routines.
- * For those unpredictable size, make a guess as FILL * nnz(A).
+
+/*! \brief
+ *
+ * <pre>
+ * mem_usage consists of the following fields:
+ *    - for_lu (float)
+ *      The amount of space used in bytes for the L\U data structures.
+ *    - total_needed (float)
+ *      The amount of space needed in bytes to perform factorization.
+ * </pre>
+ */
+int ilu_sQuerySpace(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)
+{
+    SCformat *Lstore;
+    NCformat *Ustore;
+    register int n, panel_size = sp_ienv(1);
+    register float iword, dword;
+
+    Lstore = L->Store;
+    Ustore = U->Store;
+    n = L->ncol;
+    iword = sizeof(int);
+    dword = sizeof(double);
+
+    /* For LU factors */
+    mem_usage->for_lu = (float)( (4.0f * n + 3.0f) * iword +
+				 Lstore->nzval_colptr[n] * dword +
+				 Lstore->rowind_colptr[n] * iword );
+    mem_usage->for_lu += (float)( (n + 1.0f) * iword +
+				 Ustore->colptr[n] * (dword + iword) );
+
+    /* Working storage to support factorization.
+       ILU needs 5*n more integers than LU */
+    mem_usage->total_needed = mem_usage->for_lu +
+	(float)( (2.0f * panel_size + 9.0f + NO_MARKER) * n * iword +
+		(panel_size + 1.0f) * n * dword );
+
+    return 0;
+} /* ilu_sQuerySpace */
+
+
+/*! \brief Allocate storage for the data structures common to all factor routines.
+ *
+ * <pre>
+ * For those unpredictable size, estimate as fill_ratio * nnz(A).
  * Return value:
  *     If lwork = -1, return the estimated amount of space required, plus n;
  *     otherwise, return the amount of space actually allocated when
  *     memory allocation failure occurred.
+ * </pre> 
  */
 int
 sLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
-	  int panel_size, SuperMatrix *L, SuperMatrix *U, GlobalLU_t *Glu,
-	  int **iwork, float **dwork)
+	  int panel_size, float fill_ratio, SuperMatrix *L, SuperMatrix *U,
+          GlobalLU_t *Glu, int **iwork, float **dwork)
 {
     int      info, iword, dword;
     SCformat *Lstore;
@@ -170,32 +191,32 @@ sLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
     float   *ucol;
     int      *usub, *xusub;
     int      nzlmax, nzumax, nzlumax;
-    int      FILL = sp_ienv(6);
     
-    Glu->n    = n;
-    no_expand = 0;
     iword     = sizeof(int);
     dword     = sizeof(float);
+    Glu->n    = n;
+    Glu->num_expansions = 0;
 
-    if ( !expanders )	
-        expanders = (ExpHeader*)SUPERLU_MALLOC(NO_MEMTYPE * sizeof(ExpHeader));
-    if ( !expanders ) ABORT("SUPERLU_MALLOC fails for expanders");
+    if ( !Glu->expanders )	
+        Glu->expanders = (ExpHeader*)SUPERLU_MALLOC( NO_MEMTYPE *
+                                                     sizeof(ExpHeader) );
+    if ( !Glu->expanders ) ABORT("SUPERLU_MALLOC fails for expanders");
     
     if ( fact != SamePattern_SameRowPerm ) {
 	/* Guess for L\U factors */
-	nzumax = nzlumax = FILL * annz;
-	nzlmax = SUPERLU_MAX(1, FILL/4.) * annz;
+	nzumax = nzlumax = fill_ratio * annz;
+	nzlmax = SUPERLU_MAX(1, fill_ratio/4.) * annz;
 
 	if ( lwork == -1 ) {
 	    return ( GluIntArray(n) * iword + TempSpace(m, panel_size)
 		    + (nzlmax+nzumax)*iword + (nzlumax+nzumax)*dword + n );
         } else {
-	    sSetupSpace(work, lwork, &Glu->MemModel);
+	    sSetupSpace(work, lwork, Glu);
 	}
 	
 #if ( PRNTlevel >= 1 )
-	printf("sLUMemInit() called: FILL %ld, nzlmax %ld, nzumax %ld\n", 
-	       FILL, nzlmax, nzumax);
+	printf("sLUMemInit() called: fill_ratio %.0f, nzlmax %ld, nzumax %ld\n", 
+	       fill_ratio, nzlmax, nzumax);
 	fflush(stdout);
 #endif	
 	
@@ -207,11 +228,11 @@ sLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
 	    xlusup = intMalloc(n+1);
 	    xusub  = intMalloc(n+1);
 	} else {
-	    xsup   = (int *)suser_malloc((n+1) * iword, HEAD);
-	    supno  = (int *)suser_malloc((n+1) * iword, HEAD);
-	    xlsub  = (int *)suser_malloc((n+1) * iword, HEAD);
-	    xlusup = (int *)suser_malloc((n+1) * iword, HEAD);
-	    xusub  = (int *)suser_malloc((n+1) * iword, HEAD);
+	    xsup   = (int *)suser_malloc((n+1) * iword, HEAD, Glu);
+	    supno  = (int *)suser_malloc((n+1) * iword, HEAD, Glu);
+	    xlsub  = (int *)suser_malloc((n+1) * iword, HEAD, Glu);
+	    xlusup = (int *)suser_malloc((n+1) * iword, HEAD, Glu);
+	    xusub  = (int *)suser_malloc((n+1) * iword, HEAD, Glu);
 	}
 
 	lusup = (float *) sexpand( &nzlumax, LUSUP, 0, 0, Glu );
@@ -226,7 +247,8 @@ sLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
 		SUPERLU_FREE(lsub); 
 		SUPERLU_FREE(usub);
 	    } else {
-		suser_free((nzlumax+nzumax)*dword+(nzlmax+nzumax)*iword, HEAD);
+		suser_free((nzlumax+nzumax)*dword+(nzlmax+nzumax)*iword,
+                            HEAD, Glu);
 	    }
 	    nzlumax /= 2;
 	    nzumax /= 2;
@@ -266,18 +288,18 @@ sLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
 	    Glu->MemModel = SYSTEM;
 	} else {
 	    Glu->MemModel = USER;
-	    stack.top2 = (lwork/4)*4; /* must be word-addressable */
-	    stack.size = stack.top2;
+	    Glu->stack.top2 = (lwork/4)*4; /* must be word-addressable */
+	    Glu->stack.size = Glu->stack.top2;
 	}
 	
-	lsub  = expanders[LSUB].mem  = Lstore->rowind;
-	lusup = expanders[LUSUP].mem = Lstore->nzval;
-	usub  = expanders[USUB].mem  = Ustore->rowind;
-	ucol  = expanders[UCOL].mem  = Ustore->nzval;;
-	expanders[LSUB].size         = nzlmax;
-	expanders[LUSUP].size        = nzlumax;
-	expanders[USUB].size         = nzumax;
-	expanders[UCOL].size         = nzumax;	
+	lsub  = Glu->expanders[LSUB].mem  = Lstore->rowind;
+	lusup = Glu->expanders[LUSUP].mem = Lstore->nzval;
+	usub  = Glu->expanders[USUB].mem  = Ustore->rowind;
+	ucol  = Glu->expanders[UCOL].mem  = Ustore->nzval;;
+	Glu->expanders[LSUB].size         = nzlmax;
+	Glu->expanders[LUSUP].size        = nzlumax;
+	Glu->expanders[USUB].size         = nzumax;
+	Glu->expanders[UCOL].size         = nzumax;	
     }
 
     Glu->xsup    = xsup;
@@ -293,43 +315,43 @@ sLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
     Glu->nzumax  = nzumax;
     Glu->nzlumax = nzlumax;
     
-    info = sLUWorkInit(m, n, panel_size, iwork, dwork, Glu->MemModel);
+    info = sLUWorkInit(m, n, panel_size, iwork, dwork, Glu);
     if ( info )
 	return ( info + smemory_usage(nzlmax, nzumax, nzlumax, n) + n);
     
-    ++no_expand;
+    ++Glu->num_expansions;
     return 0;
     
 } /* sLUMemInit */
 
-/* Allocate known working storage. Returns 0 if success, otherwise
+/*! \brief Allocate known working storage. Returns 0 if success, otherwise
    returns the number of bytes allocated so far when failure occurred. */
 int
 sLUWorkInit(int m, int n, int panel_size, int **iworkptr, 
-            float **dworkptr, LU_space_t MemModel)
+            float **dworkptr, GlobalLU_t *Glu)
 {
     int    isize, dsize, extra;
     float *old_ptr;
-    int    maxsuper = sp_ienv(3),
+    int    maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
            rowblk   = sp_ienv(4);
 
     isize = ( (2 * panel_size + 3 + NO_MARKER ) * m + n ) * sizeof(int);
     dsize = (m * panel_size +
 	     NUM_TEMPV(m,panel_size,maxsuper,rowblk)) * sizeof(float);
     
-    if ( MemModel == SYSTEM ) 
+    if ( Glu->MemModel == SYSTEM ) 
 	*iworkptr = (int *) intCalloc(isize/sizeof(int));
     else
-	*iworkptr = (int *) suser_malloc(isize, TAIL);
+	*iworkptr = (int *) suser_malloc(isize, TAIL, Glu);
     if ( ! *iworkptr ) {
 	fprintf(stderr, "sLUWorkInit: malloc fails for local iworkptr[]\n");
 	return (isize + n);
     }
 
-    if ( MemModel == SYSTEM )
+    if ( Glu->MemModel == SYSTEM )
 	*dworkptr = (float *) SUPERLU_MALLOC(dsize);
     else {
-	*dworkptr = (float *) suser_malloc(dsize, TAIL);
+	*dworkptr = (float *) suser_malloc(dsize, TAIL, Glu);
 	if ( NotDoubleAlign(*dworkptr) ) {
 	    old_ptr = *dworkptr;
 	    *dworkptr = (float*) DoubleAlign(*dworkptr);
@@ -338,8 +360,8 @@ sLUWorkInit(int m, int n, int panel_size, int **iworkptr,
 #ifdef DEBUG	    
 	    printf("sLUWorkInit: not aligned, extra %d\n", extra);
 #endif	    
-	    stack.top2 -= extra;
-	    stack.used += extra;
+	    Glu->stack.top2 -= extra;
+	    Glu->stack.used += extra;
 	}
     }
     if ( ! *dworkptr ) {
@@ -351,8 +373,7 @@ sLUWorkInit(int m, int n, int panel_size, int **iworkptr,
 }
 
 
-/*
- * Set up pointers for real working arrays.
+/*! \brief Set up pointers for real working arrays.
  */
 void
 sSetRWork(int m, int panel_size, float *dworkptr,
@@ -360,7 +381,7 @@ sSetRWork(int m, int panel_size, float *dworkptr,
 {
     float zero = 0.0;
 
-    int maxsuper = sp_ienv(3),
+    int maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
         rowblk   = sp_ienv(4);
     *dense = dworkptr;
     *tempv = *dense + panel_size*m;
@@ -368,8 +389,7 @@ sSetRWork(int m, int panel_size, float *dworkptr,
     sfill (*tempv, NUM_TEMPV(m,panel_size,maxsuper,rowblk), zero);     
 }
 	
-/*
- * Free the working storage used by factor routines.
+/*! \brief Free the working storage used by factor routines.
  */
 void sLUWorkFree(int *iwork, float *dwork, GlobalLU_t *Glu)
 {
@@ -377,18 +397,21 @@ void sLUWorkFree(int *iwork, float *dwork, GlobalLU_t *Glu)
 	SUPERLU_FREE (iwork);
 	SUPERLU_FREE (dwork);
     } else {
-	stack.used -= (stack.size - stack.top2);
-	stack.top2 = stack.size;
+	Glu->stack.used -= (Glu->stack.size - Glu->stack.top2);
+	Glu->stack.top2 = Glu->stack.size;
 /*	sStackCompress(Glu);  */
     }
     
-    SUPERLU_FREE (expanders);	
-    expanders = 0;
+    SUPERLU_FREE (Glu->expanders);	
+    Glu->expanders = NULL;
 }
 
-/* Expand the data structures for L and U during the factorization.
+/*! \brief Expand the data structures for L and U during the factorization.
+ * 
+ * <pre>
  * Return value:   0 - successful return
  *               > 0 - number of bytes allocated when run out of space
+ * </pre>
  */
 int
 sLUMemXpand(int jcol,
@@ -452,8 +475,7 @@ copy_mem_float(int howmany, void *old, void *new)
     for (i = 0; i < howmany; i++) dnew[i] = dold[i];
 }
 
-/*
- * Expand the existing storage to accommodate more fill-ins.
+/*! \brief Expand the existing storage to accommodate more fill-ins.
  */
 void
 *sexpand (
@@ -469,12 +491,14 @@ void
     float    alpha;
     void     *new_mem, *old_mem;
     int      new_len, tries, lword, extra, bytes_to_copy;
+    ExpHeader *expanders = Glu->expanders; /* Array of 4 types of memory */
 
     alpha = EXPAND;
 
-    if ( no_expand == 0 || keep_prev ) /* First time allocate requested */
+    if ( Glu->num_expansions == 0 || keep_prev ) {
+        /* First time allocate requested */
         new_len = *prev_len;
-    else {
+    } else {
 	new_len = alpha * *prev_len;
     }
     
@@ -483,7 +507,7 @@ void
 
     if ( Glu->MemModel == SYSTEM ) {
 	new_mem = (void *) SUPERLU_MALLOC((size_t)new_len * lword);
-	if ( no_expand != 0 ) {
+	if ( Glu->num_expansions != 0 ) {
 	    tries = 0;
 	    if ( keep_prev ) {
 		if ( !new_mem ) return (NULL);
@@ -505,8 +529,8 @@ void
 	expanders[type].mem = (void *) new_mem;
 	
     } else { /* MemModel == USER */
-	if ( no_expand == 0 ) {
-	    new_mem = suser_malloc(new_len * lword, HEAD);
+	if ( Glu->num_expansions == 0 ) {
+	    new_mem = suser_malloc(new_len * lword, HEAD, Glu);
 	    if ( NotDoubleAlign(new_mem) &&
 		(type == LUSUP || type == UCOL) ) {
 		old_mem = new_mem;
@@ -515,12 +539,11 @@ void
 #ifdef DEBUG		
 		printf("expand(): not aligned, extra %d\n", extra);
 #endif		
-		stack.top1 += extra;
-		stack.used += extra;
+		Glu->stack.top1 += extra;
+		Glu->stack.used += extra;
 	    }
 	    expanders[type].mem = (void *) new_mem;
-	}
-	else {
+	} else {
 	    tries = 0;
 	    extra = (new_len - *prev_len) * lword;
 	    if ( keep_prev ) {
@@ -536,7 +559,7 @@ void
 
 	    if ( type != USUB ) {
 		new_mem = (void*)((char*)expanders[type + 1].mem + extra);
-		bytes_to_copy = (char*)stack.array + stack.top1
+		bytes_to_copy = (char*)Glu->stack.array + Glu->stack.top1
 		    - (char*)expanders[type + 1].mem;
 		user_bcopy(expanders[type+1].mem, new_mem, bytes_to_copy);
 
@@ -552,11 +575,11 @@ void
 		    Glu->ucol = expanders[UCOL].mem =
 			(void*)((char*)expanders[UCOL].mem + extra);
 		}
-		stack.top1 += extra;
-		stack.used += extra;
+		Glu->stack.top1 += extra;
+		Glu->stack.used += extra;
 		if ( type == UCOL ) {
-		    stack.top1 += extra;   /* Add same amount for USUB */
-		    stack.used += extra;
+		    Glu->stack.top1 += extra;   /* Add same amount for USUB */
+		    Glu->stack.used += extra;
 		}
 		
 	    } /* if ... */
@@ -566,15 +589,14 @@ void
 
     expanders[type].size = new_len;
     *prev_len = new_len;
-    if ( no_expand ) ++no_expand;
+    if ( Glu->num_expansions ) ++Glu->num_expansions;
     
     return (void *) expanders[type].mem;
     
 } /* sexpand */
 
 
-/*
- * Compress the work[] array to remove fragmentation.
+/*! \brief Compress the work[] array to remove fragmentation.
  */
 void
 sStackCompress(GlobalLU_t *Glu)
@@ -614,9 +636,9 @@ sStackCompress(GlobalLU_t *Glu)
     usub = ito;
     
     last = (char*)usub + xusub[ndim] * iword;
-    fragment = (char*) (((char*)stack.array + stack.top1) - last);
-    stack.used -= (long int) fragment;
-    stack.top1 -= (long int) fragment;
+    fragment = (char*) (((char*)Glu->stack.array + Glu->stack.top1) - last);
+    Glu->stack.used -= (long int) fragment;
+    Glu->stack.top1 -= (long int) fragment;
 
     Glu->ucol = ucol;
     Glu->lsub = lsub;
@@ -630,8 +652,7 @@ sStackCompress(GlobalLU_t *Glu)
     
 }
 
-/*
- * Allocate storage for original matrix A
+/*! \brief Allocate storage for original matrix A
  */
 void
 sallocateA(int n, int nnz, float **a, int **asub, int **xa)
diff --git a/SRC/smyblas2.c b/SRC/smyblas2.c
index 00f65c5..3fd7e5a 100644
--- a/SRC/smyblas2.c
+++ b/SRC/smyblas2.c
@@ -1,21 +1,26 @@
 
-/*
+/*! @file smyblas2.c
+ * \brief Level 2 Blas operations
+ * 
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
- */
-/*
- * File name:		smyblas2.c
+ * </pre>
  * Purpose:
  *     Level 2 BLAS operations: solves and matvec, written in C.
  * Note:
  *     This is only used when the system lacks an efficient BLAS library.
+ * </pre>
  */
-
 /*
- * Solves a dense UNIT lower triangular system. The unit lower 
+ * File name:		smyblas2.c
+ */
+
+/*! \brief Solves a dense UNIT lower triangular system
+ *
+ *  The unit lower 
  * triangular matrix is stored in a 2D array M(1:nrow,1:ncol). 
  * The solution will be returned in the rhs vector.
  */
@@ -111,8 +116,9 @@ void slsolve ( int ldm, int ncol, float *M, float *rhs )
     
 }
 
-/*
- * Solves a dense upper triangular system. The upper triangular matrix is
+/*! \brief Solves a dense upper triangular system
+ * 
+ * The upper triangular matrix is
  * stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned
  * in the rhs vector.
  */
@@ -142,8 +148,8 @@ float *rhs;	/* modified */
 }
 
 
-/*
- * Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.
+/*! \brief Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.
+ * 
  * The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[].
  */
 void smatvec ( ldm, nrow, ncol, M, vec, Mxvec )
diff --git a/SRC/sp_coletree.c b/SRC/sp_coletree.c
index 1685661..5d845b0 100644
--- a/SRC/sp_coletree.c
+++ b/SRC/sp_coletree.c
@@ -1,3 +1,24 @@
+/*! @file sp_coletree.c
+ * \brief Tree layout and computation routines
+ *
+ *<pre>
+ * -- SuperLU routine (version 3.1) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * August 1, 2008
+ *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
+*/
 
 /*  Elimination tree computation and layout routines */
 
@@ -24,7 +45,6 @@
  *  Implemented path-halving by XSL 07/05/95.
  */
 
-static int	*pp;		/* parent array for sets */
 
 static 
 int *mxCallocInt(int n)
@@ -42,17 +62,19 @@ int *mxCallocInt(int n)
       
 static
 void initialize_disjoint_sets (
-	int n
-	)
+			       int n,
+			       int **pp
+			       )
 {
-	pp = mxCallocInt(n);
+	(*pp) = mxCallocInt(n);
 }
 
 
 static
 int make_set (
-	int i
-	)
+	      int i,
+	      int *pp
+	      )
 {
 	pp[i] = i;
 	return i;
@@ -61,9 +83,10 @@ int make_set (
 
 static
 int link (
-	int s,
-	int t
-	)
+	  int s,
+	  int t,
+	  int *pp
+	  )
 {
 	pp[s] = t;
 	return t;
@@ -72,7 +95,10 @@ int link (
 
 /* PATH HALVING */
 static
-int find (int i)
+int find (
+	  int i,
+	  int *pp
+	  )
 {
     register int p, gp;
     
@@ -102,8 +128,8 @@ int find (
 
 static
 void finalize_disjoint_sets (
-	void
-	)
+			     int *pp
+			     )
 {
 	SUPERLU_FREE(pp);
 }
@@ -143,9 +169,10 @@ sp_coletree(
 	int	row, col;
 	int	rroot;
 	int	p;
+	int     *pp;
 
 	root = mxCallocInt (nc);
-	initialize_disjoint_sets (nc);
+	initialize_disjoint_sets (nc, &pp);
 
 	/* Compute firstcol[row] = first nonzero column in row */
 
@@ -163,17 +190,17 @@ sp_coletree(
 	   centered at its first vertex, which has the same fill. */
 
 	for (col = 0; col < nc; col++) {
-		cset = make_set (col);
+		cset = make_set (col, pp);
 		root[cset] = col;
 		parent[col] = nc; /* Matlab */
 		for (p = acolst[col]; p < acolend[col]; p++) {
 			row = firstcol[arow[p]];
 			if (row >= col) continue;
-			rset = find (row);
+			rset = find (row, pp);
 			rroot = root[rset];
 			if (rroot != col) {
 				parent[rroot] = col;
-				cset = link (cset, rset);
+				cset = link (cset, rset, pp);
 				root[cset] = col;
 			}
 		}
@@ -181,7 +208,7 @@ sp_coletree(
 
 	SUPERLU_FREE (root);
 	SUPERLU_FREE (firstcol);
-	finalize_disjoint_sets ();
+	finalize_disjoint_sets (pp);
 	return 0;
 }
 
@@ -209,35 +236,88 @@ sp_coletree(
  *  Based on code written by John Gilbert at CMI in 1987.
  */
 
-static int	*first_kid, *next_kid;	/* Linked list of children.	*/
-static int	*post, postnum;
-
 static
 /*
  * Depth-first search from vertex v.
  */
 void etdfs (
-	int	v
-	)
+	    int	  v,
+	    int   first_kid[],
+	    int   next_kid[],
+	    int   post[], 
+	    int   *postnum
+	    )
 {
 	int	w;
 
 	for (w = first_kid[v]; w != -1; w = next_kid[w]) {
-		etdfs (w);
+		etdfs (w, first_kid, next_kid, post, postnum);
 	}
 	/* post[postnum++] = v; in Matlab */
-	post[v] = postnum++;    /* Modified by X.Li on 2/14/95 */
+	post[v] = (*postnum)++;    /* Modified by X. Li on 08/10/07 */
 }
 
 
+static
+/*
+ * Depth-first search from vertex n.  No recursion.
+ * This routine was contributed by Cédric Doucet, CEDRAT Group, Meylan, France.
+ */
+void nr_etdfs (int n, int *parent,
+	       int *first_kid, int *next_kid,
+	       int *post, int postnum)
+{
+    int current = n, first, next;
+
+    while (postnum != n){
+     
+        /* no kid for the current node */
+        first = first_kid[current];
+
+        /* no first kid for the current node */
+        if (first == -1){
+
+            /* numbering this node because it has no kid */
+            post[current] = postnum++;
+
+            /* looking for the next kid */
+            next = next_kid[current];
+
+            while (next == -1){
+
+                /* no more kids : back to the parent node */
+                current = parent[current];
+
+                /* numbering the parent node */
+                post[current] = postnum++;
+
+                /* get the next kid */
+                next = next_kid[current];
+	    }
+            
+            /* stopping criterion */
+            if (postnum==n+1) return;
+
+            /* updating current node */
+            current = next;
+        }
+        /* updating current node */
+        else {
+            current = first;
+	}
+    }
+}
+
 /*
  * Post order a tree
  */
 int *TreePostorder(
-	int n,
-	int *parent
-)
+		   int n,
+		   int *parent
+		   )
 {
+        int	*first_kid, *next_kid;	/* Linked list of children.	*/
+        int	*post, postnum;
 	int	v, dad;
 
 	/* Allocate storage for working arrays and results	*/
@@ -255,7 +335,13 @@ int *TreePostorder(
 
 	/* Depth-first search from dummy root vertex #n */
 	postnum = 0;
-	etdfs (n);
+#if 0
+	/* recursion */
+	etdfs (n, first_kid, next_kid, post, &postnum);
+#else
+	/* no recursion */
+	nr_etdfs(n, parent, first_kid, next_kid, post, postnum);
+#endif
 
 	SUPERLU_FREE (first_kid);
 	SUPERLU_FREE (next_kid);
@@ -306,27 +392,28 @@ sp_symetree(
 	int	row, col;
 	int	rroot;
 	int	p;
+	int     *pp;
 
 	root = mxCallocInt (n);
-	initialize_disjoint_sets (n);
+	initialize_disjoint_sets (n, &pp);
 
 	for (col = 0; col < n; col++) {
-		cset = make_set (col);
+		cset = make_set (col, pp);
 		root[cset] = col;
 		parent[col] = n; /* Matlab */
 		for (p = acolst[col]; p < acolend[col]; p++) {
 			row = arow[p];
 			if (row >= col) continue;
-			rset = find (row);
+			rset = find (row, pp);
 			rroot = root[rset];
 			if (rroot != col) {
 				parent[rroot] = col;
-				cset = link (cset, rset);
+				cset = link (cset, rset, pp);
 				root[cset] = col;
 			}
 		}
 	}
 	SUPERLU_FREE (root);
-	finalize_disjoint_sets ();
+	finalize_disjoint_sets (pp);
 	return 0;
 } /* SP_SYMETREE */
diff --git a/SRC/sp_ienv.c b/SRC/sp_ienv.c
index 0680e02..d61ef7a 100644
--- a/SRC/sp_ienv.c
+++ b/SRC/sp_ienv.c
@@ -1,13 +1,23 @@
+/*! @file sp_ienv.c
+ * \brief Chooses machine-dependent parameters for the local environment.
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * November, 2010
+ * </pre>
+*/
+
 /*
  * File name:		sp_ienv.c
  * History:             Modified from lapack routine ILAENV
  */
 #include "slu_Cnames.h"
 
-int
-sp_ienv(int ispec)
-{
-/*
+/*! \brief
+
+ <pre>
     Purpose   
     =======   
 
@@ -32,26 +42,32 @@ sp_ienv(int ispec)
 	         nodes (columns) in a subtree of the elimination tree is less
 		 than relax, this subtree is considered as one supernode,
 		 regardless of their row structures.
-            = 3: the maximum size for a supernode;
+            = 3: the maximum size for a supernode in complete LU;
 	    = 4: the minimum row dimension for 2-D blocking to be used;
 	    = 5: the minimum column dimension for 2-D blocking to be used;
 	    = 6: the estimated fills factor for L and U, compared with A;
+	    = 7: the maximum size for a supernode in ILU.
 	    
    (SP_IENV) (output) int
             >= 0: the value of the parameter specified by ISPEC   
             < 0:  if SP_IENV = -k, the k-th argument had an illegal value. 
   
     ===================================================================== 
+</pre>
 */
+int
+sp_ienv(int ispec)
+{
     int i;
 
     switch (ispec) {
-	case 1: return (10);
-	case 2: return (5);
+	case 1: return (12);
+	case 2: return (6);
 	case 3: return (100);
 	case 4: return (200);
-	case 5: return (40);
+	case 5: return (60);
         case 6: return (20);
+        case 7: return (10);
     }
 
     /* Invalid value for ISPEC */
diff --git a/SRC/sp_preorder.c b/SRC/sp_preorder.c
index 524a8ee..abee619 100644
--- a/SRC/sp_preorder.c
+++ b/SRC/sp_preorder.c
@@ -1,10 +1,12 @@
+/*! @file sp_preorder.c
+ * \brief Permute and performs functions on columns of orginal matrix
+ */
 #include "slu_ddefs.h"
 
-void
-sp_preorder(superlu_options_t *options,  SuperMatrix *A, int *perm_c, 
-	    int *etree, SuperMatrix *AC)
-{
-/*
+
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -54,9 +56,12 @@ sp_preorder(superlu_options_t *options,  SuperMatrix *A, int *perm_c,
  *         The resulting matrix after applied the column permutation
  *         perm_c[] to matrix A. The type of AC can be:
  *         Stype = SLU_NCP; Dtype = A->Dtype; Mtype = SLU_GE.
- *
+ * </pre>
  */
-
+void
+sp_preorder(superlu_options_t *options,  SuperMatrix *A, int *perm_c, 
+	    int *etree, SuperMatrix *AC)
+{
     NCformat  *Astore;
     NCPformat *ACstore;
     int       *iwork, *post;
diff --git a/SRC/spanel_bmod.c b/SRC/spanel_bmod.c
index e98ac9b..846cf0f 100644
--- a/SRC/spanel_bmod.c
+++ b/SRC/spanel_bmod.c
@@ -1,22 +1,27 @@
 
-/*
+/*! @file spanel_bmod.c
+ * \brief Performs numeric block updates
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
 /*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+
 */
 
 #include <stdio.h>
@@ -30,6 +35,25 @@ void slsolve(int, int, float *, float *);
 void smatvec(int, int, int, float *, float *, float *);
 extern void scheck_tempv();
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ *    Performs numeric block updates (sup-panel) in topological order.
+ *    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ *    Special processing on the supernodal portion of L\U[*,j]
+ *
+ *    Before entering this routine, the original nonzeros in the panel 
+ *    were already copied into the spa[m,w].
+ *
+ *    Updated/Output parameters-
+ *    dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
+ *    collectively in the m-by-w vector dense[*]. 
+ * </pre>
+ */
+
 void
 spanel_bmod (
 	    const int  m,          /* in - number of rows in the matrix */
@@ -44,22 +68,7 @@ spanel_bmod (
 	    SuperLUStat_t *stat    /* output */
 	    )
 {
-/* 
- * Purpose
- * =======
- *
- *    Performs numeric block updates (sup-panel) in topological order.
- *    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
- *    Special processing on the supernodal portion of L\U[*,j]
- *
- *    Before entering this routine, the original nonzeros in the panel 
- *    were already copied into the spa[m,w].
- *
- *    Updated/Output parameters-
- *	dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
- *      collectively in the m-by-w vector dense[*]. 
- *
- */
+
 
 #ifdef USE_VENDOR_BLAS
 #ifdef _CRAY
@@ -105,7 +114,7 @@ spanel_bmod (
     xlusup  = Glu->xlusup;
     
     if ( first ) {
-	maxsuper = sp_ienv(3);
+	maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) );
 	rowblk   = sp_ienv(4);
 	colblk   = sp_ienv(5);
 	first = 0;
diff --git a/SRC/spanel_dfs.c b/SRC/spanel_dfs.c
index cb4417c..3f5bb46 100644
--- a/SRC/spanel_dfs.c
+++ b/SRC/spanel_dfs.c
@@ -1,46 +1,32 @@
 
-/*
+/*! @file spanel_dfs.c
+ * \brief Peforms a symbolic factorization on a panel of symbols
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_sdefs.h"
 
-void
-spanel_dfs (
-	   const int  m,           /* in - number of rows in the matrix */
-	   const int  w,           /* in */
-	   const int  jcol,        /* in */
-	   SuperMatrix *A,       /* in - original matrix */
-	   int        *perm_r,     /* in */
-	   int        *nseg,	   /* out */
-	   float     *dense,      /* out */
-	   int        *panel_lsub, /* out */
-	   int        *segrep,     /* out */
-	   int        *repfnz,     /* out */
-	   int        *xprune,     /* out */
-	   int        *marker,     /* out */     
-	   int        *parent,     /* working array */
-	   int        *xplore,     /* working array */
-	   GlobalLU_t *Glu         /* modified */
-	   )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -66,8 +52,29 @@ spanel_dfs (
  *   repfnz: SuperA-col --> PA-row
  *   parent: SuperA-col --> SuperA-col
  *   xplore: SuperA-col --> index to L-structure
- *
+ * </pre>
  */
+
+void
+spanel_dfs (
+	   const int  m,           /* in - number of rows in the matrix */
+	   const int  w,           /* in */
+	   const int  jcol,        /* in */
+	   SuperMatrix *A,       /* in - original matrix */
+	   int        *perm_r,     /* in */
+	   int        *nseg,	   /* out */
+	   float     *dense,      /* out */
+	   int        *panel_lsub, /* out */
+	   int        *segrep,     /* out */
+	   int        *repfnz,     /* out */
+	   int        *xprune,     /* out */
+	   int        *marker,     /* out */     
+	   int        *parent,     /* working array */
+	   int        *xplore,     /* working array */
+	   GlobalLU_t *Glu         /* modified */
+	   )
+{
+
     NCPformat *Astore;
     float    *a;
     int       *asub;
diff --git a/SRC/spivotL.c b/SRC/spivotL.c
index 9c300a4..2a6950c 100644
--- a/SRC/spivotL.c
+++ b/SRC/spivotL.c
@@ -1,23 +1,26 @@
 
-/*
+/*! @file spivotL.c
+ * \brief Performs numerical pivoting
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include <math.h>
 #include <stdlib.h>
@@ -25,20 +28,9 @@
 
 #undef DEBUG
 
-int
-spivotL(
-        const int  jcol,     /* in */
-        const float u,      /* in - diagonal pivoting threshold */
-        int        *usepr,   /* re-use the pivot sequence given by perm_r/iperm_r */
-        int        *perm_r,  /* may be modified */
-        int        *iperm_r, /* in - inverse of perm_r */
-        int        *iperm_c, /* in - used to find diagonal of Pc*A*Pc' */
-        int        *pivrow,  /* out */
-        GlobalLU_t *Glu,     /* modified - global LU data structures */
-	SuperLUStat_t *stat  /* output */
-       )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *   Performs the numerical pivoting on the current column of L,
@@ -57,8 +49,23 @@ spivotL(
  *
  *   Return value: 0      success;
  *                 i > 0  U(i,i) is exactly zero.
- *
+ * </pre>
  */
+
+int
+spivotL(
+        const int  jcol,     /* in */
+        const double u,      /* in - diagonal pivoting threshold */
+        int        *usepr,   /* re-use the pivot sequence given by perm_r/iperm_r */
+        int        *perm_r,  /* may be modified */
+        int        *iperm_r, /* in - inverse of perm_r */
+        int        *iperm_c, /* in - used to find diagonal of Pc*A*Pc' */
+        int        *pivrow,  /* out */
+        GlobalLU_t *Glu,     /* modified - global LU data structures */
+	SuperLUStat_t *stat  /* output */
+       )
+{
+
     int          fsupc;	    /* first column in the supernode */
     int          nsupc;	    /* no of columns in the supernode */
     int          nsupr;     /* no of rows in the supernode */
@@ -116,8 +123,12 @@ if ( jcol == MIN_COL ) {
 
     /* Test for singularity */
     if ( pivmax == 0.0 ) {
+#if 1
 	*pivrow = lsub_ptr[pivptr];
 	perm_r[*pivrow] = jcol;
+#else
+	perm_r[diagind] = jcol;
+#endif
 	*usepr = 0;
 	return (jcol+1);
     }
diff --git a/SRC/spivotgrowth.c b/SRC/spivotgrowth.c
index 6aac212..a6e65ec 100644
--- a/SRC/spivotgrowth.c
+++ b/SRC/spivotgrowth.c
@@ -1,19 +1,20 @@
 
-/*
+/*! @file spivotgrowth.c
+ * \brief Computes the reciprocal pivot growth factor
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 #include <math.h>
 #include "slu_sdefs.h"
 
-float
-sPivotGrowth(int ncols, SuperMatrix *A, int *perm_c, 
-             SuperMatrix *L, SuperMatrix *U)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -41,8 +42,14 @@ sPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
  *	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
  *          storage scheme, i.e., U has types: Stype = NC;
  *          Dtype = SLU_S; Mtype = TRU.
- *
+ * </pre>
  */
+
+float
+sPivotGrowth(int ncols, SuperMatrix *A, int *perm_c, 
+             SuperMatrix *L, SuperMatrix *U)
+{
+
     NCformat *Astore;
     SCformat *Lstore;
     NCformat *Ustore;
@@ -51,7 +58,6 @@ sPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
     int      i, j, k, oldcol;
     int      *inv_perm_c;
     float   rpg, maxaj, maxuj;
-    extern   double slamch_(char *);
     float   smlnum;
     float   *luval;
    
diff --git a/SRC/spruneL.c b/SRC/spruneL.c
index 6a32424..3301bfa 100644
--- a/SRC/spruneL.c
+++ b/SRC/spruneL.c
@@ -1,26 +1,39 @@
 
-/*
+/*! @file spruneL.c
+ * \brief Prunes the L-structure
+ *
+ *<pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ *</pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_sdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *   Prunes the L-structure of supernodes whose L-structure
+ *   contains the current pivot row "pivrow"
+ * </pre>
+ */
+
 void
 spruneL(
        const int  jcol,	     /* in */
@@ -33,13 +46,7 @@ spruneL(
        GlobalLU_t *Glu       /* modified - global LU data structures */
        )
 {
-/*
- * Purpose
- * =======
- *   Prunes the L-structure of supernodes whose L-structure
- *   contains the current pivot row "pivrow"
- *
- */
+
     float     utemp;
     int        jsupno, irep, irep1, kmin, kmax, krow, movnum;
     int        i, ktemp, minloc, maxloc;
@@ -106,8 +113,8 @@ spruneL(
 			kmax--;
 		    else if ( perm_r[lsub[kmin]] != EMPTY )
 			kmin++;
-		    else { /* kmin below pivrow, and kmax above pivrow: 
-		            * 	interchange the two subscripts
+		    else { /* kmin below pivrow (not yet pivoted), and kmax
+                            * above pivrow: interchange the two subscripts
 			    */
 		        ktemp = lsub[kmin];
 		        lsub[kmin] = lsub[kmax];
diff --git a/SRC/sreadhb.c b/SRC/sreadhb.c
index e0cf193..77f6f19 100644
--- a/SRC/sreadhb.c
+++ b/SRC/sreadhb.c
@@ -1,17 +1,85 @@
 
-/*
+/*! @file sreadhb.c
+ * \brief Read a matrix stored in Harwell-Boeing format
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Purpose
+ * =======
+ * 
+ * Read a FLOAT PRECISION matrix stored in Harwell-Boeing format 
+ * as described below.
+ * 
+ * Line 1 (A72,A8) 
+ *  	Col. 1 - 72   Title (TITLE) 
+ *	Col. 73 - 80  Key (KEY) 
+ * 
+ * Line 2 (5I14) 
+ * 	Col. 1 - 14   Total number of lines excluding header (TOTCRD) 
+ * 	Col. 15 - 28  Number of lines for pointers (PTRCRD) 
+ * 	Col. 29 - 42  Number of lines for row (or variable) indices (INDCRD) 
+ * 	Col. 43 - 56  Number of lines for numerical values (VALCRD) 
+ *	Col. 57 - 70  Number of lines for right-hand sides (RHSCRD) 
+ *                    (including starting guesses and solution vectors 
+ *		       if present) 
+ *           	      (zero indicates no right-hand side data is present) 
+ *
+ * Line 3 (A3, 11X, 4I14) 
+ *   	Col. 1 - 3    Matrix type (see below) (MXTYPE) 
+ * 	Col. 15 - 28  Number of rows (or variables) (NROW) 
+ * 	Col. 29 - 42  Number of columns (or elements) (NCOL) 
+ *	Col. 43 - 56  Number of row (or variable) indices (NNZERO) 
+ *	              (equal to number of entries for assembled matrices) 
+ * 	Col. 57 - 70  Number of elemental matrix entries (NELTVL) 
+ *	              (zero in the case of assembled matrices) 
+ * Line 4 (2A16, 2A20) 
+ * 	Col. 1 - 16   Format for pointers (PTRFMT) 
+ *	Col. 17 - 32  Format for row (or variable) indices (INDFMT) 
+ *	Col. 33 - 52  Format for numerical values of coefficient matrix (VALFMT) 
+ * 	Col. 53 - 72 Format for numerical values of right-hand sides (RHSFMT) 
+ *
+ * Line 5 (A3, 11X, 2I14) Only present if there are right-hand sides present 
+ *    	Col. 1 	      Right-hand side type: 
+ *	         	  F for full storage or M for same format as matrix 
+ *    	Col. 2        G if a starting vector(s) (Guess) is supplied. (RHSTYP) 
+ *    	Col. 3        X if an exact solution vector(s) is supplied. 
+ *	Col. 15 - 28  Number of right-hand sides (NRHS) 
+ *	Col. 29 - 42  Number of row indices (NRHSIX) 
+ *          	      (ignored in case of unassembled matrices) 
+ *
+ * The three character type field on line 3 describes the matrix type. 
+ * The following table lists the permitted values for each of the three 
+ * characters. As an example of the type field, RSA denotes that the matrix 
+ * is real, symmetric, and assembled. 
+ *
+ * First Character: 
+ *	R Real matrix 
+ *	C Complex matrix 
+ *	P Pattern only (no numerical values supplied) 
+ *
+ * Second Character: 
+ *	S Symmetric 
+ *	U Unsymmetric 
+ *	H Hermitian 
+ *	Z Skew symmetric 
+ *	R Rectangular 
+ *
+ * Third Character: 
+ *	A Assembled 
+ *	E Elemental matrices (unassembled) 
+ *
+ * </pre>
  */
 #include <stdio.h>
 #include <stdlib.h>
 #include "slu_sdefs.h"
 
 
-/* Eat up the rest of the current line */
+/*! \brief Eat up the rest of the current line */
 int sDumpLine(FILE *fp)
 {
     register int c;
@@ -59,7 +127,7 @@ int sParseFloatFormat(char *buf, int *num, int *size)
     return 0;
 }
 
-int sReadVector(FILE *fp, int n, int *where, int perline, int persize)
+static int ReadVector(FILE *fp, int n, int *where, int perline, int persize)
 {
     register int i, j, item;
     char tmp, buf[100];
@@ -107,72 +175,6 @@ void
 sreadhb(int *nrow, int *ncol, int *nonz,
 	float **nzval, int **rowind, int **colptr)
 {
-/* 
- * Purpose
- * =======
- * 
- * Read a FLOAT PRECISION matrix stored in Harwell-Boeing format 
- * as described below.
- * 
- * Line 1 (A72,A8) 
- *  	Col. 1 - 72   Title (TITLE) 
- *	Col. 73 - 80  Key (KEY) 
- * 
- * Line 2 (5I14) 
- * 	Col. 1 - 14   Total number of lines excluding header (TOTCRD) 
- * 	Col. 15 - 28  Number of lines for pointers (PTRCRD) 
- * 	Col. 29 - 42  Number of lines for row (or variable) indices (INDCRD) 
- * 	Col. 43 - 56  Number of lines for numerical values (VALCRD) 
- *	Col. 57 - 70  Number of lines for right-hand sides (RHSCRD) 
- *                    (including starting guesses and solution vectors 
- *		       if present) 
- *           	      (zero indicates no right-hand side data is present) 
- *
- * Line 3 (A3, 11X, 4I14) 
- *   	Col. 1 - 3    Matrix type (see below) (MXTYPE) 
- * 	Col. 15 - 28  Number of rows (or variables) (NROW) 
- * 	Col. 29 - 42  Number of columns (or elements) (NCOL) 
- *	Col. 43 - 56  Number of row (or variable) indices (NNZERO) 
- *	              (equal to number of entries for assembled matrices) 
- * 	Col. 57 - 70  Number of elemental matrix entries (NELTVL) 
- *	              (zero in the case of assembled matrices) 
- * Line 4 (2A16, 2A20) 
- * 	Col. 1 - 16   Format for pointers (PTRFMT) 
- *	Col. 17 - 32  Format for row (or variable) indices (INDFMT) 
- *	Col. 33 - 52  Format for numerical values of coefficient matrix (VALFMT) 
- * 	Col. 53 - 72 Format for numerical values of right-hand sides (RHSFMT) 
- *
- * Line 5 (A3, 11X, 2I14) Only present if there are right-hand sides present 
- *    	Col. 1 	      Right-hand side type: 
- *	         	  F for full storage or M for same format as matrix 
- *    	Col. 2        G if a starting vector(s) (Guess) is supplied. (RHSTYP) 
- *    	Col. 3        X if an exact solution vector(s) is supplied. 
- *	Col. 15 - 28  Number of right-hand sides (NRHS) 
- *	Col. 29 - 42  Number of row indices (NRHSIX) 
- *          	      (ignored in case of unassembled matrices) 
- *
- * The three character type field on line 3 describes the matrix type. 
- * The following table lists the permitted values for each of the three 
- * characters. As an example of the type field, RSA denotes that the matrix 
- * is real, symmetric, and assembled. 
- *
- * First Character: 
- *	R Real matrix 
- *	C Complex matrix 
- *	P Pattern only (no numerical values supplied) 
- *
- * Second Character: 
- *	S Symmetric 
- *	U Unsymmetric 
- *	H Hermitian 
- *	Z Skew symmetric 
- *	R Rectangular 
- *
- * Third Character: 
- *	A Assembled 
- *	E Elemental matrices (unassembled) 
- *
- */
 
     register int i, numer_lines = 0, rhscrd = 0;
     int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
@@ -243,8 +245,8 @@ sreadhb(int *nrow, int *ncol, int *nonz,
     printf("valnum %d, valsize %d\n", valnum, valsize);
 #endif
     
-    sReadVector(fp, *ncol+1, *colptr, colnum, colsize);
-    sReadVector(fp, *nonz, *rowind, rownum, rowsize);
+    ReadVector(fp, *ncol+1, *colptr, colnum, colsize);
+    ReadVector(fp, *nonz, *rowind, rownum, rowsize);
     if ( numer_lines ) {
         sReadValues(fp, *nonz, *nzval, valnum, valsize);
     }
diff --git a/SRC/sreadrb.c b/SRC/sreadrb.c
new file mode 100644
index 0000000..00cb8bf
--- /dev/null
+++ b/SRC/sreadrb.c
@@ -0,0 +1,237 @@
+
+/*! @file sreadrb.c
+ * \brief Read a matrix stored in Rutherford-Boeing format
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ *
+ * Purpose
+ * =======
+ *
+ * Read a FLOAT PRECISION matrix stored in Rutherford-Boeing format 
+ * as described below.
+ *
+ * Line 1 (A72, A8)
+ *      Col. 1 - 72   Title (TITLE)
+ *      Col. 73 - 80  Matrix name / identifier (MTRXID)
+ *
+ * Line 2 (I14, 3(1X, I13))
+ *      Col. 1 - 14   Total number of lines excluding header (TOTCRD)
+ *      Col. 16 - 28  Number of lines for pointers (PTRCRD)
+ *      Col. 30 - 42  Number of lines for row (or variable) indices (INDCRD)
+ *      Col. 44 - 56  Number of lines for numerical values (VALCRD)
+ *
+ * Line 3 (A3, 11X, 4(1X, I13))
+ *      Col. 1 - 3    Matrix type (see below) (MXTYPE)
+ *      Col. 15 - 28  Compressed Column: Number of rows (NROW)
+ *                    Elemental: Largest integer used to index variable (MVAR)
+ *      Col. 30 - 42  Compressed Column: Number of columns (NCOL)
+ *                    Elemental: Number of element matrices (NELT)
+ *      Col. 44 - 56  Compressed Column: Number of entries (NNZERO)
+ *                    Elemental: Number of variable indeces (NVARIX)
+ *      Col. 58 - 70  Compressed Column: Unused, explicitly zero
+ *                    Elemental: Number of elemental matrix entries (NELTVL)
+ *
+ * Line 4 (2A16, A20)
+ *      Col. 1 - 16   Fortran format for pointers (PTRFMT)
+ *      Col. 17 - 32  Fortran format for row (or variable) indices (INDFMT)
+ *      Col. 33 - 52  Fortran format for numerical values of coefficient matrix
+ *                    (VALFMT)
+ *                    (blank in the case of matrix patterns)
+ *
+ * The three character type field on line 3 describes the matrix type.
+ * The following table lists the permitted values for each of the three
+ * characters. As an example of the type field, RSA denotes that the matrix
+ * is real, symmetric, and assembled.
+ *
+ * First Character:
+ *      R Real matrix
+ *      C Complex matrix
+ *      I integer matrix
+ *      P Pattern only (no numerical values supplied)
+ *      Q Pattern only (numerical values supplied in associated auxiliary value
+ *        file)
+ *
+ * Second Character:
+ *      S Symmetric
+ *      U Unsymmetric
+ *      H Hermitian
+ *      Z Skew symmetric
+ *      R Rectangular
+ *
+ * Third Character:
+ *      A Compressed column form
+ *      E Elemental form
+ *
+ * </pre>
+ */
+
+#include "slu_sdefs.h"
+
+
+/*! \brief Eat up the rest of the current line */
+static int sDumpLine(FILE *fp)
+{
+    register int c;
+    while ((c = fgetc(fp)) != '\n') ;
+    return 0;
+}
+
+static int sParseIntFormat(char *buf, int *num, int *size)
+{
+    char *tmp;
+
+    tmp = buf;
+    while (*tmp++ != '(') ;
+    sscanf(tmp, "%d", num);
+    while (*tmp != 'I' && *tmp != 'i') ++tmp;
+    ++tmp;
+    sscanf(tmp, "%d", size);
+    return 0;
+}
+
+static int sParseFloatFormat(char *buf, int *num, int *size)
+{
+    char *tmp, *period;
+
+    tmp = buf;
+    while (*tmp++ != '(') ;
+    *num = atoi(tmp); /*sscanf(tmp, "%d", num);*/
+    while (*tmp != 'E' && *tmp != 'e' && *tmp != 'D' && *tmp != 'd'
+           && *tmp != 'F' && *tmp != 'f') {
+        /* May find kP before nE/nD/nF, like (1P6F13.6). In this case the
+           num picked up refers to P, which should be skipped. */
+        if (*tmp=='p' || *tmp=='P') {
+           ++tmp;
+           *num = atoi(tmp); /*sscanf(tmp, "%d", num);*/
+        } else {
+           ++tmp;
+        }
+    }
+    ++tmp;
+    period = tmp;
+    while (*period != '.' && *period != ')') ++period ;
+    *period = '\0';
+    *size = atoi(tmp); /*sscanf(tmp, "%2d", size);*/
+
+    return 0;
+}
+
+static int ReadVector(FILE *fp, int n, int *where, int perline, int persize)
+{
+    register int i, j, item;
+    char tmp, buf[100];
+
+    i = 0;
+    while (i < n) {
+        fgets(buf, 100, fp);    /* read a line at a time */
+        for (j=0; j<perline && i<n; j++) {
+            tmp = buf[(j+1)*persize];     /* save the char at that place */
+            buf[(j+1)*persize] = 0;       /* null terminate */
+            item = atoi(&buf[j*persize]); 
+            buf[(j+1)*persize] = tmp;     /* recover the char at that place */
+            where[i++] = item - 1;
+        }
+    }
+
+    return 0;
+}
+
+static int sReadValues(FILE *fp, int n, float *destination, int perline,
+        int persize)
+{
+    register int i, j, k, s;
+    char tmp, buf[100];
+
+    i = 0;
+    while (i < n) {
+        fgets(buf, 100, fp);    /* read a line at a time */
+        for (j=0; j<perline && i<n; j++) {
+            tmp = buf[(j+1)*persize];     /* save the char at that place */
+            buf[(j+1)*persize] = 0;       /* null terminate */
+            s = j*persize;
+            for (k = 0; k < persize; ++k) /* No D_ format in C */
+                if ( buf[s+k] == 'D' || buf[s+k] == 'd' ) buf[s+k] = 'E';
+            destination[i++] = atof(&buf[s]);
+            buf[(j+1)*persize] = tmp;     /* recover the char at that place */
+        }
+    }
+
+    return 0;
+}
+
+
+
+void
+sreadrb(int *nrow, int *ncol, int *nonz,
+        float **nzval, int **rowind, int **colptr)
+{
+
+    register int i, numer_lines = 0;
+    int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
+    char buf[100], type[4];
+    FILE *fp;
+
+    fp = stdin;
+
+    /* Line 1 */
+    fgets(buf, 100, fp);
+    fputs(buf, stdout);
+
+    /* Line 2 */
+    for (i=0; i<4; i++) {
+        fscanf(fp, "%14c", buf); buf[14] = 0;
+        sscanf(buf, "%d", &tmp);
+        if (i == 3) numer_lines = tmp;
+    }
+    sDumpLine(fp);
+
+    /* Line 3 */
+    fscanf(fp, "%3c", type);
+    fscanf(fp, "%11c", buf); /* pad */
+    type[3] = 0;
+#ifdef DEBUG
+    printf("Matrix type %s\n", type);
+#endif
+
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", nrow);
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", ncol);
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", nonz);
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", &tmp);
+
+    if (tmp != 0)
+        printf("This is not an assembled matrix!\n");
+    if (*nrow != *ncol)
+        printf("Matrix is not square.\n");
+    sDumpLine(fp);
+
+    /* Allocate storage for the three arrays ( nzval, rowind, colptr ) */
+    sallocateA(*ncol, *nonz, nzval, rowind, colptr);
+
+    /* Line 4: format statement */
+    fscanf(fp, "%16c", buf);
+    sParseIntFormat(buf, &colnum, &colsize);
+    fscanf(fp, "%16c", buf);
+    sParseIntFormat(buf, &rownum, &rowsize);
+    fscanf(fp, "%20c", buf);
+    sParseFloatFormat(buf, &valnum, &valsize);
+    sDumpLine(fp);
+
+#ifdef DEBUG
+    printf("%d rows, %d nonzeros\n", *nrow, *nonz);
+    printf("colnum %d, colsize %d\n", colnum, colsize);
+    printf("rownum %d, rowsize %d\n", rownum, rowsize);
+    printf("valnum %d, valsize %d\n", valnum, valsize);
+#endif
+
+    ReadVector(fp, *ncol+1, *colptr, colnum, colsize);
+    ReadVector(fp, *nonz, *rowind, rownum, rowsize);
+    if ( numer_lines ) {
+        sReadValues(fp, *nonz, *nzval, valnum, valsize);
+    }
+
+    fclose(fp);
+}
diff --git a/EXAMPLE/dreadtriple.c b/SRC/sreadtriple.c
similarity index 61%
rename from EXAMPLE/dreadtriple.c
rename to SRC/sreadtriple.c
index b8768fa..ceb1da0 100644
--- a/EXAMPLE/dreadtriple.c
+++ b/SRC/sreadtriple.c
@@ -1,11 +1,20 @@
-#include <stdio.h>
-#include "dsp_defs.h"
-#include "util.h"
+
+/*! @file sreadtriple.c
+ * \brief Read a matrix stored in triplet (coordinate) format
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_sdefs.h"
 
 
 void
-dreadtriple(int *m, int *n, int *nonz,
-	    double **nzval, int **rowind, int **colptr)
+sreadtriple(int *m, int *n, int *nonz,
+	    float **nzval, int **rowind, int **colptr)
 {
 /*
  * Output parameters
@@ -15,11 +24,12 @@ dreadtriple(int *m, int *n, int *nonz,
  *	row i of A is given by a[k],k=xa[i],...,xa[i+1]-1.
  *
  */
-    int    i, j, k, jsize, lasta, nnz, nz;
-    double *a, *val;
+    int    j, k, jsize, nnz, nz;
+    float *a, *val;
     int    *asub, *xa, *row, *col;
-    
-    /* 	Matrix format:
+    int    zero_base = 0;
+
+    /*  Matrix format:
      *    First line:  #rows, #cols, #non-zero
      *    Triplet in the rest of lines:
      *                 row, col, value
@@ -28,12 +38,12 @@ dreadtriple(int *m, int *n, int *nonz,
     scanf("%d%d", n, nonz);
     *m = *n;
     printf("m %d, n %d, nonz %d\n", *m, *n, *nonz);
-    dallocateA(*n, *nonz, nzval, rowind, colptr); /* Allocate storage */
+    sallocateA(*n, *nonz, nzval, rowind, colptr); /* Allocate storage */
     a    = *nzval;
     asub = *rowind;
     xa   = *colptr;
 
-    val = (double *) SUPERLU_MALLOC(*nonz * sizeof(double));
+    val = (float *) SUPERLU_MALLOC(*nonz * sizeof(float));
     row = (int *) SUPERLU_MALLOC(*nonz * sizeof(int));
     col = (int *) SUPERLU_MALLOC(*nonz * sizeof(int));
 
@@ -41,15 +51,25 @@ dreadtriple(int *m, int *n, int *nonz,
 
     /* Read into the triplet array from a file */
     for (nnz = 0, nz = 0; nnz < *nonz; ++nnz) {
-	scanf("%d%d%lf\n", &row[nz], &col[nz], &val[nz]);
-	/* Change to 0-based indexing. */
-#if 0
-	--row[nz];
-	--col[nz];
-#endif
+	scanf("%d%d%f\n", &row[nz], &col[nz], &val[nz]);
+
+        if ( nnz == 0 ) { /* first nonzero */
+	    if ( row[0] == 0 || col[0] == 0 ) {
+		zero_base = 1;
+		printf("triplet file: row/col indices are zero-based.\n");
+	    } else
+		printf("triplet file: row/col indices are one-based.\n");
+        }
+
+        if ( !zero_base ) { 
+ 	  /* Change to 0-based indexing. */
+	  --row[nz];
+	  --col[nz];
+        }
+
 	if (row[nz] < 0 || row[nz] >= *m || col[nz] < 0 || col[nz] >= *n
 	    /*|| val[nz] == 0.*/) {
-	    fprintf(stderr, "nz %d, (%d, %d) = %e out of bound, removed\n", 
+	    fprintf(stderr, "nz %d, (%d, %d) = %e out of bound, removed\n",
 		    nz, row[nz], col[nz], val[nz]);
 	    exit(-1);
 	} else {
@@ -89,30 +109,32 @@ dreadtriple(int *m, int *n, int *nonz,
     SUPERLU_FREE(col);
 
 #ifdef CHK_INPUT
-    for (i = 0; i < *n; i++) {
-	printf("Col %d, xa %d\n", i, xa[i]);
-	for (k = xa[i]; k < xa[i+1]; k++)
-	    printf("%d\t%16.10f\n", asub[k], a[k]);
+    {
+	int i;
+	for (i = 0; i < *n; i++) {
+	    printf("Col %d, xa %d\n", i, xa[i]);
+	    for (k = xa[i]; k < xa[i+1]; k++)
+		printf("%d\t%16.10f\n", asub[k], a[k]);
+	}
     }
 #endif
 
 }
 
 
-void dreadrhs(int m, double *b)
+void sreadrhs(int m, float *b)
 {
     FILE *fp, *fopen();
-    int i, j;
+    int i;
+    /*int j;*/
 
     if ( !(fp = fopen("b.dat", "r")) ) {
         fprintf(stderr, "dreadrhs: file does not exist\n");
 	exit(-1);
     }
     for (i = 0; i < m; ++i)
-      fscanf(fp, "%lf\n", &b[i]);
-      /*fscanf(fp, "%d%lf\n", &j, &b[i]);*/
+      fscanf(fp, "%f\n", &b[i]);
+
     /*        readpair_(j, &b[i]);*/
     fclose(fp);
 }
-
-
diff --git a/SRC/ssnode_bmod.c b/SRC/ssnode_bmod.c
index 6ba0f52..c6813dd 100644
--- a/SRC/ssnode_bmod.c
+++ b/SRC/ssnode_bmod.c
@@ -1,29 +1,31 @@
 
-/*
+/*! @file ssnode_bmod.c
+ * \brief Performs numeric block updates within the relaxed snode.
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_sdefs.h"
 
 
-/*
- * Performs numeric block updates within the relaxed snode. 
+/*! \brief Performs numeric block updates within the relaxed snode. 
  */
 int
 ssnode_bmod (
diff --git a/SRC/ssnode_dfs.c b/SRC/ssnode_dfs.c
index eb14fc0..a191bc4 100644
--- a/SRC/ssnode_dfs.c
+++ b/SRC/ssnode_dfs.c
@@ -1,26 +1,46 @@
 
-/*
+/*! @file ssnode_dfs.c
+ * \brief Determines the union of row structures of columns within the relaxed node
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_sdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *    ssnode_dfs() - Determine the union of the row structures of those 
+ *    columns within the relaxed snode.
+ *    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
+ *    the portion outside the rectangular supernode must be zero.
+ *
+ * Return value
+ * ============
+ *     0   success;
+ *    >0   number of bytes allocated when run out of memory.
+ * </pre>
+ */
+
 int
 ssnode_dfs (
 	   const int  jcol,	    /* in - start of the supernode */
@@ -33,19 +53,7 @@ ssnode_dfs (
 	   GlobalLU_t *Glu          /* modified */
 	   )
 {
-/* Purpose
- * =======
- *    ssnode_dfs() - Determine the union of the row structures of those 
- *    columns within the relaxed snode.
- *    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
- *    the portion outside the rectangular supernode must be zero.
- *
- * Return value
- * ============
- *     0   success;
- *    >0   number of bytes allocated when run out of memory.
- *
- */
+
     register int i, k, ifrom, ito, nextl, new_next;
     int          nsuper, krow, kmark, mem_error;
     int          *xsup, *supno;
diff --git a/SRC/ssp_blas2.c b/SRC/ssp_blas2.c
index 174db34..7824be6 100644
--- a/SRC/ssp_blas2.c
+++ b/SRC/ssp_blas2.c
@@ -1,10 +1,13 @@
 
-/*
+/*! @file ssp_blas2.c
+ * \brief Sparse BLAS 2, using some dense BLAS 2 operations
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
- *
+ * </pre>
  */
 /*
  * File name:		ssp_blas2.c
@@ -20,12 +23,9 @@ void susolve(int, int, float*, float*);
 void slsolve(int, int, float*, float*);
 void smatvec(int, int, int, float*, float*, float*);
 
-
-int
-sp_strsv(char *uplo, char *trans, char *diag, SuperMatrix *L, 
-         SuperMatrix *U, float *x, SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief Solves one of the systems of equations A*x = b,   or   A'*x = b
+ * 
+ * <pre>
  *   Purpose
  *   =======
  *
@@ -75,8 +75,12 @@ sp_strsv(char *uplo, char *trans, char *diag, SuperMatrix *L,
  *
  *   info    - (output) int*
  *             If *info = -i, the i-th argument had an illegal value.
- *
+ * </pre>
  */
+int
+sp_strsv(char *uplo, char *trans, char *diag, SuperMatrix *L, 
+         SuperMatrix *U, float *x, SuperLUStat_t *stat, int *info)
+{
 #ifdef _CRAY
     _fcd ftcs1 = _cptofcd("L", strlen("L")),
 	 ftcs2 = _cptofcd("N", strlen("N")),
@@ -299,68 +303,71 @@ sp_strsv(char *uplo, char *trans, char *diag, SuperMatrix *L,
 
 
 
+/*! \brief Performs one of the matrix-vector operations y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   sp_sgemv()  performs one of the matrix-vector operations   
+ *      y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
+ *   where alpha and beta are scalars, x and y are vectors and A is a
+ *   sparse A->nrow by A->ncol matrix.   
+ *
+ *   Parameters   
+ *   ==========   
+ *
+ *   TRANS  - (input) char*
+ *            On entry, TRANS specifies the operation to be performed as   
+ *            follows:   
+ *               TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
+ *               TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
+ *               TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.   
+ *
+ *   ALPHA  - (input) float
+ *            On entry, ALPHA specifies the scalar alpha.   
+ *
+ *   A      - (input) SuperMatrix*
+ *            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+ *            Currently, the type of A can be:
+ *                Stype = NC or NCP; Dtype = SLU_S; Mtype = GE. 
+ *            In the future, more general A can be handled.
+ *
+ *   X      - (input) float*, array of DIMENSION at least   
+ *            ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
+ *            and at least   
+ *            ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
+ *            Before entry, the incremented array X must contain the   
+ *            vector x.   
+ *
+ *   INCX   - (input) int
+ *            On entry, INCX specifies the increment for the elements of   
+ *            X. INCX must not be zero.   
+ *
+ *   BETA   - (input) float
+ *            On entry, BETA specifies the scalar beta. When BETA is   
+ *            supplied as zero then Y need not be set on input.   
+ *
+ *   Y      - (output) float*,  array of DIMENSION at least   
+ *            ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
+ *            and at least   
+ *            ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
+ *            Before entry with BETA non-zero, the incremented array Y   
+ *            must contain the vector y. On exit, Y is overwritten by the 
+ *            updated vector y.
+ *	     
+ *   INCY   - (input) int
+ *            On entry, INCY specifies the increment for the elements of   
+ *            Y. INCY must not be zero.   
+ *
+ *   ==== Sparse Level 2 Blas routine.   
+ * </pre>
+ */
 
 int
 sp_sgemv(char *trans, float alpha, SuperMatrix *A, float *x, 
 	 int incx, float beta, float *y, int incy)
 {
-/*  Purpose   
-    =======   
-
-    sp_sgemv()  performs one of the matrix-vector operations   
-       y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
-    where alpha and beta are scalars, x and y are vectors and A is a
-    sparse A->nrow by A->ncol matrix.   
-
-    Parameters   
-    ==========   
-
-    TRANS  - (input) char*
-             On entry, TRANS specifies the operation to be performed as   
-             follows:   
-                TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
-                TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
-                TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.   
-
-    ALPHA  - (input) float
-             On entry, ALPHA specifies the scalar alpha.   
-
-    A      - (input) SuperMatrix*
-             Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
-             Currently, the type of A can be:
-                 Stype = NC or NCP; Dtype = SLU_S; Mtype = GE. 
-             In the future, more general A can be handled.
-
-    X      - (input) float*, array of DIMENSION at least   
-             ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
-             and at least   
-             ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
-             Before entry, the incremented array X must contain the   
-             vector x.   
-
-    INCX   - (input) int
-             On entry, INCX specifies the increment for the elements of   
-             X. INCX must not be zero.   
-
-    BETA   - (input) float
-             On entry, BETA specifies the scalar beta. When BETA is   
-             supplied as zero then Y need not be set on input.   
-
-    Y      - (output) float*,  array of DIMENSION at least   
-             ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
-             and at least   
-             ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
-             Before entry with BETA non-zero, the incremented array Y   
-             must contain the vector y. On exit, Y is overwritten by the 
-             updated vector y.
-	     
-    INCY   - (input) int
-             On entry, INCY specifies the increment for the elements of   
-             Y. INCY must not be zero.   
-
-    ==== Sparse Level 2 Blas routine.   
-*/
-
     /* Local variables */
     NCformat *Astore;
     float   *Aval;
diff --git a/SRC/ssp_blas3.c b/SRC/ssp_blas3.c
index 6a416a5..be3148b 100644
--- a/SRC/ssp_blas3.c
+++ b/SRC/ssp_blas3.c
@@ -1,10 +1,13 @@
 
-/*
+/*! @file ssp_blas3.c
+ * \brief Sparse BLAS3, using some dense BLAS3 operations
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 /*
  * File name:		sp_blas3.c
@@ -13,102 +16,107 @@
 
 #include "slu_sdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose   
+ *   =======   
+ * 
+ *   sp_s performs one of the matrix-matrix operations   
+ * 
+ *      C := alpha*op( A )*op( B ) + beta*C,   
+ * 
+ *   where  op( X ) is one of 
+ * 
+ *      op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),
+ * 
+ *   alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
+ *   an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix. 
+ *   
+ * 
+ *   Parameters   
+ *   ==========   
+ * 
+ *   TRANSA - (input) char*
+ *            On entry, TRANSA specifies the form of op( A ) to be used in 
+ *            the matrix multiplication as follows:   
+ *               TRANSA = 'N' or 'n',  op( A ) = A.   
+ *               TRANSA = 'T' or 't',  op( A ) = A'.   
+ *               TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
+ *            Unchanged on exit.   
+ * 
+ *   TRANSB - (input) char*
+ *            On entry, TRANSB specifies the form of op( B ) to be used in 
+ *            the matrix multiplication as follows:   
+ *               TRANSB = 'N' or 'n',  op( B ) = B.   
+ *               TRANSB = 'T' or 't',  op( B ) = B'.   
+ *               TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
+ *            Unchanged on exit.   
+ * 
+ *   M      - (input) int   
+ *            On entry,  M  specifies  the number of rows of the matrix 
+ *	     op( A ) and of the matrix C.  M must be at least zero. 
+ *	     Unchanged on exit.   
+ * 
+ *   N      - (input) int
+ *            On entry,  N specifies the number of columns of the matrix 
+ *	     op( B ) and the number of columns of the matrix C. N must be 
+ *	     at least zero.
+ *	     Unchanged on exit.   
+ * 
+ *   K      - (input) int
+ *            On entry, K specifies the number of columns of the matrix 
+ *	     op( A ) and the number of rows of the matrix op( B ). K must 
+ *	     be at least  zero.   
+ *           Unchanged on exit.
+ *      
+ *   ALPHA  - (input) float
+ *            On entry, ALPHA specifies the scalar alpha.   
+ * 
+ *   A      - (input) SuperMatrix*
+ *            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+ *            Currently, the type of A can be:
+ *                Stype = NC or NCP; Dtype = SLU_S; Mtype = GE. 
+ *            In the future, more general A can be handled.
+ * 
+ *   B      - FLOAT PRECISION array of DIMENSION ( LDB, kb ), where kb is 
+ *            n when TRANSB = 'N' or 'n',  and is  k otherwise.   
+ *            Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
+ *            part of the array B must contain the matrix B, otherwise 
+ *            the leading n by k part of the array B must contain the 
+ *            matrix B.   
+ *            Unchanged on exit.   
+ * 
+ *   LDB    - (input) int
+ *            On entry, LDB specifies the first dimension of B as declared 
+ *            in the calling (sub) program. LDB must be at least max( 1, n ).  
+ *            Unchanged on exit.   
+ * 
+ *   BETA   - (input) float
+ *            On entry, BETA specifies the scalar beta. When BETA is   
+ *            supplied as zero then C need not be set on input.   
+ *  
+ *   C      - FLOAT PRECISION array of DIMENSION ( LDC, n ).   
+ *            Before entry, the leading m by n part of the array C must 
+ *            contain the matrix C,  except when beta is zero, in which 
+ *            case C need not be set on entry.   
+ *            On exit, the array C is overwritten by the m by n matrix 
+ *	     ( alpha*op( A )*B + beta*C ).   
+ *  
+ *   LDC    - (input) int
+ *            On entry, LDC specifies the first dimension of C as declared 
+ *            in the calling (sub)program. LDC must be at least max(1,m).   
+ *            Unchanged on exit.   
+ *  
+ *   ==== Sparse Level 3 Blas routine.   
+ * </pre>
+ */
+
 int
 sp_sgemm(char *transa, char *transb, int m, int n, int k, 
          float alpha, SuperMatrix *A, float *b, int ldb, 
          float beta, float *c, int ldc)
 {
-/*  Purpose   
-    =======   
-
-    sp_s performs one of the matrix-matrix operations   
-
-       C := alpha*op( A )*op( B ) + beta*C,   
-
-    where  op( X ) is one of 
-
-       op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),
-
-    alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
-    an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix. 
-  
-
-    Parameters   
-    ==========   
-
-    TRANSA - (input) char*
-             On entry, TRANSA specifies the form of op( A ) to be used in 
-             the matrix multiplication as follows:   
-                TRANSA = 'N' or 'n',  op( A ) = A.   
-                TRANSA = 'T' or 't',  op( A ) = A'.   
-                TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
-             Unchanged on exit.   
-
-    TRANSB - (input) char*
-             On entry, TRANSB specifies the form of op( B ) to be used in 
-             the matrix multiplication as follows:   
-                TRANSB = 'N' or 'n',  op( B ) = B.   
-                TRANSB = 'T' or 't',  op( B ) = B'.   
-                TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
-             Unchanged on exit.   
-
-    M      - (input) int   
-             On entry,  M  specifies  the number of rows of the matrix 
-	     op( A ) and of the matrix C.  M must be at least zero. 
-	     Unchanged on exit.   
-
-    N      - (input) int
-             On entry,  N specifies the number of columns of the matrix 
-	     op( B ) and the number of columns of the matrix C. N must be 
-	     at least zero.
-	     Unchanged on exit.   
-
-    K      - (input) int
-             On entry, K specifies the number of columns of the matrix 
-	     op( A ) and the number of rows of the matrix op( B ). K must 
-	     be at least  zero.   
-             Unchanged on exit.
-	     
-    ALPHA  - (input) float
-             On entry, ALPHA specifies the scalar alpha.   
-
-    A      - (input) SuperMatrix*
-             Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
-             Currently, the type of A can be:
-                 Stype = NC or NCP; Dtype = SLU_S; Mtype = GE. 
-             In the future, more general A can be handled.
-
-    B      - FLOAT PRECISION array of DIMENSION ( LDB, kb ), where kb is 
-             n when TRANSB = 'N' or 'n',  and is  k otherwise.   
-             Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
-             part of the array B must contain the matrix B, otherwise 
-             the leading n by k part of the array B must contain the 
-             matrix B.   
-             Unchanged on exit.   
-
-    LDB    - (input) int
-             On entry, LDB specifies the first dimension of B as declared 
-             in the calling (sub) program. LDB must be at least max( 1, n ).  
-             Unchanged on exit.   
-
-    BETA   - (input) float
-             On entry, BETA specifies the scalar beta. When BETA is   
-             supplied as zero then C need not be set on input.   
-
-    C      - FLOAT PRECISION array of DIMENSION ( LDC, n ).   
-             Before entry, the leading m by n part of the array C must 
-             contain the matrix C,  except when beta is zero, in which 
-             case C need not be set on entry.   
-             On exit, the array C is overwritten by the m by n matrix 
-	     ( alpha*op( A )*B + beta*C ).   
-
-    LDC    - (input) int
-             On entry, LDC specifies the first dimension of C as declared 
-             in the calling (sub)program. LDC must be at least max(1,m).   
-             Unchanged on exit.   
-
-    ==== Sparse Level 3 Blas routine.   
-*/
     int    incx = 1, incy = 1;
     int    j;
 
diff --git a/SRC/superlu_enum_consts.h b/SRC/superlu_enum_consts.h
new file mode 100644
index 0000000..62a65aa
--- /dev/null
+++ b/SRC/superlu_enum_consts.h
@@ -0,0 +1,71 @@
+/** @file superlu_enum_consts.h
+ * \brief enum constants header file 
+ *
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Lab, Univ. of California Berkeley, 
+ * October 1, 2010
+ *
+ */
+
+#ifndef __SUPERLU_ENUM_CONSTS /* allow multiple inclusions */
+#define __SUPERLU_ENUM_CONSTS
+
+/***********************************************************************
+ * Enumerate types
+ ***********************************************************************/
+typedef enum {NO, YES}                                          yes_no_t;
+typedef enum {DOFACT, SamePattern, SamePattern_SameRowPerm, FACTORED} fact_t;
+typedef enum {NOROWPERM, LargeDiag, MY_PERMR}                   rowperm_t;
+typedef enum {NATURAL, MMD_ATA, MMD_AT_PLUS_A, COLAMD,
+	      METIS_AT_PLUS_A, PARMETIS, ZOLTAN, MY_PERMC}      colperm_t;
+typedef enum {NOTRANS, TRANS, CONJ}                             trans_t;
+typedef enum {NOEQUIL, ROW, COL, BOTH}                          DiagScale_t;
+typedef enum {NOREFINE, SLU_SINGLE=1, SLU_DOUBLE, SLU_EXTRA}    IterRefine_t;
+typedef enum {LUSUP, UCOL, LSUB, USUB, LLVL, ULVL}              MemType;
+typedef enum {HEAD, TAIL}                                       stack_end_t;
+typedef enum {SYSTEM, USER}                                     LU_space_t;
+typedef enum {ONE_NORM, TWO_NORM, INF_NORM}			norm_t;
+typedef enum {SILU, SMILU_1, SMILU_2, SMILU_3}			milu_t;
+#if 0
+typedef enum {NODROP		= 0x0000,
+	      DROP_BASIC	= 0x0001, /* ILU(tau) */
+	      DROP_PROWS	= 0x0002, /* ILUTP: keep p maximum rows */
+	      DROP_COLUMN	= 0x0004, /* ILUTP: for j-th column, 
+					     p = gamma * nnz(A(:,j)) */
+	      DROP_AREA 	= 0x0008, /* ILUTP: for j-th column, use
+					     nnz(F(:,1:j)) / nnz(A(:,1:j))
+					     to limit memory growth  */
+	      DROP_SECONDARY	= 0x000E, /* PROWS | COLUMN | AREA */
+	      DROP_DYNAMIC	= 0x0010,
+	      DROP_INTERP	= 0x0100}			rule_t;
+#endif
+
+
+/* 
+ * The following enumerate type is used by the statistics variable 
+ * to keep track of flop count and time spent at various stages.
+ *
+ * Note that not all of the fields are disjoint.
+ */
+typedef enum {
+    COLPERM, /* find a column ordering that minimizes fills */
+    ROWPERM, /* find a row ordering maximizes diagonal. */
+    RELAX,   /* find artificial supernodes */
+    ETREE,   /* compute column etree */
+    EQUIL,   /* equilibrate the original matrix */
+    SYMBFAC, /* symbolic factorization. */
+    DIST,    /* distribute matrix. */
+    FACT,    /* perform LU factorization */
+    COMM,    /* communication for factorization */
+    SOL_COMM,/* communication for solve */
+    RCOND,   /* estimate reciprocal condition number */
+    SOLVE,   /* forward and back solves */
+    REFINE,  /* perform iterative refinement */
+    TRSV,    /* fraction of FACT spent in xTRSV */
+    GEMV,    /* fraction of FACT spent in xGEMV */
+    FERR,    /* estimate error bounds after iterative refinement */
+    NPHASES  /* total number of phases */
+} PhaseType;
+
+
+#endif /* __SUPERLU_ENUM_CONSTS */
diff --git a/SRC/superlu_timer.c b/SRC/superlu_timer.c
index 10eb877..e888f08 100644
--- a/SRC/superlu_timer.c
+++ b/SRC/superlu_timer.c
@@ -1,11 +1,15 @@
-/* 
+/*! @file superlu_timer.c
+ * \brief Returns the time used
+ *
+ * <pre>
  * Purpose
  * ======= 
- *	Returns the time in seconds used by the process.
+ * 
+ * Returns the time in seconds used by the process.
  *
  * Note: the timer function call is machine dependent. Use conditional
  *       compilation to choose the appropriate function.
- *
+ * </pre>
  */
 
 
@@ -15,23 +19,34 @@
  *	nanoseconds. 
 */
 #include <sys/time.h>
- 
+
 double SuperLU_timer_() {
     return ( (double)gethrtime() / 1e9 );
 }
 
+#elif _WIN32
+
+#include <time.h>
+
+double SuperLU_timer_()
+{
+    clock_t t;
+    t=clock();
+
+    return ((double)t)/CLOCKS_PER_SEC;
+}
+
 #else
 
 #ifndef NO_TIMER
 #include <sys/types.h>
 #include <sys/times.h>
-#include <time.h>
 #include <sys/time.h>
+#include <unistd.h>
 #endif
 
-#ifndef CLK_TCK
-#define CLK_TCK 60
-#endif
+/*! \brief Timer function
+ */ 
 
 double SuperLU_timer_()
 {
@@ -39,14 +54,18 @@ double SuperLU_timer_()
     /* no sys/times.h on WIN32 */
     double tmp;
     tmp = 0.0;
+    /* return (double)(tmp) / CLK_TCK;*/
+    return 0.0;
 #else
     struct tms use;
     double tmp;
-    times(&use);
+    int clocks_per_sec = sysconf(_SC_CLK_TCK);
+
+    times ( &use );
     tmp = use.tms_utime;
     tmp += use.tms_stime;
+    return (double)(tmp) / clocks_per_sec;
 #endif
-    return (double)(tmp) / CLK_TCK;
 }
 
 #endif
diff --git a/SRC/supermatrix.h b/SRC/supermatrix.h
index 665e22d..8b8e388 100644
--- a/SRC/supermatrix.h
+++ b/SRC/supermatrix.h
@@ -1,18 +1,24 @@
+/*! @file supermatrix.h
+ * \brief Defines matrix types
+ */
 #ifndef __SUPERLU_SUPERMATRIX /* allow multiple inclusions */
 #define __SUPERLU_SUPERMATRIX
 
+
 /********************************************
  * The matrix types are defined as follows. *
  ********************************************/
 typedef enum {
     SLU_NC,    /* column-wise, no supernode */
-    SLU_NR,    /* row-wize, no supernode */
-    SLU_SC,    /* column-wise, supernode */
-    SLU_SR,    /* row-wise, supernode */
     SLU_NCP,   /* column-wise, column-permuted, no supernode 
                   (The consecutive columns of nonzeros, after permutation,
 		   may not be stored  contiguously.) */
-    SLU_DN     /* Fortran style column-wise storage for dense matrix */
+    SLU_NR,    /* row-wize, no supernode */
+    SLU_SC,    /* column-wise, supernode */
+    SLU_SCP,   /* supernode, column-wise, permuted */    
+    SLU_SR,    /* row-wise, supernode */
+    SLU_DN,     /* Fortran style column-wise storage for dense matrix */
+    SLU_NR_loc  /* distributed compressed row format  */ 
 } Stype_t;
 
 typedef enum {
@@ -49,10 +55,10 @@ typedef struct {
  * The storage schemes are defined as follows. *
  ***********************************************/
 
-/* Stype == NC (Also known as Harwell-Boeing sparse matrix format) */
+/* Stype == SLU_NC (Also known as Harwell-Boeing sparse matrix format) */
 typedef struct {
     int_t  nnz;	    /* number of nonzeros in the matrix */
-    void   *nzval;  /* pointer to array of nonzero values, packed by column */
+    void *nzval;    /* pointer to array of nonzero values, packed by column */
     int_t  *rowind; /* pointer to array of row indices of the nonzeros */
     int_t  *colptr; /* pointer to array of beginning of columns in nzval[] 
 		       and rowind[]  */
@@ -62,21 +68,20 @@ typedef struct {
 		       beyond the last column, so that colptr[ncol] = nnz. */
 } NCformat;
 
-/* Stype == NR (Also known as row compressed storage (RCS). */
+/* Stype == SLU_NR */
 typedef struct {
-    int_t nnz;	   /* number of nonzeros in the matrix */
-    void  *nzval;  /* pointer to array of nonzero values, packed by row */
-    int_t *colind; /* pointer to array of column indices of the nonzeros */
-    int_t *rowptr; /* pointer to array of beginning of rows in nzval[] 
-                      and colind[]  */
-                   /* Note:
-		      Zero-based indexing is used;
-		      nzval[] and colind[] are of the same length, nnz;
-		      rowptr[] has nrow+1 entries, the last one pointing
-		      beyond the last column, so that rowptr[nrow] = nnz. */
+    int_t  nnz;	    /* number of nonzeros in the matrix */
+    void *nzval;    /* pointer to array of nonzero values, packed by raw */
+    int_t  *colind; /* pointer to array of columns indices of the nonzeros */
+    int_t  *rowptr; /* pointer to array of beginning of rows in nzval[] 
+		       and colind[]  */
+                    /* Note:
+		       Zero-based indexing is used;
+		       rowptr[] has nrow+1 entries, the last one pointing
+		       beyond the last row, so that rowptr[nrow] = nnz. */
 } NRformat;
 
-/* Stype == SC */
+/* Stype == SLU_SC */
 typedef struct {
   int_t  nnz;	     /* number of nonzeros in the matrix */
   int_t  nsuper;     /* number of supernodes, minus 1 */
@@ -85,9 +90,9 @@ typedef struct {
   int_t *rowind;     /* pointer to array of compressed row indices of 
 			rectangular supernodes */
   int_t *rowind_colptr;/* pointer to array of beginning of columns in rowind[] */
-  int_t *col_to_sup; /* col_to_sup[j] is the supernode number to which column 
+  int_t *col_to_sup;   /* col_to_sup[j] is the supernode number to which column 
 			j belongs; mapping from column to supernode number. */
-  int_t *sup_to_col; /* sup_to_col[s] points to the start of the s-th 
+  int_t *sup_to_col;   /* sup_to_col[s] points to the start of the s-th 
 			supernode; mapping from supernode number to column.
 		        e.g.: col_to_sup: 0 1 2 2 3 3 3 4 4 4 4 4 4 (ncol=12)
 		              sup_to_col: 0 1 2 4 7 12           (nsuper=4) */
@@ -101,7 +106,39 @@ typedef struct {
 		        entries are defined. */
 } SCformat;
 
-/* Stype == NCP */
+/* Stype == SLU_SCP */
+typedef struct {
+  int_t  nnz;	     /* number of nonzeros in the matrix */
+  int_t  nsuper;     /* number of supernodes */
+  void *nzval;       /* pointer to array of nonzero values, packed by column */
+  int_t  *nzval_colbeg;/* nzval_colbeg[j] points to beginning of column j
+			  in nzval[] */
+  int_t  *nzval_colend;/* nzval_colend[j] points to one past the last element
+			  of column j in nzval[] */
+  int_t  *rowind;      /* pointer to array of compressed row indices of 
+			  rectangular supernodes */
+  int_t *rowind_colbeg;/* rowind_colbeg[j] points to beginning of column j
+			  in rowind[] */
+  int_t *rowind_colend;/* rowind_colend[j] points to one past the last element
+			  of column j in rowind[] */
+  int_t *col_to_sup;   /* col_to_sup[j] is the supernode number to which column
+			  j belongs; mapping from column to supernode. */
+  int_t *sup_to_colbeg; /* sup_to_colbeg[s] points to the start of the s-th 
+			   supernode; mapping from supernode to column.*/
+  int_t *sup_to_colend; /* sup_to_colend[s] points to one past the end of the
+			   s-th supernode; mapping from supernode number to
+			   column.
+		        e.g.: col_to_sup: 0 1 2 2 3 3 3 4 4 4 4 4 4 (ncol=12)
+		              sup_to_colbeg: 0 1 2 4 7              (nsuper=4)
+			      sup_to_colend: 1 2 4 7 12                    */
+                     /* Note:
+		        Zero-based indexing is used;
+		        nzval_colptr[], rowind_colptr[], col_to_sup and
+		        sup_to_col[] have ncol+1 entries, the last one
+		        pointing beyond the last column.         */
+} SCPformat;
+
+/* Stype == SLU_NCP */
 typedef struct {
     int_t nnz;	  /* number of nonzeros in the matrix */
     void *nzval;  /* pointer to array of nonzero values, packed by column */
@@ -118,23 +155,26 @@ typedef struct {
 		     postmultiplied by a column permutation matrix. */
 } NCPformat;
 
-/* Stype == DN */
+/* Stype == SLU_DN */
 typedef struct {
     int_t lda;    /* leading dimension */
     void *nzval;  /* array of size lda*ncol to represent a dense matrix */
 } DNformat;
 
-
-
-/*********************************************************
- * Macros used for easy access of sparse matrix entries. *
- *********************************************************/
-#define L_SUB_START(col)     ( Lstore->rowind_colptr[col] )
-#define L_SUB(ptr)           ( Lstore->rowind[ptr] )
-#define L_NZ_START(col)      ( Lstore->nzval_colptr[col] )
-#define L_FST_SUPC(superno)  ( Lstore->sup_to_col[superno] )
-#define U_NZ_START(col)      ( Ustore->colptr[col] )
-#define U_SUB(ptr)           ( Ustore->rowind[ptr] )
+/* Stype == SLU_NR_loc (Distributed Compressed Row Format) */
+typedef struct {
+    int_t nnz_loc;   /* number of nonzeros in the local submatrix */
+    int_t m_loc;     /* number of rows local to this processor */
+    int_t fst_row;   /* global index of the first row */
+    void  *nzval;    /* pointer to array of nonzero values, packed by row */
+    int_t *rowptr;   /* pointer to array of beginning of rows in nzval[] 
+			and colind[]  */
+    int_t *colind;   /* pointer to array of column indices of the nonzeros */
+                     /* Note:
+			Zero-based indexing is used;
+			rowptr[] has n_loc + 1 entries, the last one pointing
+			beyond the last row, so that rowptr[n_loc] = nnz_loc.*/
+} NRformat_loc;
 
 
 #endif  /* __SUPERLU_SUPERMATRIX */
diff --git a/SRC/sutil.c b/SRC/sutil.c
index a023a3f..aab65ad 100644
--- a/SRC/sutil.c
+++ b/SRC/sutil.c
@@ -1,23 +1,26 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
+/*! @file sutil.c
+ * \brief Matrix utility functions
+ *
+ * <pre>
+ * -- SuperLU routine (version 3.1) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * October 15, 2003
+ * August 1, 2008
+ *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
  *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include <math.h>
 #include "slu_sdefs.h"
@@ -64,7 +67,7 @@ sCreate_CompRow_Matrix(SuperMatrix *A, int m, int n, int nnz,
     Astore->rowptr = rowptr;
 }
 
-/* Copy matrix A into matrix B. */
+/*! \brief Copy matrix A into matrix B. */
 void
 sCopy_CompCol_Matrix(SuperMatrix *A, SuperMatrix *B)
 {
@@ -108,12 +111,7 @@ void
 sCopy_Dense_Matrix(int M, int N, float *X, int ldx,
 			float *Y, int ldy)
 {
-/*
- *
- *  Purpose
- *  =======
- *
- *  Copies a two-dimensional matrix X to another matrix Y.
+/*! \brief Copies a two-dimensional matrix X to another matrix Y.
  */
     int    i, j;
     
@@ -150,8 +148,7 @@ sCreate_SuperNode_Matrix(SuperMatrix *L, int m, int n, int nnz,
 }
 
 
-/*
- * Convert a row compressed storage into a column compressed storage.
+/*! \brief Convert a row compressed storage into a column compressed storage.
  */
 void
 sCompRow_to_CompCol(int m, int n, int nnz, 
@@ -266,13 +263,12 @@ sPrint_SuperNode_Matrix(char *what, SuperMatrix *A)
 void
 sPrint_Dense_Matrix(char *what, SuperMatrix *A)
 {
-    DNformat     *Astore;
+    DNformat     *Astore = (DNformat *) A->Store;
     register int i, j, lda = Astore->lda;
     float       *dp;
     
     printf("\nDense matrix %s:\n", what);
     printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
-    Astore = (DNformat *) A->Store;
     dp = (float *) Astore->nzval;
     printf("nrow %d, ncol %d, lda %d\n", A->nrow,A->ncol,lda);
     printf("\nnzval: ");
@@ -284,8 +280,7 @@ sPrint_Dense_Matrix(char *what, SuperMatrix *A)
     fflush(stdout);
 }
 
-/*
- * Diagnostic print of column "jcol" in the U/L factor.
+/*! \brief Diagnostic print of column "jcol" in the U/L factor.
  */
 void
 sprint_lu_col(char *msg, int jcol, int pivrow, int *xprune, GlobalLU_t *Glu)
@@ -327,9 +322,7 @@ sprint_lu_col(char *msg, int jcol, int pivrow, int *xprune, GlobalLU_t *Glu)
 }
 
 
-/*
- * Check whether tempv[] == 0. This should be true before and after 
- * calling any numeric routines, i.e., "panel_bmod" and "column_bmod". 
+/*! \brief Check whether tempv[] == 0. This should be true before and after calling any numeric routines, i.e., "panel_bmod" and "column_bmod". 
  */
 void scheck_tempv(int n, float *tempv)
 {
@@ -355,8 +348,7 @@ sGenXtrue(int n, int nrhs, float *x, int ldx)
 	}
 }
 
-/*
- * Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's
+/*! \brief Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's
  */
 void
 sFillRHS(trans_t trans, int nrhs, float *x, int ldx,
@@ -385,8 +377,7 @@ sFillRHS(trans_t trans, int nrhs, float *x, int ldx,
 
 }
 
-/* 
- * Fills a float precision array with a given value.
+/*! \brief Fills a float precision array with a given value.
  */
 void 
 sfill(float *a, int alen, float dval)
@@ -397,8 +388,7 @@ sfill(float *a, int alen, float dval)
 
 
 
-/* 
- * Check the inf-norm of the error vector 
+/*! \brief Check the inf-norm of the error vector 
  */
 void sinf_norm_error(int nrhs, SuperMatrix *X, float *xtrue)
 {
@@ -424,7 +414,7 @@ void sinf_norm_error(int nrhs, SuperMatrix *X, float *xtrue)
 
 
 
-/* Print performance of the code. */
+/*! \brief Print performance of the code. */
 void
 sPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
            float rpg, float rcond, float *ferr,
@@ -452,9 +442,9 @@ sPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
     printf("\tNo of nonzeros in factor U = %d\n", Ustore->nnz);
     printf("\tNo of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz);
 	
-    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	   mem_usage->for_lu/1e6, mem_usage->total_needed/1e6,
-	   mem_usage->expansions);
+    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	   mem_usage->for_lu/1e6, mem_usage->total_needed/1e6);
+    printf("Number of memory expansions: %d\n", stat->expansions);
 	
     printf("\tFactor\tMflops\tSolve\tMflops\tEtree\tEquil\tRcond\tRefine\n");
     printf("PERF:%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f\n",
diff --git a/SRC/temp b/SRC/temp
new file mode 100644
index 0000000..c5f6049
--- /dev/null
+++ b/SRC/temp
@@ -0,0 +1,445 @@
+1c1
+< /* mc64ad.f -- translated by f2c (version 20100827).
+---
+> /* mc64ad.f -- translated by f2c (version 20061008).
+13c13
+< #include "slu_ddefs.h"
+---
+> #include "superlu_ddefs.h"
+15,16d14
+< #define abs(a) ((a) > 0) ? (a) : -(a)
+< #define min(a,b) ((a) < (b)) ? (a) : (b)
+22c20,22
+< 
+---
+> /* extern double dlamch_(char *, int); */
+> #define abs(a) ((a) > 0) ? (a) : -(a)
+> #define min(a,b) ((a) < (b)) ? (a) : (b)
+51c51
+< /* Subroutine */ int mc64id_(int_t *icntl)
+---
+> /* Subroutine */ int_t mc64id(int_t *icntl)
+53c53
+<     int_t i__;
+---
+>     static int_t i__;
+115c115
+< /* Subroutine */ int mc64ad_(int_t *job, int_t *n, int_t *ne, int_t *
+---
+> /* Subroutine */ int_t mc64ad(int_t *job, int_t *n, int_t *ne, int_t *
+128,131c128,131
+<     int_t i__, j, k;
+<     double fact, rinf;
+<     extern /* Subroutine */ int_t mc21ad_(int_t *, int_t *, int_t *, 
+< 	    int_t *, int_t *, int_t *, int_t *, int_t *), mc64bd_(
+---
+>     static int_t i__, j, k;
+>     static double fact, rinf;
+>     extern /* Subroutine */ int_t mc21ad(int_t *, int_t *, int_t *, 
+> 	    int_t *, int_t *, int_t *, int_t *, int_t *), mc64bd(
+133,140c133,140
+< 	    *, int_t *, int_t *, int_t *, int_t *, int_t *, double *),
+< 	    mc64rd_(int_t *, int_t *, int_t *, int_t *, double *),
+< 	    mc64sd_(int_t *, int_t *, int_t *, int_t *, double *, int_t *,
+< 	    int_t *, int_t *, int_t *, 
+< 	    int_t *, int_t *, int_t *, int_t *, int_t *),
+< 	    mc64wd_(int_t *, int_t *, int_t *, int_t *, double *, int_t *,
+< 	    int_t *, int_t *, int_t *, int_t *, int_t *, int_t *,
+< 	    double *, double *);
+---
+> 	    *, int_t *, int_t *, int_t *, int_t *, int_t *, 
+> 	    double *), mc64rd(int_t *, int_t *, int_t *, int_t *,
+> 	     double *), mc64sd(int_t *, int_t *, int_t *, int_t *
+> 	    , double *, int_t *, int_t *, int_t *, int_t *, 
+> 	    int_t *, int_t *, int_t *, int_t *, int_t *), mc64wd(
+> 	    int_t *, int_t *, int_t *, int_t *, double *, int_t 
+> 	    *, int_t *, int_t *, int_t *, int_t *, int_t *, int_t 
+> 	    *, double *, double *);
+341,344c341
+< 	if (icntl[1] >= 0) {
+< 	    printf(" ****** Error in MC64A/AD. INFO(1) = %2d", info[1],
+< 		   " because JOB = %d\n", *job);
+< 	}
+---
+> /*        IF (ICNTL(1).GE.0) WRITE(ICNTL(1),9001) INFO(1),'JOB',JOB */
+351,354c348
+< 	if (icntl[1] >= 0) {
+< 	    printf(" ****** Error in MC64A/AD. INFO(1) = %2d", info[1],
+< 		   " because N = %d\n", *job);
+< 	}
+---
+> /*        IF (ICNTL(1).GE.0) WRITE(ICNTL(1),9001) INFO(1),'N',N */
+361,364c355
+< 	if (icntl[1] >= 0) {
+< 	    printf(" ****** Error in MC64A/AD. INFO(1) = %2d", info[1],
+< 		   " because NE = %d\n", *job);
+< 	}
+---
+> /*        IF (ICNTL(1).GE.0) WRITE(ICNTL(1),9001) INFO(1),'NE',NE */
+386,389c377
+< 	if (icntl[1] >= 0) {
+< 	    printf(" ****** Error in MC64A/AD. INFO(1) = %2d", info[1],
+< 		   " LIW too small, must be at least %8d\n", k);
+< 	}
+---
+> /*        IF (ICNTL(1).GE.0) WRITE(ICNTL(1),9004) INFO(1),K */
+410,413c398
+< 	    if (icntl[1] >= 0) {
+< 		printf(" ****** Error in MC64A/AD. INFO(1) = %2d", info[1],
+< 		       " LDW too small, must be at least %8d\n", k);
+< 	    }
+---
+> /*          IF (ICNTL(1).GE.0) WRITE(ICNTL(1),9005) INFO(1),K */
+433,437c418
+< 		    if (icntl[1] >= 0) {
+< 			printf(" ****** Error in MC64A/AD. INFO(1) = %2d",
+< 			       info[1], " Column %8d", j, 
+< 			       " contains an entry with invalid row index %8d\n", i__);
+< 		    }
+---
+> /*              IF (ICNTL(1).GE.0) WRITE(ICNTL(1),9006) INFO(1),J,I */
+444,447c425
+< 		    if (icntl[1] >= 0) {
+< 			printf(" ****** Error in MC64A/AD. INFO(1) = %2d", info[1],
+< 			       "        Column %8d", j,
+< 			       " contains two or more entries with row index %8d\n", i__);
+---
+> /*              IF (ICNTL(1).GE.0) WRITE(ICNTL(1),9007) INFO(1),J,I */
+459,480c437,440
+< 	printf("  ****** Input parameters for MC64A/AD: JOB = %8d,"
+< 	       " N = %d, NE = %8d\n", *job, *n, *ne);
+< 	printf(" IP(1:N+1)   = ");
+< 	for (j=1; j<=(*n+1); ++j) {
+< 	    printf("%8d", ip[j]);
+< 	    if (j%8 == 0) printf("\n");
+< 	}
+< 	printf("\n IRN(1:NE) = ");
+< 	for (j=1; j<=(*ne); ++j) {
+< 	    printf("%8d", irn[j]);
+< 	    if (j%8 == 0) printf("\n");
+< 	}
+< 	printf("\n");
+< 
+< 	if (*job > 1) {
+< 	    printf(" A(1:NE)     = ");
+< 	    for (j=1; j<=(*ne); ++j) {
+< 		printf("%f14.4", a[j]);
+< 		if (j%4 == 0) printf("\n");
+< 	    }
+< 	    printf("\n");
+< 	}
+---
+> /*        WRITE(ICNTL(3),9020) JOB,N,NE */
+> /*        WRITE(ICNTL(3),9021) (IP(J),J=1,N+1) */
+> /*        WRITE(ICNTL(3),9022) (IRN(J),J=1,NE) */
+> /*        IF (JOB.GT.1) WRITE(ICNTL(3),9023) (A(J),J=1,NE) */
+496c456
+< 	mc21ad_(n, &irn[1], ne, &ip[1], &iw[1], &cperm[1], num, &iw[*n + 1]);
+---
+> 	mc21ad(n, &irn[1], ne, &ip[1], &iw[1], &cperm[1], num, &iw[*n + 1]);
+502c462
+< 	mc64bd_(n, ne, &ip[1], &irn[1], &a[1], &cperm[1], num, &iw[1], &iw[*n 
+---
+> 	mc64bd(n, ne, &ip[1], &irn[1], &a[1], &cperm[1], num, &iw[1], &iw[*n 
+516c476
+< 	mc64rd_(n, ne, &ip[1], &iw[1], &dw[1]);
+---
+> 	mc64rd(n, ne, &ip[1], &iw[1], &dw[1]);
+518c478
+< 	mc64sd_(n, ne, &ip[1], &iw[1], &dw[1], &cperm[1], num, &iw[*ne + 1], &
+---
+> 	mc64sd(n, ne, &ip[1], &iw[1], &dw[1], &cperm[1], num, &iw[*ne + 1], &
+543c503
+< 	mc64wd_(n, ne, &ip[1], &irn[1], &dw[(*n << 1) + 1], &cperm[1], num, &
+---
+> 	mc64wd(n, ne, &ip[1], &irn[1], &dw[(*n << 1) + 1], &cperm[1], num, &
+578c538
+< 	mc64wd_(n, ne, &ip[1], &irn[1], &dw[*n * 3 + 1], &cperm[1], num, &iw[
+---
+> 	mc64wd(n, ne, &ip[1], &irn[1], &dw[*n * 3 + 1], &cperm[1], num, &iw[
+610,613c570
+< 	if (icntl[2] >= 0) {
+< 	    printf(" ****** Warning from MC64A/AD. INFO(1) = %2d", info[1],
+< 		   " The matrix is structurally singular.\n");
+< 	}
+---
+> /*        IF (ICNTL(2).GE.0) WRITE(ICNTL(2),9011) INFO(1) */
+617,620c574
+< 	if (icntl[2] >= 0) {
+< 	    printf(" ****** Warning from MC64A/AD. INFO(1) = %2d\n", info[1],
+< 		   "        Some scaling factors may be too large.\n");
+< 	}
+---
+> /*        IF (ICNTL(2).GE.0) WRITE(ICNTL(2),9012) INFO(1) */
+624,644c578,584
+< 	printf(" ****** Output parameters for MC64A/AD: INFO(1:2)  = %8d%8d\n",
+< 	       info[1], info[2]);
+< 	printf(" NUM        = ", *num);
+< 	printf(" CPERM(1:N) = ");
+< 	for (j=1; j<=*n; ++j) {
+< 	    printf("%8d", cperm[j]);
+< 	    if (j%8 == 0) printf("\n");
+< 	}
+< 	if (*job == 5) {
+< 	    printf("\n DW(1:N)    = ");
+< 	    for (j=1; j<=*n; ++j) {
+< 		printf("%11.3f", dw[j]);
+< 		if (j%5 == 0) printf("\n");
+< 	    }
+< 	    printf("\n DW(N+1:2N) = ");
+< 	    for (j=1; j<=*n; ++j) {
+< 		printf("%11.3f", dw[*n+j]);
+< 		if (j%5 == 0) printf("\n");
+< 	    }
+< 	    printf("\n");
+< 	}
+---
+> /*        WRITE(ICNTL(3),9030) (INFO(J),J=1,2) */
+> /*        WRITE(ICNTL(3),9031) NUM */
+> /*        WRITE(ICNTL(3),9032) (CPERM(J),J=1,N) */
+> /*        IF (JOB.EQ.5) THEN */
+> /*          WRITE(ICNTL(3),9033) (DW(J),J=1,N) */
+> /*          WRITE(ICNTL(3),9034) (DW(N+J),J=1,N) */
+> /*        ENDIF */
+648a589,604
+> /* L9001: */
+> /* L9004: */
+> /* L9005: */
+> /* L9006: */
+> /* L9007: */
+> /* L9011: */
+> /* L9012: */
+> /* L9020: */
+> /* L9021: */
+> /* L9022: */
+> /* L9023: */
+> /* L9030: */
+> /* L9031: */
+> /* L9032: */
+> /* L9033: */
+> /* L9034: */
+652c608
+< /* Subroutine */ int_t mc64bd_(int_t *n, int_t *ne, int_t *ip, int_t *
+---
+> /* Subroutine */ int_t mc64bd(int_t *n, int_t *ne, int_t *ip, int_t *
+661,678c617,635
+<     int_t i__, j, k;
+<     double a0;
+<     int_t i0, q0;
+<     double ai, di;
+<     int_t ii, jj, kk;
+<     double bv;
+<     int_t up;
+<     double dq0;
+<     int_t kk1, kk2;
+<     double csp;
+<     int_t isp, jsp, low;
+<     double dnew;
+<     int_t jord, qlen, idum, jdum;
+<     double rinf;
+<     extern /* Subroutine */ int mc64dd_(int_t *, int_t *, int_t *, 
+< 	    double *, int_t *, int_t *), mc64ed_(int_t *, int_t *,
+< 	     int_t *, double *, int_t *, int_t *), mc64fd_(int_t *
+< 	    , int_t *, int_t *, int_t *, double *, int_t *, int_t *);
+---
+>     static int_t i__, j, k;
+>     static double a0;
+>     static int_t i0, q0;
+>     static double ai, di;
+>     static int_t ii, jj, kk;
+>     static double bv;
+>     static int_t up;
+>     static double dq0;
+>     static int_t kk1, kk2;
+>     static double csp;
+>     static int_t isp, jsp, low;
+>     static double dnew;
+>     static int_t jord, qlen, idum, jdum;
+>     static double rinf;
+>     extern /* Subroutine */ int_t mc64dd(int_t *, int_t *, int_t *, 
+> 	    double *, int_t *, int_t *), mc64ed(int_t *, int_t *,
+> 	     int_t *, double *, int_t *, int_t *), mc64fd(int_t *
+> 	    , int_t *, int_t *, int_t *, double *, int_t *, 
+> 	    int_t *);
+892c849
+< 		    mc64dd_(&i__, n, &q[1], &d__[1], &l[1], &c__1);
+---
+> 		    mc64dd(&i__, n, &q[1], &d__[1], &l[1], &c__1);
+914c871
+< 		    mc64ed_(&qlen, n, &q[1], &d__[1], &l[1], &c__1);
+---
+> 		    mc64ed(&qlen, n, &q[1], &d__[1], &l[1], &c__1);
+967c924
+< 			    mc64fd_(&l[i__], &qlen, n, &q[1], &d__[1], &l[1], 
+---
+> 			    mc64fd(&l[i__], &qlen, n, &q[1], &d__[1], &l[1], 
+979c936
+< 			mc64dd_(&i__, n, &q[1], &d__[1], &l[1], &c__1);
+---
+> 			mc64dd(&i__, n, &q[1], &d__[1], &l[1], &c__1);
+1079c1036
+< /* Subroutine */ int_t mc64dd_(int_t *i__, int_t *n, int_t *q, double 
+---
+> /* Subroutine */ int_t mc64dd(int_t *i__, int_t *n, int_t *q, double 
+1086,1087c1043,1044
+<     double di;
+<     int_t qk, pos, idum, posk;
+---
+>     static double di;
+>     static int_t qk, pos, idum, posk;
+1157c1114
+< /* Subroutine */ int_t mc64ed_(int_t *qlen, int_t *n, int_t *q, 
+---
+> /* Subroutine */ int_t mc64ed(int_t *qlen, int_t *n, int_t *q, 
+1164,1166c1121,1123
+<     int_t i__;
+<     double di, dk, dr;
+<     int_t pos, idum, posk;
+---
+>     static int_t i__;
+>     static double di, dk, dr;
+>     static int_t pos, idum, posk;
+1252c1209
+< /* Subroutine */ int_t mc64fd_(int_t *pos0, int_t *qlen, int_t *n, 
+---
+> /* Subroutine */ int_t mc64fd(int_t *pos0, int_t *qlen, int_t *n, 
+1259,1261c1216,1218
+<     int_t i__;
+<     double di, dk, dr;
+<     int_t qk, pos, idum, posk;
+---
+>     static int_t i__;
+>     static double di, dk, dr;
+>     static int_t qk, pos, idum, posk;
+1390c1347
+< /* Subroutine */ int_t mc64rd_(int_t *n, int_t *ne, int_t *ip, int_t *
+---
+> /* Subroutine */ int_t mc64rd(int_t *n, int_t *ne, int_t *ip, int_t *
+1397,1401c1354,1358
+<     int_t j, k, r__, s;
+<     double ha;
+<     int_t hi, td, mid, len, ipj;
+<     double key;
+<     int_t last, todo[50], first;
+---
+>     static int_t j, k, r__, s;
+>     static double ha;
+>     static int_t hi, td, mid, len, ipj;
+>     static double key;
+>     static int_t last, todo[50], first;
+1538c1495
+< /* Subroutine */ int_t mc64sd_(int_t *n, int_t *ne, int_t *ip, int_t *
+---
+> /* Subroutine */ int_t mc64sd(int_t *n, int_t *ne, int_t *ip, int_t *
+1547,1550c1504,1507
+<     int_t i__, j, k, l, ii, mod, cnt, num;
+<     double bval, bmin, bmax, rinf;
+<     int_t nval, wlen, idum1, idum2, idum3;
+<     extern /* Subroutine */ int_t mc64qd_(int_t *, int_t *, int_t *, 
+---
+>     static int_t i__, j, k, l, ii, mod, cnt, num;
+>     static double bval, bmin, bmax, rinf;
+>     static int_t nval, wlen, idum1, idum2, idum3;
+>     extern /* Subroutine */ int_t mc64qd(int_t *, int_t *, int_t *, 
+1552c1509
+< 	    mc64ud_(int_t *, int_t *, int_t *, int_t *, int_t *, 
+---
+> 	    mc64ud(int_t *, int_t *, int_t *, int_t *, int_t *, 
+1555a1513
+> 
+1627c1585
+<     mc64ud_(&cnt, &mod, n, &irn[1], ne, &ip[1], &len[1], &fc[1], &iw[1], numx,
+---
+>     mc64ud(&cnt, &mod, n, &irn[1], ne, &ip[1], &len[1], &fc[1], &iw[1], numx,
+1706c1664
+< 		mc64qd_(&ip[1], &lenl[1], &len[1], &w[1], &wlen, &a[1], &nval,
+---
+> 		mc64qd(&ip[1], &lenl[1], &len[1], &w[1], &wlen, &a[1], &nval,
+1767c1725
+< 	    mc64qd_(&ip[1], &len[1], &lenh[1], &w[1], &wlen, &a[1], &nval, &
+---
+> 	    mc64qd(&ip[1], &len[1], &lenh[1], &w[1], &wlen, &a[1], &nval, &
+1806c1764
+< 	mc64ud_(&cnt, &mod, n, &irn[1], ne, &ip[1], &len[1], &fc[1], &iw[1], &
+---
+> 	mc64ud(&cnt, &mod, n, &irn[1], ne, &ip[1], &len[1], &fc[1], &iw[1], &
+1854c1812
+< /* Subroutine */ int_t mc64qd_(int_t *ip, int_t *lenl, int_t *lenh, 
+---
+> /* Subroutine */ int_t mc64qd(int_t *ip, int_t *lenl, int_t *lenh, 
+1862,1865c1820,1823
+<     int_t j, k, s;
+<     double ha;
+<     int_t ii, pos;
+<     double split[10];
+---
+>     static int_t j, k, s;
+>     static double ha;
+>     static int_t ii, pos;
+>     static double split[10];
+1949c1907
+< /* Subroutine */ int mc64ud_(int_t *id, int_t *mod, int_t *n, int_t *
+---
+> /* Subroutine */ int_t mc64ud(int_t *id, int_t *mod, int_t *n, int_t *
+1958,1959c1916,1917
+<     int_t i__, j, k, j1, ii, kk, id0, id1, in1, in2, nfc, num0, num1, num2, 
+< 	    jord, last;
+---
+>     static int_t i__, j, k, j1, ii, kk, id0, id1, in1, in2, nfc, num0, num1,
+> 	     num2, jord, last;
+2028c1986
+< /* Integers ID0+1 to ID0+N are unique numbers for call ID to MC64U/UD, */
+---
+> /* Ints ID0+1 to ID0+N are unique numbers for call ID to MC64U/UD, */
+2152c2110
+< /* Subroutine */ int_t mc64wd_(int_t *n, int_t *ne, int_t *ip, int_t *
+---
+> /* Subroutine */ int_t mc64wd(int_t *n, int_t *ne, int_t *ip, int_t *
+2161,2175c2119,2133
+<     int_t i__, j, k, i0, k0, k1, k2, q0;
+<     double di;
+<     int_t ii, jj, kk;
+<     double vj;
+<     int_t up;
+<     double dq0;
+<     int_t kk1, kk2;
+<     double csp;
+<     int_t isp, jsp, low;
+<     double dmin__, dnew;
+<     int_t jord, qlen, jdum;
+<     double rinf;
+<     extern /* Subroutine */ int_t mc64dd_(int_t *, int_t *, int_t *, 
+< 	    double *, int_t *, int_t *), mc64ed_(int_t *, int_t *,
+< 	     int_t *, double *, int_t *, int_t *), mc64fd_(int_t *
+---
+>     static int_t i__, j, k, i0, k0, k1, k2, q0;
+>     static double di;
+>     static int_t ii, jj, kk;
+>     static double vj;
+>     static int_t up;
+>     static double dq0;
+>     static int_t kk1, kk2;
+>     static double csp;
+>     static int_t isp, jsp, low;
+>     static double dmin__, dnew;
+>     static int_t jord, qlen, jdum;
+>     static double rinf;
+>     extern /* Subroutine */ int_t mc64dd(int_t *, int_t *, int_t *, 
+> 	    double *, int_t *, int_t *), mc64ed(int_t *, int_t *,
+> 	     int_t *, double *, int_t *, int_t *), mc64fd(int_t *
+2432c2390
+< 		mc64dd_(&i__, n, &q[1], &d__[1], &l[1], &c__2);
+---
+> 		mc64dd(&i__, n, &q[1], &d__[1], &l[1], &c__2);
+2454c2412
+< 		mc64ed_(&qlen, n, &q[1], &d__[1], &l[1], &c__2);
+---
+> 		mc64ed(&qlen, n, &q[1], &d__[1], &l[1], &c__2);
+2508c2466
+< 			    mc64fd_(&l[i__], &qlen, n, &q[1], &d__[1], &l[1], 
+---
+> 			    mc64fd(&l[i__], &qlen, n, &q[1], &d__[1], &l[1], 
+2519c2477
+< 			mc64dd_(&i__, n, &q[1], &d__[1], &l[1], &c__2);
+---
+> 			mc64dd(&i__, n, &q[1], &d__[1], &l[1], &c__2);
diff --git a/SRC/util.c b/SRC/util.c
index bfe5f88..858fbbc 100644
--- a/SRC/util.c
+++ b/SRC/util.c
@@ -1,28 +1,30 @@
-/*
- * -- SuperLU routine (version 3.0) --
+/*! @file util.c
+ * \brief Utility functions
+ * 
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * October 15, 2003
+ * November, 2010
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include <math.h>
 #include "slu_ddefs.h"
 
-/* 
- * Global statistics variale
+/*! \brief Global statistics variale
  */
 
 void superlu_abort_and_exit(char* msg)
@@ -31,25 +33,41 @@ void superlu_abort_and_exit(char* msg)
     exit (-1);
 }
 
-/*
- * Set the default values for the options argument.
+/*! \brief Set the default values for the options argument.
  */
 void set_default_options(superlu_options_t *options)
 {
     options->Fact = DOFACT;
     options->Equil = YES;
     options->ColPerm = COLAMD;
-    options->DiagPivotThresh = 1.0;
     options->Trans = NOTRANS;
     options->IterRefine = NOREFINE;
+    options->DiagPivotThresh = 1.0;
     options->SymmetricMode = NO;
     options->PivotGrowth = NO;
     options->ConditionNumber = NO;
     options->PrintStat = YES;
 }
 
-/*
- * Print the options setting.
+/*! \brief Set the default values for the options argument for ILU.
+ */
+void ilu_set_default_options(superlu_options_t *options)
+{
+    set_default_options(options);
+
+    /* further options for incomplete factorization */
+    options->DiagPivotThresh = 0.1;
+    options->RowPerm = LargeDiag;
+    options->ILU_DropRule = DROP_BASIC | DROP_AREA;
+    options->ILU_DropTol = 1e-4;
+    options->ILU_FillFactor = 10.0;
+    options->ILU_Norm = INF_NORM;
+    options->ILU_MILU = SILU;
+    options->ILU_MILU_Dim = 3.0; /* -log(n)/log(h) is perfect */
+    options->ILU_FillTol = 1e-2;
+}
+
+/*! \brief Print the options setting.
  */
 void print_options(superlu_options_t *options)
 {
@@ -66,7 +84,22 @@ void print_options(superlu_options_t *options)
     printf("..\n");
 }
 
-/* Deallocate the structure pointing to the actual storage of the matrix. */
+/*! \brief Print the options setting.
+ */
+void print_ilu_options(superlu_options_t *options)
+{
+    printf(".. ILU options:\n");
+    printf("\tDiagPivotThresh\t%6.2e\n", options->DiagPivotThresh);
+    printf("\ttau\t%6.2e\n", options->ILU_DropTol);
+    printf("\tgamma\t%6.2f\n", options->ILU_FillFactor);
+    printf("\tDropRule\t%0x\n", options->ILU_DropRule);
+    printf("\tMILU\t%d\n", options->ILU_MILU);
+    printf("\tMILU_ALPHA\t%6.2e\n", MILU_ALPHA);
+    printf("\tDiagFillTol\t%6.2e\n", options->ILU_FillTol);
+    printf("..\n");
+}
+
+/*! \brief Deallocate the structure pointing to the actual storage of the matrix. */
 void
 Destroy_SuperMatrix_Store(SuperMatrix *A)
 {
@@ -103,7 +136,7 @@ Destroy_SuperNode_Matrix(SuperMatrix *A)
     SUPERLU_FREE ( A->Store );
 }
 
-/* A is of type Stype==NCP */
+/*! \brief A is of type Stype==NCP */
 void
 Destroy_CompCol_Permuted(SuperMatrix *A)
 {
@@ -112,7 +145,7 @@ Destroy_CompCol_Permuted(SuperMatrix *A)
     SUPERLU_FREE ( A->Store );
 }
 
-/* A is of type Stype==DN */
+/*! \brief A is of type Stype==DN */
 void
 Destroy_Dense_Matrix(SuperMatrix *A)
 {
@@ -121,8 +154,7 @@ Destroy_Dense_Matrix(SuperMatrix *A)
     SUPERLU_FREE ( A->Store );
 }
 
-/*
- * Reset repfnz[] for the current column 
+/*! \brief Reset repfnz[] for the current column 
  */
 void
 resetrep_col (const int nseg, const int *segrep, int *repfnz)
@@ -136,9 +168,7 @@ resetrep_col (const int nseg, const int *segrep, int *repfnz)
 }
 
 
-/*
- * Count the total number of nonzeros in factors L and U,  and in the 
- * symmetrically reduced L. 
+/*! \brief Count the total number of nonzeros in factors L and U,  and in the symmetrically reduced L. 
  */
 void
 countnz(const int n, int *xprune, int *nnzL, int *nnzU, GlobalLU_t *Glu)
@@ -175,12 +205,41 @@ countnz(const int n, int *xprune, int *nnzL, int *nnzU, GlobalLU_t *Glu)
     /* printf("\tNo of nonzeros in symm-reduced L = %d\n", nnzL0);*/
 }
 
+/*! \brief Count the total number of nonzeros in factors L and U.
+ */
+void
+ilu_countnz(const int n, int *nnzL, int *nnzU, GlobalLU_t *Glu)
+{
+    int          nsuper, fsupc, i, j;
+    int          jlen, irep;
+    int          *xsup, *xlsub;
+
+    xsup   = Glu->xsup;
+    xlsub  = Glu->xlsub;
+    *nnzL  = 0;
+    *nnzU  = (Glu->xusub)[n];
+    nsuper = (Glu->supno)[n];
+
+    if ( n <= 0 ) return;
+
+    /*
+     * For each supernode
+     */
+    for (i = 0; i <= nsuper; i++) {
+	fsupc = xsup[i];
+	jlen = xlsub[fsupc+1] - xlsub[fsupc];
+
+	for (j = fsupc; j < xsup[i+1]; j++) {
+	    *nnzL += jlen;
+	    *nnzU += j - fsupc + 1;
+	    jlen--;
+	}
+	irep = xsup[i+1] - 1;
+    }
+}
 
 
-/*
- * Fix up the data storage lsub for L-subscripts. It removes the subscript
- * sets for structural pruning,	and applies permuation to the remaining
- * subscripts.
+/*! \brief Fix up the data storage lsub for L-subscripts. It removes the subscript sets for structural pruning,	and applies permuation to the remaining subscripts.
  */
 void
 fixupL(const int n, const int *perm_r, GlobalLU_t *Glu)
@@ -216,8 +275,7 @@ fixupL(const int n, const int *perm_r, GlobalLU_t *Glu)
 }
 
 
-/*
- * Diagnostic print of segment info after panel_dfs().
+/*! \brief Diagnostic print of segment info after panel_dfs().
  */
 void print_panel_seg(int n, int w, int jcol, int nseg, 
 		     int *segrep, int *repfnz)
@@ -251,6 +309,20 @@ StatInit(SuperLUStat_t *stat)
         stat->utime[i] = 0.;
         stat->ops[i] = 0.;
     }
+    stat->TinyPivots = 0;
+    stat->RefineSteps = 0;
+    stat->expansions = 0;
+#if ( PRNTlevel >= 1 )
+    printf(".. parameters in sp_ienv():\n");
+    printf("\t 1: panel size \t %4d \n"
+           "\t 2: relax      \t %4d \n"
+           "\t 3: max. super \t %4d \n"
+           "\t 4: row-dim 2D \t %4d \n"
+           "\t 5: col-dim 2D \t %4d \n"
+           "\t 6: fill ratio \t %4d \n",
+	   sp_ienv(1), sp_ienv(2), sp_ienv(3), 
+	   sp_ienv(4), sp_ienv(5), sp_ienv(6));
+#endif
 }
 
 
@@ -272,6 +344,8 @@ StatPrint(SuperLUStat_t *stat)
       printf("Solve flops = %e\tMflops = %8.2f\n", ops[SOLVE],
 	     ops[SOLVE]*1e-6/utime[SOLVE]);
 
+    printf("Number of memory expansions: %d\n", stat->expansions);
+
 }
 
 
@@ -300,8 +374,7 @@ LUSolveFlops(SuperLUStat_t *stat)
 
 
 
-/* 
- * Fills an integer array with a given value.
+/*! \brief Fills an integer array with a given value.
  */
 void ifill(int *a, int alen, int ival)
 {
@@ -311,8 +384,7 @@ void ifill(int *a, int alen, int ival)
 
 
 
-/* 
- * Get the statistics of the supernodes 
+/*! \brief Get the statistics of the supernodes 
  */
 #define NBUCKS 10
 static 	int	max_sup_size;
@@ -367,8 +439,7 @@ float DenseSize(int n, float sum_nw)
 
 
 
-/*
- * Check whether repfnz[] == EMPTY after reset.
+/*! \brief Check whether repfnz[] == EMPTY after reset.
  */
 void check_repfnz(int n, int w, int jcol, int *repfnz)
 {
@@ -384,7 +455,7 @@ void check_repfnz(int n, int w, int jcol, int *repfnz)
 }
 
 
-/* Print a summary of the testing results. */
+/*! \brief Print a summary of the testing results. */
 void
 PrintSumm(char *type, int nfail, int nrun, int nerrs)
 {
@@ -406,3 +477,19 @@ int print_int_vec(char *what, int n, int *vec)
     for (i = 0; i < n; ++i) printf("%d\t%d\n", i, vec[i]);
     return 0;
 }
+
+int slu_PrintInt10(char *name, int len, int *x)
+{
+    register int i;
+    
+    printf("%10s:", name);
+    for (i = 0; i < len; ++i)
+    {
+	if ( i % 10 == 0 ) printf("\n\t[%2d-%2d]", i, i + 9);
+	printf("%6d", x[i]);
+    }
+    printf("\n");
+    return 0;
+}
+
+
diff --git a/SRC/zcolumn_bmod.c b/SRC/zcolumn_bmod.c
index 2082ad6..c50e761 100644
--- a/SRC/zcolumn_bmod.c
+++ b/SRC/zcolumn_bmod.c
@@ -1,22 +1,24 @@
 
-/*
+/*! @file zcolumn_bmod.c
+ *  \brief performs numeric block updates
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
- */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ *  Permission is hereby granted to use or copy this program for any
+ *  purpose, provided the above notices are retained on all copies.
+ *  Permission to modify the code and to distribute modified code is
+ *  granted, provided the above notices are retained, and a notice that
+ *  the code was modified is included with the above copyright notice.
+ * </pre>
 */
 
 #include <stdio.h>
@@ -32,8 +34,17 @@ void zmatvec(int, int, int, doublecomplex*, doublecomplex*, doublecomplex*);
 
 
 
-/* Return value:   0 - successful return
+/*! \brief 
+ *
+ * <pre>
+ * Purpose:
+ * ========
+ * Performs numeric block updates (sup-col) in topological order.
+ * It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ * Special processing on the supernodal portion of L\U[*,j]
+ * Return value:   0 - successful return
  *               > 0 - number of bytes allocated when run out of space
+ * </pre>
  */
 int
 zcolumn_bmod (
@@ -48,14 +59,7 @@ zcolumn_bmod (
 	     SuperLUStat_t *stat  /* output */
 	     )
 {
-/*
- * Purpose:
- * ========
- *    Performs numeric block updates (sup-col) in topological order.
- *    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
- *    Special processing on the supernodal portion of L\U[*,j]
- *
- */
+
 #ifdef _CRAY
     _fcd ftcs1 = _cptofcd("L", strlen("L")),
          ftcs2 = _cptofcd("N", strlen("N")),
diff --git a/SRC/zcolumn_dfs.c b/SRC/zcolumn_dfs.c
index 92a20e2..0f8c6ed 100644
--- a/SRC/zcolumn_dfs.c
+++ b/SRC/zcolumn_dfs.c
@@ -1,49 +1,38 @@
 
-/*
+/*! @file zcolumn_dfs.c
+ * \brief Performs a symbolic factorization
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
- */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
 */
 
 #include "slu_zdefs.h"
 
-/* What type of supernodes we want */
+/*! \brief What type of supernodes we want */
 #define T2_SUPER
 
-int
-zcolumn_dfs(
-	   const int  m,         /* in - number of rows in the matrix */
-	   const int  jcol,      /* in */
-	   int        *perm_r,   /* in */
-	   int        *nseg,     /* modified - with new segments appended */
-	   int        *lsub_col, /* in - defines the RHS vector to start the dfs */
-	   int        *segrep,   /* modified - with new segments appended */
-	   int        *repfnz,   /* modified */
-	   int        *xprune,   /* modified */
-	   int        *marker,   /* modified */
-	   int        *parent,	 /* working array */
-	   int        *xplore,   /* working array */
-	   GlobalLU_t *Glu       /* modified */
-	   )
-{
-/* 
+
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
- *   "column_dfs" performs a symbolic factorization on column jcol, and
+ *   ZCOLUMN_DFS performs a symbolic factorization on column jcol, and
  *   decide the supernode boundary.
  *
  *   This routine does not use numeric values, but only use the RHS 
@@ -71,8 +60,25 @@ zcolumn_dfs(
  * ============
  *     0  success;
  *   > 0  number of bytes allocated when run out of space.
- *
+ * </pre>
  */
+int
+zcolumn_dfs(
+	   const int  m,         /* in - number of rows in the matrix */
+	   const int  jcol,      /* in */
+	   int        *perm_r,   /* in */
+	   int        *nseg,     /* modified - with new segments appended */
+	   int        *lsub_col, /* in - defines the RHS vector to start the dfs */
+	   int        *segrep,   /* modified - with new segments appended */
+	   int        *repfnz,   /* modified */
+	   int        *xprune,   /* modified */
+	   int        *marker,   /* modified */
+	   int        *parent,	 /* working array */
+	   int        *xplore,   /* working array */
+	   GlobalLU_t *Glu       /* modified */
+	   )
+{
+
     int     jcolp1, jcolm1, jsuper, nsuper, nextl;
     int     k, krep, krow, kmark, kperm;
     int     *marker2;           /* Used for small panel LU */
diff --git a/SRC/zcopy_to_ucol.c b/SRC/zcopy_to_ucol.c
index e5731cf..8f5a051 100644
--- a/SRC/zcopy_to_ucol.c
+++ b/SRC/zcopy_to_ucol.c
@@ -1,23 +1,24 @@
 
-/*
+/*! @file zcopy_to_ucol.c
+ * \brief Copy a computed column of U to the compressed data structure
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
  *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
 
 #include "slu_zdefs.h"
 
@@ -45,7 +46,6 @@ zcopy_to_ucol(
     doublecomplex    *ucol;
     int       *usub, *xusub;
     int       nzumax;
-
     doublecomplex zero = {0.0, 0.0};
 
     xsup    = Glu->xsup;
diff --git a/SRC/zdiagonal.c b/SRC/zdiagonal.c
new file mode 100644
index 0000000..ddd9c32
--- /dev/null
+++ b/SRC/zdiagonal.c
@@ -0,0 +1,133 @@
+
+/*! @file zdiagonal.c
+ * \brief Auxiliary routines to work with diagonal elements
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_zdefs.h"
+
+int zfill_diag(int n, NCformat *Astore)
+/* fill explicit zeros on the diagonal entries, so that the matrix is not
+   structurally singular. */
+{
+    doublecomplex *nzval = (doublecomplex *)Astore->nzval;
+    int *rowind = Astore->rowind;
+    int *colptr = Astore->colptr;
+    int nnz = colptr[n];
+    int fill = 0;
+    doublecomplex *nzval_new;
+    doublecomplex zero = {1.0, 0.0};
+    int *rowind_new;
+    int i, j, diag;
+
+    for (i = 0; i < n; i++)
+    {
+	diag = -1;
+	for (j = colptr[i]; j < colptr[i + 1]; j++)
+	    if (rowind[j] == i) diag = j;
+	if (diag < 0) fill++;
+    }
+    if (fill)
+    {
+	nzval_new = doublecomplexMalloc(nnz + fill);
+	rowind_new = intMalloc(nnz + fill);
+	fill = 0;
+	for (i = 0; i < n; i++)
+	{
+	    diag = -1;
+	    for (j = colptr[i] - fill; j < colptr[i + 1]; j++)
+	    {
+		if ((rowind_new[j + fill] = rowind[j]) == i) diag = j;
+		nzval_new[j + fill] = nzval[j];
+	    }
+	    if (diag < 0)
+	    {
+		rowind_new[colptr[i + 1] + fill] = i;
+		nzval_new[colptr[i + 1] + fill] = zero;
+		fill++;
+	    }
+	    colptr[i + 1] += fill;
+	}
+	Astore->nzval = nzval_new;
+	Astore->rowind = rowind_new;
+	SUPERLU_FREE(nzval);
+	SUPERLU_FREE(rowind);
+    }
+    Astore->nnz += fill;
+    return fill;
+}
+
+int zdominate(int n, NCformat *Astore)
+/* make the matrix diagonally dominant */
+{
+    doublecomplex *nzval = (doublecomplex *)Astore->nzval;
+    int *rowind = Astore->rowind;
+    int *colptr = Astore->colptr;
+    int nnz = colptr[n];
+    int fill = 0;
+    doublecomplex *nzval_new;
+    int *rowind_new;
+    int i, j, diag;
+    double s;
+
+    for (i = 0; i < n; i++)
+    {
+	diag = -1;
+	for (j = colptr[i]; j < colptr[i + 1]; j++)
+	    if (rowind[j] == i) diag = j;
+	if (diag < 0) fill++;
+    }
+    if (fill)
+    {
+	nzval_new = doublecomplexMalloc(nnz + fill);
+	rowind_new = intMalloc(nnz+ fill);
+	fill = 0;
+	for (i = 0; i < n; i++)
+	{
+	    s = 1e-6;
+	    diag = -1;
+	    for (j = colptr[i] - fill; j < colptr[i + 1]; j++)
+	    {
+		if ((rowind_new[j + fill] = rowind[j]) == i) diag = j;
+                nzval_new[j + fill] = nzval[j];
+		s += z_abs1(&nzval_new[j + fill]);
+	    }
+	    if (diag >= 0) {
+		nzval_new[diag+fill].r = s * 3.0;
+		nzval_new[diag+fill].i = 0.0;
+	    } else {
+		rowind_new[colptr[i + 1] + fill] = i;
+		nzval_new[colptr[i + 1] + fill].r = s * 3.0;
+		nzval_new[colptr[i + 1] + fill].i = 0.0;
+		fill++;
+	    }
+	    colptr[i + 1] += fill;
+	}
+	Astore->nzval = nzval_new;
+	Astore->rowind = rowind_new;
+	SUPERLU_FREE(nzval);
+	SUPERLU_FREE(rowind);
+    }
+    else
+    {
+	for (i = 0; i < n; i++)
+	{
+	    s = 1e-6;
+	    diag = -1;
+	    for (j = colptr[i]; j < colptr[i + 1]; j++)
+	    {
+		if (rowind[j] == i) diag = j;
+		s += z_abs1(&nzval[j]);
+	    }
+	    nzval[diag].r = s * 3.0;
+	    nzval[diag].i = 0.0;
+	}
+    }
+    Astore->nnz += fill;
+    return fill;
+}
diff --git a/SRC/zgscon.c b/SRC/zgscon.c
index 4e254c8..8bb95aa 100644
--- a/SRC/zgscon.c
+++ b/SRC/zgscon.c
@@ -1,11 +1,17 @@
 
-/*
+/*! @file zgscon.c
+ * \brief Estimates reciprocal of the condition number of a general matrix
+ * 
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Modified from lapack routines ZGECON.
+ * </pre> 
  */
+
 /*
  * File name:	zgscon.c
  * History:     Modified from lapack routines ZGECON.
@@ -13,57 +19,62 @@
 #include <math.h>
 #include "slu_zdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   ZGSCON estimates the reciprocal of the condition number of a general 
+ *   real matrix A, in either the 1-norm or the infinity-norm, using   
+ *   the LU factorization computed by ZGETRF.   *
+ *
+ *   An estimate is obtained for norm(inv(A)), and the reciprocal of the   
+ *   condition number is computed as   
+ *      RCOND = 1 / ( norm(A) * norm(inv(A)) ).   
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ * 
+ *   Arguments   
+ *   =========   
+ *
+ *    NORM    (input) char*
+ *            Specifies whether the 1-norm condition number or the   
+ *            infinity-norm condition number is required:   
+ *            = '1' or 'O':  1-norm;   
+ *            = 'I':         Infinity-norm.
+ *	    
+ *    L       (input) SuperMatrix*
+ *            The factor L from the factorization Pr*A*Pc=L*U as computed by
+ *            zgstrf(). Use compressed row subscripts storage for supernodes,
+ *            i.e., L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.
+ * 
+ *    U       (input) SuperMatrix*
+ *            The factor U from the factorization Pr*A*Pc=L*U as computed by
+ *            zgstrf(). Use column-wise storage scheme, i.e., U has types:
+ *            Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.
+ *	    
+ *    ANORM   (input) double
+ *            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
+ *            If NORM = 'I', the infinity-norm of the original matrix A.
+ *	    
+ *    RCOND   (output) double*
+ *           The reciprocal of the condition number of the matrix A,   
+ *           computed as RCOND = 1/(norm(A) * norm(inv(A))).
+ *	    
+ *    INFO    (output) int*
+ *           = 0:  successful exit   
+ *           < 0:  if INFO = -i, the i-th argument had an illegal value   
+ *
+ *    ===================================================================== 
+ * </pre>
+ */
+
 void
 zgscon(char *norm, SuperMatrix *L, SuperMatrix *U,
        double anorm, double *rcond, SuperLUStat_t *stat, int *info)
 {
-/*
-    Purpose   
-    =======   
-
-    ZGSCON estimates the reciprocal of the condition number of a general 
-    real matrix A, in either the 1-norm or the infinity-norm, using   
-    the LU factorization computed by ZGETRF.   
-
-    An estimate is obtained for norm(inv(A)), and the reciprocal of the   
-    condition number is computed as   
-       RCOND = 1 / ( norm(A) * norm(inv(A)) ).   
-
-    See supermatrix.h for the definition of 'SuperMatrix' structure.
- 
-    Arguments   
-    =========   
-
-    NORM    (input) char*
-            Specifies whether the 1-norm condition number or the   
-            infinity-norm condition number is required:   
-            = '1' or 'O':  1-norm;   
-            = 'I':         Infinity-norm.
-	    
-    L       (input) SuperMatrix*
-            The factor L from the factorization Pr*A*Pc=L*U as computed by
-            zgstrf(). Use compressed row subscripts storage for supernodes,
-            i.e., L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.
- 
-    U       (input) SuperMatrix*
-            The factor U from the factorization Pr*A*Pc=L*U as computed by
-            zgstrf(). Use column-wise storage scheme, i.e., U has types:
-            Stype = SLU_NC, Dtype = SLU_Z, Mtype = TRU.
-	    
-    ANORM   (input) double
-            If NORM = '1' or 'O', the 1-norm of the original matrix A.   
-            If NORM = 'I', the infinity-norm of the original matrix A.
-	    
-    RCOND   (output) double*
-            The reciprocal of the condition number of the matrix A,   
-            computed as RCOND = 1/(norm(A) * norm(inv(A))).
-	    
-    INFO    (output) int*
-            = 0:  successful exit   
-            < 0:  if INFO = -i, the i-th argument had an illegal value   
 
-    ===================================================================== 
-*/
 
     /* Local variables */
     int    kase, kase1, onenrm, i;
diff --git a/SRC/zgsequ.c b/SRC/zgsequ.c
index 40e64e9..657637d 100644
--- a/SRC/zgsequ.c
+++ b/SRC/zgsequ.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file zgsequ.c
+ * \brief Computes row and column scalings
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Modified from LAPACK routine ZGEEQU
+ * </pre>
  */
 /*
  * File name:	zgsequ.c
@@ -13,67 +18,73 @@
 #include <math.h>
 #include "slu_zdefs.h"
 
+
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose   
+ *   =======   
+ *
+ *   ZGSEQU computes row and column scalings intended to equilibrate an   
+ *   M-by-N sparse matrix A and reduce its condition number. R returns the row
+ *   scale factors and C the column scale factors, chosen to try to make   
+ *   the largest element in each row and column of the matrix B with   
+ *   elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.   
+ *
+ *   R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
+ *   number and BIGNUM = largest safe number.  Use of these scaling   
+ *   factors is not guaranteed to reduce the condition number of A but   
+ *   works well in practice.   
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   A       (input) SuperMatrix*
+ *           The matrix of dimension (A->nrow, A->ncol) whose equilibration
+ *           factors are to be computed. The type of A can be:
+ *           Stype = SLU_NC; Dtype = SLU_Z; Mtype = SLU_GE.
+ *	    
+ *   R       (output) double*, size A->nrow
+ *           If INFO = 0 or INFO > M, R contains the row scale factors   
+ *           for A.
+ *	    
+ *   C       (output) double*, size A->ncol
+ *           If INFO = 0,  C contains the column scale factors for A.
+ *	    
+ *   ROWCND  (output) double*
+ *           If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
+ *           smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
+ *           AMAX is neither too large nor too small, it is not worth   
+ *           scaling by R.
+ *	    
+ *   COLCND  (output) double*
+ *           If INFO = 0, COLCND contains the ratio of the smallest   
+ *           C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
+ *           worth scaling by C.
+ *	    
+ *   AMAX    (output) double*
+ *           Absolute value of largest matrix element.  If AMAX is very   
+ *           close to overflow or very close to underflow, the matrix   
+ *           should be scaled.
+ *	    
+ *   INFO    (output) int*
+ *           = 0:  successful exit   
+ *           < 0:  if INFO = -i, the i-th argument had an illegal value   
+ *           > 0:  if INFO = i,  and i is   
+ *                 <= A->nrow:  the i-th row of A is exactly zero   
+ *                 >  A->ncol:  the (i-M)-th column of A is exactly zero   
+ *
+ *   ===================================================================== 
+ * </pre>
+ */
 void
 zgsequ(SuperMatrix *A, double *r, double *c, double *rowcnd,
 	double *colcnd, double *amax, int *info)
 {
-/*    
-    Purpose   
-    =======   
-
-    ZGSEQU computes row and column scalings intended to equilibrate an   
-    M-by-N sparse matrix A and reduce its condition number. R returns the row
-    scale factors and C the column scale factors, chosen to try to make   
-    the largest element in each row and column of the matrix B with   
-    elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.   
-
-    R(i) and C(j) are restricted to be between SMLNUM = smallest safe   
-    number and BIGNUM = largest safe number.  Use of these scaling   
-    factors is not guaranteed to reduce the condition number of A but   
-    works well in practice.   
-
-    See supermatrix.h for the definition of 'SuperMatrix' structure.
- 
-    Arguments   
-    =========   
-
-    A       (input) SuperMatrix*
-            The matrix of dimension (A->nrow, A->ncol) whose equilibration
-            factors are to be computed. The type of A can be:
-            Stype = SLU_NC; Dtype = SLU_Z; Mtype = SLU_GE.
-	    
-    R       (output) double*, size A->nrow
-            If INFO = 0 or INFO > M, R contains the row scale factors   
-            for A.
-	    
-    C       (output) double*, size A->ncol
-            If INFO = 0,  C contains the column scale factors for A.
-	    
-    ROWCND  (output) double*
-            If INFO = 0 or INFO > M, ROWCND contains the ratio of the   
-            smallest R(i) to the largest R(i).  If ROWCND >= 0.1 and   
-            AMAX is neither too large nor too small, it is not worth   
-            scaling by R.
-	    
-    COLCND  (output) double*
-            If INFO = 0, COLCND contains the ratio of the smallest   
-            C(i) to the largest C(i).  If COLCND >= 0.1, it is not   
-            worth scaling by C.
-	    
-    AMAX    (output) double*
-            Absolute value of largest matrix element.  If AMAX is very   
-            close to overflow or very close to underflow, the matrix   
-            should be scaled.
-	    
-    INFO    (output) int*
-            = 0:  successful exit   
-            < 0:  if INFO = -i, the i-th argument had an illegal value   
-            > 0:  if INFO = i,  and i is   
-                  <= A->nrow:  the i-th row of A is exactly zero   
-                  >  A->ncol:  the (i-M)-th column of A is exactly zero   
-
-    ===================================================================== 
-*/
+
 
     /* Local variables */
     NCformat *Astore;
diff --git a/SRC/zgsisx.c b/SRC/zgsisx.c
new file mode 100644
index 0000000..25d9098
--- /dev/null
+++ b/SRC/zgsisx.c
@@ -0,0 +1,727 @@
+
+/*! @file zgsisx.c
+ * \brief Computes an approximate solutions of linear equations A*X=B or A'*X=B
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.2) --
+ * Lawrence Berkeley National Laboratory.
+ * November, 2010
+ * August, 2011
+ * </pre>
+ */
+#include "slu_zdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * ZGSISX computes an approximate solutions of linear equations
+ * A*X=B or A'*X=B, using the ILU factorization from zgsitrf().
+ * An estimation of the condition number is provided. 
+ * The routine performs the following steps:
+ *
+ *   1. If A is stored column-wise (A->Stype = SLU_NC):
+ *  
+ *	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A is
+ *	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+ *	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+ *	     = TRANS or CONJ).
+ *
+ *	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+ *	     matrix that usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the matrix A (after equilibration if options->Equil = YES)
+ *	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.
+ *
+ *	1.4. Compute the reciprocal pivot growth factor.
+ *
+ *	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+ *	     and info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	1.6. The system of equations is solved for X using the factored form
+ *	     of A.
+ *
+ *	1.7. options->IterRefine is not used
+ *
+ *	1.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *	1.9. options for ILU only
+ *	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+ *		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+ *		entries of modulus 1 on the diagonal and off-diagonal entries
+ *		of modulus at most 1. If MC64 fails, dgsequ() is used to
+ *		equilibrate the system.
+ *              ( Default: LargeDiag )
+ *	     2) options->ILU_DropTol = tau is the threshold for dropping.
+ *		For L, it is used directly (for the whole row in a supernode);
+ *		For U, ||A(:,i)||_oo * tau is used as the threshold
+ *	        for the	i-th column.
+ *		If a secondary dropping rule is required, tau will
+ *	        also be used to compute the second threshold.
+ *              ( Default: 1e-4 )
+ *	     3) options->ILU_FillFactor = gamma, used as the initial guess
+ *		of memory growth.
+ *		If a secondary dropping rule is required, it will also
+ *              be used as an upper bound of the memory.
+ *              ( Default: 10 )
+ *	     4) options->ILU_DropRule specifies the dropping rule.
+ *		Option	      Meaning
+ *		======	      ===========
+ *		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+ *		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+ *		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+ *			      p = gamma * nnz(A(:,j)).
+ *		DROP_AREA:    Variation of ILUTP, for j-th column, use
+ *			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+ *		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+ *			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+ *				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+ *			      Otherwise
+ *				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+ *			      tau_U(j) uses the similar rule.
+ *			      NOTE: the thresholds used by L and U are separate.
+ *		DROP_INTERP:  Compute the second dropping threshold by
+ *			      interpolation instead of sorting (default).
+ *			      In this case, the actual fill ratio is not
+ *			      guaranteed smaller than gamma.
+ *		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+ *		( Default: DROP_BASIC | DROP_AREA )
+ *	     5) options->ILU_Norm is the criterion of measuring the magnitude
+ *		of a row in a supernode of L. ( Default is INF_NORM )
+ *		options->ILU_Norm	RowSize(x[1:n])
+ *		=================	===============
+ *		ONE_NORM		||x||_1 / n
+ *		TWO_NORM		||x||_2 / sqrt(n)
+ *		INF_NORM		max{|x[i]|}
+ *	     6) options->ILU_MILU specifies the type of MILU's variation.
+ *		= SILU: do not perform Modified ILU;
+ *		= SMILU_1 (not recommended):
+ *		    U(i,i) := U(i,i) + sum(dropped entries);
+ *		= SMILU_2:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+ *		= SMILU_3:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+ *		NOTE: Even SMILU_1 does not preserve the column sum because of
+ *		late dropping.
+ *              ( Default: SILU )
+ *	     7) options->ILU_FillTol is used as the perturbation when
+ *		encountering zero pivots. If some U(i,i) = 0, so that U is
+ *		exactly singular, then
+ *		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+ *              ( Default: 1e-2 )
+ *
+ *   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ *	to the transpose of A:
+ *
+ *	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A' is
+ *	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+ *	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').
+ *
+ *	2.2. Permute columns of transpose(A) (rows of A),
+ *	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+ *	     usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the transpose(A) (after equilibration if
+ *	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+ *	     permutation Pr determined by partial pivoting.
+ *
+ *	2.4. Compute the reciprocal pivot growth factor.
+ *
+ *	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+ *	     And info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	2.6. The system of equations is solved for X using the factored form
+ *	     of transpose(A).
+ *
+ *	2.7. If options->IterRefine is not used.
+ *
+ *	2.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the LU decomposition will be performed and how the
+ *	   system will be solved.
+ *
+ * A	   (input/output) SuperMatrix*
+ *	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+ *	   of the linear equations is A->nrow. Currently, the type of A can be:
+ *	   Stype = SLU_NC or SLU_NR, Dtype = SLU_Z, Mtype = SLU_GE.
+ *	   In the future, more general A may be handled.
+ *
+ *	   On entry, If options->Fact = FACTORED and equed is not 'N',
+ *	   then A must have been equilibrated by the scaling factors in
+ *	   R and/or C.
+ *	   On exit, A is not modified
+ *         if options->Equil = NO, or
+ *         if options->Equil = YES but equed = 'N' on exit, or
+ *         if options->RowPerm = NO.
+ *
+ *	   Otherwise, if options->Equil = YES and equed is not 'N',
+ *	   A is scaled as follows:
+ *	   If A->Stype = SLU_NC:
+ *	     equed = 'R':  A := diag(R) * A
+ *	     equed = 'C':  A := A * diag(C)
+ *	     equed = 'B':  A := diag(R) * A * diag(C).
+ *	   If A->Stype = SLU_NR:
+ *	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+ *	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+ *	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).
+ *
+ *         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+ *            the matrix to an I-matrix, that is A is modified as follows:
+ *            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+ *            off-diagonal entries of modulus at most 1. P is a permutation
+ *            obtained from MC64.
+ *            If MC64 fails, zgsequ() is used to equilibrate the system,
+ *            and A is scaled as above, but no permutation is involved.
+ *            On exit, A is restored to the orginal row numbering, so
+ *            Dr*A*Dc is returned.
+ *
+ * perm_c  (input/output) int*
+ *	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+ *	   which defines the permutation matrix Pc; perm_c[i] = j means
+ *	   column i of A is in position j in A*Pc.
+ *	   On exit, perm_c may be overwritten by the product of the input
+ *	   perm_c and a permutation that postorders the elimination tree
+ *	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+ *	   is already in postorder.
+ *
+ *	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+ *	   which describes permutation of columns of transpose(A) 
+ *	   (rows of A) as described above.
+ *
+ * perm_r  (input/output) int*
+ *	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+ *	   which defines the permutation matrix Pr, and is determined
+ *	   by MC64 first then followed by partial pivoting.
+ *         perm_r[i] = j means row i of A is in position j in Pr*A.
+ *
+ *	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+ *	   determines permutation of rows of transpose(A)
+ *	   (columns of A) as described above.
+ *
+ *	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	   will try to use the input perm_r, unless a certain threshold
+ *	   criterion is violated. In that case, perm_r is overwritten by a
+ *	   new permutation determined by partial pivoting or diagonal
+ *	   threshold pivoting.
+ *	   Otherwise, perm_r is output argument.
+ *
+ * etree   (input/output) int*,  dimension (A->ncol)
+ *	   Elimination tree of Pc'*A'*A*Pc.
+ *	   If options->Fact != FACTORED and options->Fact != DOFACT,
+ *	   etree is an input argument, otherwise it is an output argument.
+ *	   Note: etree is a vector of parent pointers for a forest whose
+ *	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *
+ * equed   (input/output) char*
+ *	   Specifies the form of equilibration that was done.
+ *	   = 'N': No equilibration.
+ *	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+ *	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+ *	   = 'B': Both row and column equilibration, i.e., A was replaced 
+ *		  by diag(R)*A*diag(C).
+ *	   If options->Fact = FACTORED, equed is an input argument,
+ *	   otherwise it is an output argument.
+ *
+ * R	   (input/output) double*, dimension (A->nrow)
+ *	   The row scale factors for A or transpose(A).
+ *	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+ *	   If equed = 'N' or 'C', R is not accessed.
+ *	   If options->Fact = FACTORED, R is an input argument,
+ *	       otherwise, R is output.
+ *	   If options->Fact = FACTORED and equed = 'R' or 'B', each element
+ *	       of R must be positive.
+ *
+ * C	   (input/output) double*, dimension (A->ncol)
+ *	   The column scale factors for A or transpose(A).
+ *	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+ *	   If equed = 'N' or 'R', C is not accessed.
+ *	   If options->Fact = FACTORED, C is an input argument,
+ *	       otherwise, C is output.
+ *	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+ *	       of C must be positive.
+ *
+ * L	   (output) SuperMatrix*
+ *	   The factor L from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses compressed row subscripts storage for supernodes, i.e.,
+ *	   L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.
+ *
+ * U	   (output) SuperMatrix*
+ *	   The factor U from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses column-wise storage scheme, i.e., U has types:
+ *	   Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.
+ *
+ * work    (workspace/output) void*, size (lwork) (in bytes)
+ *	   User supplied workspace, should be large enough
+ *	   to hold data structures for factors L and U.
+ *	   On exit, if fact is not 'F', L and U point to this array.
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 mem_usage->total_needed; no other side effects.
+ *
+ *	   See argument 'mem_usage' for memory usage statistics.
+ *
+ * B	   (input/output) SuperMatrix*
+ *	   B has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+ *	   On entry, the right hand side matrix.
+ *	   If B->ncol = 0, only LU decomposition is performed, the triangular
+ *			   solve is skipped.
+ *	   On exit,
+ *	      if equed = 'N', B is not modified; otherwise
+ *	      if A->Stype = SLU_NC:
+ *		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+ *		    B is overwritten by diag(R)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+ *		    B is overwritten by diag(C)*B;
+ *	      if A->Stype = SLU_NR:
+ *		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+ *		    B is overwritten by diag(C)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+ *		    B is overwritten by diag(R)*B.
+ *
+ * X	   (output) SuperMatrix*
+ *	   X has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+ *	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+ *	   to the original system of equations. Note that A and B are modified
+ *	   on exit if equed is not 'N', and the solution to the equilibrated
+ *	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+ *	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+ *	   and equed = 'R' or 'B'.
+ *
+ * recip_pivot_growth (output) double*
+ *	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+ *	   The infinity norm is used. If recip_pivot_growth is much less
+ *	   than 1, the stability of the LU factorization could be poor.
+ *
+ * rcond   (output) double*
+ *	   The estimate of the reciprocal condition number of the matrix A
+ *	   after equilibration (if done). If rcond is less than the machine
+ *	   precision (in particular, if rcond = 0), the matrix is singular
+ *	   to working precision. This condition is indicated by a return
+ *	   code of info > 0.
+ *
+ * mem_usage (output) mem_usage_t*
+ *	   Record the memory usage statistics, consisting of following fields:
+ *	   - for_lu (float)
+ *	     The amount of space used in bytes for L\U data structures.
+ *	   - total_needed (float)
+ *	     The amount of space needed in bytes to perform factorization.
+ *	   - expansions (int)
+ *	     The number of memory expansions during the LU factorization.
+ *
+ * stat   (output) SuperLUStat_t*
+ *	  Record the statistics on runtime and floating-point operation count.
+ *	  See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info    (output) int*
+ *	   = 0: successful exit
+ *	   < 0: if info = -i, the i-th argument had an illegal value
+ *	   > 0: if info = i, and i is
+ *		<= A->ncol: number of zero pivots. They are replaced by small
+ *		      entries due to options->ILU_FillTol.
+ *		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+ *		      precision, meaning that the matrix is singular to
+ *		      working precision. Nevertheless, the solution and
+ *		      error bounds are computed because there are a number
+ *		      of situations where the computed solution can be more
+ *		      accurate than the value of RCOND would suggest.
+ *		> A->ncol+1: number of bytes allocated when memory allocation
+ *		      failure occurred, plus A->ncol.
+ * </pre>
+ */
+
+void
+zgsisx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+       int *etree, char *equed, double *R, double *C,
+       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
+       SuperMatrix *B, SuperMatrix *X,
+       double *recip_pivot_growth, double *rcond,
+       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)
+{
+
+    DNformat  *Bstore, *Xstore;
+    doublecomplex    *Bmat, *Xmat;
+    int       ldb, ldx, nrhs, n;
+    SuperMatrix *AA;/* A in SLU_NC format used by the factorization routine.*/
+    SuperMatrix AC; /* Matrix postmultiplied by Pc */
+    int       colequ, equil, nofact, notran, rowequ, permc_spec, mc64;
+    trans_t   trant;
+    char      norm[1];
+    int       i, j, info1;
+    double    amax, anorm, bignum, smlnum, colcnd, rowcnd, rcmax, rcmin;
+    int       relax, panel_size;
+    double    diag_pivot_thresh;
+    double    t0;      /* temporary time */
+    double    *utime;
+
+    int *perm = NULL; /* permutation returned from MC64 */
+
+    /* External functions */
+    extern double zlangs(char *, SuperMatrix *);
+
+    Bstore = B->Store;
+    Xstore = X->Store;
+    Bmat   = Bstore->nzval;
+    Xmat   = Xstore->nzval;
+    ldb    = Bstore->lda;
+    ldx    = Xstore->lda;
+    nrhs   = B->ncol;
+    n      = B->nrow;
+
+    *info = 0;
+    nofact = (options->Fact != FACTORED);
+    equil = (options->Equil == YES);
+    notran = (options->Trans == NOTRANS);
+    mc64 = (options->RowPerm == LargeDiag);
+    if ( nofact ) {
+	*(unsigned char *)equed = 'N';
+	rowequ = FALSE;
+	colequ = FALSE;
+    } else {
+	rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+	colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	smlnum = dlamch_("Safe minimum");
+	bignum = 1. / smlnum;
+    }
+
+    /* Test the input parameters */
+    if (options->Fact != DOFACT && options->Fact != SamePattern &&
+	options->Fact != SamePattern_SameRowPerm &&
+	options->Fact != FACTORED &&
+	options->Trans != NOTRANS && options->Trans != TRANS && 
+	options->Trans != CONJ &&
+	options->Equil != NO && options->Equil != YES)
+	*info = -1;
+    else if ( A->nrow != A->ncol || A->nrow < 0 ||
+	      (A->Stype != SLU_NC && A->Stype != SLU_NR) ||
+	      A->Dtype != SLU_Z || A->Mtype != SLU_GE )
+	*info = -2;
+    else if (options->Fact == FACTORED &&
+	     !(rowequ || colequ || lsame_(equed, "N")))
+	*info = -6;
+    else {
+	if (rowequ) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, R[j]);
+		rcmax = SUPERLU_MAX(rcmax, R[j]);
+	    }
+	    if (rcmin <= 0.) *info = -7;
+	    else if ( A->nrow > 0)
+		rowcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else rowcnd = 1.;
+	}
+	if (colequ && *info == 0) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, C[j]);
+		rcmax = SUPERLU_MAX(rcmax, C[j]);
+	    }
+	    if (rcmin <= 0.) *info = -8;
+	    else if (A->nrow > 0)
+		colcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else colcnd = 1.;
+	}
+	if (*info == 0) {
+	    if ( lwork < -1 ) *info = -12;
+	    else if ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      B->Stype != SLU_DN || B->Dtype != SLU_Z || 
+		      B->Mtype != SLU_GE )
+		*info = -13;
+	    else if ( X->ncol < 0 || Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      (B->ncol != 0 && B->ncol != X->ncol) ||
+		      X->Stype != SLU_DN ||
+		      X->Dtype != SLU_Z || X->Mtype != SLU_GE )
+		*info = -14;
+	}
+    }
+    if (*info != 0) {
+	i = -(*info);
+	xerbla_("zgsisx", &i);
+	return;
+    }
+
+    /* Initialization for factor parameters */
+    panel_size = sp_ienv(1);
+    relax      = sp_ienv(2);
+    diag_pivot_thresh = options->DiagPivotThresh;
+
+    utime = stat->utime;
+
+    /* Convert A to SLU_NC format when necessary. */
+    if ( A->Stype == SLU_NR ) {
+	NRformat *Astore = A->Store;
+	AA = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+	zCreate_CompCol_Matrix(AA, A->ncol, A->nrow, Astore->nnz,
+			       Astore->nzval, Astore->colind, Astore->rowptr,
+			       SLU_NC, A->Dtype, A->Mtype);
+	if ( notran ) { /* Reverse the transpose argument. */
+	    trant = TRANS;
+	    notran = 0;
+	} else {
+	    trant = NOTRANS;
+	    notran = 1;
+	}
+    } else { /* A->Stype == SLU_NC */
+	trant = options->Trans;
+	AA = A;
+    }
+
+    if ( nofact ) {
+	register int i, j;
+	NCformat *Astore = AA->Store;
+	int nnz = Astore->nnz;
+	int *colptr = Astore->colptr;
+	int *rowind = Astore->rowind;
+	doublecomplex *nzval = (doublecomplex *)Astore->nzval;
+
+	if ( mc64 ) {
+	    t0 = SuperLU_timer_();
+	    if ((perm = intMalloc(n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for perm[]");
+
+	    info1 = zldperm(5, n, nnz, colptr, rowind, nzval, perm, R, C);
+
+	    if (info1 != 0) { /* MC64 fails, call zgsequ() later */
+		mc64 = 0;
+		SUPERLU_FREE(perm);
+		perm = NULL;
+	    } else {
+	        if ( equil ) {
+	            rowequ = colequ = 1;
+		    for (i = 0; i < n; i++) {
+		        R[i] = exp(R[i]);
+		        C[i] = exp(C[i]);
+		    }
+		    /* scale the matrix */
+		    for (j = 0; j < n; j++) {
+		        for (i = colptr[j]; i < colptr[j + 1]; i++) {
+                            zd_mult(&nzval[i], &nzval[i], R[rowind[i]] * C[j]);
+		        }
+		    }
+	            *equed = 'B';
+                }
+
+                /* permute the matrix */
+		for (j = 0; j < n; j++) {
+		    for (i = colptr[j]; i < colptr[j + 1]; i++) {
+			/*nzval[i] *= R[rowind[i]] * C[j];*/
+			rowind[i] = perm[rowind[i]];
+		    }
+		}
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+
+	if ( !mc64 & equil ) { /* Only perform equilibration, no row perm */
+	    t0 = SuperLU_timer_();
+	    /* Compute row and column scalings to equilibrate the matrix A. */
+	    zgsequ(AA, R, C, &rowcnd, &colcnd, &amax, &info1);
+
+	    if ( info1 == 0 ) {
+		/* Equilibrate matrix A. */
+		zlaqgs(AA, R, C, rowcnd, colcnd, amax, equed);
+		rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+		colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+    }
+
+
+    if ( nofact ) {
+	
+	t0 = SuperLU_timer_();
+	/*
+	 * Gnet column permutation vector perm_c[], according to permc_spec:
+	 *   permc_spec = NATURAL:  natural ordering 
+	 *   permc_spec = MMD_AT_PLUS_A: minimum degree on structure of A'+A
+	 *   permc_spec = MMD_ATA:  minimum degree on structure of A'*A
+	 *   permc_spec = COLAMD:   approximate minimum degree column ordering
+	 *   permc_spec = MY_PERMC: the ordering already supplied in perm_c[]
+	 */
+	permc_spec = options->ColPerm;
+	if ( permc_spec != MY_PERMC && options->Fact == DOFACT )
+	    get_perm_c(permc_spec, AA, perm_c);
+	utime[COLPERM] = SuperLU_timer_() - t0;
+
+	t0 = SuperLU_timer_();
+	sp_preorder(options, AA, perm_c, etree, &AC);
+	utime[ETREE] = SuperLU_timer_() - t0;
+
+	/* Compute the LU factorization of A*Pc. */
+	t0 = SuperLU_timer_();
+	zgsitrf(options, &AC, relax, panel_size, etree, work, lwork,
+                perm_c, perm_r, L, U, stat, info);
+	utime[FACT] = SuperLU_timer_() - t0;
+
+	if ( lwork == -1 ) {
+	    mem_usage->total_needed = *info - A->ncol;
+	    return;
+	}
+
+	if ( mc64 ) { /* Fold MC64's perm[] into perm_r[]. */
+	    NCformat *Astore = AA->Store;
+	    int nnz = Astore->nnz, *rowind = Astore->rowind;
+	    int *perm_tmp, *iperm;
+	    if ((perm_tmp = intMalloc(2*n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for perm_tmp[]");
+	    iperm = perm_tmp + n;
+	    for (i = 0; i < n; ++i) perm_tmp[i] = perm_r[perm[i]];
+	    for (i = 0; i < n; ++i) {
+		perm_r[i] = perm_tmp[i];
+		iperm[perm[i]] = i;
+	    }
+
+	    /* Restore A's original row indices. */
+	    for (i = 0; i < nnz; ++i) rowind[i] = iperm[rowind[i]];
+
+	    SUPERLU_FREE(perm); /* MC64 permutation */
+	    SUPERLU_FREE(perm_tmp);
+	}
+    }
+
+    if ( options->PivotGrowth ) {
+	if ( *info > 0 ) return;
+
+	/* Compute the reciprocal pivot growth factor *recip_pivot_growth. */
+	*recip_pivot_growth = zPivotGrowth(A->ncol, AA, perm_c, L, U);
+    }
+
+    if ( options->ConditionNumber ) {
+	/* Estimate the reciprocal of the condition number of A. */
+	t0 = SuperLU_timer_();
+	if ( notran ) {
+	    *(unsigned char *)norm = '1';
+	} else {
+	    *(unsigned char *)norm = 'I';
+	}
+	anorm = zlangs(norm, AA);
+	zgscon(norm, L, U, anorm, rcond, stat, &info1);
+	utime[RCOND] = SuperLU_timer_() - t0;
+    }
+
+    if ( nrhs > 0 ) { /* Solve the system */
+        doublecomplex *rhs_work;
+
+	/* Scale and permute the right-hand side if equilibration
+           and permutation from MC64 were performed. */
+	if ( notran ) {
+	    if ( rowequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i)
+                        zd_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], R[i]);
+	    }
+	} else if ( colequ ) {
+	    for (j = 0; j < nrhs; ++j)
+		for (i = 0; i < n; ++i) {
+                    zd_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], C[i]);
+		}
+	}
+
+	/* Compute the solution matrix X. */
+	for (j = 0; j < nrhs; j++)  /* Save a copy of the right hand sides */
+	    for (i = 0; i < B->nrow; i++)
+		Xmat[i + j*ldx] = Bmat[i + j*ldb];
+
+	t0 = SuperLU_timer_();
+	zgstrs (trant, L, U, perm_c, perm_r, X, stat, &info1);
+	utime[SOLVE] = SuperLU_timer_() - t0;
+
+	/* Transform the solution matrix X to a solution of the original
+	   system. */
+	if ( notran ) {
+	    if ( colequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i) {
+                        zd_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], C[i]);
+                    }
+	    }
+	} else { /* transposed system */
+	    if ( rowequ ) {
+	        for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < A->nrow; ++i) {
+                        zd_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], R[i]);
+                    }
+	    }
+	}
+
+    } /* end if nrhs > 0 */
+
+    if ( options->ConditionNumber ) {
+	/* The matrix is singular to working precision. */
+	if ( *rcond < dlamch_("E") && *info == 0) *info = A->ncol + 1;
+    }
+
+    if ( nofact ) {
+	ilu_zQuerySpace(L, U, mem_usage);
+	Destroy_CompCol_Permuted(&AC);
+    }
+    if ( A->Stype == SLU_NR ) {
+	Destroy_SuperMatrix_Store(AA);
+	SUPERLU_FREE(AA);
+    }
+
+}
diff --git a/SRC/zgsisx.c.bak b/SRC/zgsisx.c.bak
new file mode 100644
index 0000000..e7e7055
--- /dev/null
+++ b/SRC/zgsisx.c.bak
@@ -0,0 +1,723 @@
+
+/*! @file zgsisx.c
+ * \brief Computes an approximate solutions of linear equations A*X=B or A'*X=B
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory.
+ * November, 2010
+ * </pre>
+ */
+#include "slu_zdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * ZGSISX computes an approximate solutions of linear equations
+ * A*X=B or A'*X=B, using the ILU factorization from zgsitrf().
+ * An estimation of the condition number is provided. 
+ * The routine performs the following steps:
+ *
+ *   1. If A is stored column-wise (A->Stype = SLU_NC):
+ *  
+ *	1.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A is
+ *	     overwritten by diag(R)*A*diag(C) and B by diag(R)*B
+ *	     (if options->Trans=NOTRANS) or diag(C)*B (if options->Trans
+ *	     = TRANS or CONJ).
+ *
+ *	1.2. Permute columns of A, forming A*Pc, where Pc is a permutation
+ *	     matrix that usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	1.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the matrix A (after equilibration if options->Equil = YES)
+ *	     as Pr*A*Pc = L*U, with Pr determined by partial pivoting.
+ *
+ *	1.4. Compute the reciprocal pivot growth factor.
+ *
+ *	1.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n),
+ *	     and info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	1.6. The system of equations is solved for X using the factored form
+ *	     of A.
+ *
+ *	1.7. options->IterRefine is not used
+ *
+ *	1.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *	1.9. options for ILU only
+ *	     1) If options->RowPerm = LargeDiag, MC64 is used to scale and
+ *		permute the matrix to an I-matrix, that is Pr*Dr*A*Dc has
+ *		entries of modulus 1 on the diagonal and off-diagonal entries
+ *		of modulus at most 1. If MC64 fails, dgsequ() is used to
+ *		equilibrate the system.
+ *              ( Default: LargeDiag )
+ *	     2) options->ILU_DropTol = tau is the threshold for dropping.
+ *		For L, it is used directly (for the whole row in a supernode);
+ *		For U, ||A(:,i)||_oo * tau is used as the threshold
+ *	        for the	i-th column.
+ *		If a secondary dropping rule is required, tau will
+ *	        also be used to compute the second threshold.
+ *              ( Default: 1e-4 )
+ *	     3) options->ILU_FillFactor = gamma, used as the initial guess
+ *		of memory growth.
+ *		If a secondary dropping rule is required, it will also
+ *              be used as an upper bound of the memory.
+ *              ( Default: 10 )
+ *	     4) options->ILU_DropRule specifies the dropping rule.
+ *		Option	      Meaning
+ *		======	      ===========
+ *		DROP_BASIC:   Basic dropping rule, supernodal based ILUTP(tau).
+ *		DROP_PROWS:   Supernodal based ILUTP(p,tau), p = gamma*nnz(A)/n.
+ *		DROP_COLUMN:  Variant of ILUTP(p,tau), for j-th column,
+ *			      p = gamma * nnz(A(:,j)).
+ *		DROP_AREA:    Variation of ILUTP, for j-th column, use
+ *			      nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
+ *		DROP_DYNAMIC: Modify the threshold tau during factorizaion:
+ *			      If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
+ *				  tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
+ *			      Otherwise
+ *				  tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
+ *			      tau_U(j) uses the similar rule.
+ *			      NOTE: the thresholds used by L and U are separate.
+ *		DROP_INTERP:  Compute the second dropping threshold by
+ *			      interpolation instead of sorting (default).
+ *			      In this case, the actual fill ratio is not
+ *			      guaranteed smaller than gamma.
+ *		DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
+ *		( Default: DROP_BASIC | DROP_AREA )
+ *	     5) options->ILU_Norm is the criterion of measuring the magnitude
+ *		of a row in a supernode of L. ( Default is INF_NORM )
+ *		options->ILU_Norm	RowSize(x[1:n])
+ *		=================	===============
+ *		ONE_NORM		||x||_1 / n
+ *		TWO_NORM		||x||_2 / sqrt(n)
+ *		INF_NORM		max{|x[i]|}
+ *	     6) options->ILU_MILU specifies the type of MILU's variation.
+ *		= SILU: do not perform Modified ILU;
+ *		= SMILU_1 (not recommended):
+ *		    U(i,i) := U(i,i) + sum(dropped entries);
+ *		= SMILU_2:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(dropped entries);
+ *		= SMILU_3:
+ *		    U(i,i) := U(i,i) + SGN(U(i,i)) * sum(|dropped entries|);
+ *		NOTE: Even SMILU_1 does not preserve the column sum because of
+ *		late dropping.
+ *              ( Default: SILU )
+ *	     7) options->ILU_FillTol is used as the perturbation when
+ *		encountering zero pivots. If some U(i,i) = 0, so that U is
+ *		exactly singular, then
+ *		   U(i,i) := ||A(:,i)|| * options->ILU_FillTol ** (1 - i / n).
+ *              ( Default: 1e-2 )
+ *
+ *   2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ *	to the transpose of A:
+ *
+ *	2.1. If options->Equil = YES or options->RowPerm = LargeDiag, scaling
+ *	     factors are computed to equilibrate the system:
+ *	     options->Trans = NOTRANS:
+ *		 diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
+ *	     options->Trans = TRANS:
+ *		 (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
+ *	     options->Trans = CONJ:
+ *		 (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
+ *	     Whether or not the system will be equilibrated depends on the
+ *	     scaling of the matrix A, but if equilibration is used, A' is
+ *	     overwritten by diag(R)*A'*diag(C) and B by diag(R)*B
+ *	     (if trans='N') or diag(C)*B (if trans = 'T' or 'C').
+ *
+ *	2.2. Permute columns of transpose(A) (rows of A),
+ *	     forming transpose(A)*Pc, where Pc is a permutation matrix that
+ *	     usually preserves sparsity.
+ *	     For more details of this step, see sp_preorder.c.
+ *
+ *	2.3. If options->Fact != FACTORED, the LU decomposition is used to
+ *	     factor the transpose(A) (after equilibration if
+ *	     options->Fact = YES) as Pr*transpose(A)*Pc = L*U with the
+ *	     permutation Pr determined by partial pivoting.
+ *
+ *	2.4. Compute the reciprocal pivot growth factor.
+ *
+ *	2.5. If some U(i,i) = 0, so that U is exactly singular, then the
+ *	     routine fills a small number on the diagonal entry, that is
+ *		 U(i,i) = ||A(:,i)||_oo * options->ILU_FillTol ** (1 - i / n).
+ *	     And info will be increased by 1. The factored form of A is used
+ *	     to estimate the condition number of the preconditioner. If the
+ *	     reciprocal of the condition number is less than machine precision,
+ *	     info = A->ncol+1 is returned as a warning, but the routine still
+ *	     goes on to solve for X.
+ *
+ *	2.6. The system of equations is solved for X using the factored form
+ *	     of transpose(A).
+ *
+ *	2.7. If options->IterRefine is not used.
+ *
+ *	2.8. If equilibration was used, the matrix X is premultiplied by
+ *	     diag(C) (if options->Trans = NOTRANS) or diag(R)
+ *	     (if options->Trans = TRANS or CONJ) so that it solves the
+ *	     original system before equilibration.
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the LU decomposition will be performed and how the
+ *	   system will be solved.
+ *
+ * A	   (input/output) SuperMatrix*
+ *	   Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
+ *	   of the linear equations is A->nrow. Currently, the type of A can be:
+ *	   Stype = SLU_NC or SLU_NR, Dtype = SLU_Z, Mtype = SLU_GE.
+ *	   In the future, more general A may be handled.
+ *
+ *	   On entry, If options->Fact = FACTORED and equed is not 'N',
+ *	   then A must have been equilibrated by the scaling factors in
+ *	   R and/or C.
+ *	   On exit, A is not modified
+ *         if options->Equil = NO, or
+ *         if options->Equil = YES but equed = 'N' on exit, or
+ *         if options->RowPerm = NO.
+ *
+ *	   Otherwise, if options->Equil = YES and equed is not 'N',
+ *	   A is scaled as follows:
+ *	   If A->Stype = SLU_NC:
+ *	     equed = 'R':  A := diag(R) * A
+ *	     equed = 'C':  A := A * diag(C)
+ *	     equed = 'B':  A := diag(R) * A * diag(C).
+ *	   If A->Stype = SLU_NR:
+ *	     equed = 'R':  transpose(A) := diag(R) * transpose(A)
+ *	     equed = 'C':  transpose(A) := transpose(A) * diag(C)
+ *	     equed = 'B':  transpose(A) := diag(R) * transpose(A) * diag(C).
+ *
+ *         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+ *            the matrix to an I-matrix, that is A is modified as follows:
+ *            P*Dr*A*Dc has entries of modulus 1 on the diagonal and 
+ *            off-diagonal entries of modulus at most 1. P is a permutation
+ *            obtained from MC64.
+ *            If MC64 fails, zgsequ() is used to equilibrate the system,
+ *            and A is scaled as above, there is no permutation involved.
+ *
+ * perm_c  (input/output) int*
+ *	   If A->Stype = SLU_NC, Column permutation vector of size A->ncol,
+ *	   which defines the permutation matrix Pc; perm_c[i] = j means
+ *	   column i of A is in position j in A*Pc.
+ *	   On exit, perm_c may be overwritten by the product of the input
+ *	   perm_c and a permutation that postorders the elimination tree
+ *	   of Pc'*A'*A*Pc; perm_c is not changed if the elimination tree
+ *	   is already in postorder.
+ *
+ *	   If A->Stype = SLU_NR, column permutation vector of size A->nrow,
+ *	   which describes permutation of columns of transpose(A) 
+ *	   (rows of A) as described above.
+ *
+ * perm_r  (input/output) int*
+ *	   If A->Stype = SLU_NC, row permutation vector of size A->nrow, 
+ *	   which defines the permutation matrix Pr, and is determined
+ *	   by partial pivoting.  perm_r[i] = j means row i of A is in 
+ *	   position j in Pr*A.
+ *
+ *	   If A->Stype = SLU_NR, permutation vector of size A->ncol, which
+ *	   determines permutation of rows of transpose(A)
+ *	   (columns of A) as described above.
+ *
+ *	   If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	   will try to use the input perm_r, unless a certain threshold
+ *	   criterion is violated. In that case, perm_r is overwritten by a
+ *	   new permutation determined by partial pivoting or diagonal
+ *	   threshold pivoting.
+ *	   Otherwise, perm_r is output argument.
+ *
+ * etree   (input/output) int*,  dimension (A->ncol)
+ *	   Elimination tree of Pc'*A'*A*Pc.
+ *	   If options->Fact != FACTORED and options->Fact != DOFACT,
+ *	   etree is an input argument, otherwise it is an output argument.
+ *	   Note: etree is a vector of parent pointers for a forest whose
+ *	   vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *
+ * equed   (input/output) char*
+ *	   Specifies the form of equilibration that was done.
+ *	   = 'N': No equilibration.
+ *	   = 'R': Row equilibration, i.e., A was premultiplied by diag(R).
+ *	   = 'C': Column equilibration, i.e., A was postmultiplied by diag(C).
+ *	   = 'B': Both row and column equilibration, i.e., A was replaced 
+ *		  by diag(R)*A*diag(C).
+ *	   If options->Fact = FACTORED, equed is an input argument,
+ *	   otherwise it is an output argument.
+ *
+ * R	   (input/output) double*, dimension (A->nrow)
+ *	   The row scale factors for A or transpose(A).
+ *	   If equed = 'R' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the left by diag(R).
+ *	   If equed = 'N' or 'C', R is not accessed.
+ *	   If options->Fact = FACTORED, R is an input argument,
+ *	       otherwise, R is output.
+ *	   If options->zFact = FACTORED and equed = 'R' or 'B', each element
+ *	       of R must be positive.
+ *
+ * C	   (input/output) double*, dimension (A->ncol)
+ *	   The column scale factors for A or transpose(A).
+ *	   If equed = 'C' or 'B', A (if A->Stype = SLU_NC) or transpose(A)
+ *	       (if A->Stype = SLU_NR) is multiplied on the right by diag(C).
+ *	   If equed = 'N' or 'R', C is not accessed.
+ *	   If options->Fact = FACTORED, C is an input argument,
+ *	       otherwise, C is output.
+ *	   If options->Fact = FACTORED and equed = 'C' or 'B', each element
+ *	       of C must be positive.
+ *
+ * L	   (output) SuperMatrix*
+ *	   The factor L from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype SLU_= NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses compressed row subscripts storage for supernodes, i.e.,
+ *	   L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.
+ *
+ * U	   (output) SuperMatrix*
+ *	   The factor U from the factorization
+ *	       Pr*A*Pc=L*U		(if A->Stype = SLU_NC) or
+ *	       Pr*transpose(A)*Pc=L*U	(if A->Stype = SLU_NR).
+ *	   Uses column-wise storage scheme, i.e., U has types:
+ *	   Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.
+ *
+ * work    (workspace/output) void*, size (lwork) (in bytes)
+ *	   User supplied workspace, should be large enough
+ *	   to hold data structures for factors L and U.
+ *	   On exit, if fact is not 'F', L and U point to this array.
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 mem_usage->total_needed; no other side effects.
+ *
+ *	   See argument 'mem_usage' for memory usage statistics.
+ *
+ * B	   (input/output) SuperMatrix*
+ *	   B has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+ *	   On entry, the right hand side matrix.
+ *	   If B->ncol = 0, only LU decomposition is performed, the triangular
+ *			   solve is skipped.
+ *	   On exit,
+ *	      if equed = 'N', B is not modified; otherwise
+ *	      if A->Stype = SLU_NC:
+ *		 if options->Trans = NOTRANS and equed = 'R' or 'B',
+ *		    B is overwritten by diag(R)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'C' of 'B',
+ *		    B is overwritten by diag(C)*B;
+ *	      if A->Stype = SLU_NR:
+ *		 if options->Trans = NOTRANS and equed = 'C' or 'B',
+ *		    B is overwritten by diag(C)*B;
+ *		 if options->Trans = TRANS or CONJ and equed = 'R' of 'B',
+ *		    B is overwritten by diag(R)*B.
+ *
+ *         If options->RowPerm = LargeDiag, MC64 is used to scale and permute
+ *            the matrix A to an I-matrix. Then, in addition to the scaling
+ *            above, B is further permuted by P*B if options->Trans = NOTRANS,
+ *            where P is obtained from MC64.
+ *
+ * X	   (output) SuperMatrix*
+ *	   X has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = SLU_GE.
+ *	   If info = 0 or info = A->ncol+1, X contains the solution matrix
+ *	   to the original system of equations. Note that A and B are modified
+ *	   on exit if equed is not 'N', and the solution to the equilibrated
+ *	   system is inv(diag(C))*X if options->Trans = NOTRANS and
+ *	   equed = 'C' or 'B', or inv(diag(R))*X if options->Trans = 'T' or 'C'
+ *	   and equed = 'R' or 'B'.
+ *
+ * recip_pivot_growth (output) double*
+ *	   The reciprocal pivot growth factor max_j( norm(A_j)/norm(U_j) ).
+ *	   The infinity norm is used. If recip_pivot_growth is much less
+ *	   than 1, the stability of the LU factorization could be poor.
+ *
+ * rcond   (output) double*
+ *	   The estimate of the reciprocal condition number of the matrix A
+ *	   after equilibration (if done). If rcond is less than the machine
+ *	   precision (in particular, if rcond = 0), the matrix is singular
+ *	   to working precision. This condition is indicated by a return
+ *	   code of info > 0.
+ *
+ * mem_usage (output) mem_usage_t*
+ *	   Record the memory usage statistics, consisting of following fields:
+ *	   - for_lu (float)
+ *	     The amount of space used in bytes for L\U data structures.
+ *	   - total_needed (float)
+ *	     The amount of space needed in bytes to perform factorization.
+ *	   - expansions (int)
+ *	     The number of memory expansions during the LU factorization.
+ *
+ * stat   (output) SuperLUStat_t*
+ *	  Record the statistics on runtime and floating-point operation count.
+ *	  See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info    (output) int*
+ *	   = 0: successful exit
+ *	   < 0: if info = -i, the i-th argument had an illegal value
+ *	   > 0: if info = i, and i is
+ *		<= A->ncol: number of zero pivots. They are replaced by small
+ *		      entries due to options->ILU_FillTol.
+ *		= A->ncol+1: U is nonsingular, but RCOND is less than machine
+ *		      precision, meaning that the matrix is singular to
+ *		      working precision. Nevertheless, the solution and
+ *		      error bounds are computed because there are a number
+ *		      of situations where the computed solution can be more
+ *		      accurate than the value of RCOND would suggest.
+ *		> A->ncol+1: number of bytes allocated when memory allocation
+ *		      failure occurred, plus A->ncol.
+ * </pre>
+ */
+
+void
+zgsisx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+       int *etree, char *equed, double *R, double *C,
+       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
+       SuperMatrix *B, SuperMatrix *X,
+       double *recip_pivot_growth, double *rcond,
+       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info)
+{
+
+    DNformat  *Bstore, *Xstore;
+    doublecomplex    *Bmat, *Xmat;
+    int       ldb, ldx, nrhs;
+    SuperMatrix *AA;/* A in SLU_NC format used by the factorization routine.*/
+    SuperMatrix AC; /* Matrix postmultiplied by Pc */
+    int       colequ, equil, nofact, notran, rowequ, permc_spec, mc64;
+    trans_t   trant;
+    char      norm[1];
+    int       i, j, info1;
+    double    amax, anorm, bignum, smlnum, colcnd, rowcnd, rcmax, rcmin;
+    int       relax, panel_size;
+    double    diag_pivot_thresh;
+    double    t0;      /* temporary time */
+    double    *utime;
+
+    int *perm = NULL; /* permutation returned from MC64 */
+
+    /* External functions */
+    extern double zlangs(char *, SuperMatrix *);
+
+    Bstore = B->Store;
+    Xstore = X->Store;
+    Bmat   = Bstore->nzval;
+    Xmat   = Xstore->nzval;
+    ldb    = Bstore->lda;
+    ldx    = Xstore->lda;
+    nrhs   = B->ncol;
+
+    *info = 0;
+    nofact = (options->Fact != FACTORED);
+    equil = (options->Equil == YES);
+    notran = (options->Trans == NOTRANS);
+    mc64 = (options->RowPerm == LargeDiag);
+    if ( nofact ) {
+	*(unsigned char *)equed = 'N';
+	rowequ = FALSE;
+	colequ = FALSE;
+    } else {
+	rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+	colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	smlnum = dlamch_("Safe minimum");
+	bignum = 1. / smlnum;
+    }
+
+    /* Test the input parameters */
+    if (!nofact && options->Fact != DOFACT && options->Fact != SamePattern &&
+	options->Fact != SamePattern_SameRowPerm &&
+	!notran && options->Trans != TRANS && options->Trans != CONJ &&
+	!equil && options->Equil != NO)
+	*info = -1;
+    else if ( A->nrow != A->ncol || A->nrow < 0 ||
+	      (A->Stype != SLU_NC && A->Stype != SLU_NR) ||
+	      A->Dtype != SLU_Z || A->Mtype != SLU_GE )
+	*info = -2;
+    else if (options->Fact == FACTORED &&
+	     !(rowequ || colequ || lsame_(equed, "N")))
+	*info = -6;
+    else {
+	if (rowequ) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, R[j]);
+		rcmax = SUPERLU_MAX(rcmax, R[j]);
+	    }
+	    if (rcmin <= 0.) *info = -7;
+	    else if ( A->nrow > 0)
+		rowcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else rowcnd = 1.;
+	}
+	if (colequ && *info == 0) {
+	    rcmin = bignum;
+	    rcmax = 0.;
+	    for (j = 0; j < A->nrow; ++j) {
+		rcmin = SUPERLU_MIN(rcmin, C[j]);
+		rcmax = SUPERLU_MAX(rcmax, C[j]);
+	    }
+	    if (rcmin <= 0.) *info = -8;
+	    else if (A->nrow > 0)
+		colcnd = SUPERLU_MAX(rcmin,smlnum) / SUPERLU_MIN(rcmax,bignum);
+	    else colcnd = 1.;
+	}
+	if (*info == 0) {
+	    if ( lwork < -1 ) *info = -12;
+	    else if ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      B->Stype != SLU_DN || B->Dtype != SLU_Z || 
+		      B->Mtype != SLU_GE )
+		*info = -13;
+	    else if ( X->ncol < 0 || Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
+		      (B->ncol != 0 && B->ncol != X->ncol) ||
+		      X->Stype != SLU_DN ||
+		      X->Dtype != SLU_Z || X->Mtype != SLU_GE )
+		*info = -14;
+	}
+    }
+    if (*info != 0) {
+	i = -(*info);
+	xerbla_("zgsisx", &i);
+	return;
+    }
+
+    /* Initialization for factor parameters */
+    panel_size = sp_ienv(1);
+    relax      = sp_ienv(2);
+    diag_pivot_thresh = options->DiagPivotThresh;
+
+    utime = stat->utime;
+
+    /* Convert A to SLU_NC format when necessary. */
+    if ( A->Stype == SLU_NR ) {
+	NRformat *Astore = A->Store;
+	AA = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+	zCreate_CompCol_Matrix(AA, A->ncol, A->nrow, Astore->nnz,
+			       Astore->nzval, Astore->colind, Astore->rowptr,
+			       SLU_NC, A->Dtype, A->Mtype);
+	if ( notran ) { /* Reverse the transpose argument. */
+	    trant = TRANS;
+	    notran = 0;
+	} else {
+	    trant = NOTRANS;
+	    notran = 1;
+	}
+    } else { /* A->Stype == SLU_NC */
+	trant = options->Trans;
+	AA = A;
+    }
+
+    if ( nofact ) {
+	register int i, j;
+	NCformat *Astore = AA->Store;
+	int nnz = Astore->nnz;
+	int *colptr = Astore->colptr;
+	int *rowind = Astore->rowind;
+	doublecomplex *nzval = (doublecomplex *)Astore->nzval;
+	int n = AA->nrow;
+
+	if ( mc64 ) {
+	    *equed = 'B';
+    	    /*rowequ = colequ = 1;*/
+	    t0 = SuperLU_timer_();
+	    if ((perm = intMalloc(n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for perm[]");
+
+	    info1 = zldperm(5, n, nnz, colptr, rowind, nzval, perm, R, C);
+
+	    if (info1 > 0) { /* MC64 fails, call zgsequ() later */
+		mc64 = 0;
+		SUPERLU_FREE(perm);
+		perm = NULL;
+	    } else {
+	        rowequ = colequ = 1;
+		for (i = 0; i < n; i++) {
+		    R[i] = exp(R[i]);
+		    C[i] = exp(C[i]);
+		}
+		/* permute and scale the matrix */
+		for (j = 0; j < n; j++) {
+		    for (i = colptr[j]; i < colptr[j + 1]; i++) {
+                        zd_mult(&nzval[i], &nzval[i], R[rowind[i]] * C[j]);
+			rowind[i] = perm[rowind[i]];
+		    }
+		}
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+	if ( !mc64 & equil ) {
+	    t0 = SuperLU_timer_();
+	    /* Compute row and column scalings to equilibrate the matrix A. */
+	    zgsequ(AA, R, C, &rowcnd, &colcnd, &amax, &info1);
+
+	    if ( info1 == 0 ) {
+		/* Equilibrate matrix A. */
+		zlaqgs(AA, R, C, rowcnd, colcnd, amax, equed);
+		rowequ = lsame_(equed, "R") || lsame_(equed, "B");
+		colequ = lsame_(equed, "C") || lsame_(equed, "B");
+	    }
+	    utime[EQUIL] = SuperLU_timer_() - t0;
+	}
+    }
+
+
+    if ( nofact ) {
+	
+	t0 = SuperLU_timer_();
+	/*
+	 * Gnet column permutation vector perm_c[], according to permc_spec:
+	 *   permc_spec = NATURAL:  natural ordering 
+	 *   permc_spec = MMD_AT_PLUS_A: minimum degree on structure of A'+A
+	 *   permc_spec = MMD_ATA:  minimum degree on structure of A'*A
+	 *   permc_spec = COLAMD:   approximate minimum degree column ordering
+	 *   permc_spec = MY_PERMC: the ordering already supplied in perm_c[]
+	 */
+	permc_spec = options->ColPerm;
+	if ( permc_spec != MY_PERMC && options->Fact == DOFACT )
+	    get_perm_c(permc_spec, AA, perm_c);
+	utime[COLPERM] = SuperLU_timer_() - t0;
+
+	t0 = SuperLU_timer_();
+	sp_preorder(options, AA, perm_c, etree, &AC);
+	utime[ETREE] = SuperLU_timer_() - t0;
+
+	/* Compute the LU factorization of A*Pc. */
+	t0 = SuperLU_timer_();
+	zgsitrf(options, &AC, relax, panel_size, etree, work, lwork,
+                perm_c, perm_r, L, U, stat, info);
+	utime[FACT] = SuperLU_timer_() - t0;
+
+	if ( lwork == -1 ) {
+	    mem_usage->total_needed = *info - A->ncol;
+	    return;
+	}
+    }
+
+    if ( options->PivotGrowth ) {
+	if ( *info > 0 ) return;
+
+	/* Compute the reciprocal pivot growth factor *recip_pivot_growth. */
+	*recip_pivot_growth = zPivotGrowth(A->ncol, AA, perm_c, L, U);
+    }
+
+    if ( options->ConditionNumber ) {
+	/* Estimate the reciprocal of the condition number of A. */
+	t0 = SuperLU_timer_();
+	if ( notran ) {
+	    *(unsigned char *)norm = '1';
+	} else {
+	    *(unsigned char *)norm = 'I';
+	}
+	anorm = zlangs(norm, AA);
+	zgscon(norm, L, U, anorm, rcond, stat, &info1);
+	utime[RCOND] = SuperLU_timer_() - t0;
+    }
+
+    if ( nrhs > 0 ) { /* Solve the system */
+        doublecomplex *tmp, *rhs_work;
+        int n = A->nrow;
+        if ( mc64 ) {
+	    if ((tmp = doublecomplexMalloc(n)) == NULL)
+		ABORT("SUPERLU_MALLOC fails for tmp[]");
+        }
+
+	/* Scale and permute the right-hand side if equilibration
+           and permutation from MC64 were performed. */
+	if ( notran ) {
+	    if ( rowequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i)
+                        zd_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], R[i]);
+	    }
+	    if ( mc64 ) {
+		for (j = 0; j < nrhs; ++j) {
+                   rhs_work = &Bmat[j*ldb];
+  	           for (i = 0; i < n; i++) tmp[perm[i]] = rhs_work[i];
+	           for (i = 0; i < n; i++) rhs_work[i] = tmp[i];
+                }
+	    }
+	} else if ( colequ ) {
+	    for (j = 0; j < nrhs; ++j)
+		for (i = 0; i < n; ++i) {
+                    zd_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], C[i]);
+		}
+	}
+
+	/* Compute the solution matrix X. */
+	for (j = 0; j < nrhs; j++)  /* Save a copy of the right hand sides */
+	    for (i = 0; i < B->nrow; i++)
+		Xmat[i + j*ldx] = Bmat[i + j*ldb];
+
+	t0 = SuperLU_timer_();
+	zgstrs (trant, L, U, perm_c, perm_r, X, stat, &info1);
+	utime[SOLVE] = SuperLU_timer_() - t0;
+
+	/* Transform the solution matrix X to a solution of the original
+	   system. */
+	if ( notran ) {
+	    if ( colequ ) {
+		for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < n; ++i) {
+                        zd_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], C[i]);
+                    }
+	    }
+	} else { /* transposed system */
+	    if ( rowequ ) {
+		if ( mc64 ) {
+		    for (j = 0; j < nrhs; j++) {
+			for (i = 0; i < n; i++)
+			    tmp[i] = Xmat[i + j * ldx]; /*dcopy*/
+			for (i = 0; i < n; i++)
+                           zd_mult(&Xmat[i+j*ldx], &tmp[perm[i]], R[i]);
+		    }
+		} else {
+		    for (j = 0; j < nrhs; ++j)
+			for (i = 0; i < A->nrow; ++i) {
+                           zd_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], R[i]);
+                        }
+		}
+	    }
+	}
+
+        if ( mc64 ) SUPERLU_FREE(tmp);
+
+    } /* end if nrhs > 0 */
+
+    if ( options->ConditionNumber ) {
+	/* Set INFO = A->ncol+1 if the matrix is singular to working precision. */
+	if ( *rcond < dlamch_("E") && *info == 0) *info = A->ncol + 1;
+    }
+
+    if (perm) SUPERLU_FREE(perm);
+
+    if ( nofact ) {
+	ilu_zQuerySpace(L, U, mem_usage);
+	Destroy_CompCol_Permuted(&AC);
+    }
+    if ( A->Stype == SLU_NR ) {
+	Destroy_SuperMatrix_Store(AA);
+	SUPERLU_FREE(AA);
+    }
+
+}
diff --git a/SRC/zgsitrf.c b/SRC/zgsitrf.c
new file mode 100644
index 0000000..b4b13de
--- /dev/null
+++ b/SRC/zgsitrf.c
@@ -0,0 +1,637 @@
+
+/*! @file zgsitrf.c
+ * \brief Computes an ILU factorization of a general sparse matrix
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.1) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ *
+ * </pre>
+ */
+
+#include "slu_zdefs.h"
+
+#ifdef DEBUG
+int num_drop_L;
+#endif
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * ZGSITRF computes an ILU factorization of a general sparse m-by-n
+ * matrix A using partial pivoting with row interchanges.
+ * The factorization has the form
+ *     Pr * A = L * U
+ * where Pr is a row permutation matrix, L is lower triangular with unit
+ * diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ * triangular (upper trapezoidal if A->nrow < A->ncol).
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the ILU decomposition will be performed.
+ *
+ * A	    (input) SuperMatrix*
+ *	    Original matrix A, permuted by columns, of dimension
+ *	    (A->nrow, A->ncol). The type of A can be:
+ *	    Stype = SLU_NCP; Dtype = SLU_Z; Mtype = SLU_GE.
+ *
+ * relax    (input) int
+ *	    To control degree of relaxing supernodes. If the number
+ *	    of nodes (columns) in a subtree of the elimination tree is less
+ *	    than relax, this subtree is considered as one supernode,
+ *	    regardless of the row structures of those columns.
+ *
+ * panel_size (input) int
+ *	    A panel consists of at most panel_size consecutive columns.
+ *
+ * etree    (input) int*, dimension (A->ncol)
+ *	    Elimination tree of A'*A.
+ *	    Note: etree is a vector of parent pointers for a forest whose
+ *	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *	    On input, the columns of A should be permuted so that the
+ *	    etree is in a certain postorder.
+ *
+ * work     (input/output) void*, size (lwork) (in bytes)
+ *	    User-supplied work space and space for the output data structures.
+ *	    Not referenced if lwork = 0;
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 *info; no other side effects.
+ *
+ * perm_c   (input) int*, dimension (A->ncol)
+ *	    Column permutation vector, which defines the
+ *	    permutation matrix Pc; perm_c[i] = j means column i of A is
+ *	    in position j in A*Pc.
+ *	    When searching for diagonal, perm_c[*] is applied to the
+ *	    row subscripts of A, so that diagonal threshold pivoting
+ *	    can find the diagonal of A, rather than that of A*Pc.
+ *
+ * perm_r   (input/output) int*, dimension (A->nrow)
+ *	    Row permutation vector which defines the permutation matrix Pr,
+ *	    perm_r[i] = j means row i of A is in position j in Pr*A.
+ *	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	       will try to use the input perm_r, unless a certain threshold
+ *	       criterion is violated. In that case, perm_r is overwritten by
+ *	       a new permutation determined by partial pivoting or diagonal
+ *	       threshold pivoting.
+ *	    Otherwise, perm_r is output argument;
+ *
+ * L	    (output) SuperMatrix*
+ *	    The factor L from the factorization Pr*A=L*U; use compressed row
+ *	    subscripts storage for supernodes, i.e., L has type:
+ *	    Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.
+ *
+ * U	    (output) SuperMatrix*
+ *	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+ *	    storage scheme, i.e., U has types: Stype = SLU_NC,
+ *	    Dtype = SLU_Z, Mtype = SLU_TRU.
+ *
+ * stat     (output) SuperLUStat_t*
+ *	    Record the statistics on runtime and floating-point operation count.
+ *	    See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info     (output) int*
+ *	    = 0: successful exit
+ *	    < 0: if info = -i, the i-th argument had an illegal value
+ *	    > 0: if info = i, and i is
+ *	       <= A->ncol: number of zero pivots. They are replaced by small
+ *		  entries according to options->ILU_FillTol.
+ *	       > A->ncol: number of bytes allocated when memory allocation
+ *		  failure occurred, plus A->ncol. If lwork = -1, it is
+ *		  the estimated amount of space needed, plus A->ncol.
+ *
+ * ======================================================================
+ *
+ * Local Working Arrays:
+ * ======================
+ *   m = number of rows in the matrix
+ *   n = number of columns in the matrix
+ *
+ *   marker[0:3*m-1]: marker[i] = j means that node i has been
+ *	reached when working on column j.
+ *	Storage: relative to original row subscripts
+ *	NOTE: There are 4 of them:
+ *	      marker/marker1 are used for panel dfs, see (ilu_)dpanel_dfs.c;
+ *	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+ *	      marker_relax(has its own space) is used for relaxed supernodes.
+ *
+ *   parent[0:m-1]: parent vector used during dfs
+ *	Storage: relative to new row subscripts
+ *
+ *   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ *	unexplored neighbor of i in lsub[*]
+ *
+ *   segrep[0:nseg-1]: contains the list of supernodal representatives
+ *	in topological order of the dfs. A supernode representative is the
+ *	last column of a supernode.
+ *	The maximum size of segrep[] is n.
+ *
+ *   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+ *	supernodal representative r, repfnz[r] is the location of the first
+ *	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+ *	indicates the supernode r has been explored.
+ *	NOTE: There are W of them, each used for one column of a panel.
+ *
+ *   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+ *	the panel diagonal. These are filled in during dpanel_dfs(), and are
+ *	used later in the inner LU factorization within the panel.
+ *	panel_lsub[]/dense[] pair forms the SPA data structure.
+ *	NOTE: There are W of them.
+ *
+ *   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ *		   NOTE: there are W of them.
+ *
+ *   tempv[0:*]: real temporary used for dense numeric kernels;
+ *	The size of this array is defined by NUM_TEMPV() in slu_util.h.
+ *	It is also used by the dropping routine ilu_ddrop_row().
+ * </pre>
+ */
+
+void
+zgsitrf(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size,
+	int *etree, void *work, int lwork, int *perm_c, int *perm_r,
+	SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)
+{
+    /* Local working arrays */
+    NCPformat *Astore;
+    int       *iperm_r = NULL; /* inverse of perm_r; used when
+				  options->Fact == SamePattern_SameRowPerm */
+    int       *iperm_c; /* inverse of perm_c */
+    int       *swap, *iswap; /* swap is used to store the row permutation
+				during the factorization. Initially, it is set
+				to iperm_c (row indeces of Pc*A*Pc').
+				iswap is the inverse of swap. After the
+				factorization, it is equal to perm_r. */
+    int       *iwork;
+    doublecomplex   *zwork;
+    int       *segrep, *repfnz, *parent, *xplore;
+    int       *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
+    int       *marker, *marker_relax;
+    doublecomplex    *dense, *tempv;
+    double *dtempv;
+    int       *relax_end, *relax_fsupc;
+    doublecomplex    *a;
+    int       *asub;
+    int       *xa_begin, *xa_end;
+    int       *xsup, *supno;
+    int       *xlsub, *xlusup, *xusub;
+    int       nzlumax;
+    double    *amax; 
+    doublecomplex    drop_sum;
+    double alpha, omega;  /* used in MILU, mimicing DRIC */
+    static GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
+    double    *dwork2;	   /* used by the second dropping rule */
+
+    /* Local scalars */
+    fact_t    fact = options->Fact;
+    double    diag_pivot_thresh = options->DiagPivotThresh;
+    double    drop_tol = options->ILU_DropTol; /* tau */
+    double    fill_ini = options->ILU_FillTol; /* tau^hat */
+    double    gamma = options->ILU_FillFactor;
+    int       drop_rule = options->ILU_DropRule;
+    milu_t    milu = options->ILU_MILU;
+    double    fill_tol;
+    int       pivrow;	/* pivotal row number in the original matrix A */
+    int       nseg1;	/* no of segments in U-column above panel row jcol */
+    int       nseg;	/* no of segments in each U-column */
+    register int jcol;
+    register int kcol;	/* end column of a relaxed snode */
+    register int icol;
+    register int i, k, jj, new_next, iinfo;
+    int       m, n, min_mn, jsupno, fsupc, nextlu, nextu;
+    int       w_def;	/* upper bound on panel width */
+    int       usepr, iperm_r_allocated = 0;
+    int       nnzL, nnzU;
+    int       *panel_histo = stat->panel_histo;
+    flops_t   *ops = stat->ops;
+
+    int       last_drop;/* the last column which the dropping rules applied */
+    int       quota;
+    int       nnzAj;	/* number of nonzeros in A(:,1:j) */
+    int       nnzLj, nnzUj;
+    double    tol_L = drop_tol, tol_U = drop_tol;
+    doublecomplex zero = {0.0, 0.0};
+    double one = 1.0;
+
+    /* Executable */	   
+    iinfo    = 0;
+    m	     = A->nrow;
+    n	     = A->ncol;
+    min_mn   = SUPERLU_MIN(m, n);
+    Astore   = A->Store;
+    a	     = Astore->nzval;
+    asub     = Astore->rowind;
+    xa_begin = Astore->colbeg;
+    xa_end   = Astore->colend;
+
+    /* Allocate storage common to the factor routines */
+    *info = zLUMemInit(fact, work, lwork, m, n, Astore->nnz, panel_size,
+		       gamma, L, U, &Glu, &iwork, &zwork);
+    if ( *info ) return;
+
+    xsup    = Glu.xsup;
+    supno   = Glu.supno;
+    xlsub   = Glu.xlsub;
+    xlusup  = Glu.xlusup;
+    xusub   = Glu.xusub;
+
+    SetIWork(m, n, panel_size, iwork, &segrep, &parent, &xplore,
+	     &repfnz, &panel_lsub, &marker_relax, &marker);
+    zSetRWork(m, panel_size, zwork, &dense, &tempv);
+
+    usepr = (fact == SamePattern_SameRowPerm);
+    if ( usepr ) {
+	/* Compute the inverse of perm_r */
+	iperm_r = (int *) intMalloc(m);
+	for (k = 0; k < m; ++k) iperm_r[perm_r[k]] = k;
+	iperm_r_allocated = 1;
+    }
+
+    iperm_c = (int *) intMalloc(n);
+    for (k = 0; k < n; ++k) iperm_c[perm_c[k]] = k;
+    swap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) swap[k] = iperm_c[k];
+    iswap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) iswap[k] = perm_c[k];
+    amax = (double *) doubleMalloc(panel_size);
+    if (drop_rule & DROP_SECONDARY)
+	dwork2 = (double *)doubleMalloc(n);
+    else
+	dwork2 = NULL;
+
+    nnzAj = 0;
+    nnzLj = 0;
+    nnzUj = 0;
+    last_drop = SUPERLU_MAX(min_mn - 2 * sp_ienv(7), (int)(min_mn * 0.95));
+    alpha = pow((double)n, -1.0 / options->ILU_MILU_Dim);
+
+    /* Identify relaxed snodes */
+    relax_end = (int *) intMalloc(n);
+    relax_fsupc = (int *) intMalloc(n);
+    if ( options->SymmetricMode == YES )
+	ilu_heap_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+    else
+	ilu_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+
+    ifill (perm_r, m, EMPTY);
+    ifill (marker, m * NO_MARKER, EMPTY);
+    supno[0] = -1;
+    xsup[0]  = xlsub[0] = xusub[0] = xlusup[0] = 0;
+    w_def    = panel_size;
+
+    /* Mark the rows used by relaxed supernodes */
+    ifill (marker_relax, m, EMPTY);
+    i = mark_relax(m, relax_end, relax_fsupc, xa_begin, xa_end,
+	         asub, marker_relax);
+#if ( PRNTlevel >= 1)
+    printf("%d relaxed supernodes.\n", i);
+#endif
+
+    /*
+     * Work on one "panel" at a time. A panel is one of the following:
+     *	   (a) a relaxed supernode at the bottom of the etree, or
+     *	   (b) panel_size contiguous columns, defined by the user
+     */
+    for (jcol = 0; jcol < min_mn; ) {
+
+	if ( relax_end[jcol] != EMPTY ) { /* start of a relaxed snode */
+	    kcol = relax_end[jcol];	  /* end of the relaxed snode */
+	    panel_histo[kcol-jcol+1]++;
+
+	    /* Drop small rows in the previous supernode. */
+	    if (jcol > 0 && jcol < last_drop) {
+		int first = xsup[supno[jcol - 1]];
+		int last = jcol - 1;
+		int quota;
+
+		/* Compute the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * (m - first) / m
+			    * (last - first + 1);
+		else if (drop_rule & DROP_COLUMN) {
+		    int i;
+		    quota = 0;
+		    for (i = first; i <= last; i++)
+			quota += xa_end[i] - xa_begin[i];
+		    quota = gamma * quota * (m - first) / m;
+		} else if (drop_rule & DROP_AREA)
+		    quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			    - nnzLj;
+		else
+		    quota = m * n;
+		fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) / min_mn);
+
+		/* Drop small rows */
+                dtempv = (double *) tempv;
+		i = ilu_zdrop_row(options, first, last, tol_L, quota, &nnzLj,
+				  &fill_tol, &Glu, dtempv, dwork2, 0);
+		/* Reset the parameters */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			     < nnzLj)
+			tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+		    else
+			tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		}
+		if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		num_drop_L += i * (last - first + 1);
+#endif
+	    }
+
+	    /* --------------------------------------
+	     * Factorize the relaxed supernode(jcol:kcol)
+	     * -------------------------------------- */
+	    /* Determine the union of the row structure of the snode */
+	    if ( (*info = ilu_zsnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
+					 marker, &Glu)) != 0 )
+		return;
+
+	    nextu    = xusub[jcol];
+	    nextlu   = xlusup[jcol];
+	    jsupno   = supno[jcol];
+	    fsupc    = xsup[jsupno];
+	    new_next = nextlu + (xlsub[fsupc+1]-xlsub[fsupc])*(kcol-jcol+1);
+	    nzlumax = Glu.nzlumax;
+	    while ( new_next > nzlumax ) {
+		if ((*info = zLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, &Glu)))
+		    return;
+	    }
+
+	    for (icol = jcol; icol <= kcol; icol++) {
+		xusub[icol+1] = nextu;
+
+		amax[0] = 0.0;
+		/* Scatter into SPA dense[*] */
+		for (k = xa_begin[icol]; k < xa_end[icol]; k++) {
+                    register double tmp = z_abs1 (&a[k]);
+		    if (tmp > amax[0]) amax[0] = tmp;
+		    dense[asub[k]] = a[k];
+		}
+		nnzAj += xa_end[icol] - xa_begin[icol];
+		if (amax[0] == 0.0) {
+		    amax[0] = fill_ini;
+#if ( PRNTlevel >= 1)
+		    printf("Column %d is entirely zero!\n", icol);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Numeric update within the snode */
+		zsnode_bmod(icol, jsupno, fsupc, dense, tempv, &Glu, stat);
+
+		if (usepr) pivrow = iperm_r[icol];
+		fill_tol = pow(fill_ini, 1.0 - (double)icol / (double)min_mn);
+		if ( (*info = ilu_zpivotL(icol, diag_pivot_thresh, &usepr,
+					  perm_r, iperm_c[icol], swap, iswap,
+					  marker_relax, &pivrow,
+                                          amax[0] * fill_tol, milu, zero,
+                                          &Glu, stat)) ) {
+		    iinfo++;
+		    marker[pivrow] = kcol;
+		}
+
+	    }
+
+	    jcol = kcol + 1;
+
+	} else { /* Work on one panel of panel_size columns */
+
+	    /* Adjust panel_size so that a panel won't overlap with the next
+	     * relaxed snode.
+	     */
+	    panel_size = w_def;
+	    for (k = jcol + 1; k < SUPERLU_MIN(jcol+panel_size, min_mn); k++)
+		if ( relax_end[k] != EMPTY ) {
+		    panel_size = k - jcol;
+		    break;
+		}
+	    if ( k == min_mn ) panel_size = min_mn - jcol;
+	    panel_histo[panel_size]++;
+
+	    /* symbolic factor on a panel of columns */
+	    ilu_zpanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
+                          dense, amax, panel_lsub, segrep, repfnz,
+                          marker, parent, xplore, &Glu);
+
+	    /* numeric sup-panel updates in topological order */
+	    zpanel_bmod(m, panel_size, jcol, nseg1, dense,
+			tempv, segrep, repfnz, &Glu, stat);
+
+	    /* Sparse LU within the panel, and below panel diagonal */
+	    for (jj = jcol; jj < jcol + panel_size; jj++) {
+
+		k = (jj - jcol) * m; /* column index for w-wide arrays */
+
+		nseg = nseg1;	/* Begin after all the panel segments */
+
+		nnzAj += xa_end[jj] - xa_begin[jj];
+
+		if ((*info = ilu_zcolumn_dfs(m, jj, perm_r, &nseg,
+					     &panel_lsub[k], segrep, &repfnz[k],
+					     marker, parent, xplore, &Glu)))
+		    return;
+
+		/* Numeric updates */
+		if ((*info = zcolumn_bmod(jj, (nseg - nseg1), &dense[k],
+					  tempv, &segrep[nseg1], &repfnz[k],
+					  jcol, &Glu, stat)) != 0) return;
+
+		/* Make a fill-in position if the column is entirely zero */
+		if (xlsub[jj + 1] == xlsub[jj]) {
+		    register int i, row;
+		    int nextl;
+		    int nzlmax = Glu.nzlmax;
+		    int *lsub = Glu.lsub;
+		    int *marker2 = marker + 2 * m;
+
+		    /* Allocate memory */
+		    nextl = xlsub[jj] + 1;
+		    if (nextl >= nzlmax) {
+			int error = zLUMemXpand(jj, nextl, LSUB, &nzlmax, &Glu);
+			if (error) { *info = error; return; }
+			lsub = Glu.lsub;
+		    }
+		    xlsub[jj + 1]++;
+		    assert(xlusup[jj]==xlusup[jj+1]);
+		    xlusup[jj + 1]++;
+		    Glu.lusup[xlusup[jj]] = zero;
+
+		    /* Choose a row index (pivrow) for fill-in */
+		    for (i = jj; i < n; i++)
+			if (marker_relax[swap[i]] <= jj) break;
+		    row = swap[i];
+		    marker2[row] = jj;
+		    lsub[xlsub[jj]] = row;
+#ifdef DEBUG
+		    printf("Fill col %d.\n", jj);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Computer the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * jj / m;
+		else if (drop_rule & DROP_COLUMN)
+		    quota = gamma * (xa_end[jj] - xa_begin[jj]) *
+			    (jj + 1) / m;
+		else if (drop_rule & DROP_AREA)
+		    quota = gamma * 0.9 * nnzAj * 0.5 - nnzUj;
+		else
+		    quota = m;
+
+		/* Copy the U-segments to ucol[*] and drop small entries */
+		if ((*info = ilu_zcopy_to_ucol(jj, nseg, segrep, &repfnz[k],
+					       perm_r, &dense[k], drop_rule,
+					       milu, amax[jj - jcol] * tol_U,
+					       quota, &drop_sum, &nnzUj, &Glu,
+					       dwork2)) != 0)
+		    return;
+
+		/* Reset the dropping threshold if required */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * 0.9 * nnzAj * 0.5 < nnzLj)
+			tol_U = SUPERLU_MIN(1.0, tol_U * 2.0);
+		    else
+			tol_U = SUPERLU_MAX(drop_tol, tol_U * 0.5);
+		}
+
+		if (drop_sum.r != 0.0 && drop_sum.i != 0.0)
+		{
+                    omega = SUPERLU_MIN(2.0*(1.0-alpha)/z_abs1(&drop_sum), 1.0);
+                    zd_mult(&drop_sum, &drop_sum, omega);
+		}
+		if (usepr) pivrow = iperm_r[jj];
+		fill_tol = pow(fill_ini, 1.0 - (double)jj / (double)min_mn);
+		if ( (*info = ilu_zpivotL(jj, diag_pivot_thresh, &usepr, perm_r,
+					  iperm_c[jj], swap, iswap,
+					  marker_relax, &pivrow,
+					  amax[jj - jcol] * fill_tol, milu,
+					  drop_sum, &Glu, stat)) ) {
+		    iinfo++;
+		    marker[m + pivrow] = jj;
+		    marker[2 * m + pivrow] = jj;
+		}
+
+		/* Reset repfnz[] for this column */
+		resetrep_col (nseg, segrep, &repfnz[k]);
+
+		/* Start a new supernode, drop the previous one */
+		if (jj > 0 && supno[jj] > supno[jj - 1] && jj < last_drop) {
+		    int first = xsup[supno[jj - 1]];
+		    int last = jj - 1;
+		    int quota;
+
+		    /* Compute the quota */
+		    if (drop_rule & DROP_PROWS)
+			quota = gamma * Astore->nnz / m * (m - first) / m
+				* (last - first + 1);
+		    else if (drop_rule & DROP_COLUMN) {
+			int i;
+			quota = 0;
+			for (i = first; i <= last; i++)
+			    quota += xa_end[i] - xa_begin[i];
+			quota = gamma * quota * (m - first) / m;
+		    } else if (drop_rule & DROP_AREA)
+			quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0)
+				/ m) - nnzLj;
+		    else
+			quota = m * n;
+		    fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) /
+			    (double)min_mn);
+
+		    /* Drop small rows */
+                    dtempv = (double *) tempv;
+		    i = ilu_zdrop_row(options, first, last, tol_L, quota,
+				      &nnzLj, &fill_tol, &Glu, dtempv, dwork2,
+				      1);
+
+		    /* Reset the parameters */
+		    if (drop_rule & DROP_DYNAMIC) {
+			if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+				< nnzLj)
+			    tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+			else
+			    tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		    }
+		    if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		    num_drop_L += i * (last - first + 1);
+#endif
+		} /* if start a new supernode */
+
+	    } /* for */
+
+	    jcol += panel_size; /* Move to the next panel */
+
+	} /* else */
+
+    } /* for */
+
+    *info = iinfo;
+
+    if ( m > n ) {
+	k = 0;
+	for (i = 0; i < m; ++i)
+	    if ( perm_r[i] == EMPTY ) {
+		perm_r[i] = n + k;
+		++k;
+	    }
+    }
+
+    ilu_countnz(min_mn, &nnzL, &nnzU, &Glu);
+    fixupL(min_mn, perm_r, &Glu);
+
+    zLUWorkFree(iwork, zwork, &Glu); /* Free work space and compress storage */
+
+    if ( fact == SamePattern_SameRowPerm ) {
+	/* L and U structures may have changed due to possibly different
+	   pivoting, even though the storage is available.
+	   There could also be memory expansions, so the array locations
+	   may have changed, */
+	((SCformat *)L->Store)->nnz = nnzL;
+	((SCformat *)L->Store)->nsuper = Glu.supno[n];
+	((SCformat *)L->Store)->nzval = Glu.lusup;
+	((SCformat *)L->Store)->nzval_colptr = Glu.xlusup;
+	((SCformat *)L->Store)->rowind = Glu.lsub;
+	((SCformat *)L->Store)->rowind_colptr = Glu.xlsub;
+	((NCformat *)U->Store)->nnz = nnzU;
+	((NCformat *)U->Store)->nzval = Glu.ucol;
+	((NCformat *)U->Store)->rowind = Glu.usub;
+	((NCformat *)U->Store)->colptr = Glu.xusub;
+    } else {
+	zCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL, Glu.lusup,
+				 Glu.xlusup, Glu.lsub, Glu.xlsub, Glu.supno,
+				 Glu.xsup, SLU_SC, SLU_Z, SLU_TRLU);
+	zCreate_CompCol_Matrix(U, min_mn, min_mn, nnzU, Glu.ucol,
+			       Glu.usub, Glu.xusub, SLU_NC, SLU_Z, SLU_TRU);
+    }
+
+    ops[FACT] += ops[TRSV] + ops[GEMV];
+    stat->expansions = --(Glu.num_expansions);
+
+    if ( iperm_r_allocated ) SUPERLU_FREE (iperm_r);
+    SUPERLU_FREE (iperm_c);
+    SUPERLU_FREE (relax_end);
+    SUPERLU_FREE (swap);
+    SUPERLU_FREE (iswap);
+    SUPERLU_FREE (relax_fsupc);
+    SUPERLU_FREE (amax);
+    if ( dwork2 ) SUPERLU_FREE (dwork2);
+
+}
diff --git a/SRC/zgsitrf.c.bak b/SRC/zgsitrf.c.bak
new file mode 100644
index 0000000..a763c98
--- /dev/null
+++ b/SRC/zgsitrf.c.bak
@@ -0,0 +1,629 @@
+
+/*! @file zgsitf.c
+ * \brief Computes an ILU factorization of a general sparse matrix
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_zdefs.h"
+
+#ifdef DEBUG
+int num_drop_L;
+#endif
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * ZGSITRF computes an ILU factorization of a general sparse m-by-n
+ * matrix A using partial pivoting with row interchanges.
+ * The factorization has the form
+ *     Pr * A = L * U
+ * where Pr is a row permutation matrix, L is lower triangular with unit
+ * diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper
+ * triangular (upper trapezoidal if A->nrow < A->ncol).
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * options (input) superlu_options_t*
+ *	   The structure defines the input parameters to control
+ *	   how the ILU decomposition will be performed.
+ *
+ * A	    (input) SuperMatrix*
+ *	    Original matrix A, permuted by columns, of dimension
+ *	    (A->nrow, A->ncol). The type of A can be:
+ *	    Stype = SLU_NCP; Dtype = SLU_Z; Mtype = SLU_GE.
+ *
+ * relax    (input) int
+ *	    To control degree of relaxing supernodes. If the number
+ *	    of nodes (columns) in a subtree of the elimination tree is less
+ *	    than relax, this subtree is considered as one supernode,
+ *	    regardless of the row structures of those columns.
+ *
+ * panel_size (input) int
+ *	    A panel consists of at most panel_size consecutive columns.
+ *
+ * etree    (input) int*, dimension (A->ncol)
+ *	    Elimination tree of A'*A.
+ *	    Note: etree is a vector of parent pointers for a forest whose
+ *	    vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol.
+ *	    On input, the columns of A should be permuted so that the
+ *	    etree is in a certain postorder.
+ *
+ * work     (input/output) void*, size (lwork) (in bytes)
+ *	    User-supplied work space and space for the output data structures.
+ *	    Not referenced if lwork = 0;
+ *
+ * lwork   (input) int
+ *	   Specifies the size of work array in bytes.
+ *	   = 0:  allocate space internally by system malloc;
+ *	   > 0:  use user-supplied work array of length lwork in bytes,
+ *		 returns error if space runs out.
+ *	   = -1: the routine guesses the amount of space needed without
+ *		 performing the factorization, and returns it in
+ *		 *info; no other side effects.
+ *
+ * perm_c   (input) int*, dimension (A->ncol)
+ *	    Column permutation vector, which defines the
+ *	    permutation matrix Pc; perm_c[i] = j means column i of A is
+ *	    in position j in A*Pc.
+ *	    When searching for diagonal, perm_c[*] is applied to the
+ *	    row subscripts of A, so that diagonal threshold pivoting
+ *	    can find the diagonal of A, rather than that of A*Pc.
+ *
+ * perm_r   (input/output) int*, dimension (A->nrow)
+ *	    Row permutation vector which defines the permutation matrix Pr,
+ *	    perm_r[i] = j means row i of A is in position j in Pr*A.
+ *	    If options->Fact = SamePattern_SameRowPerm, the pivoting routine
+ *	       will try to use the input perm_r, unless a certain threshold
+ *	       criterion is violated. In that case, perm_r is overwritten by
+ *	       a new permutation determined by partial pivoting or diagonal
+ *	       threshold pivoting.
+ *	    Otherwise, perm_r is output argument;
+ *
+ * L	    (output) SuperMatrix*
+ *	    The factor L from the factorization Pr*A=L*U; use compressed row
+ *	    subscripts storage for supernodes, i.e., L has type:
+ *	    Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.
+ *
+ * U	    (output) SuperMatrix*
+ *	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
+ *	    storage scheme, i.e., U has types: Stype = SLU_NC,
+ *	    Dtype = SLU_Z, Mtype = SLU_TRU.
+ *
+ * stat     (output) SuperLUStat_t*
+ *	    Record the statistics on runtime and floating-point operation count.
+ *	    See slu_util.h for the definition of 'SuperLUStat_t'.
+ *
+ * info     (output) int*
+ *	    = 0: successful exit
+ *	    < 0: if info = -i, the i-th argument had an illegal value
+ *	    > 0: if info = i, and i is
+ *	       <= A->ncol: number of zero pivots. They are replaced by small
+ *		  entries according to options->ILU_FillTol.
+ *	       > A->ncol: number of bytes allocated when memory allocation
+ *		  failure occurred, plus A->ncol. If lwork = -1, it is
+ *		  the estimated amount of space needed, plus A->ncol.
+ *
+ * ======================================================================
+ *
+ * Local Working Arrays:
+ * ======================
+ *   m = number of rows in the matrix
+ *   n = number of columns in the matrix
+ *
+ *   marker[0:3*m-1]: marker[i] = j means that node i has been
+ *	reached when working on column j.
+ *	Storage: relative to original row subscripts
+ *	NOTE: There are 4 of them:
+ *	      marker/marker1 are used for panel dfs, see (ilu_)dpanel_dfs.c;
+ *	      marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c;
+ *	      marker_relax(has its own space) is used for relaxed supernodes.
+ *
+ *   parent[0:m-1]: parent vector used during dfs
+ *	Storage: relative to new row subscripts
+ *
+ *   xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ *	unexplored neighbor of i in lsub[*]
+ *
+ *   segrep[0:nseg-1]: contains the list of supernodal representatives
+ *	in topological order of the dfs. A supernode representative is the
+ *	last column of a supernode.
+ *	The maximum size of segrep[] is n.
+ *
+ *   repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a
+ *	supernodal representative r, repfnz[r] is the location of the first
+ *	nonzero in this segment.  It is also used during the dfs: repfnz[r]>0
+ *	indicates the supernode r has been explored.
+ *	NOTE: There are W of them, each used for one column of a panel.
+ *
+ *   panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below
+ *	the panel diagonal. These are filled in during dpanel_dfs(), and are
+ *	used later in the inner LU factorization within the panel.
+ *	panel_lsub[]/dense[] pair forms the SPA data structure.
+ *	NOTE: There are W of them.
+ *
+ *   dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ *		   NOTE: there are W of them.
+ *
+ *   tempv[0:*]: real temporary used for dense numeric kernels;
+ *	The size of this array is defined by NUM_TEMPV() in slu_util.h.
+ *	It is also used by the dropping routine ilu_ddrop_row().
+ * </pre>
+ */
+
+void
+zgsitrf(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size,
+	int *etree, void *work, int lwork, int *perm_c, int *perm_r,
+	SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)
+{
+    /* Local working arrays */
+    NCPformat *Astore;
+    int       *iperm_r = NULL; /* inverse of perm_r; used when
+				  options->Fact == SamePattern_SameRowPerm */
+    int       *iperm_c; /* inverse of perm_c */
+    int       *swap, *iswap; /* swap is used to store the row permutation
+				during the factorization. Initially, it is set
+				to iperm_c (row indeces of Pc*A*Pc').
+				iswap is the inverse of swap. After the
+				factorization, it is equal to perm_r. */
+    int       *iwork;
+    doublecomplex   *zwork;
+    int       *segrep, *repfnz, *parent, *xplore;
+    int       *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
+    int       *marker, *marker_relax;
+    doublecomplex    *dense, *tempv;
+    double *dtempv;
+    int       *relax_end, *relax_fsupc;
+    doublecomplex    *a;
+    int       *asub;
+    int       *xa_begin, *xa_end;
+    int       *xsup, *supno;
+    int       *xlsub, *xlusup, *xusub;
+    int       nzlumax;
+    double    *amax; 
+    doublecomplex    drop_sum;
+    static GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
+    int       *iwork2;	   /* used by the second dropping rule */
+
+    /* Local scalars */
+    fact_t    fact = options->Fact;
+    double    diag_pivot_thresh = options->DiagPivotThresh;
+    double    drop_tol = options->ILU_DropTol; /* tau */
+    double    fill_ini = options->ILU_FillTol; /* tau^hat */
+    double    gamma = options->ILU_FillFactor;
+    int       drop_rule = options->ILU_DropRule;
+    milu_t    milu = options->ILU_MILU;
+    double    fill_tol;
+    int       pivrow;	/* pivotal row number in the original matrix A */
+    int       nseg1;	/* no of segments in U-column above panel row jcol */
+    int       nseg;	/* no of segments in each U-column */
+    register int jcol;
+    register int kcol;	/* end column of a relaxed snode */
+    register int icol;
+    register int i, k, jj, new_next, iinfo;
+    int       m, n, min_mn, jsupno, fsupc, nextlu, nextu;
+    int       w_def;	/* upper bound on panel width */
+    int       usepr, iperm_r_allocated = 0;
+    int       nnzL, nnzU;
+    int       *panel_histo = stat->panel_histo;
+    flops_t   *ops = stat->ops;
+
+    int       last_drop;/* the last column which the dropping rules applied */
+    int       quota;
+    int       nnzAj;	/* number of nonzeros in A(:,1:j) */
+    int       nnzLj, nnzUj;
+    double    tol_L = drop_tol, tol_U = drop_tol;
+    doublecomplex zero = {0.0, 0.0};
+
+    /* Executable */	   
+    iinfo    = 0;
+    m	     = A->nrow;
+    n	     = A->ncol;
+    min_mn   = SUPERLU_MIN(m, n);
+    Astore   = A->Store;
+    a	     = Astore->nzval;
+    asub     = Astore->rowind;
+    xa_begin = Astore->colbeg;
+    xa_end   = Astore->colend;
+
+    /* Allocate storage common to the factor routines */
+    *info = zLUMemInit(fact, work, lwork, m, n, Astore->nnz, panel_size,
+		       gamma, L, U, &Glu, &iwork, &zwork);
+    if ( *info ) return;
+
+    xsup    = Glu.xsup;
+    supno   = Glu.supno;
+    xlsub   = Glu.xlsub;
+    xlusup  = Glu.xlusup;
+    xusub   = Glu.xusub;
+
+    SetIWork(m, n, panel_size, iwork, &segrep, &parent, &xplore,
+	     &repfnz, &panel_lsub, &marker_relax, &marker);
+    zSetRWork(m, panel_size, zwork, &dense, &tempv);
+
+    usepr = (fact == SamePattern_SameRowPerm);
+    if ( usepr ) {
+	/* Compute the inverse of perm_r */
+	iperm_r = (int *) intMalloc(m);
+	for (k = 0; k < m; ++k) iperm_r[perm_r[k]] = k;
+	iperm_r_allocated = 1;
+    }
+
+    iperm_c = (int *) intMalloc(n);
+    for (k = 0; k < n; ++k) iperm_c[perm_c[k]] = k;
+    swap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) swap[k] = iperm_c[k];
+    iswap = (int *)intMalloc(n);
+    for (k = 0; k < n; k++) iswap[k] = perm_c[k];
+    amax = (double *) doubleMalloc(panel_size);
+    if (drop_rule & DROP_SECONDARY)
+	iwork2 = (int *)intMalloc(n);
+    else
+	iwork2 = NULL;
+
+    nnzAj = 0;
+    nnzLj = 0;
+    nnzUj = 0;
+    last_drop = SUPERLU_MAX(min_mn - 2 * sp_ienv(7), (int)(min_mn * 0.95));
+
+    /* Identify relaxed snodes */
+    relax_end = (int *) intMalloc(n);
+    relax_fsupc = (int *) intMalloc(n);
+    if ( options->SymmetricMode == YES )
+	ilu_heap_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+    else
+	ilu_relax_snode(n, etree, relax, marker, relax_end, relax_fsupc);
+
+    ifill (perm_r, m, EMPTY);
+    ifill (marker, m * NO_MARKER, EMPTY);
+    supno[0] = -1;
+    xsup[0]  = xlsub[0] = xusub[0] = xlusup[0] = 0;
+    w_def    = panel_size;
+
+    /* Mark the rows used by relaxed supernodes */
+    ifill (marker_relax, m, EMPTY);
+    i = mark_relax(m, relax_end, relax_fsupc, xa_begin, xa_end,
+	         asub, marker_relax);
+#if ( PRNTlevel >= 1)
+    printf("%d relaxed supernodes.\n", i);
+#endif
+
+    /*
+     * Work on one "panel" at a time. A panel is one of the following:
+     *	   (a) a relaxed supernode at the bottom of the etree, or
+     *	   (b) panel_size contiguous columns, defined by the user
+     */
+    for (jcol = 0; jcol < min_mn; ) {
+
+	if ( relax_end[jcol] != EMPTY ) { /* start of a relaxed snode */
+	    kcol = relax_end[jcol];	  /* end of the relaxed snode */
+	    panel_histo[kcol-jcol+1]++;
+
+	    /* Drop small rows in the previous supernode. */
+	    if (jcol > 0 && jcol < last_drop) {
+		int first = xsup[supno[jcol - 1]];
+		int last = jcol - 1;
+		int quota;
+
+		/* Compute the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * (m - first) / m
+			    * (last - first + 1);
+		else if (drop_rule & DROP_COLUMN) {
+		    int i;
+		    quota = 0;
+		    for (i = first; i <= last; i++)
+			quota += xa_end[i] - xa_begin[i];
+		    quota = gamma * quota * (m - first) / m;
+		} else if (drop_rule & DROP_AREA)
+		    quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			    - nnzLj;
+		else
+		    quota = m * n;
+		fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) / min_mn);
+
+		/* Drop small rows */
+                dtempv = (double *) tempv;
+		i = ilu_zdrop_row(options, first, last, tol_L, quota, &nnzLj,
+				  &fill_tol, &Glu, dtempv, iwork2, 0);
+		/* Reset the parameters */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+			     < nnzLj)
+			tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+		    else
+			tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		}
+		if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		num_drop_L += i * (last - first + 1);
+#endif
+	    }
+
+	    /* --------------------------------------
+	     * Factorize the relaxed supernode(jcol:kcol)
+	     * -------------------------------------- */
+	    /* Determine the union of the row structure of the snode */
+	    if ( (*info = ilu_zsnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
+					 marker, &Glu)) != 0 )
+		return;
+
+	    nextu    = xusub[jcol];
+	    nextlu   = xlusup[jcol];
+	    jsupno   = supno[jcol];
+	    fsupc    = xsup[jsupno];
+	    new_next = nextlu + (xlsub[fsupc+1]-xlsub[fsupc])*(kcol-jcol+1);
+	    nzlumax = Glu.nzlumax;
+	    while ( new_next > nzlumax ) {
+		if ((*info = zLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, &Glu)))
+		    return;
+	    }
+
+	    for (icol = jcol; icol <= kcol; icol++) {
+		xusub[icol+1] = nextu;
+
+		amax[0] = 0.0;
+		/* Scatter into SPA dense[*] */
+		for (k = xa_begin[icol]; k < xa_end[icol]; k++) {
+                    register double tmp = z_abs1 (&a[k]);
+		    if (tmp > amax[0]) amax[0] = tmp;
+		    dense[asub[k]] = a[k];
+		}
+		nnzAj += xa_end[icol] - xa_begin[icol];
+		if (amax[0] == 0.0) {
+		    amax[0] = fill_ini;
+#if ( PRNTlevel >= 1)
+		    printf("Column %d is entirely zero!\n", icol);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Numeric update within the snode */
+		zsnode_bmod(icol, jsupno, fsupc, dense, tempv, &Glu, stat);
+
+		if (usepr) pivrow = iperm_r[icol];
+		fill_tol = pow(fill_ini, 1.0 - (double)icol / (double)min_mn);
+		if ( (*info = ilu_zpivotL(icol, diag_pivot_thresh, &usepr,
+					  perm_r, iperm_c[icol], swap, iswap,
+					  marker_relax, &pivrow,
+                                          amax[0] * fill_tol, milu, zero,
+                                          &Glu, stat)) ) {
+		    iinfo++;
+		    marker[pivrow] = kcol;
+		}
+
+	    }
+
+	    jcol = kcol + 1;
+
+	} else { /* Work on one panel of panel_size columns */
+
+	    /* Adjust panel_size so that a panel won't overlap with the next
+	     * relaxed snode.
+	     */
+	    panel_size = w_def;
+	    for (k = jcol + 1; k < SUPERLU_MIN(jcol+panel_size, min_mn); k++)
+		if ( relax_end[k] != EMPTY ) {
+		    panel_size = k - jcol;
+		    break;
+		}
+	    if ( k == min_mn ) panel_size = min_mn - jcol;
+	    panel_histo[panel_size]++;
+
+	    /* symbolic factor on a panel of columns */
+	    ilu_zpanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
+                          dense, amax, panel_lsub, segrep, repfnz,
+                          marker, parent, xplore, &Glu);
+
+	    /* numeric sup-panel updates in topological order */
+	    zpanel_bmod(m, panel_size, jcol, nseg1, dense,
+			tempv, segrep, repfnz, &Glu, stat);
+
+	    /* Sparse LU within the panel, and below panel diagonal */
+	    for (jj = jcol; jj < jcol + panel_size; jj++) {
+
+		k = (jj - jcol) * m; /* column index for w-wide arrays */
+
+		nseg = nseg1;	/* Begin after all the panel segments */
+
+		nnzAj += xa_end[jj] - xa_begin[jj];
+
+		if ((*info = ilu_zcolumn_dfs(m, jj, perm_r, &nseg,
+					     &panel_lsub[k], segrep, &repfnz[k],
+					     marker, parent, xplore, &Glu)))
+		    return;
+
+		/* Numeric updates */
+		if ((*info = zcolumn_bmod(jj, (nseg - nseg1), &dense[k],
+					  tempv, &segrep[nseg1], &repfnz[k],
+					  jcol, &Glu, stat)) != 0) return;
+
+		/* Make a fill-in position if the column is entirely zero */
+		if (xlsub[jj + 1] == xlsub[jj]) {
+		    register int i, row;
+		    int nextl;
+		    int nzlmax = Glu.nzlmax;
+		    int *lsub = Glu.lsub;
+		    int *marker2 = marker + 2 * m;
+
+		    /* Allocate memory */
+		    nextl = xlsub[jj] + 1;
+		    if (nextl >= nzlmax) {
+			int error = zLUMemXpand(jj, nextl, LSUB, &nzlmax, &Glu);
+			if (error) { *info = error; return; }
+			lsub = Glu.lsub;
+		    }
+		    xlsub[jj + 1]++;
+		    assert(xlusup[jj]==xlusup[jj+1]);
+		    xlusup[jj + 1]++;
+		    Glu.lusup[xlusup[jj]] = zero;
+
+		    /* Choose a row index (pivrow) for fill-in */
+		    for (i = jj; i < n; i++)
+			if (marker_relax[swap[i]] <= jj) break;
+		    row = swap[i];
+		    marker2[row] = jj;
+		    lsub[xlsub[jj]] = row;
+#ifdef DEBUG
+		    printf("Fill col %d.\n", jj);
+		    fflush(stdout);
+#endif
+		}
+
+		/* Computer the quota */
+		if (drop_rule & DROP_PROWS)
+		    quota = gamma * Astore->nnz / m * jj / m;
+		else if (drop_rule & DROP_COLUMN)
+		    quota = gamma * (xa_end[jj] - xa_begin[jj]) *
+			    (jj + 1) / m;
+		else if (drop_rule & DROP_AREA)
+		    quota = gamma * 0.9 * nnzAj * 0.5 - nnzUj;
+		else
+		    quota = m;
+
+		/* Copy the U-segments to ucol[*] and drop small entries */
+		if ((*info = ilu_zcopy_to_ucol(jj, nseg, segrep, &repfnz[k],
+					       perm_r, &dense[k], drop_rule,
+					       milu, amax[jj - jcol] * tol_U,
+					       quota, &drop_sum, &nnzUj, &Glu,
+					       iwork2)) != 0)
+		    return;
+
+		/* Reset the dropping threshold if required */
+		if (drop_rule & DROP_DYNAMIC) {
+		    if (gamma * 0.9 * nnzAj * 0.5 < nnzLj)
+			tol_U = SUPERLU_MIN(1.0, tol_U * 2.0);
+		    else
+			tol_U = SUPERLU_MAX(drop_tol, tol_U * 0.5);
+		}
+
+                zd_mult(&drop_sum, &drop_sum, MILU_ALPHA);
+		if (usepr) pivrow = iperm_r[jj];
+		fill_tol = pow(fill_ini, 1.0 - (double)jj / (double)min_mn);
+		if ( (*info = ilu_zpivotL(jj, diag_pivot_thresh, &usepr, perm_r,
+					  iperm_c[jj], swap, iswap,
+					  marker_relax, &pivrow,
+					  amax[jj - jcol] * fill_tol, milu,
+					  drop_sum, &Glu, stat)) ) {
+		    iinfo++;
+		    marker[m + pivrow] = jj;
+		    marker[2 * m + pivrow] = jj;
+		}
+
+		/* Reset repfnz[] for this column */
+		resetrep_col (nseg, segrep, &repfnz[k]);
+
+		/* Start a new supernode, drop the previous one */
+		if (jj > 0 && supno[jj] > supno[jj - 1] && jj < last_drop) {
+		    int first = xsup[supno[jj - 1]];
+		    int last = jj - 1;
+		    int quota;
+
+		    /* Compute the quota */
+		    if (drop_rule & DROP_PROWS)
+			quota = gamma * Astore->nnz / m * (m - first) / m
+				* (last - first + 1);
+		    else if (drop_rule & DROP_COLUMN) {
+			int i;
+			quota = 0;
+			for (i = first; i <= last; i++)
+			    quota += xa_end[i] - xa_begin[i];
+			quota = gamma * quota * (m - first) / m;
+		    } else if (drop_rule & DROP_AREA)
+			quota = gamma * nnzAj * (1.0 - 0.5 * (last + 1.0)
+				/ m) - nnzLj;
+		    else
+			quota = m * n;
+		    fill_tol = pow(fill_ini, 1.0 - 0.5 * (first + last) /
+			    (double)min_mn);
+
+		    /* Drop small rows */
+                    dtempv = (double *) tempv;
+		    i = ilu_zdrop_row(options, first, last, tol_L, quota,
+				      &nnzLj, &fill_tol, &Glu, dtempv, iwork2,
+				      1);
+
+		    /* Reset the parameters */
+		    if (drop_rule & DROP_DYNAMIC) {
+			if (gamma * nnzAj * (1.0 - 0.5 * (last + 1.0) / m)
+				< nnzLj)
+			    tol_L = SUPERLU_MIN(1.0, tol_L * 2.0);
+			else
+			    tol_L = SUPERLU_MAX(drop_tol, tol_L * 0.5);
+		    }
+		    if (fill_tol < 0) iinfo -= (int)fill_tol;
+#ifdef DEBUG
+		    num_drop_L += i * (last - first + 1);
+#endif
+		} /* if start a new supernode */
+
+	    } /* for */
+
+	    jcol += panel_size; /* Move to the next panel */
+
+	} /* else */
+
+    } /* for */
+
+    *info = iinfo;
+
+    if ( m > n ) {
+	k = 0;
+	for (i = 0; i < m; ++i)
+	    if ( perm_r[i] == EMPTY ) {
+		perm_r[i] = n + k;
+		++k;
+	    }
+    }
+
+    ilu_countnz(min_mn, &nnzL, &nnzU, &Glu);
+    fixupL(min_mn, perm_r, &Glu);
+
+    zLUWorkFree(iwork, zwork, &Glu); /* Free work space and compress storage */
+
+    if ( fact == SamePattern_SameRowPerm ) {
+	/* L and U structures may have changed due to possibly different
+	   pivoting, even though the storage is available.
+	   There could also be memory expansions, so the array locations
+	   may have changed, */
+	((SCformat *)L->Store)->nnz = nnzL;
+	((SCformat *)L->Store)->nsuper = Glu.supno[n];
+	((SCformat *)L->Store)->nzval = Glu.lusup;
+	((SCformat *)L->Store)->nzval_colptr = Glu.xlusup;
+	((SCformat *)L->Store)->rowind = Glu.lsub;
+	((SCformat *)L->Store)->rowind_colptr = Glu.xlsub;
+	((NCformat *)U->Store)->nnz = nnzU;
+	((NCformat *)U->Store)->nzval = Glu.ucol;
+	((NCformat *)U->Store)->rowind = Glu.usub;
+	((NCformat *)U->Store)->colptr = Glu.xusub;
+    } else {
+	zCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL, Glu.lusup,
+				 Glu.xlusup, Glu.lsub, Glu.xlsub, Glu.supno,
+				 Glu.xsup, SLU_SC, SLU_Z, SLU_TRLU);
+	zCreate_CompCol_Matrix(U, min_mn, min_mn, nnzU, Glu.ucol,
+			       Glu.usub, Glu.xusub, SLU_NC, SLU_Z, SLU_TRU);
+    }
+
+    ops[FACT] += ops[TRSV] + ops[GEMV];
+    stat->expansions = --(Glu.num_expansions);
+
+    if ( iperm_r_allocated ) SUPERLU_FREE (iperm_r);
+    SUPERLU_FREE (iperm_c);
+    SUPERLU_FREE (relax_end);
+    SUPERLU_FREE (swap);
+    SUPERLU_FREE (iswap);
+    SUPERLU_FREE (relax_fsupc);
+    SUPERLU_FREE (amax);
+    if ( iwork2 ) SUPERLU_FREE (iwork2);
+
+}
diff --git a/SRC/zgsrfs.c b/SRC/zgsrfs.c
index 9cb57fd..2ed0481 100644
--- a/SRC/zgsrfs.c
+++ b/SRC/zgsrfs.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file zgsrfs.c
+ * \brief Improves computed solution to a system of inear equations
+ * 
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Modified from lapack routine ZGERFS
+ * </pre>
  */
 /*
  * File name:	zgsrfs.c
@@ -13,13 +18,9 @@
 #include <math.h>
 #include "slu_zdefs.h"
 
-void
-zgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
-       int *perm_c, int *perm_r, char *equed, double *R, double *C,
-       SuperMatrix *B, SuperMatrix *X, double *ferr, double *berr,
-       SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  *   Purpose   
  *   =======   
  *
@@ -123,7 +124,15 @@ zgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
  *
  *    ITMAX is the maximum number of steps of iterative refinement.   
  *
- */  
+ * </pre>
+ */
+void
+zgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
+       int *perm_c, int *perm_r, char *equed, double *R, double *C,
+       SuperMatrix *B, SuperMatrix *X, double *ferr, double *berr,
+       SuperLUStat_t *stat, int *info)
+{
+
 
 #define ITMAX 5
     
@@ -148,7 +157,7 @@ zgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
     doublecomplex   *work;
     double   *rwork;
     int      *iwork;
-    extern double dlamch_(char *);
+
     extern int zlacon_(int *, doublecomplex *, doublecomplex *, double *, int *);
 #ifdef _CRAY
     extern int CCOPY(int *, doublecomplex *, int *, doublecomplex *, int *);
@@ -224,6 +233,8 @@ zgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
     nz     = A->ncol + 1;
     eps    = dlamch_("Epsilon");
     safmin = dlamch_("Safe minimum");
+    /* Set SAFE1 essentially to be the underflow threshold times the
+       number of additions in each row. */
     safe1  = nz * safmin;
     safe2  = safe1 / eps;
 
@@ -274,7 +285,7 @@ zgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
 	       where abs(Z) is the componentwise absolute value of the matrix
 	       or vector Z.  If the i-th component of the denominator is less
 	       than SAFE2, then SAFE1 is added to the i-th component of the   
-	       numerator and denominator before dividing. */
+	       numerator before dividing. */
 
 	    for (i = 0; i < A->nrow; ++i) rwork[i] = z_abs1( &Bptr[i] );
 	    
@@ -297,11 +308,13 @@ zgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
 	    }
 	    s = 0.;
 	    for (i = 0; i < A->nrow; ++i) {
-		if (rwork[i] > safe2)
+		if (rwork[i] > safe2) {
 		    s = SUPERLU_MAX( s, z_abs1(&work[i]) / rwork[i] );
-		else
-		    s = SUPERLU_MAX( s, (z_abs1(&work[i]) + safe1) / 
-				(rwork[i] + safe1) );
+                } else if ( rwork[i] != 0.0 ) {
+		    s = SUPERLU_MAX( s, (z_abs1(&work[i]) + safe1) / rwork[i] );
+                }
+                /* If rwork[i] is exactly 0.0, then we know the true 
+                   residual also must be exactly 0.0. */
 	    }
 	    berr[j] = s;
 
diff --git a/SRC/zgssv.c b/SRC/zgssv.c
index dbbd870..aceb10d 100644
--- a/SRC/zgssv.c
+++ b/SRC/zgssv.c
@@ -1,19 +1,19 @@
 
-/*
+/*! @file zgssv.c
+ * \brief Solves the system of linear equations A*X=B 
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
- *
+ * </pre>  
  */
 #include "slu_zdefs.h"
 
-void
-zgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
-      SuperMatrix *L, SuperMatrix *U, SuperMatrix *B,
-      SuperLUStat_t *stat, int *info )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -126,15 +126,21 @@ zgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *                so the solution could not be computed.
  *             > A->ncol: number of bytes allocated when memory allocation
  *                failure occurred, plus A->ncol.
- *   
+ * </pre>
  */
+
+void
+zgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+      SuperMatrix *L, SuperMatrix *U, SuperMatrix *B,
+      SuperLUStat_t *stat, int *info )
+{
+
     DNformat *Bstore;
     SuperMatrix *AA;/* A in SLU_NC format used by the factorization routine.*/
     SuperMatrix AC; /* Matrix postmultiplied by Pc */
     int      lwork = 0, *etree, i;
     
     /* Set default values for some parameters */
-    double   drop_tol = 0.;
     int      panel_size;     /* panel size */
     int      relax;          /* no of columns in a relaxed snodes */
     int      permc_spec;
@@ -200,8 +206,8 @@ zgssv(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
 	  relax, panel_size, sp_ienv(3), sp_ienv(4));*/
     t = SuperLU_timer_(); 
     /* Compute the LU factorization of A. */
-    zgstrf(options, &AC, drop_tol, relax, panel_size,
-	   etree, NULL, lwork, perm_c, perm_r, L, U, stat, info);
+    zgstrf(options, &AC, relax, panel_size, etree,
+            NULL, lwork, perm_c, perm_r, L, U, stat, info);
     utime[FACT] = SuperLU_timer_() - t;
 
     t = SuperLU_timer_();
diff --git a/SRC/zgssvx.c b/SRC/zgssvx.c
index 65ea538..5ee349d 100644
--- a/SRC/zgssvx.c
+++ b/SRC/zgssvx.c
@@ -1,22 +1,19 @@
 
-/*
+/*! @file zgssvx.c
+ * \brief Solves the system of linear equations A*X=B or A'*X=B
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
- *
+ * </pre>
  */
 #include "slu_zdefs.h"
 
-void
-zgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
-       int *etree, char *equed, double *R, double *C,
-       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
-       SuperMatrix *B, SuperMatrix *X, double *recip_pivot_growth, 
-       double *rcond, double *ferr, double *berr, 
-       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -314,7 +311,7 @@ zgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *
  * stat   (output) SuperLUStat_t*
  *        Record the statistics on runtime and floating-point operation count.
- *        See util.h for the definition of 'SuperLUStat_t'.
+ *        See slu_util.h for the definition of 'SuperLUStat_t'.
  *
  * info    (output) int*
  *         = 0: successful exit   
@@ -332,9 +329,19 @@ zgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
  *                    accurate than the value of RCOND would suggest.   
  *              > A->ncol+1: number of bytes allocated when memory allocation
  *                    failure occurred, plus A->ncol.
- *
+ * </pre>
  */
 
+void
+zgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
+       int *etree, char *equed, double *R, double *C,
+       SuperMatrix *L, SuperMatrix *U, void *work, int lwork,
+       SuperMatrix *B, SuperMatrix *X, double *recip_pivot_growth, 
+       double *rcond, double *ferr, double *berr, 
+       mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info )
+{
+
+
     DNformat  *Bstore, *Xstore;
     doublecomplex    *Bmat, *Xmat;
     int       ldb, ldx, nrhs;
@@ -346,13 +353,12 @@ zgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
     int       i, j, info1;
     double    amax, anorm, bignum, smlnum, colcnd, rowcnd, rcmax, rcmin;
     int       relax, panel_size;
-    double    diag_pivot_thresh, drop_tol;
+    double    diag_pivot_thresh;
     double    t0;      /* temporary time */
     double    *utime;
 
     /* External functions */
     extern double zlangs(char *, SuperMatrix *);
-    extern double dlamch_(char *);
 
     Bstore = B->Store;
     Xstore = X->Store;
@@ -383,10 +389,12 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 #endif
 
     /* Test the input parameters */
-    if (!nofact && options->Fact != DOFACT && options->Fact != SamePattern &&
+    if (options->Fact != DOFACT && options->Fact != SamePattern &&
 	options->Fact != SamePattern_SameRowPerm &&
-	!notran && options->Trans != TRANS && options->Trans != CONJ &&
-	!equil && options->Equil != NO)
+	options->Fact != FACTORED &&
+	options->Trans != NOTRANS && options->Trans != TRANS && 
+	options->Trans != CONJ &&
+	options->Equil != NO && options->Equil != YES)
 	*info = -1;
     else if ( A->nrow != A->ncol || A->nrow < 0 ||
 	      (A->Stype != SLU_NC && A->Stype != SLU_NR) ||
@@ -422,15 +430,21 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 	}
 	if (*info == 0) {
 	    if ( lwork < -1 ) *info = -12;
-	    else if ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+	    else if ( B->ncol < 0 ) *info = -13;
+	    else if ( B->ncol > 0 ) { /* no checking if B->ncol=0 */
+	         if ( Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
 		      B->Stype != SLU_DN || B->Dtype != SLU_Z || 
 		      B->Mtype != SLU_GE )
 		*info = -13;
-	    else if ( X->ncol < 0 || Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
+            }
+	    if ( X->ncol < 0 ) *info = -14;
+            else if ( X->ncol > 0 ) { /* no checking if X->ncol=0 */
+                 if ( Xstore->lda < SUPERLU_MAX(0, A->nrow) ||
 		      (B->ncol != 0 && B->ncol != X->ncol) ||
                       X->Stype != SLU_DN ||
 		      X->Dtype != SLU_Z || X->Mtype != SLU_GE )
 		*info = -14;
+            }
 	}
     }
     if (*info != 0) {
@@ -443,7 +457,6 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
     panel_size = sp_ienv(1);
     relax      = sp_ienv(2);
     diag_pivot_thresh = options->DiagPivotThresh;
-    drop_tol   = 0.0;
 
     utime = stat->utime;
     
@@ -480,22 +493,6 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 	utime[EQUIL] = SuperLU_timer_() - t0;
     }
 
-    if ( nrhs > 0 ) {
-        /* Scale the right hand side if equilibration was performed. */
-        if ( notran ) {
-	    if ( rowequ ) {
-	        for (j = 0; j < nrhs; ++j)
-		    for (i = 0; i < A->nrow; ++i) {
-                        zd_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], R[i]);
-	            }
-	    }
-        } else if ( colequ ) {
-	    for (j = 0; j < nrhs; ++j)
-	        for (i = 0; i < A->nrow; ++i) {
-                    zd_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], C[i]);
-	        }
-        }
-    }
 
     if ( nofact ) {
 	
@@ -523,8 +520,8 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
 	
 	/* Compute the LU factorization of A*Pc. */
 	t0 = SuperLU_timer_();
-	zgstrf(options, &AC, drop_tol, relax, panel_size,
-	       etree, work, lwork, perm_c, perm_r, L, U, stat, info);
+	zgstrf(options, &AC, relax, panel_size, etree,
+                work, lwork, perm_c, perm_r, L, U, stat, info);
 	utime[FACT] = SuperLU_timer_() - t0;
 	
 	if ( lwork == -1 ) {
@@ -561,6 +558,19 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
     }
     
     if ( nrhs > 0 ) {
+        /* Scale the right hand side if equilibration was performed. */
+        if ( notran ) {
+	    if ( rowequ ) {
+	        for (j = 0; j < nrhs; ++j)
+		    for (i = 0; i < A->nrow; ++i)
+                        zd_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], R[i]);
+	    }
+        } else if ( colequ ) {
+	    for (j = 0; j < nrhs; ++j)
+	        for (i = 0; i < A->nrow; ++i)
+                    zd_mult(&Bmat[i+j*ldb], &Bmat[i+j*ldb], C[i]);
+        }
+
         /* Compute the solution matrix X. */
         for (j = 0; j < nrhs; j++)  /* Save a copy of the right hand sides */
             for (i = 0; i < B->nrow; i++)
@@ -585,15 +595,13 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
         if ( notran ) {
 	    if ( colequ ) {
 	        for (j = 0; j < nrhs; ++j)
-		    for (i = 0; i < A->nrow; ++i) {
+		    for (i = 0; i < A->nrow; ++i)
                         zd_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], C[i]);
-	            }
 	    }
         } else if ( rowequ ) {
 	    for (j = 0; j < nrhs; ++j)
-	        for (i = 0; i < A->nrow; ++i) {
+	        for (i = 0; i < A->nrow; ++i)
                     zd_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], R[i]);
-                }
         }
     } /* end if nrhs > 0 */
 
diff --git a/SRC/zgstrf.c b/SRC/zgstrf.c
index 5cfef9b..e3c22f0 100644
--- a/SRC/zgstrf.c
+++ b/SRC/zgstrf.c
@@ -1,33 +1,32 @@
 
-/*
+/*! @file zgstrf.c
+ * \brief Computes an LU factorization of a general sparse matrix
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
+ * 
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
  *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_zdefs.h"
 
-void
-zgstrf (superlu_options_t *options, SuperMatrix *A, double drop_tol,
-        int relax, int panel_size, int *etree, void *work, int lwork,
-        int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U,
-        SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -53,11 +52,6 @@ zgstrf (superlu_options_t *options, SuperMatrix *A, double drop_tol,
  *          (A->nrow, A->ncol). The type of A can be:
  *          Stype = SLU_NCP; Dtype = SLU_Z; Mtype = SLU_GE.
  *
- * drop_tol (input) double (NOT IMPLEMENTED)
- *	    Drop tolerance parameter. At step j of the Gaussian elimination,
- *          if abs(A_ij)/(max_i abs(A_ij)) < drop_tol, drop entry A_ij.
- *          0 <= drop_tol <= 1. The default value of drop_tol is 0.
- *
  * relax    (input) int
  *          To control degree of relaxing supernodes. If the number
  *          of nodes (columns) in a subtree of the elimination tree is less
@@ -117,7 +111,7 @@ zgstrf (superlu_options_t *options, SuperMatrix *A, double drop_tol,
  *
  * stat     (output) SuperLUStat_t*
  *          Record the statistics on runtime and floating-point operation count.
- *          See util.h for the definition of 'SuperLUStat_t'.
+ *          See slu_util.h for the definition of 'SuperLUStat_t'.
  *
  * info     (output) int*
  *          = 0: successful exit
@@ -177,9 +171,16 @@ zgstrf (superlu_options_t *options, SuperMatrix *A, double drop_tol,
  *	    	   NOTE: there are W of them.
  *
  *   tempv[0:*]: real temporary used for dense numeric kernels;
- *	The size of this array is defined by NUM_TEMPV() in zsp_defs.h.
- *
+ *	The size of this array is defined by NUM_TEMPV() in slu_zdefs.h.
+ * </pre>
  */
+
+void
+zgstrf (superlu_options_t *options, SuperMatrix *A,
+        int relax, int panel_size, int *etree, void *work, int lwork,
+        int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U,
+        SuperLUStat_t *stat, int *info)
+{
     /* Local working arrays */
     NCPformat *Astore;
     int       *iperm_r = NULL; /* inverse of perm_r; used when 
@@ -199,7 +200,8 @@ zgstrf (superlu_options_t *options, SuperMatrix *A, double drop_tol,
     int       *xsup, *supno;
     int       *xlsub, *xlusup, *xusub;
     int       nzlumax;
-    static GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
+    double fill_ratio = sp_ienv(6);  /* estimated fill ratio */
+    static    GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
 
     /* Local scalars */
     fact_t    fact = options->Fact;
@@ -230,7 +232,7 @@ zgstrf (superlu_options_t *options, SuperMatrix *A, double drop_tol,
 
     /* Allocate storage common to the factor routines */
     *info = zLUMemInit(fact, work, lwork, m, n, Astore->nnz,
-                       panel_size, L, U, &Glu, &iwork, &zwork);
+                       panel_size, fill_ratio, L, U, &Glu, &iwork, &zwork);
     if ( *info ) return;
     
     xsup    = Glu.xsup;
@@ -425,6 +427,7 @@ zgstrf (superlu_options_t *options, SuperMatrix *A, double drop_tol,
     }
     
     ops[FACT] += ops[TRSV] + ops[GEMV];	
+    stat->expansions = --(Glu.num_expansions);
     
     if ( iperm_r_allocated ) SUPERLU_FREE (iperm_r);
     SUPERLU_FREE (iperm_c);
diff --git a/SRC/zgstrs.c b/SRC/zgstrs.c
index a9a5b65..0a86e60 100644
--- a/SRC/zgstrs.c
+++ b/SRC/zgstrs.c
@@ -1,23 +1,25 @@
 
-/*
+/*! @file zgstrs.c
+ * \brief Solves a system using LU factorization
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
 
 #include "slu_zdefs.h"
 
@@ -29,13 +31,9 @@ void zusolve(int, int, doublecomplex*, doublecomplex*);
 void zlsolve(int, int, doublecomplex*, doublecomplex*);
 void zmatvec(int, int, int, doublecomplex*, doublecomplex*, doublecomplex*);
 
-
-void
-zgstrs (trans_t trans, SuperMatrix *L, SuperMatrix *U,
-        int *perm_c, int *perm_r, SuperMatrix *B,
-        SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -85,8 +83,15 @@ zgstrs (trans_t trans, SuperMatrix *L, SuperMatrix *U,
  * info    (output) int*
  * 	   = 0: successful exit
  *	   < 0: if info = -i, the i-th argument had an illegal value
- *
+ * </pre>
  */
+
+void
+zgstrs (trans_t trans, SuperMatrix *L, SuperMatrix *U,
+        int *perm_c, int *perm_r, SuperMatrix *B,
+        SuperLUStat_t *stat, int *info)
+{
+
 #ifdef _CRAY
     _fcd ftcs1, ftcs2, ftcs3, ftcs4;
 #endif
diff --git a/SRC/zlacon.c b/SRC/zlacon.c
index 19382a2..b2cd1ed 100644
--- a/SRC/zlacon.c
+++ b/SRC/zlacon.c
@@ -1,66 +1,74 @@
 
-/*
+/*! @file zlacon.c
+ * \brief Estimates the 1-norm
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 #include <math.h>
 #include "slu_Cnames.h"
 #include "slu_dcomplex.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   ZLACON estimates the 1-norm of a square matrix A.   
+ *   Reverse communication is used for evaluating matrix-vector products. 
+ * 
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   N      (input) INT
+ *          The order of the matrix.  N >= 1.   
+ *
+ *   V      (workspace) DOUBLE COMPLEX PRECISION array, dimension (N)   
+ *          On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
+ *          (W is not returned).   
+ *
+ *   X      (input/output) DOUBLE COMPLEX PRECISION array, dimension (N)   
+ *          On an intermediate return, X should be overwritten by   
+ *                A * X,   if KASE=1,   
+ *                A' * X,  if KASE=2,
+ *          where A' is the conjugate transpose of A,
+ *         and ZLACON must be re-called with all the other parameters   
+ *          unchanged.   
+ *
+ *
+ *   EST    (output) DOUBLE PRECISION   
+ *          An estimate (a lower bound) for norm(A).   
+ *
+ *   KASE   (input/output) INT
+ *          On the initial call to ZLACON, KASE should be 0.   
+ *          On an intermediate return, KASE will be 1 or 2, indicating   
+ *          whether X should be overwritten by A * X  or A' * X.   
+ *          On the final return from ZLACON, KASE will again be 0.   
+ *
+ *   Further Details   
+ *   ======= =======   
+ *
+ *   Contributed by Nick Higham, University of Manchester.   
+ *   Originally named CONEST, dated March 16, 1988.   
+ *
+ *   Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
+ *   a real or complex matrix, with applications to condition estimation", 
+ *   ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
+ *   ===================================================================== 
+ * </pre>
+ */
+
 int
 zlacon_(int *n, doublecomplex *v, doublecomplex *x, double *est, int *kase)
 
 {
-/*
-    Purpose   
-    =======   
-
-    ZLACON estimates the 1-norm of a square matrix A.   
-    Reverse communication is used for evaluating matrix-vector products. 
-  
-
-    Arguments   
-    =========   
-
-    N      (input) INT
-           The order of the matrix.  N >= 1.   
-
-    V      (workspace) DOUBLE COMPLEX PRECISION array, dimension (N)   
-           On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
-           (W is not returned).   
-
-    X      (input/output) DOUBLE COMPLEX PRECISION array, dimension (N)   
-           On an intermediate return, X should be overwritten by   
-                 A * X,   if KASE=1,   
-                 A' * X,  if KASE=2,
-           where A' is the conjugate transpose of A,
-           and ZLACON must be re-called with all the other parameters   
-           unchanged.   
-
-
-    EST    (output) DOUBLE PRECISION   
-           An estimate (a lower bound) for norm(A).   
-
-    KASE   (input/output) INT
-           On the initial call to ZLACON, KASE should be 0.   
-           On an intermediate return, KASE will be 1 or 2, indicating   
-           whether X should be overwritten by A * X  or A' * X.   
-           On the final return from ZLACON, KASE will again be 0.   
-
-    Further Details   
-    ======= =======   
-
-    Contributed by Nick Higham, University of Manchester.   
-    Originally named CONEST, dated March 16, 1988.   
 
-    Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
-    a real or complex matrix, with applications to condition estimation", 
-    ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
-    ===================================================================== 
-*/
 
     /* Table of constant values */
     int c__1 = 1;
diff --git a/SRC/zlacon.c b/SRC/zlacon.c.bak
similarity index 64%
copy from SRC/zlacon.c
copy to SRC/zlacon.c.bak
index 19382a2..b2cd1ed 100644
--- a/SRC/zlacon.c
+++ b/SRC/zlacon.c.bak
@@ -1,66 +1,74 @@
 
-/*
+/*! @file zlacon.c
+ * \brief Estimates the 1-norm
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 #include <math.h>
 #include "slu_Cnames.h"
 #include "slu_dcomplex.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   ZLACON estimates the 1-norm of a square matrix A.   
+ *   Reverse communication is used for evaluating matrix-vector products. 
+ * 
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   N      (input) INT
+ *          The order of the matrix.  N >= 1.   
+ *
+ *   V      (workspace) DOUBLE COMPLEX PRECISION array, dimension (N)   
+ *          On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
+ *          (W is not returned).   
+ *
+ *   X      (input/output) DOUBLE COMPLEX PRECISION array, dimension (N)   
+ *          On an intermediate return, X should be overwritten by   
+ *                A * X,   if KASE=1,   
+ *                A' * X,  if KASE=2,
+ *          where A' is the conjugate transpose of A,
+ *         and ZLACON must be re-called with all the other parameters   
+ *          unchanged.   
+ *
+ *
+ *   EST    (output) DOUBLE PRECISION   
+ *          An estimate (a lower bound) for norm(A).   
+ *
+ *   KASE   (input/output) INT
+ *          On the initial call to ZLACON, KASE should be 0.   
+ *          On an intermediate return, KASE will be 1 or 2, indicating   
+ *          whether X should be overwritten by A * X  or A' * X.   
+ *          On the final return from ZLACON, KASE will again be 0.   
+ *
+ *   Further Details   
+ *   ======= =======   
+ *
+ *   Contributed by Nick Higham, University of Manchester.   
+ *   Originally named CONEST, dated March 16, 1988.   
+ *
+ *   Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
+ *   a real or complex matrix, with applications to condition estimation", 
+ *   ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
+ *   ===================================================================== 
+ * </pre>
+ */
+
 int
 zlacon_(int *n, doublecomplex *v, doublecomplex *x, double *est, int *kase)
 
 {
-/*
-    Purpose   
-    =======   
-
-    ZLACON estimates the 1-norm of a square matrix A.   
-    Reverse communication is used for evaluating matrix-vector products. 
-  
-
-    Arguments   
-    =========   
-
-    N      (input) INT
-           The order of the matrix.  N >= 1.   
-
-    V      (workspace) DOUBLE COMPLEX PRECISION array, dimension (N)   
-           On the final return, V = A*W,  where  EST = norm(V)/norm(W)   
-           (W is not returned).   
-
-    X      (input/output) DOUBLE COMPLEX PRECISION array, dimension (N)   
-           On an intermediate return, X should be overwritten by   
-                 A * X,   if KASE=1,   
-                 A' * X,  if KASE=2,
-           where A' is the conjugate transpose of A,
-           and ZLACON must be re-called with all the other parameters   
-           unchanged.   
-
-
-    EST    (output) DOUBLE PRECISION   
-           An estimate (a lower bound) for norm(A).   
-
-    KASE   (input/output) INT
-           On the initial call to ZLACON, KASE should be 0.   
-           On an intermediate return, KASE will be 1 or 2, indicating   
-           whether X should be overwritten by A * X  or A' * X.   
-           On the final return from ZLACON, KASE will again be 0.   
-
-    Further Details   
-    ======= =======   
-
-    Contributed by Nick Higham, University of Manchester.   
-    Originally named CONEST, dated March 16, 1988.   
 
-    Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of 
-    a real or complex matrix, with applications to condition estimation", 
-    ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.   
-    ===================================================================== 
-*/
 
     /* Table of constant values */
     int c__1 = 1;
diff --git a/SRC/zlangs.c b/SRC/zlangs.c
index ad09d3d..b86ddaa 100644
--- a/SRC/zlangs.c
+++ b/SRC/zlangs.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file zlangs.c
+ * \brief Returns the value of the one norm
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Modified from lapack routine ZLANGE 
+ * </pre>
  */
 /*
  * File name:	zlangs.c
@@ -13,44 +18,48 @@
 #include <math.h>
 #include "slu_zdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose   
+ *   =======   
+ *
+ *   ZLANGS returns the value of the one norm, or the Frobenius norm, or 
+ *   the infinity norm, or the element of largest absolute value of a 
+ *   real matrix A.   
+ *
+ *   Description   
+ *   ===========   
+ *
+ *   ZLANGE returns the value   
+ *
+ *      ZLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm'   
+ *               (   
+ *               ( norm1(A),         NORM = '1', 'O' or 'o'   
+ *               (   
+ *               ( normI(A),         NORM = 'I' or 'i'   
+ *               (   
+ *               ( normF(A),         NORM = 'F', 'f', 'E' or 'e'   
+ *
+ *   where  norm1  denotes the  one norm of a matrix (maximum column sum), 
+ *   normI  denotes the  infinity norm  of a matrix  (maximum row sum) and 
+ *   normF  denotes the  Frobenius norm of a matrix (square root of sum of 
+ *   squares).  Note that  max(abs(A(i,j)))  is not a  matrix norm.   
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   NORM    (input) CHARACTER*1   
+ *           Specifies the value to be returned in ZLANGE as described above.   
+ *   A       (input) SuperMatrix*
+ *           The M by N sparse matrix A. 
+ *
+ *  =====================================================================
+ * </pre>
+ */
+
 double zlangs(char *norm, SuperMatrix *A)
 {
-/* 
-    Purpose   
-    =======   
-
-    ZLANGS returns the value of the one norm, or the Frobenius norm, or 
-    the infinity norm, or the element of largest absolute value of a 
-    real matrix A.   
-
-    Description   
-    ===========   
-
-    ZLANGE returns the value   
-
-       ZLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm'   
-                (   
-                ( norm1(A),         NORM = '1', 'O' or 'o'   
-                (   
-                ( normI(A),         NORM = 'I' or 'i'   
-                (   
-                ( normF(A),         NORM = 'F', 'f', 'E' or 'e'   
-
-    where  norm1  denotes the  one norm of a matrix (maximum column sum), 
-    normI  denotes the  infinity norm  of a matrix  (maximum row sum) and 
-    normF  denotes the  Frobenius norm of a matrix (square root of sum of 
-    squares).  Note that  max(abs(A(i,j)))  is not a  matrix norm.   
-
-    Arguments   
-    =========   
-
-    NORM    (input) CHARACTER*1   
-            Specifies the value to be returned in ZLANGE as described above.   
-    A       (input) SuperMatrix*
-            The M by N sparse matrix A. 
-
-   ===================================================================== 
-*/
     
     /* Local variables */
     NCformat *Astore;
diff --git a/SRC/zlaqgs.c b/SRC/zlaqgs.c
index 5b9d503..781c28b 100644
--- a/SRC/zlaqgs.c
+++ b/SRC/zlaqgs.c
@@ -1,10 +1,15 @@
 
-/*
+/*! @file zlaqgs.c
+ * \brief Equlibrates a general sprase matrix
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * 
+ * Modified from LAPACK routine ZLAQGE
+ * </pre>
  */
 /*
  * File name:	zlaqgs.c
@@ -13,66 +18,71 @@
 #include <math.h>
 #include "slu_zdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ *   Purpose   
+ *   =======   
+ *
+ *   ZLAQGS equilibrates a general sparse M by N matrix A using the row and   
+ *   scaling factors in the vectors R and C.   
+ *
+ *   See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ *   Arguments   
+ *   =========   
+ *
+ *   A       (input/output) SuperMatrix*
+ *           On exit, the equilibrated matrix.  See EQUED for the form of 
+ *           the equilibrated matrix. The type of A can be:
+ *	    Stype = NC; Dtype = SLU_Z; Mtype = GE.
+ *	    
+ *   R       (input) double*, dimension (A->nrow)
+ *           The row scale factors for A.
+ *	    
+ *   C       (input) double*, dimension (A->ncol)
+ *           The column scale factors for A.
+ *	    
+ *   ROWCND  (input) double
+ *           Ratio of the smallest R(i) to the largest R(i).
+ *	    
+ *   COLCND  (input) double
+ *           Ratio of the smallest C(i) to the largest C(i).
+ *	    
+ *   AMAX    (input) double
+ *           Absolute value of largest matrix entry.
+ *	    
+ *   EQUED   (output) char*
+ *           Specifies the form of equilibration that was done.   
+ *           = 'N':  No equilibration   
+ *           = 'R':  Row equilibration, i.e., A has been premultiplied by  
+ *                   diag(R).   
+ *           = 'C':  Column equilibration, i.e., A has been postmultiplied  
+ *                   by diag(C).   
+ *           = 'B':  Both row and column equilibration, i.e., A has been
+ *                   replaced by diag(R) * A * diag(C).   
+ *
+ *   Internal Parameters   
+ *   ===================   
+ *
+ *   THRESH is a threshold value used to decide if row or column scaling   
+ *   should be done based on the ratio of the row or column scaling   
+ *   factors.  If ROWCND < THRESH, row scaling is done, and if   
+ *   COLCND < THRESH, column scaling is done.   
+ *
+ *   LARGE and SMALL are threshold values used to decide if row scaling   
+ *   should be done based on the absolute size of the largest matrix   
+ *   element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.   
+ *
+ *   ===================================================================== 
+ * </pre>
+ */
+
 void
 zlaqgs(SuperMatrix *A, double *r, double *c, 
 	double rowcnd, double colcnd, double amax, char *equed)
 {
-/*
-    Purpose   
-    =======   
-
-    ZLAQGS equilibrates a general sparse M by N matrix A using the row and   
-    scaling factors in the vectors R and C.   
-
-    See supermatrix.h for the definition of 'SuperMatrix' structure.
-
-    Arguments   
-    =========   
-
-    A       (input/output) SuperMatrix*
-            On exit, the equilibrated matrix.  See EQUED for the form of 
-            the equilibrated matrix. The type of A can be:
-	    Stype = NC; Dtype = SLU_Z; Mtype = GE.
-	    
-    R       (input) double*, dimension (A->nrow)
-            The row scale factors for A.
-	    
-    C       (input) double*, dimension (A->ncol)
-            The column scale factors for A.
-	    
-    ROWCND  (input) double
-            Ratio of the smallest R(i) to the largest R(i).
-	    
-    COLCND  (input) double
-            Ratio of the smallest C(i) to the largest C(i).
-	    
-    AMAX    (input) double
-            Absolute value of largest matrix entry.
-	    
-    EQUED   (output) char*
-            Specifies the form of equilibration that was done.   
-            = 'N':  No equilibration   
-            = 'R':  Row equilibration, i.e., A has been premultiplied by  
-                    diag(R).   
-            = 'C':  Column equilibration, i.e., A has been postmultiplied  
-                    by diag(C).   
-            = 'B':  Both row and column equilibration, i.e., A has been
-                    replaced by diag(R) * A * diag(C).   
-
-    Internal Parameters   
-    ===================   
-
-    THRESH is a threshold value used to decide if row or column scaling   
-    should be done based on the ratio of the row or column scaling   
-    factors.  If ROWCND < THRESH, row scaling is done, and if   
-    COLCND < THRESH, column scaling is done.   
-
-    LARGE and SMALL are threshold values used to decide if row scaling   
-    should be done based on the absolute size of the largest matrix   
-    element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.   
 
-    ===================================================================== 
-*/
 
 #define THRESH    (0.1)
     
@@ -81,7 +91,6 @@ zlaqgs(SuperMatrix *A, double *r, double *c,
     doublecomplex   *Aval;
     int i, j, irow;
     double large, small, cj;
-    extern double dlamch_(char *);
     double temp;
 
 
diff --git a/SRC/zldperm.c b/SRC/zldperm.c
new file mode 100644
index 0000000..fb72a60
--- /dev/null
+++ b/SRC/zldperm.c
@@ -0,0 +1,168 @@
+
+/*! @file 
+ * \brief Finds a row permutation so that the matrix has large entries on the diagonal
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_zdefs.h"
+
+extern int_t mc64id_(int_t*);
+extern int_t mc64ad_(int_t*, int_t*, int_t*, int_t [], int_t [], double [],
+		    int_t*, int_t [], int_t*, int_t[], int_t*, double [],
+		    int_t [], int_t []);
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ *   ZLDPERM finds a row permutation so that the matrix has large
+ *   entries on the diagonal.
+ *
+ * Arguments
+ * =========
+ *
+ * job    (input) int
+ *        Control the action. Possible values for JOB are:
+ *        = 1 : Compute a row permutation of the matrix so that the
+ *              permuted matrix has as many entries on its diagonal as
+ *              possible. The values on the diagonal are of arbitrary size.
+ *              HSL subroutine MC21A/AD is used for this.
+ *        = 2 : Compute a row permutation of the matrix so that the smallest 
+ *              value on the diagonal of the permuted matrix is maximized.
+ *        = 3 : Compute a row permutation of the matrix so that the smallest
+ *              value on the diagonal of the permuted matrix is maximized.
+ *              The algorithm differs from the one used for JOB = 2 and may
+ *              have quite a different performance.
+ *        = 4 : Compute a row permutation of the matrix so that the sum
+ *              of the diagonal entries of the permuted matrix is maximized.
+ *        = 5 : Compute a row permutation of the matrix so that the product
+ *              of the diagonal entries of the permuted matrix is maximized
+ *              and vectors to scale the matrix so that the nonzero diagonal 
+ *              entries of the permuted matrix are one in absolute value and 
+ *              all the off-diagonal entries are less than or equal to one in 
+ *              absolute value.
+ *        Restriction: 1 <= JOB <= 5.
+ *
+ * n      (input) int
+ *        The order of the matrix.
+ *
+ * nnz    (input) int
+ *        The number of nonzeros in the matrix.
+ *
+ * adjncy (input) int*, of size nnz
+ *        The adjacency structure of the matrix, which contains the row
+ *        indices of the nonzeros.
+ *
+ * colptr (input) int*, of size n+1
+ *        The pointers to the beginning of each column in ADJNCY.
+ *
+ * nzval  (input) doublecomplex*, of size nnz
+ *        The nonzero values of the matrix. nzval[k] is the value of
+ *        the entry corresponding to adjncy[k].
+ *        It is not used if job = 1.
+ *
+ * perm   (output) int*, of size n
+ *        The permutation vector. perm[i] = j means row i in the
+ *        original matrix is in row j of the permuted matrix.
+ *
+ * u      (output) double*, of size n
+ *        If job = 5, the natural logarithms of the row scaling factors. 
+ *
+ * v      (output) double*, of size n
+ *        If job = 5, the natural logarithms of the column scaling factors. 
+ *        The scaled matrix B has entries b_ij = a_ij * exp(u_i + v_j).
+ * </pre>
+ */
+
+int
+zldperm(int_t job, int_t n, int_t nnz, int_t colptr[], int_t adjncy[],
+	doublecomplex nzval[], int_t *perm, double u[], double v[])
+{ 
+    int_t i, liw, ldw, num;
+    int_t *iw, icntl[10], info[10];
+    double *dw;
+    double *nzval_d = (double *) SUPERLU_MALLOC(nnz * sizeof(double));
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Enter zldperm()");
+#endif
+    liw = 5*n;
+    if ( job == 3 ) liw = 10*n + nnz;
+    if ( !(iw = intMalloc(liw)) ) ABORT("Malloc fails for iw[]");
+    ldw = 3*n + nnz;
+    if ( !(dw = (double*) SUPERLU_MALLOC(ldw * sizeof(double))) )
+          ABORT("Malloc fails for dw[]");
+	    
+    /* Increment one to get 1-based indexing. */
+    for (i = 0; i <= n; ++i) ++colptr[i];
+    for (i = 0; i < nnz; ++i) ++adjncy[i];
+#if ( DEBUGlevel>=2 )
+    printf("LDPERM(): n %d, nnz %d\n", n, nnz);
+    slu_PrintInt10("colptr", n+1, colptr);
+    slu_PrintInt10("adjncy", nnz, adjncy);
+#endif
+	
+    /* 
+     * NOTE:
+     * =====
+     *
+     * MC64AD assumes that column permutation vector is defined as:
+     * perm(i) = j means column i of permuted A is in column j of original A.
+     *
+     * Since a symmetric permutation preserves the diagonal entries. Then
+     * by the following relation:
+     *     P'(A*P')P = P'A
+     * we can apply inverse(perm) to rows of A to get large diagonal entries.
+     * But, since 'perm' defined in MC64AD happens to be the reverse of
+     * SuperLU's definition of permutation vector, therefore, it is already
+     * an inverse for our purpose. We will thus use it directly.
+     *
+     */
+    mc64id_(icntl);
+#if 0
+    /* Suppress error and warning messages. */
+    icntl[0] = -1;
+    icntl[1] = -1;
+#endif
+
+    for (i = 0; i < nnz; ++i) nzval_d[i] = z_abs1(&nzval[i]);
+    mc64ad_(&job, &n, &nnz, colptr, adjncy, nzval_d, &num, perm,
+	    &liw, iw, &ldw, dw, icntl, info);
+
+#if ( DEBUGlevel>=2 )
+    slu_PrintInt10("perm", n, perm);
+    printf(".. After MC64AD info %d\tsize of matching %d\n", info[0], num);
+#endif
+    if ( info[0] == 1 ) { /* Structurally singular */
+        printf(".. The last %d permutations:\n", n-num);
+	slu_PrintInt10("perm", n-num, &perm[num]);
+    }
+
+    /* Restore to 0-based indexing. */
+    for (i = 0; i <= n; ++i) --colptr[i];
+    for (i = 0; i < nnz; ++i) --adjncy[i];
+    for (i = 0; i < n; ++i) --perm[i];
+
+    if ( job == 5 )
+        for (i = 0; i < n; ++i) {
+	    u[i] = dw[i];
+	    v[i] = dw[n+i];
+	}
+
+    SUPERLU_FREE(iw);
+    SUPERLU_FREE(dw);
+    SUPERLU_FREE(nzval_d);
+
+#if ( DEBUGlevel>=1 )
+    CHECK_MALLOC("Exit zldperm()");
+#endif
+
+    return info[0];
+}
diff --git a/SRC/zmemory.c b/SRC/zmemory.c
index 02ac640..c14a910 100644
--- a/SRC/zmemory.c
+++ b/SRC/zmemory.c
@@ -1,54 +1,32 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * October 15, 2003
+/*! @file zmemory.c
+ * \brief Memory details
  *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
  */
 #include "slu_zdefs.h"
 
-/* Constants */
-#define NO_MEMTYPE  4      /* 0: lusup;
-			      1: ucol;
-			      2: lsub;
-			      3: usub */
-#define GluIntArray(n)   (5 * (n) + 5)
 
 /* Internal prototypes */
 void  *zexpand (int *, MemType,int, int, GlobalLU_t *);
-int   zLUWorkInit (int, int, int, int **, doublecomplex **, LU_space_t);
+int   zLUWorkInit (int, int, int, int **, doublecomplex **, GlobalLU_t *);
 void  copy_mem_doublecomplex (int, void *, void *);
 void  zStackCompress (GlobalLU_t *);
-void  zSetupSpace (void *, int, LU_space_t *);
-void  *zuser_malloc (int, int);
-void  zuser_free (int, int);
+void  zSetupSpace (void *, int, GlobalLU_t *);
+void  *zuser_malloc (int, int, GlobalLU_t *);
+void  zuser_free (int, int, GlobalLU_t *);
 
-/* External prototypes (in memory.c - prec-indep) */
+/* External prototypes (in memory.c - prec-independent) */
 extern void    copy_mem_int    (int, void *, void *);
 extern void    user_bcopy      (char *, char *, int);
 
-/* Headers for 4 types of dynamatically managed memory */
-typedef struct e_node {
-    int size;      /* length of the memory that has been used */
-    void *mem;     /* pointer to the new malloc'd store */
-} ExpHeader;
-
-typedef struct {
-    int  size;
-    int  used;
-    int  top1;  /* grow upward, relative to &array[0] */
-    int  top2;  /* grow downward */
-    void *array;
-} LU_stack_t;
-
-/* Variables local to this file */
-static ExpHeader *expanders = 0; /* Array of pointers to 4 types of memory */
-static LU_stack_t stack;
-static int no_expand;
 
 /* Macros to manipulate stack */
-#define StackFull(x)         ( x + stack.used >= stack.size )
+#define StackFull(x)         ( x + Glu->stack.used >= Glu->stack.size )
 #define NotDoubleAlign(addr) ( (long int)addr & 7 )
 #define DoubleAlign(addr)    ( ((long int)addr + 7) & ~7L )
 #define TempSpace(m, w)      ( (2*w + 4 + NO_MARKER) * m * sizeof(int) + \
@@ -58,66 +36,67 @@ static int no_expand;
 
 
 
-/*
- * Setup the memory model to be used for factorization.
+/*! \brief Setup the memory model to be used for factorization.
+ *  
  *    lwork = 0: use system malloc;
  *    lwork > 0: use user-supplied work[] space.
  */
-void zSetupSpace(void *work, int lwork, LU_space_t *MemModel)
+void zSetupSpace(void *work, int lwork, GlobalLU_t *Glu)
 {
     if ( lwork == 0 ) {
-	*MemModel = SYSTEM; /* malloc/free */
+	Glu->MemModel = SYSTEM; /* malloc/free */
     } else if ( lwork > 0 ) {
-	*MemModel = USER;   /* user provided space */
-	stack.used = 0;
-	stack.top1 = 0;
-	stack.top2 = (lwork/4)*4; /* must be word addressable */
-	stack.size = stack.top2;
-	stack.array = (void *) work;
+	Glu->MemModel = USER;   /* user provided space */
+	Glu->stack.used = 0;
+	Glu->stack.top1 = 0;
+	Glu->stack.top2 = (lwork/4)*4; /* must be word addressable */
+	Glu->stack.size = Glu->stack.top2;
+	Glu->stack.array = (void *) work;
     }
 }
 
 
 
-void *zuser_malloc(int bytes, int which_end)
+void *zuser_malloc(int bytes, int which_end, GlobalLU_t *Glu)
 {
     void *buf;
     
     if ( StackFull(bytes) ) return (NULL);
 
     if ( which_end == HEAD ) {
-	buf = (char*) stack.array + stack.top1;
-	stack.top1 += bytes;
+	buf = (char*) Glu->stack.array + Glu->stack.top1;
+	Glu->stack.top1 += bytes;
     } else {
-	stack.top2 -= bytes;
-	buf = (char*) stack.array + stack.top2;
+	Glu->stack.top2 -= bytes;
+	buf = (char*) Glu->stack.array + Glu->stack.top2;
     }
     
-    stack.used += bytes;
+    Glu->stack.used += bytes;
     return buf;
 }
 
 
-void zuser_free(int bytes, int which_end)
+void zuser_free(int bytes, int which_end, GlobalLU_t *Glu)
 {
     if ( which_end == HEAD ) {
-	stack.top1 -= bytes;
+	Glu->stack.top1 -= bytes;
     } else {
-	stack.top2 += bytes;
+	Glu->stack.top2 += bytes;
     }
-    stack.used -= bytes;
+    Glu->stack.used -= bytes;
 }
 
 
 
-/*
+/*! \brief 
+ *
+ * <pre>
  * mem_usage consists of the following fields:
  *    - for_lu (float)
  *      The amount of space used in bytes for the L\U data structures.
  *    - total_needed (float)
  *      The amount of space needed in bytes to perform factorization.
- *    - expansions (int)
- *      Number of memory expansions during the LU factorization.
+ * </pre>
  */
 int zQuerySpace(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)
 {
@@ -132,33 +111,75 @@ int zQuerySpace(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)
     dword = sizeof(doublecomplex);
 
     /* For LU factors */
-    mem_usage->for_lu = (float)( (4*n + 3) * iword + Lstore->nzval_colptr[n] *
-				 dword + Lstore->rowind_colptr[n] * iword );
-    mem_usage->for_lu += (float)( (n + 1) * iword +
+    mem_usage->for_lu = (float)( (4.0*n + 3.0) * iword +
+                                 Lstore->nzval_colptr[n] * dword +
+                                 Lstore->rowind_colptr[n] * iword );
+    mem_usage->for_lu += (float)( (n + 1.0) * iword +
 				 Ustore->colptr[n] * (dword + iword) );
 
     /* Working storage to support factorization */
     mem_usage->total_needed = mem_usage->for_lu +
-	(float)( (2 * panel_size + 4 + NO_MARKER) * n * iword +
-		(panel_size + 1) * n * dword );
-
-    mem_usage->expansions = --no_expand;
+	(float)( (2.0 * panel_size + 4.0 + NO_MARKER) * n * iword +
+		(panel_size + 1.0) * n * dword );
 
     return 0;
 } /* zQuerySpace */
 
-/*
- * Allocate storage for the data structures common to all factor routines.
- * For those unpredictable size, make a guess as FILL * nnz(A).
+
+/*! \brief
+ *
+ * <pre>
+ * mem_usage consists of the following fields:
+ *    - for_lu (float)
+ *      The amount of space used in bytes for the L\U data structures.
+ *    - total_needed (float)
+ *      The amount of space needed in bytes to perform factorization.
+ * </pre>
+ */
+int ilu_zQuerySpace(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)
+{
+    SCformat *Lstore;
+    NCformat *Ustore;
+    register int n, panel_size = sp_ienv(1);
+    register float iword, dword;
+
+    Lstore = L->Store;
+    Ustore = U->Store;
+    n = L->ncol;
+    iword = sizeof(int);
+    dword = sizeof(double);
+
+    /* For LU factors */
+    mem_usage->for_lu = (float)( (4.0f * n + 3.0f) * iword +
+				 Lstore->nzval_colptr[n] * dword +
+				 Lstore->rowind_colptr[n] * iword );
+    mem_usage->for_lu += (float)( (n + 1.0f) * iword +
+				 Ustore->colptr[n] * (dword + iword) );
+
+    /* Working storage to support factorization.
+       ILU needs 5*n more integers than LU */
+    mem_usage->total_needed = mem_usage->for_lu +
+	(float)( (2.0f * panel_size + 9.0f + NO_MARKER) * n * iword +
+		(panel_size + 1.0f) * n * dword );
+
+    return 0;
+} /* ilu_zQuerySpace */
+
+
+/*! \brief Allocate storage for the data structures common to all factor routines.
+ *
+ * <pre>
+ * For those unpredictable size, estimate as fill_ratio * nnz(A).
  * Return value:
  *     If lwork = -1, return the estimated amount of space required, plus n;
  *     otherwise, return the amount of space actually allocated when
  *     memory allocation failure occurred.
+ * </pre> 
  */
 int
 zLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
-	  int panel_size, SuperMatrix *L, SuperMatrix *U, GlobalLU_t *Glu,
-	  int **iwork, doublecomplex **dwork)
+	  int panel_size, double fill_ratio, SuperMatrix *L, SuperMatrix *U,
+          GlobalLU_t *Glu, int **iwork, doublecomplex **dwork)
 {
     int      info, iword, dword;
     SCformat *Lstore;
@@ -170,32 +191,32 @@ zLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
     doublecomplex   *ucol;
     int      *usub, *xusub;
     int      nzlmax, nzumax, nzlumax;
-    int      FILL = sp_ienv(6);
     
-    Glu->n    = n;
-    no_expand = 0;
     iword     = sizeof(int);
     dword     = sizeof(doublecomplex);
+    Glu->n    = n;
+    Glu->num_expansions = 0;
 
-    if ( !expanders )	
-        expanders = (ExpHeader*)SUPERLU_MALLOC(NO_MEMTYPE * sizeof(ExpHeader));
-    if ( !expanders ) ABORT("SUPERLU_MALLOC fails for expanders");
+    if ( !Glu->expanders )	
+        Glu->expanders = (ExpHeader*)SUPERLU_MALLOC( NO_MEMTYPE *
+                                                     sizeof(ExpHeader) );
+    if ( !Glu->expanders ) ABORT("SUPERLU_MALLOC fails for expanders");
     
     if ( fact != SamePattern_SameRowPerm ) {
 	/* Guess for L\U factors */
-	nzumax = nzlumax = FILL * annz;
-	nzlmax = SUPERLU_MAX(1, FILL/4.) * annz;
+	nzumax = nzlumax = fill_ratio * annz;
+	nzlmax = SUPERLU_MAX(1, fill_ratio/4.) * annz;
 
 	if ( lwork == -1 ) {
 	    return ( GluIntArray(n) * iword + TempSpace(m, panel_size)
 		    + (nzlmax+nzumax)*iword + (nzlumax+nzumax)*dword + n );
         } else {
-	    zSetupSpace(work, lwork, &Glu->MemModel);
+	    zSetupSpace(work, lwork, Glu);
 	}
 	
 #if ( PRNTlevel >= 1 )
-	printf("zLUMemInit() called: FILL %ld, nzlmax %ld, nzumax %ld\n", 
-	       FILL, nzlmax, nzumax);
+	printf("zLUMemInit() called: fill_ratio %.0f, nzlmax %ld, nzumax %ld\n", 
+	       fill_ratio, nzlmax, nzumax);
 	fflush(stdout);
 #endif	
 	
@@ -207,11 +228,11 @@ zLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
 	    xlusup = intMalloc(n+1);
 	    xusub  = intMalloc(n+1);
 	} else {
-	    xsup   = (int *)zuser_malloc((n+1) * iword, HEAD);
-	    supno  = (int *)zuser_malloc((n+1) * iword, HEAD);
-	    xlsub  = (int *)zuser_malloc((n+1) * iword, HEAD);
-	    xlusup = (int *)zuser_malloc((n+1) * iword, HEAD);
-	    xusub  = (int *)zuser_malloc((n+1) * iword, HEAD);
+	    xsup   = (int *)zuser_malloc((n+1) * iword, HEAD, Glu);
+	    supno  = (int *)zuser_malloc((n+1) * iword, HEAD, Glu);
+	    xlsub  = (int *)zuser_malloc((n+1) * iword, HEAD, Glu);
+	    xlusup = (int *)zuser_malloc((n+1) * iword, HEAD, Glu);
+	    xusub  = (int *)zuser_malloc((n+1) * iword, HEAD, Glu);
 	}
 
 	lusup = (doublecomplex *) zexpand( &nzlumax, LUSUP, 0, 0, Glu );
@@ -226,7 +247,8 @@ zLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
 		SUPERLU_FREE(lsub); 
 		SUPERLU_FREE(usub);
 	    } else {
-		zuser_free((nzlumax+nzumax)*dword+(nzlmax+nzumax)*iword, HEAD);
+		zuser_free((nzlumax+nzumax)*dword+(nzlmax+nzumax)*iword,
+                            HEAD, Glu);
 	    }
 	    nzlumax /= 2;
 	    nzumax /= 2;
@@ -266,18 +288,18 @@ zLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
 	    Glu->MemModel = SYSTEM;
 	} else {
 	    Glu->MemModel = USER;
-	    stack.top2 = (lwork/4)*4; /* must be word-addressable */
-	    stack.size = stack.top2;
+	    Glu->stack.top2 = (lwork/4)*4; /* must be word-addressable */
+	    Glu->stack.size = Glu->stack.top2;
 	}
 	
-	lsub  = expanders[LSUB].mem  = Lstore->rowind;
-	lusup = expanders[LUSUP].mem = Lstore->nzval;
-	usub  = expanders[USUB].mem  = Ustore->rowind;
-	ucol  = expanders[UCOL].mem  = Ustore->nzval;;
-	expanders[LSUB].size         = nzlmax;
-	expanders[LUSUP].size        = nzlumax;
-	expanders[USUB].size         = nzumax;
-	expanders[UCOL].size         = nzumax;	
+	lsub  = Glu->expanders[LSUB].mem  = Lstore->rowind;
+	lusup = Glu->expanders[LUSUP].mem = Lstore->nzval;
+	usub  = Glu->expanders[USUB].mem  = Ustore->rowind;
+	ucol  = Glu->expanders[UCOL].mem  = Ustore->nzval;;
+	Glu->expanders[LSUB].size         = nzlmax;
+	Glu->expanders[LUSUP].size        = nzlumax;
+	Glu->expanders[USUB].size         = nzumax;
+	Glu->expanders[UCOL].size         = nzumax;	
     }
 
     Glu->xsup    = xsup;
@@ -293,43 +315,43 @@ zLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
     Glu->nzumax  = nzumax;
     Glu->nzlumax = nzlumax;
     
-    info = zLUWorkInit(m, n, panel_size, iwork, dwork, Glu->MemModel);
+    info = zLUWorkInit(m, n, panel_size, iwork, dwork, Glu);
     if ( info )
 	return ( info + zmemory_usage(nzlmax, nzumax, nzlumax, n) + n);
     
-    ++no_expand;
+    ++Glu->num_expansions;
     return 0;
     
 } /* zLUMemInit */
 
-/* Allocate known working storage. Returns 0 if success, otherwise
+/*! \brief Allocate known working storage. Returns 0 if success, otherwise
    returns the number of bytes allocated so far when failure occurred. */
 int
 zLUWorkInit(int m, int n, int panel_size, int **iworkptr, 
-            doublecomplex **dworkptr, LU_space_t MemModel)
+            doublecomplex **dworkptr, GlobalLU_t *Glu)
 {
     int    isize, dsize, extra;
     doublecomplex *old_ptr;
-    int    maxsuper = sp_ienv(3),
+    int    maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
            rowblk   = sp_ienv(4);
 
     isize = ( (2 * panel_size + 3 + NO_MARKER ) * m + n ) * sizeof(int);
     dsize = (m * panel_size +
 	     NUM_TEMPV(m,panel_size,maxsuper,rowblk)) * sizeof(doublecomplex);
     
-    if ( MemModel == SYSTEM ) 
+    if ( Glu->MemModel == SYSTEM ) 
 	*iworkptr = (int *) intCalloc(isize/sizeof(int));
     else
-	*iworkptr = (int *) zuser_malloc(isize, TAIL);
+	*iworkptr = (int *) zuser_malloc(isize, TAIL, Glu);
     if ( ! *iworkptr ) {
 	fprintf(stderr, "zLUWorkInit: malloc fails for local iworkptr[]\n");
 	return (isize + n);
     }
 
-    if ( MemModel == SYSTEM )
+    if ( Glu->MemModel == SYSTEM )
 	*dworkptr = (doublecomplex *) SUPERLU_MALLOC(dsize);
     else {
-	*dworkptr = (doublecomplex *) zuser_malloc(dsize, TAIL);
+	*dworkptr = (doublecomplex *) zuser_malloc(dsize, TAIL, Glu);
 	if ( NotDoubleAlign(*dworkptr) ) {
 	    old_ptr = *dworkptr;
 	    *dworkptr = (doublecomplex*) DoubleAlign(*dworkptr);
@@ -338,8 +360,8 @@ zLUWorkInit(int m, int n, int panel_size, int **iworkptr,
 #ifdef DEBUG	    
 	    printf("zLUWorkInit: not aligned, extra %d\n", extra);
 #endif	    
-	    stack.top2 -= extra;
-	    stack.used += extra;
+	    Glu->stack.top2 -= extra;
+	    Glu->stack.used += extra;
 	}
     }
     if ( ! *dworkptr ) {
@@ -351,8 +373,7 @@ zLUWorkInit(int m, int n, int panel_size, int **iworkptr,
 }
 
 
-/*
- * Set up pointers for real working arrays.
+/*! \brief Set up pointers for real working arrays.
  */
 void
 zSetRWork(int m, int panel_size, doublecomplex *dworkptr,
@@ -360,7 +381,7 @@ zSetRWork(int m, int panel_size, doublecomplex *dworkptr,
 {
     doublecomplex zero = {0.0, 0.0};
 
-    int maxsuper = sp_ienv(3),
+    int maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
         rowblk   = sp_ienv(4);
     *dense = dworkptr;
     *tempv = *dense + panel_size*m;
@@ -368,8 +389,7 @@ zSetRWork(int m, int panel_size, doublecomplex *dworkptr,
     zfill (*tempv, NUM_TEMPV(m,panel_size,maxsuper,rowblk), zero);     
 }
 	
-/*
- * Free the working storage used by factor routines.
+/*! \brief Free the working storage used by factor routines.
  */
 void zLUWorkFree(int *iwork, doublecomplex *dwork, GlobalLU_t *Glu)
 {
@@ -377,18 +397,21 @@ void zLUWorkFree(int *iwork, doublecomplex *dwork, GlobalLU_t *Glu)
 	SUPERLU_FREE (iwork);
 	SUPERLU_FREE (dwork);
     } else {
-	stack.used -= (stack.size - stack.top2);
-	stack.top2 = stack.size;
+	Glu->stack.used -= (Glu->stack.size - Glu->stack.top2);
+	Glu->stack.top2 = Glu->stack.size;
 /*	zStackCompress(Glu);  */
     }
     
-    SUPERLU_FREE (expanders);	
-    expanders = 0;
+    SUPERLU_FREE (Glu->expanders);	
+    Glu->expanders = NULL;
 }
 
-/* Expand the data structures for L and U during the factorization.
+/*! \brief Expand the data structures for L and U during the factorization.
+ * 
+ * <pre>
  * Return value:   0 - successful return
  *               > 0 - number of bytes allocated when run out of space
+ * </pre>
  */
 int
 zLUMemXpand(int jcol,
@@ -452,8 +475,7 @@ copy_mem_doublecomplex(int howmany, void *old, void *new)
     for (i = 0; i < howmany; i++) dnew[i] = dold[i];
 }
 
-/*
- * Expand the existing storage to accommodate more fill-ins.
+/*! \brief Expand the existing storage to accommodate more fill-ins.
  */
 void
 *zexpand (
@@ -469,12 +491,14 @@ void
     float    alpha;
     void     *new_mem, *old_mem;
     int      new_len, tries, lword, extra, bytes_to_copy;
+    ExpHeader *expanders = Glu->expanders; /* Array of 4 types of memory */
 
     alpha = EXPAND;
 
-    if ( no_expand == 0 || keep_prev ) /* First time allocate requested */
+    if ( Glu->num_expansions == 0 || keep_prev ) {
+        /* First time allocate requested */
         new_len = *prev_len;
-    else {
+    } else {
 	new_len = alpha * *prev_len;
     }
     
@@ -483,7 +507,7 @@ void
 
     if ( Glu->MemModel == SYSTEM ) {
 	new_mem = (void *) SUPERLU_MALLOC((size_t)new_len * lword);
-	if ( no_expand != 0 ) {
+	if ( Glu->num_expansions != 0 ) {
 	    tries = 0;
 	    if ( keep_prev ) {
 		if ( !new_mem ) return (NULL);
@@ -505,8 +529,8 @@ void
 	expanders[type].mem = (void *) new_mem;
 	
     } else { /* MemModel == USER */
-	if ( no_expand == 0 ) {
-	    new_mem = zuser_malloc(new_len * lword, HEAD);
+	if ( Glu->num_expansions == 0 ) {
+	    new_mem = zuser_malloc(new_len * lword, HEAD, Glu);
 	    if ( NotDoubleAlign(new_mem) &&
 		(type == LUSUP || type == UCOL) ) {
 		old_mem = new_mem;
@@ -515,12 +539,11 @@ void
 #ifdef DEBUG		
 		printf("expand(): not aligned, extra %d\n", extra);
 #endif		
-		stack.top1 += extra;
-		stack.used += extra;
+		Glu->stack.top1 += extra;
+		Glu->stack.used += extra;
 	    }
 	    expanders[type].mem = (void *) new_mem;
-	}
-	else {
+	} else {
 	    tries = 0;
 	    extra = (new_len - *prev_len) * lword;
 	    if ( keep_prev ) {
@@ -536,7 +559,7 @@ void
 
 	    if ( type != USUB ) {
 		new_mem = (void*)((char*)expanders[type + 1].mem + extra);
-		bytes_to_copy = (char*)stack.array + stack.top1
+		bytes_to_copy = (char*)Glu->stack.array + Glu->stack.top1
 		    - (char*)expanders[type + 1].mem;
 		user_bcopy(expanders[type+1].mem, new_mem, bytes_to_copy);
 
@@ -552,11 +575,11 @@ void
 		    Glu->ucol = expanders[UCOL].mem =
 			(void*)((char*)expanders[UCOL].mem + extra);
 		}
-		stack.top1 += extra;
-		stack.used += extra;
+		Glu->stack.top1 += extra;
+		Glu->stack.used += extra;
 		if ( type == UCOL ) {
-		    stack.top1 += extra;   /* Add same amount for USUB */
-		    stack.used += extra;
+		    Glu->stack.top1 += extra;   /* Add same amount for USUB */
+		    Glu->stack.used += extra;
 		}
 		
 	    } /* if ... */
@@ -566,15 +589,14 @@ void
 
     expanders[type].size = new_len;
     *prev_len = new_len;
-    if ( no_expand ) ++no_expand;
+    if ( Glu->num_expansions ) ++Glu->num_expansions;
     
     return (void *) expanders[type].mem;
     
 } /* zexpand */
 
 
-/*
- * Compress the work[] array to remove fragmentation.
+/*! \brief Compress the work[] array to remove fragmentation.
  */
 void
 zStackCompress(GlobalLU_t *Glu)
@@ -614,9 +636,9 @@ zStackCompress(GlobalLU_t *Glu)
     usub = ito;
     
     last = (char*)usub + xusub[ndim] * iword;
-    fragment = (char*) (((char*)stack.array + stack.top1) - last);
-    stack.used -= (long int) fragment;
-    stack.top1 -= (long int) fragment;
+    fragment = (char*) (((char*)Glu->stack.array + Glu->stack.top1) - last);
+    Glu->stack.used -= (long int) fragment;
+    Glu->stack.top1 -= (long int) fragment;
 
     Glu->ucol = ucol;
     Glu->lsub = lsub;
@@ -630,8 +652,7 @@ zStackCompress(GlobalLU_t *Glu)
     
 }
 
-/*
- * Allocate storage for original matrix A
+/*! \brief Allocate storage for original matrix A
  */
 void
 zallocateA(int n, int nnz, doublecomplex **a, int **asub, int **xa)
diff --git a/SRC/zmemory.c.bak b/SRC/zmemory.c.bak
deleted file mode 100644
index 874e3df..0000000
--- a/SRC/zmemory.c.bak
+++ /dev/null
@@ -1,682 +0,0 @@
-
-/*
- * -- SuperLU routine (version 3.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * October 15, 2003
- *
- */
-#include "slu_zdefs.h"
-
-/* Constants */
-#define NO_MEMTYPE  4      /* 0: lusup;
-			      1: ucol;
-			      2: lsub;
-			      3: usub */
-#define GluIntArray(n)   (5 * (n) + 5)
-
-/* Internal prototypes */
-void  *zexpand (int *, MemType,int, int, GlobalLU_t *);
-int   zLUWorkInit (int, int, int, int **, doublecomplex **, LU_space_t);
-void  copy_mem_doublecomplex (int, void *, void *);
-void  zStackCompress (GlobalLU_t *);
-void  zSetupSpace (void *, int, LU_space_t *);
-void  *zuser_malloc (int, int);
-void  zuser_free (int, int);
-
-/* External prototypes (in memory.c - prec-indep) */
-extern void    copy_mem_int    (int, void *, void *);
-extern void    user_bcopy      (char *, char *, int);
-
-/* Headers for 4 types of dynamatically managed memory */
-typedef struct e_node {
-    int size;      /* length of the memory that has been used */
-    void *mem;     /* pointer to the new malloc'd store */
-} ExpHeader;
-
-typedef struct {
-    int  size;
-    int  used;
-    int  top1;  /* grow upward, relative to &array[0] */
-    int  top2;  /* grow downward */
-    void *array;
-} LU_stack_t;
-
-/* Variables local to this file */
-static ExpHeader *expanders = 0; /* Array of pointers to 4 types of memory */
-static LU_stack_t stack;
-static int no_expand;
-
-/* Macros to manipulate stack */
-#define StackFull(x)         ( x + stack.used >= stack.size )
-#define NotDoubleAlign(addr) ( (long int)addr & 7 )
-#define DoubleAlign(addr)    ( ((long int)addr + 7) & ~7L )
-#define TempSpace(m, w)      ( (2*w + 4 + NO_MARKER) * m * sizeof(int) + \
-			      (w + 1) * m * sizeof(doublecomplex) )
-#define Reduce(alpha)        ((alpha + 1) / 2)  /* i.e. (alpha-1)/2 + 1 */
-
-
-
-
-/*
- * Setup the memory model to be used for factorization.
- *    lwork = 0: use system malloc;
- *    lwork > 0: use user-supplied work[] space.
- */
-void zSetupSpace(void *work, int lwork, LU_space_t *MemModel)
-{
-    if ( lwork == 0 ) {
-	*MemModel = SYSTEM; /* malloc/free */
-    } else if ( lwork > 0 ) {
-	*MemModel = USER;   /* user provided space */
-	stack.used = 0;
-	stack.top1 = 0;
-	stack.top2 = (lwork/4)*4; /* must be word addressable */
-	stack.size = stack.top2;
-	stack.array = (void *) work;
-    }
-}
-
-
-
-void *zuser_malloc(int bytes, int which_end)
-{
-    void *buf;
-    
-    if ( StackFull(bytes) ) return (NULL);
-
-    if ( which_end == HEAD ) {
-	buf = (char*) stack.array + stack.top1;
-	stack.top1 += bytes;
-    } else {
-	stack.top2 -= bytes;
-	buf = (char*) stack.array + stack.top2;
-    }
-    
-    stack.used += bytes;
-    return buf;
-}
-
-
-void zuser_free(int bytes, int which_end)
-{
-    if ( which_end == HEAD ) {
-	stack.top1 -= bytes;
-    } else {
-	stack.top2 += bytes;
-    }
-    stack.used -= bytes;
-}
-
-
-
-/*
- * mem_usage consists of the following fields:
- *    - for_lu (float)
- *      The amount of space used in bytes for the L\U data structures.
- *    - total_needed (float)
- *      The amount of space needed in bytes to perform factorization.
- *    - expansions (int)
- *      Number of memory expansions during the LU factorization.
- */
-int zQuerySpace(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage)
-{
-    SCformat *Lstore;
-    NCformat *Ustore;
-    register int n, iword, dword, panel_size = sp_ienv(1);
-
-    Lstore = L->Store;
-    Ustore = U->Store;
-    n = L->ncol;
-    iword = sizeof(int);
-    dword = sizeof(doublecomplex);
-
-    /* For LU factors */
-    mem_usage->for_lu = (float)( (4*n + 3) * iword + Lstore->nzval_colptr[n] *
-				 dword + Lstore->rowind_colptr[n] * iword );
-    mem_usage->for_lu += (float)( (n + 1) * iword +
-				 Ustore->colptr[n] * (dword + iword) );
-
-    /* Working storage to support factorization */
-    mem_usage->total_needed = mem_usage->for_lu +
-	(float)( (2 * panel_size + 4 + NO_MARKER) * n * iword +
-		(panel_size + 1) * n * dword );
-
-    mem_usage->expansions = --no_expand;
-
-    return 0;
-} /* zQuerySpace */
-
-/*
- * Allocate storage for the data structures common to all factor routines.
- * For those unpredictable size, make a guess as FILL * nnz(A).
- * Return value:
- *     If lwork = -1, return the estimated amount of space required, plus n;
- *     otherwise, return the amount of space actually allocated when
- *     memory allocation failure occurred.
- */
-int
-zLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
-	  int panel_size, SuperMatrix *L, SuperMatrix *U, GlobalLU_t *Glu,
-	  int **iwork, doublecomplex **dwork)
-{
-    int      info, iword, dword;
-    SCformat *Lstore;
-    NCformat *Ustore;
-    int      *xsup, *supno;
-    int      *lsub, *xlsub;
-    doublecomplex   *lusup;
-    int      *xlusup;
-    doublecomplex   *ucol;
-    int      *usub, *xusub;
-    int      nzlmax, nzumax, nzlumax;
-    int      FILL = sp_ienv(6);
-    
-    Glu->n    = n;
-    no_expand = 0;
-    iword     = sizeof(int);
-    dword     = sizeof(doublecomplex);
-
-    if ( !expanders )	
-        expanders = (ExpHeader*)SUPERLU_MALLOC(NO_MEMTYPE * sizeof(ExpHeader));
-    if ( !expanders ) ABORT("SUPERLU_MALLOC fails for expanders");
-    
-    if ( fact != SamePattern_SameRowPerm ) {
-	/* Guess for L\U factors */
-	nzumax = nzlumax = FILL * annz;
-	nzlmax = SUPERLU_MAX(1, FILL/4.) * annz;
-
-	if ( lwork == -1 ) {
-	    return ( GluIntArray(n) * iword + TempSpace(m, panel_size)
-		    + (nzlmax+nzumax)*iword + (nzlumax+nzumax)*dword + n );
-        } else {
-	    zSetupSpace(work, lwork, &Glu->MemModel);
-	}
-	
-#if ( PRNTlevel >= 1 )
-	printf("zLUMemInit() called: FILL %ld, nzlmax %ld, nzumax %ld\n", 
-	       FILL, nzlmax, nzumax);
-	fflush(stdout);
-#endif	
-	
-	/* Integer pointers for L\U factors */
-	if ( Glu->MemModel == SYSTEM ) {
-	    xsup   = intMalloc(n+1);
-	    supno  = intMalloc(n+1);
-	    xlsub  = intMalloc(n+1);
-	    xlusup = intMalloc(n+1);
-	    xusub  = intMalloc(n+1);
-	} else {
-	    xsup   = (int *)zuser_malloc((n+1) * iword, HEAD);
-	    supno  = (int *)zuser_malloc((n+1) * iword, HEAD);
-	    xlsub  = (int *)zuser_malloc((n+1) * iword, HEAD);
-	    xlusup = (int *)zuser_malloc((n+1) * iword, HEAD);
-	    xusub  = (int *)zuser_malloc((n+1) * iword, HEAD);
-	}
-
-	lusup = (doublecomplex *) zexpand( &nzlumax, LUSUP, 0, 0, Glu );
-	ucol  = (doublecomplex *) zexpand( &nzumax, UCOL, 0, 0, Glu );
-	lsub  = (int *)    zexpand( &nzlmax, LSUB, 0, 0, Glu );
-	usub  = (int *)    zexpand( &nzumax, USUB, 0, 1, Glu );
-
-	while ( !lusup || !ucol || !lsub || !usub ) {
-	    if ( Glu->MemModel == SYSTEM ) {
-		SUPERLU_FREE(lusup); 
-		SUPERLU_FREE(ucol); 
-		SUPERLU_FREE(lsub); 
-		SUPERLU_FREE(usub);
-	    } else {
-		zuser_free((nzlumax+nzumax)*dword+(nzlmax+nzumax)*iword, HEAD);
-	    }
-	    nzlumax /= 2;
-	    nzumax /= 2;
-	    nzlmax /= 2;
-	    if ( nzlumax < annz ) {
-		printf("Not enough memory to perform factorization.\n");
-		return (zmemory_usage(nzlmax, nzumax, nzlumax, n) + n);
-	    }
-#if ( PRNTlevel >= 1)
-	    printf("zzLUMemInit() reduce size: nzlmax %ld, nzumax %ld\n", 
-		   nzlmax, nzumax);
-	    fflush(stdout);
-#endif
-	    lusup = (doublecomplex *) zexpand( &nzlumax, LUSUP, 0, 0, Glu );
-	    ucol  = (doublecomplex *) zexpand( &nzumax, UCOL, 0, 0, Glu );
-	    lsub  = (int *)    zexpand( &nzlmax, LSUB, 0, 0, Glu );
-	    usub  = (int *)    zexpand( &nzumax, USUB, 0, 1, Glu );
-	}
-	
-    } else {
-	/* fact == SamePattern_SameRowPerm */
-	Lstore   = L->Store;
-	Ustore   = U->Store;
-	xsup     = Lstore->sup_to_col;
-	supno    = Lstore->col_to_sup;
-	xlsub    = Lstore->rowind_colptr;
-	xlusup   = Lstore->nzval_colptr;
-	xusub    = Ustore->colptr;
-	nzlmax   = Glu->nzlmax;    /* max from previous factorization */
-	nzumax   = Glu->nzumax;
-	nzlumax  = Glu->nzlumax;
-	
-	if ( lwork == -1 ) {
-	    return ( GluIntArray(n) * iword + TempSpace(m, panel_size)
-		    + (nzlmax+nzumax)*iword + (nzlumax+nzumax)*dword + n );
-        } else if ( lwork == 0 ) {
-	    Glu->MemModel = SYSTEM;
-	} else {
-	    Glu->MemModel = USER;
-	    stack.top2 = (lwork/4)*4; /* must be word-addressable */
-	    stack.size = stack.top2;
-	}
-	
-	lsub  = expanders[LSUB].mem  = Lstore->rowind;
-	lusup = expanders[LUSUP].mem = Lstore->nzval;
-	usub  = expanders[USUB].mem  = Ustore->rowind;
-	ucol  = expanders[UCOL].mem  = Ustore->nzval;;
-	expanders[LSUB].size         = nzlmax;
-	expanders[LUSUP].size        = nzlumax;
-	expanders[USUB].size         = nzumax;
-	expanders[UCOL].size         = nzumax;	
-    }
-
-    Glu->xsup    = xsup;
-    Glu->supno   = supno;
-    Glu->lsub    = lsub;
-    Glu->xlsub   = xlsub;
-    Glu->lusup   = lusup;
-    Glu->xlusup  = xlusup;
-    Glu->ucol    = ucol;
-    Glu->usub    = usub;
-    Glu->xusub   = xusub;
-    Glu->nzlmax  = nzlmax;
-    Glu->nzumax  = nzumax;
-    Glu->nzlumax = nzlumax;
-    
-    info = zLUWorkInit(m, n, panel_size, iwork, dwork, Glu->MemModel);
-    if ( info )
-	return ( info + zmemory_usage(nzlmax, nzumax, nzlumax, n) + n);
-    
-    ++no_expand;
-    return 0;
-    
-} /* zLUMemInit */
-
-/* Allocate known working storage. Returns 0 if success, otherwise
-   returns the number of bytes allocated so far when failure occurred. */
-int
-zLUWorkInit(int m, int n, int panel_size, int **iworkptr, 
-            doublecomplex **dworkptr, LU_space_t MemModel)
-{
-    int    isize, dsize, extra;
-    doublecomplex *old_ptr;
-    int    maxsuper = sp_ienv(3),
-           rowblk   = sp_ienv(4);
-
-    isize = ( (2 * panel_size + 3 + NO_MARKER ) * m + n ) * sizeof(int);
-    dsize = (m * panel_size +
-	     NUM_TEMPV(m,panel_size,maxsuper,rowblk)) * sizeof(doublecomplex);
-    
-    if ( MemModel == SYSTEM ) 
-	*iworkptr = (int *) intCalloc(isize/sizeof(int));
-    else
-	*iworkptr = (int *) zuser_malloc(isize, TAIL);
-    if ( ! *iworkptr ) {
-	fprintf(stderr, "zLUWorkInit: malloc fails for local iworkptr[]\n");
-	return (isize + n);
-    }
-
-    if ( MemModel == SYSTEM )
-	*dworkptr = (doublecomplex *) SUPERLU_MALLOC(dsize);
-    else {
-	*dworkptr = (doublecomplex *) zuser_malloc(dsize, TAIL);
-	if ( NotDoubleAlign(*dworkptr) ) {
-	    old_ptr = *dworkptr;
-	    *dworkptr = (doublecomplex*) DoubleAlign(*dworkptr);
-	    *dworkptr = (doublecomplex*) ((double*)*dworkptr - 1);
-	    extra = (char*)old_ptr - (char*)*dworkptr;
-#ifdef DEBUG	    
-	    printf("zLUWorkInit: not aligned, extra %d\n", extra);
-#endif	    
-	    stack.top2 -= extra;
-	    stack.used += extra;
-	}
-    }
-    if ( ! *dworkptr ) {
-	fprintf(stderr, "malloc fails for local dworkptr[].");
-	return (isize + dsize + n);
-    }
-	
-    return 0;
-}
-
-
-/*
- * Set up pointers for real working arrays.
- */
-void
-zSetRWork(int m, int panel_size, doublecomplex *dworkptr,
-	 doublecomplex **dense, doublecomplex **tempv)
-{
-    doublecomplex zero = {0.0, 0.0};
-
-    int maxsuper = sp_ienv(3),
-        rowblk   = sp_ienv(4);
-    *dense = dworkptr;
-    *tempv = *dense + panel_size*m;
-    zfill (*dense, m * panel_size, zero);
-    zfill (*tempv, NUM_TEMPV(m,panel_size,maxsuper,rowblk), zero);     
-}
-	
-/*
- * Free the working storage used by factor routines.
- */
-void zLUWorkFree(int *iwork, doublecomplex *dwork, GlobalLU_t *Glu)
-{
-    if ( Glu->MemModel == SYSTEM ) {
-	SUPERLU_FREE (iwork);
-	SUPERLU_FREE (dwork);
-    } else {
-	stack.used -= (stack.size - stack.top2);
-	stack.top2 = stack.size;
-/*	zStackCompress(Glu);  */
-    }
-    
-    SUPERLU_FREE (expanders);	
-    expanders = 0;
-}
-
-/* Expand the data structures for L and U during the factorization.
- * Return value:   0 - successful return
- *               > 0 - number of bytes allocated when run out of space
- */
-int
-zLUMemXpand(int jcol,
-	   int next,          /* number of elements currently in the factors */
-	   MemType mem_type,  /* which type of memory to expand  */
-	   int *maxlen,       /* modified - maximum length of a data structure */
-	   GlobalLU_t *Glu    /* modified - global LU data structures */
-	   )
-{
-    void   *new_mem;
-    
-#ifdef DEBUG    
-    printf("zLUMemXpand(): jcol %d, next %d, maxlen %d, MemType %d\n",
-	   jcol, next, *maxlen, mem_type);
-#endif    
-
-    if (mem_type == USUB) 
-    	new_mem = zexpand(maxlen, mem_type, next, 1, Glu);
-    else
-	new_mem = zexpand(maxlen, mem_type, next, 0, Glu);
-    
-    if ( !new_mem ) {
-	int    nzlmax  = Glu->nzlmax;
-	int    nzumax  = Glu->nzumax;
-	int    nzlumax = Glu->nzlumax;
-    	fprintf(stderr, "Can't expand MemType %d: jcol %d\n", mem_type, jcol);
-    	return (zmemory_usage(nzlmax, nzumax, nzlumax, Glu->n) + Glu->n);
-    }
-
-    switch ( mem_type ) {
-      case LUSUP:
-	Glu->lusup   = (doublecomplex *) new_mem;
-	Glu->nzlumax = *maxlen;
-	break;
-      case UCOL:
-	Glu->ucol   = (doublecomplex *) new_mem;
-	Glu->nzumax = *maxlen;
-	break;
-      case LSUB:
-	Glu->lsub   = (int *) new_mem;
-	Glu->nzlmax = *maxlen;
-	break;
-      case USUB:
-	Glu->usub   = (int *) new_mem;
-	Glu->nzumax = *maxlen;
-	break;
-    }
-    
-    return 0;
-    
-}
-
-
-
-void
-copy_mem_doublecomplex(int howmany, void *old, void *new)
-{
-    register int i;
-    doublecomplex *dold = old;
-    doublecomplex *dnew = new;
-    for (i = 0; i < howmany; i++) dnew[i] = dold[i];
-}
-
-/*
- * Expand the existing storage to accommodate more fill-ins.
- */
-void
-*zexpand (
-	 int *prev_len,   /* length used from previous call */
-	 MemType type,    /* which part of the memory to expand */
-	 int len_to_copy, /* size of the memory to be copied to new store */
-	 int keep_prev,   /* = 1: use prev_len;
-			     = 0: compute new_len to expand */
-	 GlobalLU_t *Glu  /* modified - global LU data structures */
-	)
-{
-    float    EXPAND = 1.5;
-    float    alpha;
-    void     *new_mem, *old_mem;
-    int      new_len, tries, lword, extra, bytes_to_copy;
-
-    alpha = EXPAND;
-
-    if ( no_expand == 0 || keep_prev ) /* First time allocate requested */
-        new_len = *prev_len;
-    else {
-	new_len = alpha * *prev_len;
-    }
-    
-    if ( type == LSUB || type == USUB ) lword = sizeof(int);
-    else lword = sizeof(doublecomplex);
-
-    if ( Glu->MemModel == SYSTEM ) {
-	new_mem = (void *) SUPERLU_MALLOC(new_len * lword);
-/*	new_mem = (void *) calloc(new_len, lword); */
-	if ( no_expand != 0 ) {
-	    tries = 0;
-	    if ( keep_prev ) {
-		if ( !new_mem ) return (NULL);
-	    } else {
-		while ( !new_mem ) {
-		    if ( ++tries > 10 ) return (NULL);
-		    alpha = Reduce(alpha);
-		    new_len = alpha * *prev_len;
-		    new_mem = (void *) SUPERLU_MALLOC(new_len * lword); 
-/*		    new_mem = (void *) calloc(new_len, lword); */
-		}
-	    }
-	    if ( type == LSUB || type == USUB ) {
-		copy_mem_int(len_to_copy, expanders[type].mem, new_mem);
-	    } else {
-		copy_mem_doublecomplex(len_to_copy, expanders[type].mem, new_mem);
-	    }
-	    SUPERLU_FREE (expanders[type].mem);
-	}
-	expanders[type].mem = (void *) new_mem;
-	
-    } else { /* MemModel == USER */
-	if ( no_expand == 0 ) {
-	    new_mem = zuser_malloc(new_len * lword, HEAD);
-	    if ( NotDoubleAlign(new_mem) &&
-		(type == LUSUP || type == UCOL) ) {
-		old_mem = new_mem;
-		new_mem = (void *)DoubleAlign(new_mem);
-		extra = (char*)new_mem - (char*)old_mem;
-#ifdef DEBUG		
-		printf("expand(): not aligned, extra %d\n", extra);
-#endif		
-		stack.top1 += extra;
-		stack.used += extra;
-	    }
-	    expanders[type].mem = (void *) new_mem;
-	}
-	else {
-	    tries = 0;
-	    extra = (new_len - *prev_len) * lword;
-	    if ( keep_prev ) {
-		if ( StackFull(extra) ) return (NULL);
-	    } else {
-		while ( StackFull(extra) ) {
-		    if ( ++tries > 10 ) return (NULL);
-		    alpha = Reduce(alpha);
-		    new_len = alpha * *prev_len;
-		    extra = (new_len - *prev_len) * lword;	    
-		}
-	    }
-
-	    if ( type != USUB ) {
-		new_mem = (void*)((char*)expanders[type + 1].mem + extra);
-		bytes_to_copy = (char*)stack.array + stack.top1
-		    - (char*)expanders[type + 1].mem;
-		user_bcopy(expanders[type+1].mem, new_mem, bytes_to_copy);
-
-		if ( type < USUB ) {
-		    Glu->usub = expanders[USUB].mem =
-			(void*)((char*)expanders[USUB].mem + extra);
-		}
-		if ( type < LSUB ) {
-		    Glu->lsub = expanders[LSUB].mem =
-			(void*)((char*)expanders[LSUB].mem + extra);
-		}
-		if ( type < UCOL ) {
-		    Glu->ucol = expanders[UCOL].mem =
-			(void*)((char*)expanders[UCOL].mem + extra);
-		}
-		stack.top1 += extra;
-		stack.used += extra;
-		if ( type == UCOL ) {
-		    stack.top1 += extra;   /* Add same amount for USUB */
-		    stack.used += extra;
-		}
-		
-	    } /* if ... */
-
-	} /* else ... */
-    }
-
-    expanders[type].size = new_len;
-    *prev_len = new_len;
-    if ( no_expand ) ++no_expand;
-    
-    return (void *) expanders[type].mem;
-    
-} /* zexpand */
-
-
-/*
- * Compress the work[] array to remove fragmentation.
- */
-void
-zStackCompress(GlobalLU_t *Glu)
-{
-    register int iword, dword, ndim;
-    char    *last, *fragment;
-    int      *ifrom, *ito;
-    doublecomplex   *dfrom, *dto;
-    int      *xlsub, *lsub, *xusub, *usub, *xlusup;
-    doublecomplex   *ucol, *lusup;
-    
-    iword = sizeof(int);
-    dword = sizeof(doublecomplex);
-    ndim = Glu->n;
-
-    xlsub  = Glu->xlsub;
-    lsub   = Glu->lsub;
-    xusub  = Glu->xusub;
-    usub   = Glu->usub;
-    xlusup = Glu->xlusup;
-    ucol   = Glu->ucol;
-    lusup  = Glu->lusup;
-    
-    dfrom = ucol;
-    dto = (doublecomplex *)((char*)lusup + xlusup[ndim] * dword);
-    copy_mem_doublecomplex(xusub[ndim], dfrom, dto);
-    ucol = dto;
-
-    ifrom = lsub;
-    ito = (int *) ((char*)ucol + xusub[ndim] * iword);
-    copy_mem_int(xlsub[ndim], ifrom, ito);
-    lsub = ito;
-    
-    ifrom = usub;
-    ito = (int *) ((char*)lsub + xlsub[ndim] * iword);
-    copy_mem_int(xusub[ndim], ifrom, ito);
-    usub = ito;
-    
-    last = (char*)usub + xusub[ndim] * iword;
-    fragment = (char*) (((char*)stack.array + stack.top1) - last);
-    stack.used -= (long int) fragment;
-    stack.top1 -= (long int) fragment;
-
-    Glu->ucol = ucol;
-    Glu->lsub = lsub;
-    Glu->usub = usub;
-    
-#ifdef DEBUG
-    printf("zStackCompress: fragment %d\n", fragment);
-    /* for (last = 0; last < ndim; ++last)
-	print_lu_col("After compress:", last, 0);*/
-#endif    
-    
-}
-
-/*
- * Allocate storage for original matrix A
- */
-void
-zallocateA(int n, int nnz, doublecomplex **a, int **asub, int **xa)
-{
-    *a    = (doublecomplex *) doublecomplexMalloc(nnz);
-    *asub = (int *) intMalloc(nnz);
-    *xa   = (int *) intMalloc(n+1);
-}
-
-
-doublecomplex *doublecomplexMalloc(int n)
-{
-    doublecomplex *buf;
-    buf = (doublecomplex *) SUPERLU_MALLOC(n * sizeof(doublecomplex)); 
-    if ( !buf ) {
-	ABORT("SUPERLU_MALLOC failed for buf in doublecomplexMalloc()\n");
-    }
-    return (buf);
-}
-
-doublecomplex *doublecomplexCalloc(int n)
-{
-    doublecomplex *buf;
-    register int i;
-    doublecomplex zero = {0.0, 0.0};
-    buf = (doublecomplex *) SUPERLU_MALLOC(n * sizeof(doublecomplex));
-    if ( !buf ) {
-	ABORT("SUPERLU_MALLOC failed for buf in doublecomplexCalloc()\n");
-    }
-    for (i = 0; i < n; ++i) buf[i] = zero;
-    return (buf);
-}
-
-
-int zmemory_usage(const int nzlmax, const int nzumax, 
-		  const int nzlumax, const int n)
-{
-    register int iword, dword;
-
-    iword   = sizeof(int);
-    dword   = sizeof(doublecomplex);
-    
-    return (10 * n * iword +
-	    nzlmax * iword + nzumax * (iword + dword) + nzlumax * dword);
-
-}
diff --git a/SRC/zmyblas2.c b/SRC/zmyblas2.c
index 45c67c1..eae1c5a 100644
--- a/SRC/zmyblas2.c
+++ b/SRC/zmyblas2.c
@@ -1,22 +1,27 @@
 
-/*
+/*! @file zmyblas2.c
+ * \brief Level 2 Blas operations
+ * 
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
- */
-/*
- * File name:		zmyblas2.c
+ * </pre>
  * Purpose:
  *     Level 2 BLAS operations: solves and matvec, written in C.
  * Note:
  *     This is only used when the system lacks an efficient BLAS library.
+ * </pre>
+ */
+/*
+ * File name:		zmyblas2.c
  */
 #include "slu_dcomplex.h"
 
-/*
- * Solves a dense UNIT lower triangular system. The unit lower 
+/*! \brief Solves a dense UNIT lower triangular system
+ * 
+ * The unit lower 
  * triangular matrix is stored in a 2D array M(1:nrow,1:ncol). 
  * The solution will be returned in the rhs vector.
  */
@@ -91,8 +96,9 @@ void zlsolve ( int ldm, int ncol, doublecomplex *M, doublecomplex *rhs )
     
 }
 
-/*
- * Solves a dense upper triangular system. The upper triangular matrix is
+/*! \brief Solves a dense upper triangular system. 
+ *
+ * The upper triangular matrix is
  * stored in a 2-dim array M(1:ldm,1:ncol). The solution will be returned
  * in the rhs vector.
  */
@@ -124,8 +130,8 @@ doublecomplex *rhs;	/* modified */
 }
 
 
-/*
- * Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.
+/*! \brief Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec.
+ *
  * The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[].
  */
 void zmatvec ( ldm, nrow, ncol, M, vec, Mxvec )
diff --git a/SRC/zpanel_bmod.c b/SRC/zpanel_bmod.c
index f910635..7893277 100644
--- a/SRC/zpanel_bmod.c
+++ b/SRC/zpanel_bmod.c
@@ -1,22 +1,27 @@
 
-/*
+/*! @file zpanel_bmod.c
+ * \brief Performs numeric block updates
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
 /*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
+
 */
 
 #include <stdio.h>
@@ -30,6 +35,25 @@ void zlsolve(int, int, doublecomplex *, doublecomplex *);
 void zmatvec(int, int, int, doublecomplex *, doublecomplex *, doublecomplex *);
 extern void zcheck_tempv();
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ *    Performs numeric block updates (sup-panel) in topological order.
+ *    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
+ *    Special processing on the supernodal portion of L\U[*,j]
+ *
+ *    Before entering this routine, the original nonzeros in the panel 
+ *    were already copied into the spa[m,w].
+ *
+ *    Updated/Output parameters-
+ *    dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
+ *    collectively in the m-by-w vector dense[*]. 
+ * </pre>
+ */
+
 void
 zpanel_bmod (
 	    const int  m,          /* in - number of rows in the matrix */
@@ -44,22 +68,7 @@ zpanel_bmod (
 	    SuperLUStat_t *stat    /* output */
 	    )
 {
-/* 
- * Purpose
- * =======
- *
- *    Performs numeric block updates (sup-panel) in topological order.
- *    It features: col-col, 2cols-col, 3cols-col, and sup-col updates.
- *    Special processing on the supernodal portion of L\U[*,j]
- *
- *    Before entering this routine, the original nonzeros in the panel 
- *    were already copied into the spa[m,w].
- *
- *    Updated/Output parameters-
- *	dense[0:m-1,w]: L[*,j:j+w-1] and U[*,j:j+w-1] are returned 
- *      collectively in the m-by-w vector dense[*]. 
- *
- */
+
 
 #ifdef USE_VENDOR_BLAS
 #ifdef _CRAY
@@ -106,7 +115,7 @@ zpanel_bmod (
     xlusup  = Glu->xlusup;
     
     if ( first ) {
-	maxsuper = sp_ienv(3);
+	maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) );
 	rowblk   = sp_ienv(4);
 	colblk   = sp_ienv(5);
 	first = 0;
diff --git a/SRC/zpanel_dfs.c b/SRC/zpanel_dfs.c
index 3e535a8..e05766f 100644
--- a/SRC/zpanel_dfs.c
+++ b/SRC/zpanel_dfs.c
@@ -1,46 +1,32 @@
 
-/*
+/*! @file zpanel_dfs.c
+ * \brief Peforms a symbolic factorization on a panel of symbols
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_zdefs.h"
 
-void
-zpanel_dfs (
-	   const int  m,           /* in - number of rows in the matrix */
-	   const int  w,           /* in */
-	   const int  jcol,        /* in */
-	   SuperMatrix *A,       /* in - original matrix */
-	   int        *perm_r,     /* in */
-	   int        *nseg,	   /* out */
-	   doublecomplex     *dense,      /* out */
-	   int        *panel_lsub, /* out */
-	   int        *segrep,     /* out */
-	   int        *repfnz,     /* out */
-	   int        *xprune,     /* out */
-	   int        *marker,     /* out */     
-	   int        *parent,     /* working array */
-	   int        *xplore,     /* working array */
-	   GlobalLU_t *Glu         /* modified */
-	   )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -66,8 +52,29 @@ zpanel_dfs (
  *   repfnz: SuperA-col --> PA-row
  *   parent: SuperA-col --> SuperA-col
  *   xplore: SuperA-col --> index to L-structure
- *
+ * </pre>
  */
+
+void
+zpanel_dfs (
+	   const int  m,           /* in - number of rows in the matrix */
+	   const int  w,           /* in */
+	   const int  jcol,        /* in */
+	   SuperMatrix *A,       /* in - original matrix */
+	   int        *perm_r,     /* in */
+	   int        *nseg,	   /* out */
+	   doublecomplex     *dense,      /* out */
+	   int        *panel_lsub, /* out */
+	   int        *segrep,     /* out */
+	   int        *repfnz,     /* out */
+	   int        *xprune,     /* out */
+	   int        *marker,     /* out */     
+	   int        *parent,     /* working array */
+	   int        *xplore,     /* working array */
+	   GlobalLU_t *Glu         /* modified */
+	   )
+{
+
     NCPformat *Astore;
     doublecomplex    *a;
     int       *asub;
diff --git a/SRC/zpivotL.c b/SRC/zpivotL.c
index 20aacda..ce4f513 100644
--- a/SRC/zpivotL.c
+++ b/SRC/zpivotL.c
@@ -1,23 +1,26 @@
 
-/*
+/*! @file zpivotL.c
+ * \brief Performs numerical pivoting
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include <math.h>
 #include <stdlib.h>
@@ -25,20 +28,9 @@
 
 #undef DEBUG
 
-int
-zpivotL(
-        const int  jcol,     /* in */
-        const double u,      /* in - diagonal pivoting threshold */
-        int        *usepr,   /* re-use the pivot sequence given by perm_r/iperm_r */
-        int        *perm_r,  /* may be modified */
-        int        *iperm_r, /* in - inverse of perm_r */
-        int        *iperm_c, /* in - used to find diagonal of Pc*A*Pc' */
-        int        *pivrow,  /* out */
-        GlobalLU_t *Glu,     /* modified - global LU data structures */
-	SuperLUStat_t *stat  /* output */
-       )
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *   Performs the numerical pivoting on the current column of L,
@@ -57,8 +49,23 @@ zpivotL(
  *
  *   Return value: 0      success;
  *                 i > 0  U(i,i) is exactly zero.
- *
+ * </pre>
  */
+
+int
+zpivotL(
+        const int  jcol,     /* in */
+        const double u,      /* in - diagonal pivoting threshold */
+        int        *usepr,   /* re-use the pivot sequence given by perm_r/iperm_r */
+        int        *perm_r,  /* may be modified */
+        int        *iperm_r, /* in - inverse of perm_r */
+        int        *iperm_c, /* in - used to find diagonal of Pc*A*Pc' */
+        int        *pivrow,  /* out */
+        GlobalLU_t *Glu,     /* modified - global LU data structures */
+	SuperLUStat_t *stat  /* output */
+       )
+{
+
     doublecomplex one = {1.0, 0.0};
     int          fsupc;	    /* first column in the supernode */
     int          nsupc;	    /* no of columns in the supernode */
@@ -117,8 +124,12 @@ if ( jcol == MIN_COL ) {
 
     /* Test for singularity */
     if ( pivmax == 0.0 ) {
+#if 1
 	*pivrow = lsub_ptr[pivptr];
 	perm_r[*pivrow] = jcol;
+#else
+	perm_r[diagind] = jcol;
+#endif
 	*usepr = 0;
 	return (jcol+1);
     }
diff --git a/SRC/zpivotgrowth.c b/SRC/zpivotgrowth.c
index b8afeef..1b3ebed 100644
--- a/SRC/zpivotgrowth.c
+++ b/SRC/zpivotgrowth.c
@@ -1,19 +1,20 @@
 
-/*
+/*! @file zpivotgrowth.c
+ * \brief Computes the reciprocal pivot growth factor
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 #include <math.h>
 #include "slu_zdefs.h"
 
-double
-zPivotGrowth(int ncols, SuperMatrix *A, int *perm_c, 
-             SuperMatrix *L, SuperMatrix *U)
-{
-/*
+/*! \brief
+ *
+ * <pre>
  * Purpose
  * =======
  *
@@ -41,8 +42,14 @@ zPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
  *	    The factor U from the factorization Pr*A*Pc=L*U. Use column-wise
  *          storage scheme, i.e., U has types: Stype = NC;
  *          Dtype = SLU_Z; Mtype = TRU.
- *
+ * </pre>
  */
+
+double
+zPivotGrowth(int ncols, SuperMatrix *A, int *perm_c, 
+             SuperMatrix *L, SuperMatrix *U)
+{
+
     NCformat *Astore;
     SCformat *Lstore;
     NCformat *Ustore;
@@ -51,7 +58,6 @@ zPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
     int      i, j, k, oldcol;
     int      *inv_perm_c;
     double   rpg, maxaj, maxuj;
-    extern   double dlamch_(char *);
     double   smlnum;
     doublecomplex   *luval;
     doublecomplex   temp_comp;
diff --git a/SRC/zpruneL.c b/SRC/zpruneL.c
index 25d003c..8aa7081 100644
--- a/SRC/zpruneL.c
+++ b/SRC/zpruneL.c
@@ -1,26 +1,39 @@
 
-/*
+/*! @file zpruneL.c
+ * \brief Prunes the L-structure
+ *
+ *<pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ *</pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_zdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *   Prunes the L-structure of supernodes whose L-structure
+ *   contains the current pivot row "pivrow"
+ * </pre>
+ */
+
 void
 zpruneL(
        const int  jcol,	     /* in */
@@ -33,13 +46,7 @@ zpruneL(
        GlobalLU_t *Glu       /* modified - global LU data structures */
        )
 {
-/*
- * Purpose
- * =======
- *   Prunes the L-structure of supernodes whose L-structure
- *   contains the current pivot row "pivrow"
- *
- */
+
     doublecomplex     utemp;
     int        jsupno, irep, irep1, kmin, kmax, krow, movnum;
     int        i, ktemp, minloc, maxloc;
@@ -106,8 +113,8 @@ zpruneL(
 			kmax--;
 		    else if ( perm_r[lsub[kmin]] != EMPTY )
 			kmin++;
-		    else { /* kmin below pivrow, and kmax above pivrow: 
-		            * 	interchange the two subscripts
+		    else { /* kmin below pivrow (not yet pivoted), and kmax
+                            * above pivrow: interchange the two subscripts
 			    */
 		        ktemp = lsub[kmin];
 		        lsub[kmin] = lsub[kmax];
diff --git a/SRC/zreadhb.c b/SRC/zreadhb.c
index fcccab6..3128228 100644
--- a/SRC/zreadhb.c
+++ b/SRC/zreadhb.c
@@ -1,17 +1,85 @@
 
-/*
+/*! @file zreadhb.c
+ * \brief Read a matrix stored in Harwell-Boeing format
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Purpose
+ * =======
+ * 
+ * Read a DOUBLE COMPLEX PRECISION matrix stored in Harwell-Boeing format 
+ * as described below.
+ * 
+ * Line 1 (A72,A8) 
+ *  	Col. 1 - 72   Title (TITLE) 
+ *	Col. 73 - 80  Key (KEY) 
+ * 
+ * Line 2 (5I14) 
+ * 	Col. 1 - 14   Total number of lines excluding header (TOTCRD) 
+ * 	Col. 15 - 28  Number of lines for pointers (PTRCRD) 
+ * 	Col. 29 - 42  Number of lines for row (or variable) indices (INDCRD) 
+ * 	Col. 43 - 56  Number of lines for numerical values (VALCRD) 
+ *	Col. 57 - 70  Number of lines for right-hand sides (RHSCRD) 
+ *                    (including starting guesses and solution vectors 
+ *		       if present) 
+ *           	      (zero indicates no right-hand side data is present) 
+ *
+ * Line 3 (A3, 11X, 4I14) 
+ *   	Col. 1 - 3    Matrix type (see below) (MXTYPE) 
+ * 	Col. 15 - 28  Number of rows (or variables) (NROW) 
+ * 	Col. 29 - 42  Number of columns (or elements) (NCOL) 
+ *	Col. 43 - 56  Number of row (or variable) indices (NNZERO) 
+ *	              (equal to number of entries for assembled matrices) 
+ * 	Col. 57 - 70  Number of elemental matrix entries (NELTVL) 
+ *	              (zero in the case of assembled matrices) 
+ * Line 4 (2A16, 2A20) 
+ * 	Col. 1 - 16   Format for pointers (PTRFMT) 
+ *	Col. 17 - 32  Format for row (or variable) indices (INDFMT) 
+ *	Col. 33 - 52  Format for numerical values of coefficient matrix (VALFMT) 
+ * 	Col. 53 - 72 Format for numerical values of right-hand sides (RHSFMT) 
+ *
+ * Line 5 (A3, 11X, 2I14) Only present if there are right-hand sides present 
+ *    	Col. 1 	      Right-hand side type: 
+ *	         	  F for full storage or M for same format as matrix 
+ *    	Col. 2        G if a starting vector(s) (Guess) is supplied. (RHSTYP) 
+ *    	Col. 3        X if an exact solution vector(s) is supplied. 
+ *	Col. 15 - 28  Number of right-hand sides (NRHS) 
+ *	Col. 29 - 42  Number of row indices (NRHSIX) 
+ *          	      (ignored in case of unassembled matrices) 
+ *
+ * The three character type field on line 3 describes the matrix type. 
+ * The following table lists the permitted values for each of the three 
+ * characters. As an example of the type field, RSA denotes that the matrix 
+ * is real, symmetric, and assembled. 
+ *
+ * First Character: 
+ *	R Real matrix 
+ *	C Complex matrix 
+ *	P Pattern only (no numerical values supplied) 
+ *
+ * Second Character: 
+ *	S Symmetric 
+ *	U Unsymmetric 
+ *	H Hermitian 
+ *	Z Skew symmetric 
+ *	R Rectangular 
+ *
+ * Third Character: 
+ *	A Assembled 
+ *	E Elemental matrices (unassembled) 
+ *
+ * </pre>
  */
 #include <stdio.h>
 #include <stdlib.h>
 #include "slu_zdefs.h"
 
 
-/* Eat up the rest of the current line */
+/*! \brief Eat up the rest of the current line */
 int zDumpLine(FILE *fp)
 {
     register int c;
@@ -59,7 +127,7 @@ int zParseFloatFormat(char *buf, int *num, int *size)
     return 0;
 }
 
-int zReadVector(FILE *fp, int n, int *where, int perline, int persize)
+static int ReadVector(FILE *fp, int n, int *where, int perline, int persize)
 {
     register int i, j, item;
     char tmp, buf[100];
@@ -79,7 +147,7 @@ int zReadVector(FILE *fp, int n, int *where, int perline, int persize)
     return 0;
 }
 
-/* Read complex numbers as pairs of (real, imaginary) */
+/*! \brief Read complex numbers as pairs of (real, imaginary) */
 int zReadValues(FILE *fp, int n, doublecomplex *destination, int perline, int persize)
 {
     register int i, j, k, s, pair;
@@ -117,72 +185,6 @@ void
 zreadhb(int *nrow, int *ncol, int *nonz,
 	doublecomplex **nzval, int **rowind, int **colptr)
 {
-/* 
- * Purpose
- * =======
- * 
- * Read a DOUBLE COMPLEX PRECISION matrix stored in Harwell-Boeing format 
- * as described below.
- * 
- * Line 1 (A72,A8) 
- *  	Col. 1 - 72   Title (TITLE) 
- *	Col. 73 - 80  Key (KEY) 
- * 
- * Line 2 (5I14) 
- * 	Col. 1 - 14   Total number of lines excluding header (TOTCRD) 
- * 	Col. 15 - 28  Number of lines for pointers (PTRCRD) 
- * 	Col. 29 - 42  Number of lines for row (or variable) indices (INDCRD) 
- * 	Col. 43 - 56  Number of lines for numerical values (VALCRD) 
- *	Col. 57 - 70  Number of lines for right-hand sides (RHSCRD) 
- *                    (including starting guesses and solution vectors 
- *		       if present) 
- *           	      (zero indicates no right-hand side data is present) 
- *
- * Line 3 (A3, 11X, 4I14) 
- *   	Col. 1 - 3    Matrix type (see below) (MXTYPE) 
- * 	Col. 15 - 28  Number of rows (or variables) (NROW) 
- * 	Col. 29 - 42  Number of columns (or elements) (NCOL) 
- *	Col. 43 - 56  Number of row (or variable) indices (NNZERO) 
- *	              (equal to number of entries for assembled matrices) 
- * 	Col. 57 - 70  Number of elemental matrix entries (NELTVL) 
- *	              (zero in the case of assembled matrices) 
- * Line 4 (2A16, 2A20) 
- * 	Col. 1 - 16   Format for pointers (PTRFMT) 
- *	Col. 17 - 32  Format for row (or variable) indices (INDFMT) 
- *	Col. 33 - 52  Format for numerical values of coefficient matrix (VALFMT) 
- * 	Col. 53 - 72 Format for numerical values of right-hand sides (RHSFMT) 
- *
- * Line 5 (A3, 11X, 2I14) Only present if there are right-hand sides present 
- *    	Col. 1 	      Right-hand side type: 
- *	         	  F for full storage or M for same format as matrix 
- *    	Col. 2        G if a starting vector(s) (Guess) is supplied. (RHSTYP) 
- *    	Col. 3        X if an exact solution vector(s) is supplied. 
- *	Col. 15 - 28  Number of right-hand sides (NRHS) 
- *	Col. 29 - 42  Number of row indices (NRHSIX) 
- *          	      (ignored in case of unassembled matrices) 
- *
- * The three character type field on line 3 describes the matrix type. 
- * The following table lists the permitted values for each of the three 
- * characters. As an example of the type field, RSA denotes that the matrix 
- * is real, symmetric, and assembled. 
- *
- * First Character: 
- *	R Real matrix 
- *	C Complex matrix 
- *	P Pattern only (no numerical values supplied) 
- *
- * Second Character: 
- *	S Symmetric 
- *	U Unsymmetric 
- *	H Hermitian 
- *	Z Skew symmetric 
- *	R Rectangular 
- *
- * Third Character: 
- *	A Assembled 
- *	E Elemental matrices (unassembled) 
- *
- */
 
     register int i, numer_lines = 0, rhscrd = 0;
     int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
@@ -253,8 +255,8 @@ zreadhb(int *nrow, int *ncol, int *nonz,
     printf("valnum %d, valsize %d\n", valnum, valsize);
 #endif
     
-    zReadVector(fp, *ncol+1, *colptr, colnum, colsize);
-    zReadVector(fp, *nonz, *rowind, rownum, rowsize);
+    ReadVector(fp, *ncol+1, *colptr, colnum, colsize);
+    ReadVector(fp, *nonz, *rowind, rownum, rowsize);
     if ( numer_lines ) {
         zReadValues(fp, *nonz, *nzval, valnum, valsize);
     }
diff --git a/SRC/zreadrb.c b/SRC/zreadrb.c
new file mode 100644
index 0000000..e297e26
--- /dev/null
+++ b/SRC/zreadrb.c
@@ -0,0 +1,246 @@
+
+/*! @file zreadrb.c
+ * \brief Read a matrix stored in Rutherford-Boeing format
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ *
+ * Purpose
+ * =======
+ *
+ * Read a DOUBLE COMPLEX PRECISION matrix stored in Rutherford-Boeing format 
+ * as described below.
+ *
+ * Line 1 (A72, A8)
+ *      Col. 1 - 72   Title (TITLE)
+ *      Col. 73 - 80  Matrix name / identifier (MTRXID)
+ *
+ * Line 2 (I14, 3(1X, I13))
+ *      Col. 1 - 14   Total number of lines excluding header (TOTCRD)
+ *      Col. 16 - 28  Number of lines for pointers (PTRCRD)
+ *      Col. 30 - 42  Number of lines for row (or variable) indices (INDCRD)
+ *      Col. 44 - 56  Number of lines for numerical values (VALCRD)
+ *
+ * Line 3 (A3, 11X, 4(1X, I13))
+ *      Col. 1 - 3    Matrix type (see below) (MXTYPE)
+ *      Col. 15 - 28  Compressed Column: Number of rows (NROW)
+ *                    Elemental: Largest integer used to index variable (MVAR)
+ *      Col. 30 - 42  Compressed Column: Number of columns (NCOL)
+ *                    Elemental: Number of element matrices (NELT)
+ *      Col. 44 - 56  Compressed Column: Number of entries (NNZERO)
+ *                    Elemental: Number of variable indeces (NVARIX)
+ *      Col. 58 - 70  Compressed Column: Unused, explicitly zero
+ *                    Elemental: Number of elemental matrix entries (NELTVL)
+ *
+ * Line 4 (2A16, A20)
+ *      Col. 1 - 16   Fortran format for pointers (PTRFMT)
+ *      Col. 17 - 32  Fortran format for row (or variable) indices (INDFMT)
+ *      Col. 33 - 52  Fortran format for numerical values of coefficient matrix
+ *                    (VALFMT)
+ *                    (blank in the case of matrix patterns)
+ *
+ * The three character type field on line 3 describes the matrix type.
+ * The following table lists the permitted values for each of the three
+ * characters. As an example of the type field, RSA denotes that the matrix
+ * is real, symmetric, and assembled.
+ *
+ * First Character:
+ *      R Real matrix
+ *      C Complex matrix
+ *      I integer matrix
+ *      P Pattern only (no numerical values supplied)
+ *      Q Pattern only (numerical values supplied in associated auxiliary value
+ *        file)
+ *
+ * Second Character:
+ *      S Symmetric
+ *      U Unsymmetric
+ *      H Hermitian
+ *      Z Skew symmetric
+ *      R Rectangular
+ *
+ * Third Character:
+ *      A Compressed column form
+ *      E Elemental form
+ *
+ * </pre>
+ */
+
+#include "slu_zdefs.h"
+
+
+/*! \brief Eat up the rest of the current line */
+static int zDumpLine(FILE *fp)
+{
+    register int c;
+    while ((c = fgetc(fp)) != '\n') ;
+    return 0;
+}
+
+static int zParseIntFormat(char *buf, int *num, int *size)
+{
+    char *tmp;
+
+    tmp = buf;
+    while (*tmp++ != '(') ;
+    sscanf(tmp, "%d", num);
+    while (*tmp != 'I' && *tmp != 'i') ++tmp;
+    ++tmp;
+    sscanf(tmp, "%d", size);
+    return 0;
+}
+
+static int zParseFloatFormat(char *buf, int *num, int *size)
+{
+    char *tmp, *period;
+
+    tmp = buf;
+    while (*tmp++ != '(') ;
+    *num = atoi(tmp); /*sscanf(tmp, "%d", num);*/
+    while (*tmp != 'E' && *tmp != 'e' && *tmp != 'D' && *tmp != 'd'
+           && *tmp != 'F' && *tmp != 'f') {
+        /* May find kP before nE/nD/nF, like (1P6F13.6). In this case the
+           num picked up refers to P, which should be skipped. */
+        if (*tmp=='p' || *tmp=='P') {
+           ++tmp;
+           *num = atoi(tmp); /*sscanf(tmp, "%d", num);*/
+        } else {
+           ++tmp;
+        }
+    }
+    ++tmp;
+    period = tmp;
+    while (*period != '.' && *period != ')') ++period ;
+    *period = '\0';
+    *size = atoi(tmp); /*sscanf(tmp, "%2d", size);*/
+
+    return 0;
+}
+
+static int ReadVector(FILE *fp, int n, int *where, int perline, int persize)
+{
+    register int i, j, item;
+    char tmp, buf[100];
+
+    i = 0;
+    while (i < n) {
+        fgets(buf, 100, fp);    /* read a line at a time */
+        for (j=0; j<perline && i<n; j++) {
+            tmp = buf[(j+1)*persize];     /* save the char at that place */
+            buf[(j+1)*persize] = 0;       /* null terminate */
+            item = atoi(&buf[j*persize]); 
+            buf[(j+1)*persize] = tmp;     /* recover the char at that place */
+            where[i++] = item - 1;
+        }
+    }
+
+    return 0;
+}
+
+/*! \brief Read complex numbers as pairs of (real, imaginary) */
+static int zReadValues(FILE *fp, int n, doublecomplex *destination, int perline, int persize)
+{
+    register int i, j, k, s, pair;
+    register double realpart;
+    char tmp, buf[100];
+    
+    i = pair = 0;
+    while (i < n) {
+	fgets(buf, 100, fp);    /* read a line at a time */
+	for (j=0; j<perline && i<n; j++) {
+	    tmp = buf[(j+1)*persize];     /* save the char at that place */
+	    buf[(j+1)*persize] = 0;       /* null terminate */
+	    s = j*persize;
+	    for (k = 0; k < persize; ++k) /* No D_ format in C */
+		if ( buf[s+k] == 'D' || buf[s+k] == 'd' ) buf[s+k] = 'E';
+	    if ( pair == 0 ) {
+	  	/* The value is real part */
+		realpart = atof(&buf[s]);
+		pair = 1;
+	    } else {
+		/* The value is imaginary part */
+	        destination[i].r = realpart;
+		destination[i++].i = atof(&buf[s]);
+		pair = 0;
+	    }
+	    buf[(j+1)*persize] = tmp;     /* recover the char at that place */
+	}
+    }
+
+    return 0;
+}
+
+
+void
+zreadrb(int *nrow, int *ncol, int *nonz,
+        doublecomplex **nzval, int **rowind, int **colptr)
+{
+
+    register int i, numer_lines = 0;
+    int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
+    char buf[100], type[4];
+    FILE *fp;
+
+    fp = stdin;
+
+    /* Line 1 */
+    fgets(buf, 100, fp);
+    fputs(buf, stdout);
+
+    /* Line 2 */
+    for (i=0; i<4; i++) {
+        fscanf(fp, "%14c", buf); buf[14] = 0;
+        sscanf(buf, "%d", &tmp);
+        if (i == 3) numer_lines = tmp;
+    }
+    zDumpLine(fp);
+
+    /* Line 3 */
+    fscanf(fp, "%3c", type);
+    fscanf(fp, "%11c", buf); /* pad */
+    type[3] = 0;
+#ifdef DEBUG
+    printf("Matrix type %s\n", type);
+#endif
+
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", nrow);
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", ncol);
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", nonz);
+    fscanf(fp, "%14c", buf); sscanf(buf, "%d", &tmp);
+
+    if (tmp != 0)
+        printf("This is not an assembled matrix!\n");
+    if (*nrow != *ncol)
+        printf("Matrix is not square.\n");
+    zDumpLine(fp);
+
+    /* Allocate storage for the three arrays ( nzval, rowind, colptr ) */
+    zallocateA(*ncol, *nonz, nzval, rowind, colptr);
+
+    /* Line 4: format statement */
+    fscanf(fp, "%16c", buf);
+    zParseIntFormat(buf, &colnum, &colsize);
+    fscanf(fp, "%16c", buf);
+    zParseIntFormat(buf, &rownum, &rowsize);
+    fscanf(fp, "%20c", buf);
+    zParseFloatFormat(buf, &valnum, &valsize);
+    zDumpLine(fp);
+
+#ifdef DEBUG
+    printf("%d rows, %d nonzeros\n", *nrow, *nonz);
+    printf("colnum %d, colsize %d\n", colnum, colsize);
+    printf("rownum %d, rowsize %d\n", rownum, rowsize);
+    printf("valnum %d, valsize %d\n", valnum, valsize);
+#endif
+
+    ReadVector(fp, *ncol+1, *colptr, colnum, colsize);
+    ReadVector(fp, *nonz, *rowind, rownum, rowsize);
+    if ( numer_lines ) {
+        zReadValues(fp, *nonz, *nzval, valnum, valsize);
+    }
+
+    fclose(fp);
+}
diff --git a/EXAMPLE/zreadtriple.c b/SRC/zreadtriple.c
similarity index 50%
rename from EXAMPLE/zreadtriple.c
rename to SRC/zreadtriple.c
index ee0ac57..624b85b 100644
--- a/EXAMPLE/zreadtriple.c
+++ b/SRC/zreadtriple.c
@@ -1,8 +1,15 @@
 
-#include <stdio.h>
-#include <stdlib.h>
-#include "zsp_defs.h"
-#include "util.h"
+/*! @file zreadtriple.c
+ * \brief Read a matrix stored in triplet (coordinate) format
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+
+#include "slu_zdefs.h"
 
 
 void
@@ -17,20 +24,20 @@ zreadtriple(int *m, int *n, int *nonz,
  *	row i of A is given by a[k],k=xa[i],...,xa[i+1]-1.
  *
  */
-    int    i, j, k, jsize, nz, lasta;
+    int    j, k, jsize, nnz, nz;
     doublecomplex *a, *val;
     int    *asub, *xa, *row, *col;
-    
-    /* 	Matrix format:
+    int    zero_base = 0;
+
+    /*  Matrix format:
      *    First line:  #rows, #cols, #non-zero
      *    Triplet in the rest of lines:
      *                 row, col, value
      */
 
-    scanf("%d%d%d", m, n, nonz);
-#ifdef DEBUG
-    printf("zreadtriple(): *m %d, *n %d, *nonz, %d\n", *m, *n, *nonz);
-#endif
+    scanf("%d%d", n, nonz);
+    *m = *n;
+    printf("m %d, n %d, nonz %d\n", *m, *n, *nonz);
     zallocateA(*n, *nonz, nzval, rowind, colptr); /* Allocate storage */
     a    = *nzval;
     asub = *rowind;
@@ -40,17 +47,39 @@ zreadtriple(int *m, int *n, int *nonz,
     row = (int *) SUPERLU_MALLOC(*nonz * sizeof(int));
     col = (int *) SUPERLU_MALLOC(*nonz * sizeof(int));
 
+    for (j = 0; j < *n; ++j) xa[j] = 0;
+
     /* Read into the triplet array from a file */
-    for (i = 0; i < *n+1; ++i) xa[i] = 0;
-    for (nz = 0; nz < *nonz; ++nz) {
+    for (nnz = 0, nz = 0; nnz < *nonz; ++nnz) {
 	scanf("%d%d%lf%lf\n", &row[nz], &col[nz], &val[nz].r, &val[nz].i);
-	if (row[nz] < 0 || row[nz] >= *m || col[nz] < 0 || col[nz] >= *n) {
-	    fprintf(stderr, "(%d, %d) out of bound!\n", row[nz], col[nz]);
-	    exit (-1);
+
+        if ( nnz == 0 ) { /* first nonzero */
+	    if ( row[0] == 0 || col[0] == 0 ) {
+		zero_base = 1;
+		printf("triplet file: row/col indices are zero-based.\n");
+	    } else
+		printf("triplet file: row/col indices are one-based.\n");
+        }
+
+        if ( !zero_base ) { 
+ 	  /* Change to 0-based indexing. */
+	  --row[nz];
+	  --col[nz];
+        }
+
+	if (row[nz] < 0 || row[nz] >= *m || col[nz] < 0 || col[nz] >= *n
+	    /*|| val[nz] == 0.*/) {
+	    fprintf(stderr, "nz %d, (%d, %d) = (%e,%e) out of bound, removed\n",
+		    nz, row[nz], col[nz], val[nz].r, val[nz].i);
+	    exit(-1);
+	} else {
+	    ++xa[col[nz]];
+	    ++nz;
 	}
-	++xa[col[nz]]; /* Count number of nonzeros in each column */
     }
 
+    *nonz = nz;
+
     /* Initialize the array of column pointers */
     k = 0;
     jsize = xa[0];
@@ -80,11 +109,32 @@ zreadtriple(int *m, int *n, int *nonz,
     SUPERLU_FREE(col);
 
 #ifdef CHK_INPUT
-    for (i = 0; i < *n; i++) {
-	printf("Col %d, xa %d\n", i, xa[i]);
-	for (k = xa[i]; k < xa[i+1]; k++)
-	    printf("%d\t%16.10f\n", asub[k], a[k]);
+    {
+	int i;
+	for (i = 0; i < *n; i++) {
+	    printf("Col %d, xa %d\n", i, xa[i]);
+	    for (k = xa[i]; k < xa[i+1]; k++)
+		printf("%d\t%16.10f\n", asub[k], a[k]);
+	}
     }
 #endif
 
 }
+
+
+void zreadrhs(int m, doublecomplex *b)
+{
+    FILE *fp, *fopen();
+    int i;
+    /*int j;*/
+
+    if ( !(fp = fopen("b.dat", "r")) ) {
+        fprintf(stderr, "dreadrhs: file does not exist\n");
+	exit(-1);
+    }
+    for (i = 0; i < m; ++i)
+      fscanf(fp, "%lf%lf\n", &b[i].r, &b[i].i);
+
+    /*        readpair_(j, &b[i]);*/
+    fclose(fp);
+}
diff --git a/SRC/zsnode_bmod.c b/SRC/zsnode_bmod.c
index c36d0fa..f760517 100644
--- a/SRC/zsnode_bmod.c
+++ b/SRC/zsnode_bmod.c
@@ -1,29 +1,31 @@
 
-/*
+/*! @file zsnode_bmod.c
+ * \brief Performs numeric block updates within the relaxed snode.
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_zdefs.h"
 
 
-/*
- * Performs numeric block updates within the relaxed snode. 
+/*! \brief Performs numeric block updates within the relaxed snode. 
  */
 int
 zsnode_bmod (
diff --git a/SRC/zsnode_dfs.c b/SRC/zsnode_dfs.c
index a6bab8f..247b1a4 100644
--- a/SRC/zsnode_dfs.c
+++ b/SRC/zsnode_dfs.c
@@ -1,26 +1,46 @@
 
-/*
+/*! @file zsnode_dfs.c
+ * \brief Determines the union of row structures of columns within the relaxed node
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
  *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include "slu_zdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *    zsnode_dfs() - Determine the union of the row structures of those 
+ *    columns within the relaxed snode.
+ *    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
+ *    the portion outside the rectangular supernode must be zero.
+ *
+ * Return value
+ * ============
+ *     0   success;
+ *    >0   number of bytes allocated when run out of memory.
+ * </pre>
+ */
+
 int
 zsnode_dfs (
 	   const int  jcol,	    /* in - start of the supernode */
@@ -33,19 +53,7 @@ zsnode_dfs (
 	   GlobalLU_t *Glu          /* modified */
 	   )
 {
-/* Purpose
- * =======
- *    zsnode_dfs() - Determine the union of the row structures of those 
- *    columns within the relaxed snode.
- *    Note: The relaxed snodes are leaves of the supernodal etree, therefore, 
- *    the portion outside the rectangular supernode must be zero.
- *
- * Return value
- * ============
- *     0   success;
- *    >0   number of bytes allocated when run out of memory.
- *
- */
+
     register int i, k, ifrom, ito, nextl, new_next;
     int          nsuper, krow, kmark, mem_error;
     int          *xsup, *supno;
diff --git a/SRC/zsp_blas2.c b/SRC/zsp_blas2.c
index e94c519..58500fd 100644
--- a/SRC/zsp_blas2.c
+++ b/SRC/zsp_blas2.c
@@ -1,10 +1,13 @@
 
-/*
+/*! @file zsp_blas2.c
+ * \brief Sparse BLAS 2, using some dense BLAS 2 operations
+ *
+ * <pre>
  * -- SuperLU routine (version 3.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * October 15, 2003
- *
+ * </pre>
  */
 /*
  * File name:		zsp_blas2.c
@@ -20,12 +23,9 @@ void zusolve(int, int, doublecomplex*, doublecomplex*);
 void zlsolve(int, int, doublecomplex*, doublecomplex*);
 void zmatvec(int, int, int, doublecomplex*, doublecomplex*, doublecomplex*);
 
-
-int
-sp_ztrsv(char *uplo, char *trans, char *diag, SuperMatrix *L, 
-         SuperMatrix *U, doublecomplex *x, SuperLUStat_t *stat, int *info)
-{
-/*
+/*! \brief Solves one of the systems of equations A*x = b,   or   A'*x = b
+ * 
+ * <pre>
  *   Purpose
  *   =======
  *
@@ -75,8 +75,12 @@ sp_ztrsv(char *uplo, char *trans, char *diag, SuperMatrix *L,
  *
  *   info    - (output) int*
  *             If *info = -i, the i-th argument had an illegal value.
- *
+ * </pre>
  */
+int
+sp_ztrsv(char *uplo, char *trans, char *diag, SuperMatrix *L, 
+         SuperMatrix *U, doublecomplex *x, SuperLUStat_t *stat, int *info)
+{
 #ifdef _CRAY
     _fcd ftcs1 = _cptofcd("L", strlen("L")),
 	 ftcs2 = _cptofcd("N", strlen("N")),
@@ -390,64 +394,68 @@ sp_ztrsv(char *uplo, char *trans, char *diag, SuperMatrix *L,
 
 
 
+/*! \brief Performs one of the matrix-vector operations y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y
+ *
+ * <pre>  
+ *   Purpose   
+ *   =======   
+ *
+ *   sp_zgemv()  performs one of the matrix-vector operations   
+ *      y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
+ *   where alpha and beta are scalars, x and y are vectors and A is a
+ *   sparse A->nrow by A->ncol matrix.   
+ *
+ *   Parameters   
+ *   ==========   
+ *
+ *   TRANS  - (input) char*
+ *            On entry, TRANS specifies the operation to be performed as   
+ *            follows:   
+ *               TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
+ *               TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
+ *               TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.   
+ *
+ *   ALPHA  - (input) doublecomplex
+ *            On entry, ALPHA specifies the scalar alpha.   
+ *
+ *   A      - (input) SuperMatrix*
+ *            Before entry, the leading m by n part of the array A must   
+ *            contain the matrix of coefficients.   
+ *
+ *   X      - (input) doublecomplex*, array of DIMENSION at least   
+ *            ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
+ *           and at least   
+ *            ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
+ *            Before entry, the incremented array X must contain the   
+ *            vector x.   
+ * 
+ *   INCX   - (input) int
+ *            On entry, INCX specifies the increment for the elements of   
+ *            X. INCX must not be zero.   
+ *
+ *   BETA   - (input) doublecomplex
+ *            On entry, BETA specifies the scalar beta. When BETA is   
+ *            supplied as zero then Y need not be set on input.   
+ *
+ *   Y      - (output) doublecomplex*,  array of DIMENSION at least   
+ *            ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
+ *            and at least   
+ *            ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
+ *            Before entry with BETA non-zero, the incremented array Y   
+ *            must contain the vector y. On exit, Y is overwritten by the 
+ *            updated vector y.
+ *	      
+ *   INCY   - (input) int
+ *            On entry, INCY specifies the increment for the elements of   
+ *            Y. INCY must not be zero.   
+ *
+ *    ==== Sparse Level 2 Blas routine.   
+ * </pre>
+*/
 int
 sp_zgemv(char *trans, doublecomplex alpha, SuperMatrix *A, doublecomplex *x, 
 	 int incx, doublecomplex beta, doublecomplex *y, int incy)
 {
-/*  Purpose   
-    =======   
-
-    sp_zgemv()  performs one of the matrix-vector operations   
-       y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   
-    where alpha and beta are scalars, x and y are vectors and A is a
-    sparse A->nrow by A->ncol matrix.   
-
-    Parameters   
-    ==========   
-
-    TRANS  - (input) char*
-             On entry, TRANS specifies the operation to be performed as   
-             follows:   
-                TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.   
-                TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.   
-                TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.   
-
-    ALPHA  - (input) doublecomplex
-             On entry, ALPHA specifies the scalar alpha.   
-
-    A      - (input) SuperMatrix*
-             Before entry, the leading m by n part of the array A must   
-             contain the matrix of coefficients.   
-
-    X      - (input) doublecomplex*, array of DIMENSION at least   
-             ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'   
-             and at least   
-             ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.   
-             Before entry, the incremented array X must contain the   
-             vector x.   
-
-    INCX   - (input) int
-             On entry, INCX specifies the increment for the elements of   
-             X. INCX must not be zero.   
-
-    BETA   - (input) doublecomplex
-             On entry, BETA specifies the scalar beta. When BETA is   
-             supplied as zero then Y need not be set on input.   
-
-    Y      - (output) doublecomplex*,  array of DIMENSION at least   
-             ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'   
-             and at least   
-             ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.   
-             Before entry with BETA non-zero, the incremented array Y   
-             must contain the vector y. On exit, Y is overwritten by the 
-             updated vector y.
-	     
-    INCY   - (input) int
-             On entry, INCY specifies the increment for the elements of   
-             Y. INCY must not be zero.   
-
-    ==== Sparse Level 2 Blas routine.   
-*/
 
     /* Local variables */
     NCformat *Astore;
diff --git a/SRC/zsp_blas3.c b/SRC/zsp_blas3.c
index 5dddf5a..0e1a5c2 100644
--- a/SRC/zsp_blas3.c
+++ b/SRC/zsp_blas3.c
@@ -1,10 +1,13 @@
 
-/*
+/*! @file zsp_blas3.c
+ * \brief Sparse BLAS3, using some dense BLAS3 operations
+ *
+ * <pre>
  * -- SuperLU routine (version 2.0) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
  * November 15, 1997
- *
+ * </pre>
  */
 /*
  * File name:		sp_blas3.c
@@ -13,102 +16,107 @@
 
 #include "slu_zdefs.h"
 
+/*! \brief
+ *
+ * <pre>
+ * Purpose   
+ *   =======   
+ * 
+ *   sp_z performs one of the matrix-matrix operations   
+ * 
+ *      C := alpha*op( A )*op( B ) + beta*C,   
+ * 
+ *   where  op( X ) is one of 
+ * 
+ *      op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),
+ * 
+ *   alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
+ *   an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix. 
+ *   
+ * 
+ *   Parameters   
+ *   ==========   
+ * 
+ *   TRANSA - (input) char*
+ *            On entry, TRANSA specifies the form of op( A ) to be used in 
+ *            the matrix multiplication as follows:   
+ *               TRANSA = 'N' or 'n',  op( A ) = A.   
+ *               TRANSA = 'T' or 't',  op( A ) = A'.   
+ *               TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
+ *            Unchanged on exit.   
+ * 
+ *   TRANSB - (input) char*
+ *            On entry, TRANSB specifies the form of op( B ) to be used in 
+ *            the matrix multiplication as follows:   
+ *               TRANSB = 'N' or 'n',  op( B ) = B.   
+ *               TRANSB = 'T' or 't',  op( B ) = B'.   
+ *               TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
+ *            Unchanged on exit.   
+ * 
+ *   M      - (input) int   
+ *            On entry,  M  specifies  the number of rows of the matrix 
+ *	     op( A ) and of the matrix C.  M must be at least zero. 
+ *	     Unchanged on exit.   
+ * 
+ *   N      - (input) int
+ *            On entry,  N specifies the number of columns of the matrix 
+ *	     op( B ) and the number of columns of the matrix C. N must be 
+ *	     at least zero.
+ *	     Unchanged on exit.   
+ * 
+ *   K      - (input) int
+ *            On entry, K specifies the number of columns of the matrix 
+ *	     op( A ) and the number of rows of the matrix op( B ). K must 
+ *	     be at least  zero.   
+ *           Unchanged on exit.
+ *      
+ *   ALPHA  - (input) doublecomplex
+ *            On entry, ALPHA specifies the scalar alpha.   
+ * 
+ *   A      - (input) SuperMatrix*
+ *            Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
+ *            Currently, the type of A can be:
+ *                Stype = NC or NCP; Dtype = SLU_Z; Mtype = GE. 
+ *            In the future, more general A can be handled.
+ * 
+ *   B      - DOUBLE COMPLEX PRECISION array of DIMENSION ( LDB, kb ), where kb is 
+ *            n when TRANSB = 'N' or 'n',  and is  k otherwise.   
+ *            Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
+ *            part of the array B must contain the matrix B, otherwise 
+ *            the leading n by k part of the array B must contain the 
+ *            matrix B.   
+ *            Unchanged on exit.   
+ * 
+ *   LDB    - (input) int
+ *            On entry, LDB specifies the first dimension of B as declared 
+ *            in the calling (sub) program. LDB must be at least max( 1, n ).  
+ *            Unchanged on exit.   
+ * 
+ *   BETA   - (input) doublecomplex
+ *            On entry, BETA specifies the scalar beta. When BETA is   
+ *            supplied as zero then C need not be set on input.   
+ *  
+ *   C      - DOUBLE COMPLEX PRECISION array of DIMENSION ( LDC, n ).   
+ *            Before entry, the leading m by n part of the array C must 
+ *            contain the matrix C,  except when beta is zero, in which 
+ *            case C need not be set on entry.   
+ *            On exit, the array C is overwritten by the m by n matrix 
+ *	     ( alpha*op( A )*B + beta*C ).   
+ *  
+ *   LDC    - (input) int
+ *            On entry, LDC specifies the first dimension of C as declared 
+ *            in the calling (sub)program. LDC must be at least max(1,m).   
+ *            Unchanged on exit.   
+ *  
+ *   ==== Sparse Level 3 Blas routine.   
+ * </pre>
+ */
+
 int
 sp_zgemm(char *transa, char *transb, int m, int n, int k, 
          doublecomplex alpha, SuperMatrix *A, doublecomplex *b, int ldb, 
          doublecomplex beta, doublecomplex *c, int ldc)
 {
-/*  Purpose   
-    =======   
-
-    sp_z performs one of the matrix-matrix operations   
-
-       C := alpha*op( A )*op( B ) + beta*C,   
-
-    where  op( X ) is one of 
-
-       op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),
-
-    alpha and beta are scalars, and A, B and C are matrices, with op( A ) 
-    an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix. 
-  
-
-    Parameters   
-    ==========   
-
-    TRANSA - (input) char*
-             On entry, TRANSA specifies the form of op( A ) to be used in 
-             the matrix multiplication as follows:   
-                TRANSA = 'N' or 'n',  op( A ) = A.   
-                TRANSA = 'T' or 't',  op( A ) = A'.   
-                TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).   
-             Unchanged on exit.   
-
-    TRANSB - (input) char*
-             On entry, TRANSB specifies the form of op( B ) to be used in 
-             the matrix multiplication as follows:   
-                TRANSB = 'N' or 'n',  op( B ) = B.   
-                TRANSB = 'T' or 't',  op( B ) = B'.   
-                TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).   
-             Unchanged on exit.   
-
-    M      - (input) int   
-             On entry,  M  specifies  the number of rows of the matrix 
-	     op( A ) and of the matrix C.  M must be at least zero. 
-	     Unchanged on exit.   
-
-    N      - (input) int
-             On entry,  N specifies the number of columns of the matrix 
-	     op( B ) and the number of columns of the matrix C. N must be 
-	     at least zero.
-	     Unchanged on exit.   
-
-    K      - (input) int
-             On entry, K specifies the number of columns of the matrix 
-	     op( A ) and the number of rows of the matrix op( B ). K must 
-	     be at least  zero.   
-             Unchanged on exit.
-	     
-    ALPHA  - (input) doublecomplex
-             On entry, ALPHA specifies the scalar alpha.   
-
-    A      - (input) SuperMatrix*
-             Matrix A with a sparse format, of dimension (A->nrow, A->ncol).
-             Currently, the type of A can be:
-                 Stype = NC or NCP; Dtype = SLU_Z; Mtype = GE. 
-             In the future, more general A can be handled.
-
-    B      - DOUBLE COMPLEX PRECISION array of DIMENSION ( LDB, kb ), where kb is 
-             n when TRANSB = 'N' or 'n',  and is  k otherwise.   
-             Before entry with  TRANSB = 'N' or 'n',  the leading k by n 
-             part of the array B must contain the matrix B, otherwise 
-             the leading n by k part of the array B must contain the 
-             matrix B.   
-             Unchanged on exit.   
-
-    LDB    - (input) int
-             On entry, LDB specifies the first dimension of B as declared 
-             in the calling (sub) program. LDB must be at least max( 1, n ).  
-             Unchanged on exit.   
-
-    BETA   - (input) doublecomplex
-             On entry, BETA specifies the scalar beta. When BETA is   
-             supplied as zero then C need not be set on input.   
-
-    C      - DOUBLE COMPLEX PRECISION array of DIMENSION ( LDC, n ).   
-             Before entry, the leading m by n part of the array C must 
-             contain the matrix C,  except when beta is zero, in which 
-             case C need not be set on entry.   
-             On exit, the array C is overwritten by the m by n matrix 
-	     ( alpha*op( A )*B + beta*C ).   
-
-    LDC    - (input) int
-             On entry, LDC specifies the first dimension of C as declared 
-             in the calling (sub)program. LDC must be at least max(1,m).   
-             Unchanged on exit.   
-
-    ==== Sparse Level 3 Blas routine.   
-*/
     int    incx = 1, incy = 1;
     int    j;
 
diff --git a/SRC/zutil.c b/SRC/zutil.c
index 8e9dcba..f3c06cb 100644
--- a/SRC/zutil.c
+++ b/SRC/zutil.c
@@ -1,23 +1,26 @@
 
-/*
- * -- SuperLU routine (version 3.0) --
+/*! @file zutil.c
+ * \brief Matrix utility functions
+ *
+ * <pre>
+ * -- SuperLU routine (version 3.1) --
  * Univ. of California Berkeley, Xerox Palo Alto Research Center,
  * and Lawrence Berkeley National Lab.
- * October 15, 2003
+ * August 1, 2008
+ *
+ * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
  *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ * EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * 
+ * Permission is hereby granted to use or copy this program for any
+ * purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is
+ * granted, provided the above notices are retained, and a notice that
+ * the code was modified is included with the above copyright notice.
+ * </pre>
  */
-/*
-  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
- 
-  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
-  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- 
-  Permission is hereby granted to use or copy this program for any
-  purpose, provided the above notices are retained on all copies.
-  Permission to modify the code and to distribute modified code is
-  granted, provided the above notices are retained, and a notice that
-  the code was modified is included with the above copyright notice.
-*/
+
 
 #include <math.h>
 #include "slu_zdefs.h"
@@ -64,7 +67,7 @@ zCreate_CompRow_Matrix(SuperMatrix *A, int m, int n, int nnz,
     Astore->rowptr = rowptr;
 }
 
-/* Copy matrix A into matrix B. */
+/*! \brief Copy matrix A into matrix B. */
 void
 zCopy_CompCol_Matrix(SuperMatrix *A, SuperMatrix *B)
 {
@@ -108,12 +111,7 @@ void
 zCopy_Dense_Matrix(int M, int N, doublecomplex *X, int ldx,
 			doublecomplex *Y, int ldy)
 {
-/*
- *
- *  Purpose
- *  =======
- *
- *  Copies a two-dimensional matrix X to another matrix Y.
+/*! \brief Copies a two-dimensional matrix X to another matrix Y.
  */
     int    i, j;
     
@@ -150,8 +148,7 @@ zCreate_SuperNode_Matrix(SuperMatrix *L, int m, int n, int nnz,
 }
 
 
-/*
- * Convert a row compressed storage into a column compressed storage.
+/*! \brief Convert a row compressed storage into a column compressed storage.
  */
 void
 zCompRow_to_CompCol(int m, int n, int nnz, 
@@ -267,13 +264,12 @@ zPrint_SuperNode_Matrix(char *what, SuperMatrix *A)
 void
 zPrint_Dense_Matrix(char *what, SuperMatrix *A)
 {
-    DNformat     *Astore;
+    DNformat     *Astore = (DNformat *) A->Store;
     register int i, j, lda = Astore->lda;
     double       *dp;
     
     printf("\nDense matrix %s:\n", what);
     printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
-    Astore = (DNformat *) A->Store;
     dp = (double *) Astore->nzval;
     printf("nrow %d, ncol %d, lda %d\n", A->nrow,A->ncol,lda);
     printf("\nnzval: ");
@@ -285,8 +281,7 @@ zPrint_Dense_Matrix(char *what, SuperMatrix *A)
     fflush(stdout);
 }
 
-/*
- * Diagnostic print of column "jcol" in the U/L factor.
+/*! \brief Diagnostic print of column "jcol" in the U/L factor.
  */
 void
 zprint_lu_col(char *msg, int jcol, int pivrow, int *xprune, GlobalLU_t *Glu)
@@ -328,9 +323,7 @@ zprint_lu_col(char *msg, int jcol, int pivrow, int *xprune, GlobalLU_t *Glu)
 }
 
 
-/*
- * Check whether tempv[] == 0. This should be true before and after 
- * calling any numeric routines, i.e., "panel_bmod" and "column_bmod". 
+/*! \brief Check whether tempv[] == 0. This should be true before and after calling any numeric routines, i.e., "panel_bmod" and "column_bmod". 
  */
 void zcheck_tempv(int n, doublecomplex *tempv)
 {
@@ -357,8 +350,7 @@ zGenXtrue(int n, int nrhs, doublecomplex *x, int ldx)
 	}
 }
 
-/*
- * Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's
+/*! \brief Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's
  */
 void
 zFillRHS(trans_t trans, int nrhs, doublecomplex *x, int ldx,
@@ -387,8 +379,7 @@ zFillRHS(trans_t trans, int nrhs, doublecomplex *x, int ldx,
 
 }
 
-/* 
- * Fills a doublecomplex precision array with a given value.
+/*! \brief Fills a doublecomplex precision array with a given value.
  */
 void 
 zfill(doublecomplex *a, int alen, doublecomplex dval)
@@ -399,8 +390,7 @@ zfill(doublecomplex *a, int alen, doublecomplex dval)
 
 
 
-/* 
- * Check the inf-norm of the error vector 
+/*! \brief Check the inf-norm of the error vector 
  */
 void zinf_norm_error(int nrhs, SuperMatrix *X, doublecomplex *xtrue)
 {
@@ -428,7 +418,7 @@ void zinf_norm_error(int nrhs, SuperMatrix *X, doublecomplex *xtrue)
 
 
 
-/* Print performance of the code. */
+/*! \brief Print performance of the code. */
 void
 zPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
            double rpg, double rcond, double *ferr,
@@ -456,9 +446,9 @@ zPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
     printf("\tNo of nonzeros in factor U = %d\n", Ustore->nnz);
     printf("\tNo of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz);
 	
-    printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
-	   mem_usage->for_lu/1e6, mem_usage->total_needed/1e6,
-	   mem_usage->expansions);
+    printf("L\\U MB %.3f\ttotal MB needed %.3f\n",
+	   mem_usage->for_lu/1e6, mem_usage->total_needed/1e6);
+    printf("Number of memory expansions: %d\n", stat->expansions);
 	
     printf("\tFactor\tMflops\tSolve\tMflops\tEtree\tEquil\tRcond\tRefine\n");
     printf("PERF:%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f\n",
diff --git a/TESTING/MATGEN/Makefile b/TESTING/MATGEN/Makefile
index b40dfbb..14e5f2f 100644
--- a/TESTING/MATGEN/Makefile
+++ b/TESTING/MATGEN/Makefile
@@ -22,7 +22,7 @@ include ../../make.inc
 #       make
 #  without any arguments creates a library of all four precisions.
 #  The library is called
-#       tmglib.a
+#       libtmglib.a
 #  and is created at the LAPACK directory level.
 #
 #  To remove the object files after the library is created, enter
diff --git a/TESTING/MATGEN/clatb4.c b/TESTING/MATGEN/clatb4.c
index 2a5fba0..cdd3a9d 100644
--- a/TESTING/MATGEN/clatb4.c
+++ b/TESTING/MATGEN/clatb4.c
@@ -28,7 +28,7 @@ static integer c__2 = 2;
     static real badc1, badc2, large, small;
     static char c2[2];
     extern /* Subroutine */ int slabad_(real *, real *);
-    extern doublereal slamch_(char *);
+    extern float slamch_(char *);
     extern logical lsamen_(integer *, char *, char *);
     static integer mat;
     static real eps;
diff --git a/TESTING/MATGEN/lsamen.c b/TESTING/MATGEN/lsamen.c
index 270716d..82a5d18 100644
--- a/TESTING/MATGEN/lsamen.c
+++ b/TESTING/MATGEN/lsamen.c
@@ -1,3 +1,4 @@
+#include <string.h>
 #include "f2c.h"
 
 logical lsamen_(integer *n, char *ca, char *cb)
diff --git a/TESTING/MATGEN/slartg.c b/TESTING/MATGEN/slartg.c
index 692b2db..bd44870 100644
--- a/TESTING/MATGEN/slartg.c
+++ b/TESTING/MATGEN/slartg.c
@@ -58,11 +58,10 @@
     static real scale;
     static integer count;
     static real f1, g1, safmn2, safmx2;
-    extern doublereal slamch_(char *);
+    extern float slamch_(char *);
     static real safmin, eps;
 
 
-
     if (first) {
 	first = FALSE_;
 	safmin = slamch_("S");
diff --git a/TESTING/MATGEN/slatb4.c b/TESTING/MATGEN/slatb4.c
index 4f814ef..793592a 100644
--- a/TESTING/MATGEN/slatb4.c
+++ b/TESTING/MATGEN/slatb4.c
@@ -28,7 +28,7 @@ static integer c__2 = 2;
     static real badc1, badc2, large, small;
     static char c2[2];
     extern /* Subroutine */ int slabad_(real *, real *);
-    extern doublereal slamch_(char *);
+    extern float slamch_(char *);
     extern logical lsamen_(integer *, char *, char *);
     static integer mat;
     static real eps;
diff --git a/TESTING/Makefile b/TESTING/Makefile
index 226de42..f6c4d15 100644
--- a/TESTING/Makefile
+++ b/TESTING/Makefile
@@ -37,17 +37,13 @@ HEADER  = ../SRC
 
 ALINTST = sp_ienv.o
 
-SLINTST = sdrive.o sp_sconvert.o \
-          sp_sget01.o sp_sget02.o sp_sget04.o sp_sget07.o 
+SLINTST = sdrive.o sp_sconvert.o sgst01.o sgst02.o sgst04.o sgst07.o 
 
-DLINTST = ddrive.o sp_dconvert.o \
-          sp_dget01.o sp_dget02.o sp_dget04.o sp_dget07.o 
+DLINTST = ddrive.o sp_dconvert.o dgst01.o dgst02.o dgst04.o dgst07.o 
 
-CLINTST = cdrive.o sp_cconvert.o \
-	  sp_cget01.o sp_cget02.o sp_cget04.o sp_cget07.o
+CLINTST = cdrive.o sp_cconvert.o cgst01.o cgst02.o cgst04.o cgst07.o
 
-ZLINTST = zdrive.o sp_zconvert.o \
-	  sp_zget01.o sp_zget02.o sp_zget04.o sp_zget07.o
+ZLINTST = zdrive.o sp_zconvert.o zgst01.o zgst02.o zgst04.o zgst07.o
 
 all: testmat single double complex complex16
 
@@ -56,9 +52,9 @@ testmat:
 
 single: ./stest stest.out
 
-./stest: $(SLINTST) $(ALINTST) ../$(SUPERLULIB) $(TMGLIB)
+./stest: $(SLINTST) $(ALINTST) $(SUPERLULIB) $(TMGLIB)
 	$(LOADER) $(LOADOPTS) $(SLINTST) $(ALINTST) \
-        $(TMGLIB) ../$(SUPERLULIB) $(BLASLIB) -lm -o $@
+        $(TMGLIB) $(SUPERLULIB) $(BLASLIB) -lm -o $@
 
 stest.out: stest stest.csh
 	@echo Testing SINGLE PRECISION linear equation routines 
@@ -66,9 +62,9 @@ stest.out: stest stest.csh
 
 double: ./dtest dtest.out
 
-./dtest: $(DLINTST) $(ALINTST) ../$(SUPERLULIB) $(TMGLIB)
+./dtest: $(DLINTST) $(ALINTST) $(SUPERLULIB) $(TMGLIB)
 	$(LOADER) $(LOADOPTS) $(DLINTST) $(ALINTST) \
-        $(TMGLIB) ../$(SUPERLULIB) $(BLASLIB) -lm -o $@
+        $(TMGLIB) $(SUPERLULIB) $(BLASLIB) -lm -o $@
 
 dtest.out: dtest dtest.csh
 	@echo Testing DOUBLE PRECISION linear equation routines 
@@ -76,9 +72,9 @@ dtest.out: dtest dtest.csh
 
 complex: ./ctest ctest.out
 
-./ctest: $(CLINTST) $(ALINTST) ../$(SUPERLULIB) $(TMGLIB)
+./ctest: $(CLINTST) $(ALINTST) $(SUPERLULIB) $(TMGLIB)
 	$(LOADER) $(LOADOPTS) $(CLINTST) $(ALINTST) \
-	$(TMGLIB) ../$(SUPERLULIB) $(BLASLIB) -lm -o $@
+	$(TMGLIB) $(SUPERLULIB) $(BLASLIB) -lm -o $@
 
 ctest.out: ctest ctest.csh
 	@echo Testing SINGLE COMPLEX linear equation routines 
@@ -86,9 +82,9 @@ ctest.out: ctest ctest.csh
 
 complex16: ./ztest ztest.out
 
-./ztest: $(ZLINTST) $(ALINTST) ../$(SUPERLULIB) $(TMGLIB)
+./ztest: $(ZLINTST) $(ALINTST) $(SUPERLULIB) $(TMGLIB)
 	$(LOADER) $(LOADOPTS) $(ZLINTST) $(ALINTST) \
-	$(TMGLIB) ../$(SUPERLULIB) $(BLASLIB) -lm -o $@
+	$(TMGLIB) $(SUPERLULIB) $(BLASLIB) -lm -o $@
 
 ztest.out: ztest ztest.csh
 	@echo Testing DOUBLE COMPLEX linear equation routines 
diff --git a/TESTING/cdrive.c b/TESTING/cdrive.c
index 7b487af..9baf1ad 100644
--- a/TESTING/cdrive.c
+++ b/TESTING/cdrive.c
@@ -24,7 +24,7 @@
 static void
 parse_command_line(int argc, char *argv[], char *matrix_type,
 		   int *n, int *w, int *relax, int *nrhs, int *maxsuper,
-		   int *rowblk, int *colblk, int *lwork, float *u);
+		   int *rowblk, int *colblk, int *lwork, double *u);
 
 main(int argc, char *argv[])
 {
@@ -69,7 +69,8 @@ main(int argc, char *argv[])
     int            nfact, ifact, itran;
     int            kl, ku, mode, lda;
     int            zerot, izero, ioff;
-    float         anorm, cndnum, u, drop_tol = 0.;
+    double         u;
+    float         anorm, cndnum;
     complex         *Afull;
     float         result[NTESTS];
     superlu_options_t options;
@@ -77,7 +78,7 @@ main(int argc, char *argv[])
     trans_t        trans;
     SuperLUStat_t  stat;
     static char    matrix_type[8];
-    static char    equed[1], path[3], sym[1], dist[1];
+    static char    equed[1], path[4], sym[1], dist[1];
 
     /* Fixed set of parameters */
     int            iseed[]  = {1988, 1989, 1990, 1991};
@@ -87,13 +88,13 @@ main(int argc, char *argv[])
     static trans_t transs[]  = {NOTRANS, TRANS, CONJ};
 
     /* Some function prototypes */ 
-    extern int sp_cget01(int, int, SuperMatrix *, SuperMatrix *, 
-		         SuperMatrix *, int *, float *);
-    extern int sp_cget02(trans_t, int, int, int, SuperMatrix *, complex *,
-                         int, complex *, int, float *resid);
-    extern int sp_cget04(int, int, complex *, int, 
-                         complex *, int, float rcond, float *resid);
-    extern int sp_cget07(trans_t, int, int, SuperMatrix *, complex *, int,
+    extern int cgst01(int, int, SuperMatrix *, SuperMatrix *, 
+		      SuperMatrix *, int *, int *, float *);
+    extern int cgst02(trans_t, int, int, int, SuperMatrix *, complex *,
+                      int, complex *, int, float *resid);
+    extern int cgst04(int, int, complex *, int, 
+                      complex *, int, float rcond, float *resid);
+    extern int cgst07(trans_t, int, int, SuperMatrix *, complex *, int,
                          complex *, int, complex *, int, 
                          float *, float *, float *);
     extern int clatb4_(char *, int *, int *, int *, char *, int *, int *, 
@@ -137,7 +138,7 @@ main(int argc, char *argv[])
     options.PrintStat = NO;
     options.PivotGrowth = YES;
     options.ConditionNumber = YES;
-    options.IterRefine = SINGLE;
+    options.IterRefine = SLU_SINGLE;
     
     if ( strcmp(matrix_type, "LA") == 0 ) {
 	/* Test LAPACK matrix suite. */
@@ -301,7 +302,7 @@ main(int argc, char *argv[])
 			sp_preorder(&options, &A, perm_c, etree, &AC);
 
 			/* Factor the matrix AC. */
-			cgstrf(&options, &AC, drop_tol, relax, panel_size,
+			cgstrf(&options, &AC, relax, panel_size,
                                etree, work, lwork, perm_c, perm_r, &L, &U,
                                &stat, &info);
 
@@ -348,14 +349,15 @@ main(int argc, char *argv[])
 			    } else {
                                 /* Reconstruct matrix from factors and
 	                           compute residual. */
-                                sp_cget01(m, n, &A, &L, &U, perm_r, &result[0]);
+                                cgst01(m, n, &A, &L, &U, perm_c, perm_r,
+                                         &result[0]);
 				nt = 1;
 				if ( izero == 0 ) {
 				    /* Compute residual of the computed
 				       solution. */
 				    cCopy_Dense_Matrix(m, nrhs, rhsb, ldb,
 						       wwork, ldb);
-				    sp_cget02(trans, m, n, nrhs, &A, solx,
+				    cgst02(trans, m, n, nrhs, &A, solx,
                                               ldx, wwork,ldb, &result[1]);
 				    nt = 2;
 				}
@@ -410,7 +412,8 @@ main(int argc, char *argv[])
 			    if ( !prefact ) {
 			    	/* Reconstruct matrix from factors and
 	 			   compute residual. */
-                                sp_cget01(m, n, &A, &L, &U, perm_r, &result[0]);
+                                cgst01(m, n, &A, &L, &U, perm_c, perm_r,
+                                         &result[0]);
 				k1 = 0;
 			    } else {
 			   	k1 = 1;
@@ -420,17 +423,17 @@ main(int argc, char *argv[])
 				/* Compute residual of the computed solution.*/
 				cCopy_Dense_Matrix(m, nrhs, bsav, ldb,
 						  wwork, ldb);
-				sp_cget02(trans, m, n, nrhs, &ASAV, solx, ldx,
+				cgst02(trans, m, n, nrhs, &ASAV, solx, ldx,
 					  wwork, ldb, &result[1]);
 
 				/* Check solution from generated exact
 				   solution. */
-				sp_cget04(n, nrhs, solx, ldx, xact, ldx, rcond,
+				cgst04(n, nrhs, solx, ldx, xact, ldx, rcond,
 					  &result[2]);
 
 				/* Check the error bounds from iterative
 				   refinement. */
-				sp_cget07(trans, n, nrhs, &ASAV, bsav, ldb,
+				cgst07(trans, n, nrhs, &ASAV, bsav, ldb,
 					  solx, ldx, xact, ldx, ferr, berr,
 					  &result[3]);
 
@@ -503,7 +506,7 @@ main(int argc, char *argv[])
 static void
 parse_command_line(int argc, char *argv[], char *matrix_type,
 		   int *n, int *w, int *relax, int *nrhs, int *maxsuper,
-		   int *rowblk, int *colblk, int *lwork, float *u)
+		   int *rowblk, int *colblk, int *lwork, double *u)
 {
     int c;
     extern char *optarg;
diff --git a/TESTING/sp_cget01.c b/TESTING/cgst01.c
similarity index 84%
rename from TESTING/sp_cget01.c
rename to TESTING/cgst01.c
index 8d642c2..e6698f1 100644
--- a/TESTING/sp_cget01.c
+++ b/TESTING/cgst01.c
@@ -9,14 +9,14 @@
 #include <math.h>
 #include "slu_cdefs.h"
 
-int sp_cget01(int m, int n, SuperMatrix *A, SuperMatrix *L, 
-		SuperMatrix *U, int *perm_r, float *resid)
+int cgst01(int m, int n, SuperMatrix *A, SuperMatrix *L, 
+		SuperMatrix *U, int *perm_c, int *perm_r, float *resid)
 {
 /* 
     Purpose   
     =======   
 
-    SP_CGET01 reconstructs a matrix A from its L*U factorization and   
+    CGST01 reconstructs a matrix A from its L*U factorization and   
     computes the residual   
        norm(L*U - A) / ( N * norm(A) * EPS ),   
     where EPS is the machine epsilon.   
@@ -39,6 +39,9 @@ int sp_cget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
     U       (input) SuperMatrix *, dimension (U->nrow, U->ncol)
             The factor matrix U.
 
+    perm_c (input) INT array, dimension (N)
+            The column permutation from CGSTRF.   
+
     perm_r  (input) INT array, dimension (M)
             The pivot indices from CGSTRF.   
 
@@ -58,11 +61,10 @@ int sp_cget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
     SCformat *Lstore;
     NCformat *Astore, *Ustore;
     complex *Aval, *Lval, *Uval;
+    int *colbeg, *colend;
 
     /* Function prototypes */
     extern float clangs(char *, SuperMatrix *);
-    extern double slamch_(char *);
-
 
     /* Quick exit if M = 0 or N = 0. */
 
@@ -124,8 +126,16 @@ int sp_cget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
 	    }
 	}
 
-	/* Now compute A[k] - (L*U)[k] */
-	for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
+	/* Now compute A[k] - (L*U)[k] (Both matrices may be permuted.) */
+
+	colbeg = intMalloc(n);
+	colend = intMalloc(n);
+	for (i = 0; i < n; i++) {
+	    colbeg[perm_c[i]] = Astore->colptr[i]; 
+	    colend[perm_c[i]] = Astore->colptr[i+1];
+	}
+	
+	for (i = colbeg[k]; i < colend[k]; ++i) {
 	    arow = Astore->rowind[i];
 	    work[perm_r[arow]].r += Aval[i].r;
 	    work[perm_r[arow]].i += Aval[i].i;
@@ -151,9 +161,11 @@ int sp_cget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
     }
 
     SUPERLU_FREE(work);
+    SUPERLU_FREE(colbeg);
+    SUPERLU_FREE(colend);
     return 0;
 
-/*     End of SP_SGET01 */
+/*     End of CGST01 */
 
-} /* sp_sget01_ */
+} /* cgst01_ */
 
diff --git a/TESTING/sp_cget02.c b/TESTING/cgst02.c
similarity index 94%
rename from TESTING/sp_cget02.c
rename to TESTING/cgst02.c
index a45c8e8..26128ce 100644
--- a/TESTING/sp_cget02.c
+++ b/TESTING/cgst02.c
@@ -8,14 +8,14 @@
  */
 #include "slu_cdefs.h"
 
-int sp_cget02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
+int cgst02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
 	      complex *x, int ldx, complex *b, int ldb, float *resid)
 {
 /*  
     Purpose   
     =======   
 
-    SP_CGET02 computes the residual for a solution of a system of linear   
+    CGST02 computes the residual for a solution of a system of linear   
     equations  A*x = b  or  A'*x = b:   
        RESID = norm(B - A*X) / ( norm(A) * norm(X) * EPS ),   
     where EPS is the machine epsilon.   
@@ -86,7 +86,6 @@ int sp_cget02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
     extern int lsame_(char *, char *);
     extern float clangs(char *, SuperMatrix *);
     extern float scasum_(int *, complex *, int *);
-    extern double slamch_(char *);
     
     /* Function Body */
     if ( m <= 0 || n <= 0 || nrhs == 0) {
@@ -135,5 +134,5 @@ int sp_cget02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
 
     return 0;
 
-} /* sp_cget02 */
+} /* cgst02 */
 
diff --git a/TESTING/sp_cget04.c b/TESTING/cgst04.c
similarity index 94%
rename from TESTING/sp_cget04.c
rename to TESTING/cgst04.c
index 9291c94..5ab19a4 100644
--- a/TESTING/sp_cget04.c
+++ b/TESTING/cgst04.c
@@ -9,14 +9,14 @@
 #include <math.h>
 #include "slu_cdefs.h"
 
-int sp_cget04(int n, int nrhs, complex *x, int ldx, complex *xact,
+int cgst04(int n, int nrhs, complex *x, int ldx, complex *xact,
 	      int ldxact, float rcond, float *resid)
 {
 /*
     Purpose   
     =======   
 
-    SP_CGET04 computes the difference between a computed solution and the   
+    CGST04 computes the difference between a computed solution and the   
     true solution to a system of linear equations.   
     RESID =  ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS ),   
     where RCOND is the reciprocal of the condition number and EPS is the 
@@ -70,7 +70,6 @@ int sp_cget04(int n, int nrhs, complex *x, int ldx, complex *xact,
 
     /* Function prototypes */
     extern int icamax_(int *, complex *, int *);
-    extern double slamch_(char *);
 
     /* Quick exit if N = 0 or NRHS = 0. */
    if ( n <= 0 || nrhs <= 0 ) {
@@ -120,4 +119,4 @@ int sp_cget04(int n, int nrhs, complex *x, int ldx, complex *xact,
 
     return 0;
 
-} /* sp_cget04_ */
+} /* cgst04_ */
diff --git a/TESTING/sp_cget07.c b/TESTING/cgst07.c
similarity index 97%
rename from TESTING/sp_cget07.c
rename to TESTING/cgst07.c
index 2e69f03..b7f3079 100644
--- a/TESTING/sp_cget07.c
+++ b/TESTING/cgst07.c
@@ -9,7 +9,7 @@
 #include <math.h>
 #include "slu_cdefs.h"
 
-int sp_cget07(trans_t trans, int n, int nrhs, SuperMatrix *A, complex *b, 
+int cgst07(trans_t trans, int n, int nrhs, SuperMatrix *A, complex *b, 
 	      int ldb, complex *x, int ldx, complex *xact, 
               int ldxact, float *ferr, float *berr, float *reslts)
 {
@@ -17,7 +17,7 @@ int sp_cget07(trans_t trans, int n, int nrhs, SuperMatrix *A, complex *b,
     Purpose   
     =======   
 
-    SP_CGET07 tests the error bounds from iterative refinement for the   
+    CGST07 tests the error bounds from iterative refinement for the   
     computed solution to a system of equations op(A)*X = B, where A is a 
     general n by n matrix and op(A) = A or A**T, depending on TRANS.
     
@@ -113,7 +113,7 @@ int sp_cget07(trans_t trans, int n, int nrhs, SuperMatrix *A, complex *b,
     /* Function prototypes */
     extern int    lsame_(char *, char *);
     extern int    icamax_(int *, complex *, int *);
-    extern double slamch_(char *);
+
 
     /* Quick exit if N = 0 or NRHS = 0. */
     if ( n <= 0 || nrhs <= 0 ) {
@@ -225,4 +225,4 @@ L30:
     SUPERLU_FREE(rwork);
     return 0;
 
-} /* sp_cget07 */
+} /* cgst07 */
diff --git a/TESTING/ctest.csh b/TESTING/ctest.csh
index 107c066..2f5feba 100644
--- a/TESTING/ctest.csh
+++ b/TESTING/ctest.csh
@@ -6,7 +6,7 @@ if ( -e $ofile ) then
 endif
 echo "Single-precision complex testing output" > $ofile
 
-set MATRICES     = (LAPACK)
+set MATRICES     = (LAPACK cg20.cua)
 set NVAL         = (9 19)
 set NRHS         = (5)
 set LWORK        = (0 10000000)
diff --git a/TESTING/ddrive.c b/TESTING/ddrive.c
index afa058e..086d8c8 100644
--- a/TESTING/ddrive.c
+++ b/TESTING/ddrive.c
@@ -69,7 +69,8 @@ main(int argc, char *argv[])
     int            nfact, ifact, itran;
     int            kl, ku, mode, lda;
     int            zerot, izero, ioff;
-    double         anorm, cndnum, u, drop_tol = 0.;
+    double         u;
+    double         anorm, cndnum;
     double         *Afull;
     double         result[NTESTS];
     superlu_options_t options;
@@ -77,7 +78,7 @@ main(int argc, char *argv[])
     trans_t        trans;
     SuperLUStat_t  stat;
     static char    matrix_type[8];
-    static char    equed[1], path[3], sym[1], dist[1];
+    static char    equed[1], path[4], sym[1], dist[1];
 
     /* Fixed set of parameters */
     int            iseed[]  = {1988, 1989, 1990, 1991};
@@ -87,13 +88,13 @@ main(int argc, char *argv[])
     static trans_t transs[]  = {NOTRANS, TRANS, CONJ};
 
     /* Some function prototypes */ 
-    extern int sp_dget01(int, int, SuperMatrix *, SuperMatrix *, 
-		         SuperMatrix *, int *, double *);
-    extern int sp_dget02(trans_t, int, int, int, SuperMatrix *, double *,
-                         int, double *, int, double *resid);
-    extern int sp_dget04(int, int, double *, int, 
-                         double *, int, double rcond, double *resid);
-    extern int sp_dget07(trans_t, int, int, SuperMatrix *, double *, int,
+    extern int dgst01(int, int, SuperMatrix *, SuperMatrix *, 
+		      SuperMatrix *, int *, int *, double *);
+    extern int dgst02(trans_t, int, int, int, SuperMatrix *, double *,
+                      int, double *, int, double *resid);
+    extern int dgst04(int, int, double *, int, 
+                      double *, int, double rcond, double *resid);
+    extern int dgst07(trans_t, int, int, SuperMatrix *, double *, int,
                          double *, int, double *, int, 
                          double *, double *, double *);
     extern int dlatb4_(char *, int *, int *, int *, char *, int *, int *, 
@@ -137,7 +138,7 @@ main(int argc, char *argv[])
     options.PrintStat = NO;
     options.PivotGrowth = YES;
     options.ConditionNumber = YES;
-    options.IterRefine = DOUBLE;
+    options.IterRefine = SLU_DOUBLE;
     
     if ( strcmp(matrix_type, "LA") == 0 ) {
 	/* Test LAPACK matrix suite. */
@@ -301,7 +302,7 @@ main(int argc, char *argv[])
 			sp_preorder(&options, &A, perm_c, etree, &AC);
 
 			/* Factor the matrix AC. */
-			dgstrf(&options, &AC, drop_tol, relax, panel_size,
+			dgstrf(&options, &AC, relax, panel_size,
                                etree, work, lwork, perm_c, perm_r, &L, &U,
                                &stat, &info);
 
@@ -348,14 +349,15 @@ main(int argc, char *argv[])
 			    } else {
                                 /* Reconstruct matrix from factors and
 	                           compute residual. */
-                                sp_dget01(m, n, &A, &L, &U, perm_r, &result[0]);
+                                dgst01(m, n, &A, &L, &U, perm_c, perm_r,
+                                         &result[0]);
 				nt = 1;
 				if ( izero == 0 ) {
 				    /* Compute residual of the computed
 				       solution. */
 				    dCopy_Dense_Matrix(m, nrhs, rhsb, ldb,
 						       wwork, ldb);
-				    sp_dget02(trans, m, n, nrhs, &A, solx,
+				    dgst02(trans, m, n, nrhs, &A, solx,
                                               ldx, wwork,ldb, &result[1]);
 				    nt = 2;
 				}
@@ -410,7 +412,8 @@ main(int argc, char *argv[])
 			    if ( !prefact ) {
 			    	/* Reconstruct matrix from factors and
 	 			   compute residual. */
-                                sp_dget01(m, n, &A, &L, &U, perm_r, &result[0]);
+                                dgst01(m, n, &A, &L, &U, perm_c, perm_r,
+                                         &result[0]);
 				k1 = 0;
 			    } else {
 			   	k1 = 1;
@@ -420,17 +423,17 @@ main(int argc, char *argv[])
 				/* Compute residual of the computed solution.*/
 				dCopy_Dense_Matrix(m, nrhs, bsav, ldb,
 						  wwork, ldb);
-				sp_dget02(trans, m, n, nrhs, &ASAV, solx, ldx,
+				dgst02(trans, m, n, nrhs, &ASAV, solx, ldx,
 					  wwork, ldb, &result[1]);
 
 				/* Check solution from generated exact
 				   solution. */
-				sp_dget04(n, nrhs, solx, ldx, xact, ldx, rcond,
+				dgst04(n, nrhs, solx, ldx, xact, ldx, rcond,
 					  &result[2]);
 
 				/* Check the error bounds from iterative
 				   refinement. */
-				sp_dget07(trans, n, nrhs, &ASAV, bsav, ldb,
+				dgst07(trans, n, nrhs, &ASAV, bsav, ldb,
 					  solx, ldx, xact, ldx, ferr, berr,
 					  &result[3]);
 
diff --git a/TESTING/sp_dget01.c b/TESTING/dgst01.c
similarity index 83%
rename from TESTING/sp_dget01.c
rename to TESTING/dgst01.c
index d6b8594..a1477e0 100644
--- a/TESTING/sp_dget01.c
+++ b/TESTING/dgst01.c
@@ -9,14 +9,14 @@
 #include <math.h>
 #include "slu_ddefs.h"
 
-int sp_dget01(int m, int n, SuperMatrix *A, SuperMatrix *L, 
-		SuperMatrix *U, int *perm_r, double *resid)
+int dgst01(int m, int n, SuperMatrix *A, SuperMatrix *L, 
+		SuperMatrix *U, int *perm_c, int *perm_r, double *resid)
 {
 /* 
     Purpose   
     =======   
 
-    SP_DGET01 reconstructs a matrix A from its L*U factorization and   
+    DGST01 reconstructs a matrix A from its L*U factorization and   
     computes the residual   
        norm(L*U - A) / ( N * norm(A) * EPS ),   
     where EPS is the machine epsilon.   
@@ -39,6 +39,9 @@ int sp_dget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
     U       (input) SuperMatrix *, dimension (U->nrow, U->ncol)
             The factor matrix U.
 
+    perm_c (input) INT array, dimension (N)
+            The column permutation from DGSTRF.   
+
     perm_r  (input) INT array, dimension (M)
             The pivot indices from DGSTRF.   
 
@@ -58,11 +61,10 @@ int sp_dget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
     SCformat *Lstore;
     NCformat *Astore, *Ustore;
     double *Aval, *Lval, *Uval;
+    int *colbeg, *colend;
 
     /* Function prototypes */
     extern double dlangs(char *, SuperMatrix *);
-    extern double dlamch_(char *);
-
 
     /* Quick exit if M = 0 or N = 0. */
 
@@ -120,8 +122,16 @@ int sp_dget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
 	    }
 	}
 
-	/* Now compute A[k] - (L*U)[k] */
-	for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
+	/* Now compute A[k] - (L*U)[k] (Both matrices may be permuted.) */
+
+	colbeg = intMalloc(n);
+	colend = intMalloc(n);
+	for (i = 0; i < n; i++) {
+	    colbeg[perm_c[i]] = Astore->colptr[i]; 
+	    colend[perm_c[i]] = Astore->colptr[i+1];
+	}
+	
+	for (i = colbeg[k]; i < colend[k]; ++i) {
 	    arow = Astore->rowind[i];
 	    work[perm_r[arow]] += Aval[i];
         }
@@ -146,9 +156,11 @@ int sp_dget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
     }
 
     SUPERLU_FREE(work);
+    SUPERLU_FREE(colbeg);
+    SUPERLU_FREE(colend);
     return 0;
 
-/*     End of SP_SGET01 */
+/*     End of DGST01 */
 
-} /* sp_sget01_ */
+} /* dgst01_ */
 
diff --git a/TESTING/sp_dget02.c b/TESTING/dgst02.c
similarity index 94%
rename from TESTING/sp_dget02.c
rename to TESTING/dgst02.c
index 9d08dda..2275fef 100644
--- a/TESTING/sp_dget02.c
+++ b/TESTING/dgst02.c
@@ -8,14 +8,14 @@
  */
 #include "slu_ddefs.h"
 
-int sp_dget02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
+int dgst02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
 	      double *x, int ldx, double *b, int ldb, double *resid)
 {
 /*  
     Purpose   
     =======   
 
-    SP_DGET02 computes the residual for a solution of a system of linear   
+    DGST02 computes the residual for a solution of a system of linear   
     equations  A*x = b  or  A'*x = b:   
        RESID = norm(B - A*X) / ( norm(A) * norm(X) * EPS ),   
     where EPS is the machine epsilon.   
@@ -86,7 +86,6 @@ int sp_dget02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
     extern int lsame_(char *, char *);
     extern double dlangs(char *, SuperMatrix *);
     extern double dasum_(int *, double *, int *);
-    extern double dlamch_(char *);
     
     /* Function Body */
     if ( m <= 0 || n <= 0 || nrhs == 0) {
@@ -135,5 +134,5 @@ int sp_dget02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
 
     return 0;
 
-} /* sp_dget02 */
+} /* dgst02 */
 
diff --git a/TESTING/sp_dget04.c b/TESTING/dgst04.c
similarity index 93%
rename from TESTING/sp_dget04.c
rename to TESTING/dgst04.c
index dc88ed8..11d2044 100644
--- a/TESTING/sp_dget04.c
+++ b/TESTING/dgst04.c
@@ -9,14 +9,14 @@
 #include <math.h>
 #include "slu_ddefs.h"
 
-int sp_dget04(int n, int nrhs, double *x, int ldx, double *xact,
+int dgst04(int n, int nrhs, double *x, int ldx, double *xact,
 	      int ldxact, double rcond, double *resid)
 {
 /*
     Purpose   
     =======   
 
-    SP_DGET04 computes the difference between a computed solution and the   
+    DGST04 computes the difference between a computed solution and the   
     true solution to a system of linear equations.   
     RESID =  ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS ),   
     where RCOND is the reciprocal of the condition number and EPS is the 
@@ -70,7 +70,6 @@ int sp_dget04(int n, int nrhs, double *x, int ldx, double *xact,
 
     /* Function prototypes */
     extern int idamax_(int *, double *, int *);
-    extern double dlamch_(char *);
 
     /* Quick exit if N = 0 or NRHS = 0. */
    if ( n <= 0 || nrhs <= 0 ) {
@@ -118,4 +117,4 @@ int sp_dget04(int n, int nrhs, double *x, int ldx, double *xact,
 
     return 0;
 
-} /* sp_dget04_ */
+} /* dgst04_ */
diff --git a/TESTING/sp_dget07.c b/TESTING/dgst07.c
similarity index 96%
rename from TESTING/sp_dget07.c
rename to TESTING/dgst07.c
index 2737c22..0aa300d 100644
--- a/TESTING/sp_dget07.c
+++ b/TESTING/dgst07.c
@@ -9,7 +9,7 @@
 #include <math.h>
 #include "slu_ddefs.h"
 
-int sp_dget07(trans_t trans, int n, int nrhs, SuperMatrix *A, double *b, 
+int dgst07(trans_t trans, int n, int nrhs, SuperMatrix *A, double *b, 
 	      int ldb, double *x, int ldx, double *xact, 
               int ldxact, double *ferr, double *berr, double *reslts)
 {
@@ -17,7 +17,7 @@ int sp_dget07(trans_t trans, int n, int nrhs, SuperMatrix *A, double *b,
     Purpose   
     =======   
 
-    SP_DGET07 tests the error bounds from iterative refinement for the   
+    DGST07 tests the error bounds from iterative refinement for the   
     computed solution to a system of equations op(A)*X = B, where A is a 
     general n by n matrix and op(A) = A or A**T, depending on TRANS.
     
@@ -112,7 +112,7 @@ int sp_dget07(trans_t trans, int n, int nrhs, SuperMatrix *A, double *b,
     /* Function prototypes */
     extern int    lsame_(char *, char *);
     extern int    idamax_(int *, double *, int *);
-    extern double dlamch_(char *);
+
 
     /* Quick exit if N = 0 or NRHS = 0. */
     if ( n <= 0 || nrhs <= 0 ) {
@@ -215,4 +215,4 @@ L30:
     SUPERLU_FREE(rwork);
     return 0;
 
-} /* sp_dget07 */
+} /* dgst07 */
diff --git a/TESTING/dtest.csh b/TESTING/dtest.csh
index 085ca43..613c9f1 100644
--- a/TESTING/dtest.csh
+++ b/TESTING/dtest.csh
@@ -6,7 +6,7 @@ if ( -e $ofile ) then
 endif
 echo "Double-precision testing output" > $ofile
 
-set MATRICES     = (LAPACK g10)
+set MATRICES     = (LAPACK g20.rua)
 set NVAL         = (9 19)
 set NRHS         = (5)
 set LWORK        = (0 10000000)
diff --git a/TESTING/sdrive.c b/TESTING/sdrive.c
index 0afb3e2..726d4e1 100644
--- a/TESTING/sdrive.c
+++ b/TESTING/sdrive.c
@@ -24,7 +24,7 @@
 static void
 parse_command_line(int argc, char *argv[], char *matrix_type,
 		   int *n, int *w, int *relax, int *nrhs, int *maxsuper,
-		   int *rowblk, int *colblk, int *lwork, float *u);
+		   int *rowblk, int *colblk, int *lwork, double *u);
 
 main(int argc, char *argv[])
 {
@@ -69,7 +69,8 @@ main(int argc, char *argv[])
     int            nfact, ifact, itran;
     int            kl, ku, mode, lda;
     int            zerot, izero, ioff;
-    float         anorm, cndnum, u, drop_tol = 0.;
+    double         u;
+    float         anorm, cndnum;
     float         *Afull;
     float         result[NTESTS];
     superlu_options_t options;
@@ -77,7 +78,7 @@ main(int argc, char *argv[])
     trans_t        trans;
     SuperLUStat_t  stat;
     static char    matrix_type[8];
-    static char    equed[1], path[3], sym[1], dist[1];
+    static char    equed[1], path[4], sym[1], dist[1];
 
     /* Fixed set of parameters */
     int            iseed[]  = {1988, 1989, 1990, 1991};
@@ -87,13 +88,13 @@ main(int argc, char *argv[])
     static trans_t transs[]  = {NOTRANS, TRANS, CONJ};
 
     /* Some function prototypes */ 
-    extern int sp_sget01(int, int, SuperMatrix *, SuperMatrix *, 
-		         SuperMatrix *, int *, float *);
-    extern int sp_sget02(trans_t, int, int, int, SuperMatrix *, float *,
-                         int, float *, int, float *resid);
-    extern int sp_sget04(int, int, float *, int, 
-                         float *, int, float rcond, float *resid);
-    extern int sp_sget07(trans_t, int, int, SuperMatrix *, float *, int,
+    extern int sgst01(int, int, SuperMatrix *, SuperMatrix *, 
+		      SuperMatrix *, int *, int *, float *);
+    extern int sgst02(trans_t, int, int, int, SuperMatrix *, float *,
+                      int, float *, int, float *resid);
+    extern int sgst04(int, int, float *, int, 
+                      float *, int, float rcond, float *resid);
+    extern int sgst07(trans_t, int, int, SuperMatrix *, float *, int,
                          float *, int, float *, int, 
                          float *, float *, float *);
     extern int slatb4_(char *, int *, int *, int *, char *, int *, int *, 
@@ -137,7 +138,7 @@ main(int argc, char *argv[])
     options.PrintStat = NO;
     options.PivotGrowth = YES;
     options.ConditionNumber = YES;
-    options.IterRefine = SINGLE;
+    options.IterRefine = SLU_SINGLE;
     
     if ( strcmp(matrix_type, "LA") == 0 ) {
 	/* Test LAPACK matrix suite. */
@@ -301,7 +302,7 @@ main(int argc, char *argv[])
 			sp_preorder(&options, &A, perm_c, etree, &AC);
 
 			/* Factor the matrix AC. */
-			sgstrf(&options, &AC, drop_tol, relax, panel_size,
+			sgstrf(&options, &AC, relax, panel_size,
                                etree, work, lwork, perm_c, perm_r, &L, &U,
                                &stat, &info);
 
@@ -348,14 +349,15 @@ main(int argc, char *argv[])
 			    } else {
                                 /* Reconstruct matrix from factors and
 	                           compute residual. */
-                                sp_sget01(m, n, &A, &L, &U, perm_r, &result[0]);
+                                sgst01(m, n, &A, &L, &U, perm_c, perm_r,
+                                         &result[0]);
 				nt = 1;
 				if ( izero == 0 ) {
 				    /* Compute residual of the computed
 				       solution. */
 				    sCopy_Dense_Matrix(m, nrhs, rhsb, ldb,
 						       wwork, ldb);
-				    sp_sget02(trans, m, n, nrhs, &A, solx,
+				    sgst02(trans, m, n, nrhs, &A, solx,
                                               ldx, wwork,ldb, &result[1]);
 				    nt = 2;
 				}
@@ -410,7 +412,8 @@ main(int argc, char *argv[])
 			    if ( !prefact ) {
 			    	/* Reconstruct matrix from factors and
 	 			   compute residual. */
-                                sp_sget01(m, n, &A, &L, &U, perm_r, &result[0]);
+                                sgst01(m, n, &A, &L, &U, perm_c, perm_r,
+                                         &result[0]);
 				k1 = 0;
 			    } else {
 			   	k1 = 1;
@@ -420,17 +423,17 @@ main(int argc, char *argv[])
 				/* Compute residual of the computed solution.*/
 				sCopy_Dense_Matrix(m, nrhs, bsav, ldb,
 						  wwork, ldb);
-				sp_sget02(trans, m, n, nrhs, &ASAV, solx, ldx,
+				sgst02(trans, m, n, nrhs, &ASAV, solx, ldx,
 					  wwork, ldb, &result[1]);
 
 				/* Check solution from generated exact
 				   solution. */
-				sp_sget04(n, nrhs, solx, ldx, xact, ldx, rcond,
+				sgst04(n, nrhs, solx, ldx, xact, ldx, rcond,
 					  &result[2]);
 
 				/* Check the error bounds from iterative
 				   refinement. */
-				sp_sget07(trans, n, nrhs, &ASAV, bsav, ldb,
+				sgst07(trans, n, nrhs, &ASAV, bsav, ldb,
 					  solx, ldx, xact, ldx, ferr, berr,
 					  &result[3]);
 
@@ -503,7 +506,7 @@ main(int argc, char *argv[])
 static void
 parse_command_line(int argc, char *argv[], char *matrix_type,
 		   int *n, int *w, int *relax, int *nrhs, int *maxsuper,
-		   int *rowblk, int *colblk, int *lwork, float *u)
+		   int *rowblk, int *colblk, int *lwork, double *u)
 {
     int c;
     extern char *optarg;
diff --git a/TESTING/sp_sget01.c b/TESTING/sgst01.c
similarity index 83%
rename from TESTING/sp_sget01.c
rename to TESTING/sgst01.c
index 5ab57b5..1930d01 100644
--- a/TESTING/sp_sget01.c
+++ b/TESTING/sgst01.c
@@ -9,14 +9,14 @@
 #include <math.h>
 #include "slu_sdefs.h"
 
-int sp_sget01(int m, int n, SuperMatrix *A, SuperMatrix *L, 
-		SuperMatrix *U, int *perm_r, float *resid)
+int sgst01(int m, int n, SuperMatrix *A, SuperMatrix *L, 
+		SuperMatrix *U, int *perm_c, int *perm_r, float *resid)
 {
 /* 
     Purpose   
     =======   
 
-    SP_SGET01 reconstructs a matrix A from its L*U factorization and   
+    SGST01 reconstructs a matrix A from its L*U factorization and   
     computes the residual   
        norm(L*U - A) / ( N * norm(A) * EPS ),   
     where EPS is the machine epsilon.   
@@ -39,6 +39,9 @@ int sp_sget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
     U       (input) SuperMatrix *, dimension (U->nrow, U->ncol)
             The factor matrix U.
 
+    perm_c (input) INT array, dimension (N)
+            The column permutation from SGSTRF.   
+
     perm_r  (input) INT array, dimension (M)
             The pivot indices from SGSTRF.   
 
@@ -58,11 +61,10 @@ int sp_sget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
     SCformat *Lstore;
     NCformat *Astore, *Ustore;
     float *Aval, *Lval, *Uval;
+    int *colbeg, *colend;
 
     /* Function prototypes */
     extern float slangs(char *, SuperMatrix *);
-    extern double slamch_(char *);
-
 
     /* Quick exit if M = 0 or N = 0. */
 
@@ -120,8 +122,16 @@ int sp_sget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
 	    }
 	}
 
-	/* Now compute A[k] - (L*U)[k] */
-	for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
+	/* Now compute A[k] - (L*U)[k] (Both matrices may be permuted.) */
+
+	colbeg = intMalloc(n);
+	colend = intMalloc(n);
+	for (i = 0; i < n; i++) {
+	    colbeg[perm_c[i]] = Astore->colptr[i]; 
+	    colend[perm_c[i]] = Astore->colptr[i+1];
+	}
+	
+	for (i = colbeg[k]; i < colend[k]; ++i) {
 	    arow = Astore->rowind[i];
 	    work[perm_r[arow]] += Aval[i];
         }
@@ -146,9 +156,11 @@ int sp_sget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
     }
 
     SUPERLU_FREE(work);
+    SUPERLU_FREE(colbeg);
+    SUPERLU_FREE(colend);
     return 0;
 
-/*     End of SP_SGET01 */
+/*     End of SGST01 */
 
-} /* sp_sget01_ */
+} /* sgst01_ */
 
diff --git a/TESTING/sp_sget02.c b/TESTING/sgst02.c
similarity index 94%
rename from TESTING/sp_sget02.c
rename to TESTING/sgst02.c
index 90826d1..f518e21 100644
--- a/TESTING/sp_sget02.c
+++ b/TESTING/sgst02.c
@@ -8,14 +8,14 @@
  */
 #include "slu_sdefs.h"
 
-int sp_sget02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
+int sgst02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
 	      float *x, int ldx, float *b, int ldb, float *resid)
 {
 /*  
     Purpose   
     =======   
 
-    SP_SGET02 computes the residual for a solution of a system of linear   
+    SGST02 computes the residual for a solution of a system of linear   
     equations  A*x = b  or  A'*x = b:   
        RESID = norm(B - A*X) / ( norm(A) * norm(X) * EPS ),   
     where EPS is the machine epsilon.   
@@ -86,7 +86,6 @@ int sp_sget02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
     extern int lsame_(char *, char *);
     extern float slangs(char *, SuperMatrix *);
     extern float sasum_(int *, float *, int *);
-    extern double slamch_(char *);
     
     /* Function Body */
     if ( m <= 0 || n <= 0 || nrhs == 0) {
@@ -135,5 +134,5 @@ int sp_sget02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
 
     return 0;
 
-} /* sp_sget02 */
+} /* sgst02 */
 
diff --git a/TESTING/sp_sget04.c b/TESTING/sgst04.c
similarity index 93%
rename from TESTING/sp_sget04.c
rename to TESTING/sgst04.c
index cb4e6dc..d7c46c7 100644
--- a/TESTING/sp_sget04.c
+++ b/TESTING/sgst04.c
@@ -9,14 +9,14 @@
 #include <math.h>
 #include "slu_sdefs.h"
 
-int sp_sget04(int n, int nrhs, float *x, int ldx, float *xact,
+int sgst04(int n, int nrhs, float *x, int ldx, float *xact,
 	      int ldxact, float rcond, float *resid)
 {
 /*
     Purpose   
     =======   
 
-    SP_SGET04 computes the difference between a computed solution and the   
+    SGST04 computes the difference between a computed solution and the   
     true solution to a system of linear equations.   
     RESID =  ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS ),   
     where RCOND is the reciprocal of the condition number and EPS is the 
@@ -70,7 +70,6 @@ int sp_sget04(int n, int nrhs, float *x, int ldx, float *xact,
 
     /* Function prototypes */
     extern int isamax_(int *, float *, int *);
-    extern double slamch_(char *);
 
     /* Quick exit if N = 0 or NRHS = 0. */
    if ( n <= 0 || nrhs <= 0 ) {
@@ -118,4 +117,4 @@ int sp_sget04(int n, int nrhs, float *x, int ldx, float *xact,
 
     return 0;
 
-} /* sp_sget04_ */
+} /* sgst04_ */
diff --git a/TESTING/sp_sget07.c b/TESTING/sgst07.c
similarity index 96%
rename from TESTING/sp_sget07.c
rename to TESTING/sgst07.c
index f7d86be..8317999 100644
--- a/TESTING/sp_sget07.c
+++ b/TESTING/sgst07.c
@@ -9,7 +9,7 @@
 #include <math.h>
 #include "slu_sdefs.h"
 
-int sp_sget07(trans_t trans, int n, int nrhs, SuperMatrix *A, float *b, 
+int sgst07(trans_t trans, int n, int nrhs, SuperMatrix *A, float *b, 
 	      int ldb, float *x, int ldx, float *xact, 
               int ldxact, float *ferr, float *berr, float *reslts)
 {
@@ -17,7 +17,7 @@ int sp_sget07(trans_t trans, int n, int nrhs, SuperMatrix *A, float *b,
     Purpose   
     =======   
 
-    SP_SGET07 tests the error bounds from iterative refinement for the   
+    SGST07 tests the error bounds from iterative refinement for the   
     computed solution to a system of equations op(A)*X = B, where A is a 
     general n by n matrix and op(A) = A or A**T, depending on TRANS.
     
@@ -112,7 +112,7 @@ int sp_sget07(trans_t trans, int n, int nrhs, SuperMatrix *A, float *b,
     /* Function prototypes */
     extern int    lsame_(char *, char *);
     extern int    isamax_(int *, float *, int *);
-    extern double slamch_(char *);
+
 
     /* Quick exit if N = 0 or NRHS = 0. */
     if ( n <= 0 || nrhs <= 0 ) {
@@ -215,4 +215,4 @@ L30:
     SUPERLU_FREE(rwork);
     return 0;
 
-} /* sp_sget07 */
+} /* sgst07 */
diff --git a/TESTING/sp_ienv.c b/TESTING/sp_ienv.c
index 480531b..4366812 100644
--- a/TESTING/sp_ienv.c
+++ b/TESTING/sp_ienv.c
@@ -50,7 +50,7 @@ sp_ienv(int ispec)
 	case 3: return (10);
 	case 4: return (20);
 	case 5: return (10);
-        case 6: return (1);
+        case 6: return (2);
     }
 
     /* Invalid value for ISPEC */
diff --git a/TESTING/stest.csh b/TESTING/stest.csh
index c8577a0..001aea2 100644
--- a/TESTING/stest.csh
+++ b/TESTING/stest.csh
@@ -6,7 +6,7 @@ if ( -e $ofile ) then
 endif
 echo "Single-precision testing output" > $ofile
 
-set MATRICES     = (LAPACK g10)
+set MATRICES     = (LAPACK g20.rua)
 set NVAL         = (9 19)
 set NRHS         = (5)
 set LWORK        = (0 10000000)
diff --git a/TESTING/zdrive.c b/TESTING/zdrive.c
index 1269fb0..9eaa425 100644
--- a/TESTING/zdrive.c
+++ b/TESTING/zdrive.c
@@ -69,7 +69,8 @@ main(int argc, char *argv[])
     int            nfact, ifact, itran;
     int            kl, ku, mode, lda;
     int            zerot, izero, ioff;
-    double         anorm, cndnum, u, drop_tol = 0.;
+    double         u;
+    double         anorm, cndnum;
     doublecomplex         *Afull;
     double         result[NTESTS];
     superlu_options_t options;
@@ -77,7 +78,7 @@ main(int argc, char *argv[])
     trans_t        trans;
     SuperLUStat_t  stat;
     static char    matrix_type[8];
-    static char    equed[1], path[3], sym[1], dist[1];
+    static char    equed[1], path[4], sym[1], dist[1];
 
     /* Fixed set of parameters */
     int            iseed[]  = {1988, 1989, 1990, 1991};
@@ -87,13 +88,13 @@ main(int argc, char *argv[])
     static trans_t transs[]  = {NOTRANS, TRANS, CONJ};
 
     /* Some function prototypes */ 
-    extern int sp_zget01(int, int, SuperMatrix *, SuperMatrix *, 
-		         SuperMatrix *, int *, double *);
-    extern int sp_zget02(trans_t, int, int, int, SuperMatrix *, doublecomplex *,
-                         int, doublecomplex *, int, double *resid);
-    extern int sp_zget04(int, int, doublecomplex *, int, 
-                         doublecomplex *, int, double rcond, double *resid);
-    extern int sp_zget07(trans_t, int, int, SuperMatrix *, doublecomplex *, int,
+    extern int zgst01(int, int, SuperMatrix *, SuperMatrix *, 
+		      SuperMatrix *, int *, int *, double *);
+    extern int zgst02(trans_t, int, int, int, SuperMatrix *, doublecomplex *,
+                      int, doublecomplex *, int, double *resid);
+    extern int zgst04(int, int, doublecomplex *, int, 
+                      doublecomplex *, int, double rcond, double *resid);
+    extern int zgst07(trans_t, int, int, SuperMatrix *, doublecomplex *, int,
                          doublecomplex *, int, doublecomplex *, int, 
                          double *, double *, double *);
     extern int zlatb4_(char *, int *, int *, int *, char *, int *, int *, 
@@ -137,7 +138,7 @@ main(int argc, char *argv[])
     options.PrintStat = NO;
     options.PivotGrowth = YES;
     options.ConditionNumber = YES;
-    options.IterRefine = DOUBLE;
+    options.IterRefine = SLU_DOUBLE;
     
     if ( strcmp(matrix_type, "LA") == 0 ) {
 	/* Test LAPACK matrix suite. */
@@ -301,7 +302,7 @@ main(int argc, char *argv[])
 			sp_preorder(&options, &A, perm_c, etree, &AC);
 
 			/* Factor the matrix AC. */
-			zgstrf(&options, &AC, drop_tol, relax, panel_size,
+			zgstrf(&options, &AC, relax, panel_size,
                                etree, work, lwork, perm_c, perm_r, &L, &U,
                                &stat, &info);
 
@@ -348,14 +349,15 @@ main(int argc, char *argv[])
 			    } else {
                                 /* Reconstruct matrix from factors and
 	                           compute residual. */
-                                sp_zget01(m, n, &A, &L, &U, perm_r, &result[0]);
+                                zgst01(m, n, &A, &L, &U, perm_c, perm_r,
+                                         &result[0]);
 				nt = 1;
 				if ( izero == 0 ) {
 				    /* Compute residual of the computed
 				       solution. */
 				    zCopy_Dense_Matrix(m, nrhs, rhsb, ldb,
 						       wwork, ldb);
-				    sp_zget02(trans, m, n, nrhs, &A, solx,
+				    zgst02(trans, m, n, nrhs, &A, solx,
                                               ldx, wwork,ldb, &result[1]);
 				    nt = 2;
 				}
@@ -410,7 +412,8 @@ main(int argc, char *argv[])
 			    if ( !prefact ) {
 			    	/* Reconstruct matrix from factors and
 	 			   compute residual. */
-                                sp_zget01(m, n, &A, &L, &U, perm_r, &result[0]);
+                                zgst01(m, n, &A, &L, &U, perm_c, perm_r,
+                                         &result[0]);
 				k1 = 0;
 			    } else {
 			   	k1 = 1;
@@ -420,17 +423,17 @@ main(int argc, char *argv[])
 				/* Compute residual of the computed solution.*/
 				zCopy_Dense_Matrix(m, nrhs, bsav, ldb,
 						  wwork, ldb);
-				sp_zget02(trans, m, n, nrhs, &ASAV, solx, ldx,
+				zgst02(trans, m, n, nrhs, &ASAV, solx, ldx,
 					  wwork, ldb, &result[1]);
 
 				/* Check solution from generated exact
 				   solution. */
-				sp_zget04(n, nrhs, solx, ldx, xact, ldx, rcond,
+				zgst04(n, nrhs, solx, ldx, xact, ldx, rcond,
 					  &result[2]);
 
 				/* Check the error bounds from iterative
 				   refinement. */
-				sp_zget07(trans, n, nrhs, &ASAV, bsav, ldb,
+				zgst07(trans, n, nrhs, &ASAV, bsav, ldb,
 					  solx, ldx, xact, ldx, ferr, berr,
 					  &result[3]);
 
diff --git a/TESTING/sp_zget01.c b/TESTING/zgst01.c
similarity index 84%
rename from TESTING/sp_zget01.c
rename to TESTING/zgst01.c
index 7ee93e2..7f8ba8a 100644
--- a/TESTING/sp_zget01.c
+++ b/TESTING/zgst01.c
@@ -9,14 +9,14 @@
 #include <math.h>
 #include "slu_zdefs.h"
 
-int sp_zget01(int m, int n, SuperMatrix *A, SuperMatrix *L, 
-		SuperMatrix *U, int *perm_r, double *resid)
+int zgst01(int m, int n, SuperMatrix *A, SuperMatrix *L, 
+		SuperMatrix *U, int *perm_c, int *perm_r, double *resid)
 {
 /* 
     Purpose   
     =======   
 
-    SP_ZGET01 reconstructs a matrix A from its L*U factorization and   
+    ZGST01 reconstructs a matrix A from its L*U factorization and   
     computes the residual   
        norm(L*U - A) / ( N * norm(A) * EPS ),   
     where EPS is the machine epsilon.   
@@ -39,6 +39,9 @@ int sp_zget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
     U       (input) SuperMatrix *, dimension (U->nrow, U->ncol)
             The factor matrix U.
 
+    perm_c (input) INT array, dimension (N)
+            The column permutation from ZGSTRF.   
+
     perm_r  (input) INT array, dimension (M)
             The pivot indices from ZGSTRF.   
 
@@ -58,11 +61,10 @@ int sp_zget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
     SCformat *Lstore;
     NCformat *Astore, *Ustore;
     doublecomplex *Aval, *Lval, *Uval;
+    int *colbeg, *colend;
 
     /* Function prototypes */
     extern double zlangs(char *, SuperMatrix *);
-    extern double dlamch_(char *);
-
 
     /* Quick exit if M = 0 or N = 0. */
 
@@ -124,8 +126,16 @@ int sp_zget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
 	    }
 	}
 
-	/* Now compute A[k] - (L*U)[k] */
-	for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
+	/* Now compute A[k] - (L*U)[k] (Both matrices may be permuted.) */
+
+	colbeg = intMalloc(n);
+	colend = intMalloc(n);
+	for (i = 0; i < n; i++) {
+	    colbeg[perm_c[i]] = Astore->colptr[i]; 
+	    colend[perm_c[i]] = Astore->colptr[i+1];
+	}
+	
+	for (i = colbeg[k]; i < colend[k]; ++i) {
 	    arow = Astore->rowind[i];
 	    work[perm_r[arow]].r += Aval[i].r;
 	    work[perm_r[arow]].i += Aval[i].i;
@@ -151,9 +161,11 @@ int sp_zget01(int m, int n, SuperMatrix *A, SuperMatrix *L,
     }
 
     SUPERLU_FREE(work);
+    SUPERLU_FREE(colbeg);
+    SUPERLU_FREE(colend);
     return 0;
 
-/*     End of SP_SGET01 */
+/*     End of ZGST01 */
 
-} /* sp_sget01_ */
+} /* zgst01_ */
 
diff --git a/TESTING/sp_zget02.c b/TESTING/zgst02.c
similarity index 94%
rename from TESTING/sp_zget02.c
rename to TESTING/zgst02.c
index ed24d21..fc048e4 100644
--- a/TESTING/sp_zget02.c
+++ b/TESTING/zgst02.c
@@ -8,14 +8,14 @@
  */
 #include "slu_zdefs.h"
 
-int sp_zget02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
+int zgst02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
 	      doublecomplex *x, int ldx, doublecomplex *b, int ldb, double *resid)
 {
 /*  
     Purpose   
     =======   
 
-    SP_ZGET02 computes the residual for a solution of a system of linear   
+    ZGST02 computes the residual for a solution of a system of linear   
     equations  A*x = b  or  A'*x = b:   
        RESID = norm(B - A*X) / ( norm(A) * norm(X) * EPS ),   
     where EPS is the machine epsilon.   
@@ -86,7 +86,6 @@ int sp_zget02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
     extern int lsame_(char *, char *);
     extern double zlangs(char *, SuperMatrix *);
     extern double dzasum_(int *, doublecomplex *, int *);
-    extern double dlamch_(char *);
     
     /* Function Body */
     if ( m <= 0 || n <= 0 || nrhs == 0) {
@@ -135,5 +134,5 @@ int sp_zget02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
 
     return 0;
 
-} /* sp_zget02 */
+} /* zgst02 */
 
diff --git a/TESTING/sp_zget04.c b/TESTING/zgst04.c
similarity index 93%
rename from TESTING/sp_zget04.c
rename to TESTING/zgst04.c
index 3a2632d..0c00db4 100644
--- a/TESTING/sp_zget04.c
+++ b/TESTING/zgst04.c
@@ -9,14 +9,14 @@
 #include <math.h>
 #include "slu_zdefs.h"
 
-int sp_zget04(int n, int nrhs, doublecomplex *x, int ldx, doublecomplex *xact,
+int zgst04(int n, int nrhs, doublecomplex *x, int ldx, doublecomplex *xact,
 	      int ldxact, double rcond, double *resid)
 {
 /*
     Purpose   
     =======   
 
-    SP_ZGET04 computes the difference between a computed solution and the   
+    ZGST04 computes the difference between a computed solution and the   
     true solution to a system of linear equations.   
     RESID =  ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS ),   
     where RCOND is the reciprocal of the condition number and EPS is the 
@@ -70,7 +70,6 @@ int sp_zget04(int n, int nrhs, doublecomplex *x, int ldx, doublecomplex *xact,
 
     /* Function prototypes */
     extern int izamax_(int *, doublecomplex *, int *);
-    extern double dlamch_(char *);
 
     /* Quick exit if N = 0 or NRHS = 0. */
    if ( n <= 0 || nrhs <= 0 ) {
@@ -120,4 +119,4 @@ int sp_zget04(int n, int nrhs, doublecomplex *x, int ldx, doublecomplex *xact,
 
     return 0;
 
-} /* sp_zget04_ */
+} /* zgst04_ */
diff --git a/TESTING/sp_zget07.c b/TESTING/zgst07.c
similarity index 97%
rename from TESTING/sp_zget07.c
rename to TESTING/zgst07.c
index 5f9ab12..cdc5d7a 100644
--- a/TESTING/sp_zget07.c
+++ b/TESTING/zgst07.c
@@ -9,7 +9,7 @@
 #include <math.h>
 #include "slu_zdefs.h"
 
-int sp_zget07(trans_t trans, int n, int nrhs, SuperMatrix *A, doublecomplex *b, 
+int zgst07(trans_t trans, int n, int nrhs, SuperMatrix *A, doublecomplex *b, 
 	      int ldb, doublecomplex *x, int ldx, doublecomplex *xact, 
               int ldxact, double *ferr, double *berr, double *reslts)
 {
@@ -17,7 +17,7 @@ int sp_zget07(trans_t trans, int n, int nrhs, SuperMatrix *A, doublecomplex *b,
     Purpose   
     =======   
 
-    SP_ZGET07 tests the error bounds from iterative refinement for the   
+    ZGST07 tests the error bounds from iterative refinement for the   
     computed solution to a system of equations op(A)*X = B, where A is a 
     general n by n matrix and op(A) = A or A**T, depending on TRANS.
     
@@ -113,7 +113,7 @@ int sp_zget07(trans_t trans, int n, int nrhs, SuperMatrix *A, doublecomplex *b,
     /* Function prototypes */
     extern int    lsame_(char *, char *);
     extern int    izamax_(int *, doublecomplex *, int *);
-    extern double dlamch_(char *);
+
 
     /* Quick exit if N = 0 or NRHS = 0. */
     if ( n <= 0 || nrhs <= 0 ) {
@@ -225,4 +225,4 @@ L30:
     SUPERLU_FREE(rwork);
     return 0;
 
-} /* sp_zget07 */
+} /* zgst07 */
diff --git a/TESTING/ztest.csh b/TESTING/ztest.csh
index 948c94f..32a8a3f 100644
--- a/TESTING/ztest.csh
+++ b/TESTING/ztest.csh
@@ -6,7 +6,7 @@ if ( -e $ofile ) then
 endif
 echo "Double-precision complex testing output" > $ofile
 
-set MATRICES     = (LAPACK)
+set MATRICES     = (LAPACK cg20.cua)
 set NVAL         = (9 19)
 set NRHS         = (5)
 set LWORK        = (0 10000000)
diff --git a/make.inc b/make.inc
index 58b609a..2ffd9f4 100644
--- a/make.inc
+++ b/make.inc
@@ -14,12 +14,28 @@
 #
 ############################################################################
 #
+#  The machine (platform) identifier to append to the library names
+#
+PLAT = _linux
+
 #
 #  The name of the libraries to be created/linked to
 #
-TMGLIB       = libtmglib.a
-SUPERLULIB   = libsuperlu_3.0.a
-BLASLIB      = ../libblas.a
+SuperLUroot	= $(HOME)/Codes/SuperLU/SuperLU_4.3
+SUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_4.3.a
+TMGLIB       	= libtmglib.a
+
+## BLASLIB   	= $(SuperLUroot)/lib/libblas.a
+
+BLASDEF 	= -DUSE_VENDOR_BLAS
+BLASLIB 	= -L$(HOME)/lib/GotoBLAS -lgoto
+
+## ATLAS BLAS causes single-precision to fail
+#BLASLIB   	= -L/usr/lib/atlas -lblas
+## This BLAS causes single-precision to fail the test in SuperLU
+#BLASLIB 	= -L/usr/lib -lblas
+
+LIBS		= $(SUPERLULIB) $(BLASLIB)
 
 #
 #  The archiver and the flag(s) to use when building archive (library)
@@ -29,18 +45,21 @@ ARCH         = ar
 ARCHFLAGS    = cr
 RANLIB       = ranlib
 
-CC           = cc
-CFLAGS       = -xO3 -xcg92
-FORTRAN	     = f77
-FFLAGS       = -O
-LOADER       = cc
-LOADOPTS     = -xO3
+CC           = gcc
+CFLAGS       = -DPRNTlevel=0 -O3
+NOOPTS       = 
+FORTRAN	     = g77
+FFLAGS       = -O2
+LOADER       = $(CC)
+LOADOPTS     =
 
 #
-#  C preprocessor defs for compilation (-DNoChange, -DAdd_, or -DUpCase)
+#  C preprocessor defs for compilation for the Fortran interface
+#  (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
 #
 CDEFS        = -DAdd_
 #
 # The directory in which Matlab is installed
 #
-MATLAB	     = /usr/sww/pkg/matlab
+MATLAB	     = /usr/sww/matlab
+

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/superlu.git



More information about the debian-science-commits mailing list